Files
mirkobrombin 540f6fc0d4 misc: cleanup
2024-02-10 19:16:22 +01:00

71 lines
2.0 KiB
Python

import os
import hashlib
class Diff:
"""
This class is no more used by the application, it's just a
reference for future implementations.
"""
__ignored = ["dosdevices", "users", "bottle.yml", "storage"]
@staticmethod
def hashify(path: str) -> dict:
"""
Hash (SHA-1) all files in a directory and return
them in a dictionary. Here we use SHA-1 instead of
better ones like SHA-256 because we only need to
compare the file hashes, it's faster, and it's
not a security risk.
"""
_files = {}
if path[-1] != os.sep:
"""
Be sure to add a trailing slash at the end of the path to
prevent the correct path name in the result.
"""
path += os.sep
for root, dirs, files in os.walk(path):
dirs[:] = [d for d in dirs if d not in Diff.__ignored]
for f in files:
if f in Diff.__ignored:
continue
with open(os.path.join(root, f), "rb") as fr:
_hash = hashlib.sha1(fr.read()).hexdigest()
_key = os.path.join(root, f)
_key = _key.replace(path, "")
_files[_key] = _hash
return _files
@staticmethod
def file_hashify(path: str) -> str:
"""Hash (SHA-1) a file and return it."""
with open(path, "rb") as fr:
_hash = hashlib.sha1(fr.read()).hexdigest()
return _hash
@staticmethod
def compare(parent: dict, child: dict) -> dict:
"""
Compare two hashes dictionaries and return the
differences (added, removed, changed).
"""
added = []
changed = []
removed = [f for f in parent if f not in child]
for f in child:
if f not in parent:
added.append(f)
elif parent[f] != child[f]:
changed.append(f)
return {"added": added, "removed": removed, "changed": changed}