aboutsummaryrefslogtreecommitdiffstats
path: root/account
diff options
context:
space:
mode:
authorWeitian LI <liweitianux@gmail.com>2014-06-24 17:11:44 +0800
committerWeitian LI <liweitianux@gmail.com>2014-06-24 17:11:44 +0800
commit3961e2bdfa2cb946f1bd367c9a7a392528bbaeef (patch)
tree326b178af4a91ae875a490d10a2904412a8f29a3 /account
parented3d74e61300f91818eeff9dad7e9d35c556f75a (diff)
downloaddjango-skaschool-3961e2bdfa2cb946f1bd367c9a7a392528bbaeef.tar.bz2
Splited storage function from account.extra
* Splited storage function from account.extra -> tools/storage.py - OverwriteStorage - file_cleanup * Updated account.models, archive.models * Added OverwriteStorage and file_cleanup function to notice.models
Diffstat (limited to 'account')
-rw-r--r--account/extra.py53
-rw-r--r--account/models.py3
2 files changed, 2 insertions, 54 deletions
diff --git a/account/extra.py b/account/extra.py
index d0f74f2..c75ce1c 100644
--- a/account/extra.py
+++ b/account/extra.py
@@ -6,16 +6,11 @@ Extra models for app account
from django import forms
from django.db import models
-from django.db.models.fields.files import FieldFile
-from django.core.files.storage import FileSystemStorage
-from django.conf import settings
from django.template.defaultfilters import filesizeformat
from django.utils.translation import ugettext_lazy as _
from south.modelsinspector import add_introspection_rules
-import os
-
### custom fields ###
class ContentTypeRestrictedFileField(models.FileField):
@@ -70,51 +65,3 @@ add_introspection_rules([
], ["^account\.extra\.ContentTypeRestrictedFileField"])
-### OverwriteStorage ###
-class OverwriteStorage(FileSystemStorage):
- """
- overwrite original file before store the new one
- """
- def get_available_name(self, name):
- """
- Returns a filename that's free on the target storage system,
- and available for new content to be written to.
- Ref: http://djangosnippets.org/snippets/976/
-
- This file storage solves overwrite on upload problem. Another
- proposed solution was to override the save method on the model
- like so (from https://code.djangoproject.com/ticket/11663):
-
- def save(self, *args, **kwargs):
- try:
- this = MyModelName.objects.get(id=self.id)
- if this.MyImageFieldName != self.MyImageFieldName:
- this.MyImageFieldName.delete()
- except: pass
- super(MyModelName, self).save(*args, **kwargs)
- """
- # If the filename already exists,
- # remove it as if it was a true file system
- if self.exists(name):
- filepath = os.path.join(settings.MEDIA_ROOT, name)
- if os.path.isfile(filepath):
- os.remove(filepath)
- return name
-
-
-### delete files associated with model FileField
-# Pre-delete signal function for deleting files a model
-# https://djangosnippets.org/snippets/2820/
-def file_cleanup(sender, instance, *args, **kwargs):
- """
- Deletes the file(s) associated with a model instance. The model
- is not saved after deletion of the file(s) since this is meant
- to be used with the pre_delete signal.
- """
- for field_name, _ in instance.__dict__.iteritems():
- field = getattr(instance, field_name)
- if (issubclass(field.__class__, FieldFile) and field.name):
- # pass False so FileField does not save the model
- field.delete(save=False)
-
-
diff --git a/account/models.py b/account/models.py
index 62276b8..4199941 100644
--- a/account/models.py
+++ b/account/models.py
@@ -13,7 +13,8 @@ from django.utils.translation import ugettext_lazy as _
from django.db.models.signals import pre_delete
from registration.signals import user_registered, user_activated
-from account.extra import ContentTypeRestrictedFileField, OverwriteStorage, file_cleanup
+from account.extra import ContentTypeRestrictedFileField
+from tools.storage import OverwriteStorage, file_cleanup
import os