Source code for conda_pypi.conda_build_utils

# Copied from and adapted from conda-build
# Copyright (C) 2014 Anaconda, Inc
# SPDX-License-Identifier: BSD-3-Clause

import hashlib
from enum import Enum
from os import DirEntry
from os.path import isfile, islink
from typing import Optional


[docs] class PathType(Enum): """ Refers to if the file in question is hard linked or soft linked. Originally designed to be used in paths.json """ hardlink = "hardlink" softlink = "softlink" directory = "directory" # rare or unused? # these additional types should not be included by conda-build in packages linked_package_record = "linked_package_record" # a package's .json file in conda-meta pyc_file = "pyc_file" unix_python_entry_point = "unix_python_entry_point" windows_python_entry_point_script = "windows_python_entry_point_script" windows_python_entry_point_exe = "windows_python_entry_point_exe" def __str__(self): return self.name def __json__(self): return self.name
[docs] def sha256_checksum(filename, entry: Optional[DirEntry] = None, buffersize=1 << 18): if not entry: is_link = islink(filename) is_file = isfile(filename) else: is_link = entry.is_symlink() is_file = entry.is_file() if is_link and not is_file: # symlink to nowhere so an empty file # this is the sha256 hash of an empty file return "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" if not is_file: return None sha256 = hashlib.sha256() with open(filename, "rb") as f: for block in iter(lambda: f.read(buffersize), b""): sha256.update(block) return sha256.hexdigest()