# Fetch the size
size = os.path.getsize(path)
+ # Compute the digest
+ digest_blake2b512 = self.digest(path, algo="blake2b512")
+
# Create the new upload object
upload = await self.create(
- filename = filename,
- size = size,
+ filename = filename,
+ size = size,
+ digest_blake2b512 = digest_blake2b512,
**kwargs,
)
async with await self.db.transaction():
await upload.delete()
+ def digest(self, path, algo="blake2b512"):
+ """
+ Hashes the given file
+ """
+ # Create a new hash function
+ h = hashlib.new(algo)
+
+ # Feed the entire file into the hash function
+ with open(path, "rb") as f:
+ while True:
+ chunk = f.read(4096)
+ if not chunk:
+ break
+
+ h.update(chunk)
+
+ # Return the digest
+ return h.digest()
+
class Upload(database.Base, database.BackendMixin):
__tablename__ = "uploads"