diff --git a/mayan/apps/documents/managers.py b/mayan/apps/documents/managers.py index a783670af0..d6d3dc7946 100644 --- a/mayan/apps/documents/managers.py +++ b/mayan/apps/documents/managers.py @@ -20,7 +20,7 @@ class DocumentManager(models.Manager): stale_stub_document.delete(trash=False) def get_by_natural_key(self, uuid): - return self.get(uuid=uuid) + return self.model.passthrough.get(uuid=uuid) def get_queryset(self): return TrashCanQuerySet( @@ -32,6 +32,19 @@ class DocumentManager(models.Manager): document.invalidate_cache() +class DocumentVersionManager(models.Manager): + def get_by_natural_key(self, checksum, document_natural_key): + Document = apps.get_model( + app_label='documents', model_name='Document' + ) + try: + document = Document.objects.get_by_natural_key(document_natural_key) + except Document.DoesNotExist: + raise self.model.DoesNotExist + + return document.versions.get(checksum=checksum) + + class DocumentTypeManager(models.Manager): def check_delete_periods(self): logger.info('Executing') diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index afdaeb4e06..f98afd2b5f 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -33,8 +33,9 @@ from .events import ( ) from .literals import DEFAULT_DELETE_PERIOD, DEFAULT_DELETE_TIME_UNIT from .managers import ( - DocumentManager, DocumentTypeManager, DuplicatedDocumentManager, - PassthroughManager, RecentDocumentManager, TrashCanManager + DocumentManager, DocumentVersionManager, DocumentTypeManager, + DuplicatedDocumentManager, PassthroughManager, RecentDocumentManager, + TrashCanManager ) from .permissions import permission_document_view from .settings import ( @@ -415,6 +416,8 @@ class DocumentVersion(models.Model): verbose_name = _('Document version') verbose_name_plural = _('Document version') + objects = DocumentVersionManager() + def __str__(self): return self.get_rendered_string() @@ -505,6 +508,10 @@ class DocumentVersion(models.Model): context=Context({'instance': self}) ) + def natural_key(self): + return (self.checksum,) + self.document.natural_key() + natural_key.dependencies = ['documents.Document'] + def invalidate_cache(self): storage_documentimagecache.delete(self.cache_filename) for page in self.pages.all(): diff --git a/mayan/apps/metadata/managers.py b/mayan/apps/metadata/managers.py index 68775323ab..2a07fc459a 100644 --- a/mayan/apps/metadata/managers.py +++ b/mayan/apps/metadata/managers.py @@ -24,6 +24,17 @@ class MetadataTypeManager(models.Manager): class DocumentTypeMetadataTypeManager(models.Manager): + def get_by_natural_key(self, metadata_type_name, document_natural_key): + Document = apps.get_model( + app_label='documents', model_name='Document' + ) + try: + document = Document.objects.get_by_natural_key(document_natural_key) + except Document.DoesNotExist: + raise self.model.DoesNotExist + + return document.metadata.get(metadata_type_name=metadata_type_name) + def get_metadata_types_for(self, document_type): DocumentType = apps.get_model( app_label='metadata', model_name='MetadataType' diff --git a/mayan/apps/metadata/models.py b/mayan/apps/metadata/models.py index b7e5a21503..89d312d1b0 100644 --- a/mayan/apps/metadata/models.py +++ b/mayan/apps/metadata/models.py @@ -111,7 +111,7 @@ class MetadataType(models.Model): ).exists() def natural_key(self): - return (self.name,) + return self.name def validate_value(self, document_type, value): # Check default @@ -189,6 +189,10 @@ class DocumentMetadata(models.Model): return super(DocumentMetadata, self).delete(*args, **kwargs) + def natural_key(self): + return (self.metadata_type.name,) + self.document.natural_key() + natural_key.dependencies = ['documents.Document', 'metadata.MetadataType'] + @property def is_required(self): return self.metadata_type.get_required_for( diff --git a/mayan/apps/ocr/managers.py b/mayan/apps/ocr/managers.py index fb547a3648..20de7b30b6 100644 --- a/mayan/apps/ocr/managers.py +++ b/mayan/apps/ocr/managers.py @@ -90,3 +90,16 @@ class DocumentPageOCRContentManager(models.Manager): post_document_version_ocr.send( sender=document_version.__class__, instance=document_version ) + + +class DocumentTypeSettingsManager(models.Manager): + def get_by_natural_key(self, document_type_natural_key): + DocumentType = apps.get_model( + app_label='documents', model_name='DocumentType' + ) + try: + document_type = DocumentType.objects.get_by_natural_key(document_type_natural_key) + except DocumentType.DoesNotExist: + raise self.model.DoesNotExist + + return document_type.ocr_settings diff --git a/mayan/apps/ocr/models.py b/mayan/apps/ocr/models.py index 0d0b099627..293d6ff82b 100644 --- a/mayan/apps/ocr/models.py +++ b/mayan/apps/ocr/models.py @@ -6,7 +6,9 @@ from django.utils.translation import ugettext_lazy as _ from documents.models import DocumentPage, DocumentType, DocumentVersion -from .managers import DocumentPageOCRContentManager +from .managers import ( + DocumentPageOCRContentManager, DocumentTypeSettingsManager +) class DocumentTypeSettings(models.Model): @@ -22,10 +24,17 @@ class DocumentTypeSettings(models.Model): verbose_name=_('Automatically queue newly created documents for OCR.') ) + objects = DocumentTypeSettingsManager() + class Meta: verbose_name = _('Document type settings') verbose_name_plural = _('Document types settings') + def natural_key(self): + return self.document_type.natural_key() + natural_key.dependencies = ['documents.DocumentType'] + + @python_2_unicode_compatible class DocumentPageOCRContent(models.Model):