Source code for hashtree.hash
# generate BSD-style checksums for a list of files
# pure python cli
import hashlib
from pathlib import Path
HASHES = list(set(hashlib.algorithms_guaranteed).difference({"shake_128", "shake_256"}))
DEFAULT_HASH = "sha256"
[docs]
class HashDigest:
def __init__(self, base_path=None, hash=None):
self.set_base_path(base_path)
self.set_hash(hash)
[docs]
def set_base_path(self, path=None):
if path is None:
path = "."
self.base_path = Path(path)
[docs]
def set_hash(self, hash=None):
if hash is None:
hash = DEFAULT_HASH
self._hash = getattr(hashlib, hash.lower())
self.hash = hash.upper()
[docs]
def file_digest(self, filename):
file = self.base_path / filename
digest = self._hash(file.read_bytes()).hexdigest()
filename = str(filename)
if filename.startswith("./"):
prefix = ""
else:
prefix = "./"
return f"{self.hash} ({prefix}{filename}) = {digest}"