Newer
Older
import os
import hashlib
from private_storage.storage import PrivateStorage
class HashStorage(PrivateStorage):
def save(self, name, content, *args, **kwargs):
if name is None:
name = content.name
name = self._save(name, content, *args, **kwargs)
return name
def _save(self, name, content, *args, **kwargs):
h = hashlib.sha512()
for chunk in iter(lambda: content.read(128 * h.block_size), b''):
h.update(chunk)
file_hash = h.hexdigest()
name = os.path.join(file_hash[:3], file_hash)
if self.exists(name):
# File with same hash already exists
return name
return super()._save(name, content)
def delete(self, name):
super().delete(name)
hashdir = os.path.join(self.location, os.path.split(name)[0])
if not os.listdir(hashdir):
# clean up
os.rmdir(hashdir)