Improve serialization migration for the models: Document, DocumentVersion, DocumentMetadata and DocumentTypeOCRSettings

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2018-08-01 05:09:43 -04:00
parent 39a94f8b4f
commit c665e75871
6 changed files with 62 additions and 5 deletions

View File

@@ -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')

View File

@@ -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():

View File

@@ -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'

View File

@@ -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(

View File

@@ -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

View File

@@ -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):