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:
@@ -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')
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user