X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/391b7a7b21da0ae7aae68826cfee514c8ea7eca9..71c8d45d967354321558a2b71ec802108ac935fb:/apps/dvcs/storage.py diff --git a/apps/dvcs/storage.py b/apps/dvcs/storage.py index 6bb5b595..080e7077 100755 --- a/apps/dvcs/storage.py +++ b/apps/dvcs/storage.py @@ -1,8 +1,28 @@ -from zlib import compress, decompress +# -*- coding: utf-8 -*- +# +# This file is part of MIL/PEER, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from __future__ import unicode_literals -from django.core.files.base import ContentFile, File +from django.core.files.base import ContentFile from django.core.files.storage import FileSystemStorage +try: + from gzip import compress, decompress +except ImportError: + # Python < 3.2 + from gzip import GzipFile + from StringIO import StringIO + + def compress(data): + compressed = StringIO() + GzipFile(fileobj=compressed, mode="wb").write(data) + return compressed.getvalue() + + def decompress(data): + return GzipFile(fileobj=StringIO(data)).read() + class GzipFileSystemStorage(FileSystemStorage): def _open(self, name, mode='rb'): @@ -14,5 +34,9 @@ class GzipFileSystemStorage(FileSystemStorage): def _save(self, name, content): content = ContentFile(compress(content.read())) - return super(GzipFileSystemStorage, self)._save(name, content) + + def get_available_name(self, name): + if self.exists(name): + self.delete(name) + return name