X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/458886cbf21bca4d33ac5c44e90a5e9d71629216..4c896886f92e7d80df96fb19bf5c24d1832fac11:/apps/catalogue/fields.py?ds=sidebyside diff --git a/apps/catalogue/fields.py b/apps/catalogue/fields.py index e2d94b915..048824498 100644 --- a/apps/catalogue/fields.py +++ b/apps/catalogue/fields.py @@ -3,9 +3,11 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # import datetime +from functools import wraps from django.conf import settings from django.db import models +from django.db.models.fields.files import FieldFile from django.db.models import signals from django import forms from django.forms.widgets import flatatt @@ -112,15 +114,31 @@ class JQueryAutoCompleteField(forms.CharField): super(JQueryAutoCompleteField, self).__init__(*args, **kwargs) + +class OverwritingFieldFile(FieldFile): + """ + Deletes the old file before saving the new one. + """ + + def save(self, name, content, *args, **kwargs): + leave = kwargs.pop('leave', None) + # delete if there's a file already and there's a new one coming + if not leave and self and (not hasattr(content, 'path') or + content.path != self.path): + self.delete(save=False) + return super(OverwritingFieldFile, self).save( + name, content, *args, **kwargs) + + +class OverwritingFileField(models.FileField): + attr_class = OverwritingFieldFile + + try: # check for south from south.modelsinspector import add_introspection_rules - add_introspection_rules([ - ( - [JSONField], # Class(es) these apply to - [], # Positional arguments (not used) - {}, # Keyword argument - ), ], ["^catalogue\.fields\.JSONField"]) + add_introspection_rules([], ["^catalogue\.fields\.JSONField"]) + add_introspection_rules([], ["^catalogue\.fields\.OverwritingFileField"]) except ImportError: pass