maestral.utils.hashing
¶
Module for content hashing file contents.
Module Contents¶
- class maestral.utils.hashing.DropboxContentHasher[source]¶
Computes a hash using the same algorithm that the Dropbox API uses for the “content_hash” metadata field.
The
digest()
method returns a raw binary representation of the hash. Thehexdigest()
convenience method returns a hexadecimal-encoded version, which is what the “content_hash” metadata field uses.This class has the same interface as the hashers in the standard ‘hashlib’ package.
- Example:
Read a file in chunks of 1024 bytes and compute its content hash:
>>> hasher = DropboxContentHasher() >>> with open('some-file', 'rb') as f: ... while True: ... chunk = f.read(1024) ... if len(chunk) == 0: ... break ... hasher.update(chunk) ... print(hasher.hexdigest())
- class maestral.utils.hashing.StreamHasher(f, hasher)[source]¶
A wrapper around a file-like object (either for reading or writing) that hashes everything that passes through it. Can be used with DropboxContentHasher or any ‘hashlib’ hasher.
- Example:
>>> hasher = DropboxContentHasher() >>> with open('some-file', 'rb') as f: ... wrapped_f = StreamHasher(f, hasher) ... response = some_api_client.upload(wrapped_f) >>> locally_computed = hasher.hexdigest() >>> assert response.content_hash == locally_computed
- Parameters:
f (BinaryIO) – File-like object.
hasher (DropboxContentHasher) – Hasher to use. Must implement an
update
method.