Source code for acdcli.utils.hashing

import hashlib
import logging
import os

logger = logging.getLogger(__name__)


[docs]class IncrementalHasher(object): __slots__ = ('hasher',)
[docs] def __init__(self): self.hasher = hashlib.md5()
[docs] def update(self, chunk): self.hasher.update(chunk)
[docs] def get_result(self) -> str: return self.hasher.hexdigest()
[docs]def hash_file_obj(fo) -> str: hasher = hashlib.md5() fo.seek(0) for chunk in iter(lambda: fo.read(1024 ** 2), b''): hasher.update(chunk) return hasher.hexdigest()
[docs]def hash_file(file_name: str) -> str: with open(file_name, 'rb') as f: md5 = hash_file_obj(f) logger.debug('MD5 of "%s" is %s' % (os.path.basename(file_name), md5)) return md5