summaryrefslogtreecommitdiff
path: root/postgresqleu/util/fields.py
diff options
context:
space:
mode:
authorMagnus Hagander2019-10-29 16:01:03 +0000
committerMagnus Hagander2019-10-29 18:52:21 +0000
commitedb7df8bac48f16afbede6a5cecbe01acc77dd0e (patch)
tree834f708e04c33a199259fad821261c73df70b9c4 /postgresqleu/util/fields.py
parente176756a5a67a266cc4d2080a34120c2815ef170 (diff)
Add a widget for inline PDF uploading and storing
Similar to the existing one for JPEG images
Diffstat (limited to 'postgresqleu/util/fields.py')
-rw-r--r--postgresqleu/util/fields.py24
1 files changed, 23 insertions, 1 deletions
diff --git a/postgresqleu/util/fields.py b/postgresqleu/util/fields.py
index 579dd970..74f11121 100644
--- a/postgresqleu/util/fields.py
+++ b/postgresqleu/util/fields.py
@@ -1,9 +1,11 @@
from django.db import models
from django.core.exceptions import ValidationError
-from .forms import ImageBinaryFormField
+from .forms import ImageBinaryFormField, PdfBinaryFormField
from PIL import ImageFile
+from postgresqleu.util.magic import magicdb
+
class LowercaseEmailField(models.EmailField):
def get_prep_value(self, value):
@@ -83,3 +85,23 @@ class ImageBinaryField(models.Field):
defaults = {'form_class': ImageBinaryFormField}
defaults.update(kwargs)
return super(ImageBinaryField, self).formfield(**defaults)
+
+
+class PdfBinaryField(ImageBinaryField):
+ def get_internal_type(self):
+ return "PdfBinaryField"
+
+ def formfield(self, **kwargs):
+ defaults = {'form_class': PdfBinaryFormField}
+ defaults.update(kwargs)
+ return super(PdfBinaryField, self).formfield(**defaults)
+
+ def to_python(self, value):
+ if self.max_length is not None and len(value) > self.max_length:
+ raise ValidationError("Maximum size of file is {} bytes".format(self.max_length))
+
+ mtype = magicdb.buffer(value)
+ if not mtype.startswith('application/pdf'):
+ raise ValidationError("File must be PDF, not %s" % mtype)
+
+ return value