aboutsummaryrefslogtreecommitdiffstats
path: root/account
diff options
context:
space:
mode:
Diffstat (limited to 'account')
-rw-r--r--account/extra.py50
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
+