September 19, 2017

An example of using __call__() magic method in python.

a version of the methods that hash entire files rather than strings:


import hashlib

class Hasher(object):
    A wrapper around the hashlib hash algorithms that allows an entire file to
    be hashed in a chunked manner.
    def __init__(self, algorithm):
        self.algorithm = algorithm

    def __call__(self, file):
        hash = self.algorithm()
        with open(file, 'rb') as f:
            for chunk in iter(lambda:, ''):
        return hash.hexdigest()

md5    = Hasher(hashlib.md5)
sha1   = Hasher(hashlib.sha1)
sha224 = Hasher(hashlib.sha224)
sha256 = Hasher(hashlib.sha256)
sha384 = Hasher(hashlib.sha384)
sha512 = Hasher(hashlib.sha512)

Then use it like this.Whoop! a nicer and consistent api.

from filehash import sha1
print sha1('somefile.txt')