diff options
Diffstat (limited to 'account/extra.py')
-rw-r--r-- | account/extra.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/account/extra.py b/account/extra.py new file mode 100644 index 0000000..c247b8f --- /dev/null +++ b/account/extra.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +""" +Extra models for app account +""" + +from django.db import models +from django import forms +from django.template.defaultfilters import filesizeformat +from django.utils.translation import ugettext_lazy as _ + +class ContentTypeRestrictedFileField(models.FileField): + """ + Same as FileField, but you can specify: + * content_types - list containing allowed content_types. + Example: ['application/pdf', 'image/jpeg'] + * max_upload_size - a number indicating the maximum file + size allowed for upload. + 2.5MB - 2621440 + 5MB - 5242880 + 10MB - 10485760 + 20MB - 20971520 + 50MB - 52428800 + 100MB - 104857600 + 250MB - 214958080 + 500MB - 429916160 + """ + def __init__(self, *args, **kwargs): + self.content_types = kwargs.pop("content_types") + self.max_upload_size = kwargs.pop("max_upload_size") + super(ContentTypeRestrictedFileField, self).__init__(*args, **kwargs) + + def clean(self, *args, **kwargs): + data = super(ContentTypeRestrictedFileField, self).clean(*args, **kwargs) + file = data.file + # check content type and file size + try: + content_type = file.content_type + #print content_type + #raise forms.ValidationError(_("Invalid filetype."), code='invalid') + if content_type in self.content_types: + if file._size > self.max_upload_size: + raise forms.ValidationError(_('Please keep filesize under %s. Current filesize %s') % (filesizeformat(self.max_upload_size), filesizeformat(file._size)), code='invalid') + else: + raise forms.ValidationError(_("Invalid filetype."), code='invalid') + except AttributeError: + pass + # + return data + |