diff options
Diffstat (limited to 'postgresqleu/util/fields.py')
-rw-r--r-- | postgresqleu/util/fields.py | 24 |
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 |