Compare commits
1 Commits
clients/bc
...
features/f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d29fb86c55 |
39
mayan/apps/documents/classes.py
Normal file
39
mayan/apps/documents/classes.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
|
class BaseDocumentFilenameGenerator(object):
|
||||||
|
_registry = {}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get(cls, name):
|
||||||
|
return cls._registry[name]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_choices(cls):
|
||||||
|
return sorted(
|
||||||
|
[
|
||||||
|
(name, klass.label) for name, klass in cls._registry.items()
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def register(cls, klass):
|
||||||
|
cls._registry[klass.name] = klass
|
||||||
|
|
||||||
|
def upload_to(self, instance, filename):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
class UUIDDocumentFilenameGenerator(BaseDocumentFilenameGenerator):
|
||||||
|
name = 'uuid'
|
||||||
|
label = _('UUID')
|
||||||
|
|
||||||
|
def upload_to(self, instance, filename):
|
||||||
|
return force_text(uuid.uuid4())
|
||||||
|
|
||||||
|
|
||||||
|
BaseDocumentFilenameGenerator.register(klass=UUIDDocumentFilenameGenerator)
|
||||||
@@ -5,11 +5,20 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
|
|
||||||
from mayan.apps.acls.models import AccessControlList
|
from mayan.apps.acls.models import AccessControlList
|
||||||
|
|
||||||
|
from ..classes import BaseDocumentFilenameGenerator
|
||||||
from ..models import DocumentType, DocumentTypeFilename
|
from ..models import DocumentType, DocumentTypeFilename
|
||||||
|
|
||||||
__all__ = ('DocumentTypeFilteredSelectForm', 'DocumentTypeFilenameForm_create')
|
__all__ = ('DocumentTypeFilteredSelectForm', 'DocumentTypeFilenameForm_create')
|
||||||
|
|
||||||
|
|
||||||
|
class DocumentTypeForm(forms.ModelForm):
|
||||||
|
#filename_generator = forms.
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
fields = ('label', 'filename_generator')
|
||||||
|
model = DocumentType
|
||||||
|
|
||||||
|
|
||||||
class DocumentTypeFilteredSelectForm(forms.Form):
|
class DocumentTypeFilteredSelectForm(forms.Form):
|
||||||
"""
|
"""
|
||||||
Form to select the document type of a document to be created. This form
|
Form to select the document type of a document to be created. This form
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from mayan.apps.acls.models import AccessControlList
|
from mayan.apps.acls.models import AccessControlList
|
||||||
from mayan.apps.common.literals import TIME_DELTA_UNIT_CHOICES
|
from mayan.apps.common.literals import TIME_DELTA_UNIT_CHOICES
|
||||||
|
|
||||||
|
from ..classes import BaseDocumentFilenameGenerator
|
||||||
from ..events import event_document_type_created, event_document_type_edited
|
from ..events import event_document_type_created, event_document_type_edited
|
||||||
from ..literals import DEFAULT_DELETE_PERIOD, DEFAULT_DELETE_TIME_UNIT
|
from ..literals import DEFAULT_DELETE_PERIOD, DEFAULT_DELETE_TIME_UNIT
|
||||||
from ..managers import DocumentTypeManager
|
from ..managers import DocumentTypeManager
|
||||||
@@ -52,6 +53,12 @@ class DocumentType(models.Model):
|
|||||||
default=DEFAULT_DELETE_TIME_UNIT, max_length=8, null=True,
|
default=DEFAULT_DELETE_TIME_UNIT, max_length=8, null=True,
|
||||||
verbose_name=_('Delete time unit')
|
verbose_name=_('Delete time unit')
|
||||||
)
|
)
|
||||||
|
filename_generator = models.CharField(
|
||||||
|
help_text=_(
|
||||||
|
'The class responsible for producing the actual filename used '
|
||||||
|
'to store the uploaded documents.'
|
||||||
|
), max_length=128, verbose_name=_('Filename generator')
|
||||||
|
)
|
||||||
|
|
||||||
objects = DocumentTypeManager()
|
objects = DocumentTypeManager()
|
||||||
|
|
||||||
@@ -94,6 +101,10 @@ class DocumentType(models.Model):
|
|||||||
|
|
||||||
return queryset.count()
|
return queryset.count()
|
||||||
|
|
||||||
|
def get_upload_filename(self, instance, filename):
|
||||||
|
klass = BaseDocumentFilenameGenerator.get(name=self.filename_generator)
|
||||||
|
return klass.upload_to(instance=instance, filename=filename)
|
||||||
|
|
||||||
def natural_key(self):
|
def natural_key(self):
|
||||||
return (self.label,)
|
return (self.label,)
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import hashlib
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import uuid
|
|
||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
@@ -37,8 +36,10 @@ def hash_function():
|
|||||||
return hashlib.sha256()
|
return hashlib.sha256()
|
||||||
|
|
||||||
|
|
||||||
def UUID_FUNCTION(*args, **kwargs):
|
def upload_to(instance, filename):
|
||||||
return force_text(uuid.uuid4())
|
return instance.document.document_type.get_upload_filename(
|
||||||
|
instance=instance, filename=filename
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
@@ -86,7 +87,7 @@ class DocumentVersion(models.Model):
|
|||||||
|
|
||||||
# File related fields
|
# File related fields
|
||||||
file = models.FileField(
|
file = models.FileField(
|
||||||
storage=storage_documentversion, upload_to=UUID_FUNCTION,
|
storage=storage_documentversion, upload_to=upload_to,
|
||||||
verbose_name=_('File')
|
verbose_name=_('File')
|
||||||
)
|
)
|
||||||
mimetype = models.CharField(
|
mimetype = models.CharField(
|
||||||
|
|||||||
@@ -82,7 +82,9 @@ class DocumentTypeListView(SingleObjectListView):
|
|||||||
class DocumentTypeCreateView(SingleObjectCreateView):
|
class DocumentTypeCreateView(SingleObjectCreateView):
|
||||||
fields = ('label',)
|
fields = ('label',)
|
||||||
model = DocumentType
|
model = DocumentType
|
||||||
post_action_redirect = reverse_lazy(viewname='documents:document_type_list')
|
post_action_redirect = reverse_lazy(
|
||||||
|
viewname='documents:document_type_list'
|
||||||
|
)
|
||||||
view_permission = permission_document_type_create
|
view_permission = permission_document_type_create
|
||||||
|
|
||||||
def get_extra_context(self):
|
def get_extra_context(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user