Improve natural key handing for the Document, Metadata, DocumentMetadata, DocumentTypeOCRSetting and UserProfileLocale models.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2018-08-02 16:00:22 -04:00
parent 1ad7d2a406
commit e18c043c1f
7 changed files with 37 additions and 9 deletions

View File

@@ -1,6 +1,7 @@
from __future__ import unicode_literals
from django.apps import apps
from django.contrib.auth import get_user_model
from django.contrib.contenttypes.fields import GenericRelation
from django.db import models
@@ -11,3 +12,14 @@ class ErrorLogEntryManager(models.Manager):
app_label='common', model_name='ErrorLogEntry'
)
model.add_to_class('error_logs', GenericRelation(ErrorLogEntry))
class UserLocaleProfileManager(models.Manager):
def get_by_natural_key(self, user_natural_key):
User = get_user_model()
try:
user = User.objects.get_by_natural_key(user_natural_key)
except User.DoesNotExist:
raise self.model.DoesNotExist
return self.get(user__pk=user.pk)

View File

@@ -11,7 +11,7 @@ from django.db import models
from django.utils.encoding import force_text, python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
from .managers import ErrorLogEntryManager
from .managers import ErrorLogEntryManager, UserLocaleProfileManager
from .storages import storage_sharedupload
@@ -88,9 +88,16 @@ class UserLocaleProfile(models.Model):
choices=settings.LANGUAGES, max_length=8, verbose_name=_('Language')
)
objects = UserLocaleProfileManager()
class Meta:
verbose_name = _('User locale profile')
verbose_name_plural = _('User locale profiles')
def __str__(self):
return force_text(self.user)
def natural_key(self):
return self.user.natural_key()
natural_key.dependencies = [settings.AUTH_USER_MODEL]

View File

@@ -6,6 +6,7 @@ import logging
from django.apps import apps
from django.db import models
from django.db.models import F, Max
from django.utils.encoding import force_text
from django.utils.timezone import now
from .literals import STUB_EXPIRATION_INTERVAL
@@ -20,7 +21,7 @@ class DocumentManager(models.Manager):
stale_stub_document.delete(trash=False)
def get_by_natural_key(self, uuid):
return self.model.passthrough.get(uuid=uuid)
return self.model.passthrough.get(uuid=force_text(uuid))
def get_queryset(self):
return TrashCanQuerySet(
@@ -33,7 +34,7 @@ class DocumentManager(models.Manager):
class DocumentVersionManager(models.Manager):
def get_by_natural_key(self, checksum, document_natural_key):
def get_by_natural_key(self, document_natural_key, checksum):
Document = apps.get_model(
app_label='documents', model_name='Document'
)

View File

@@ -509,7 +509,7 @@ class DocumentVersion(models.Model):
)
def natural_key(self):
return (self.checksum,) + self.document.natural_key()
return self.document.natural_key() + (self.checksum,)
natural_key.dependencies = ['documents.Document']
def invalidate_cache(self):

View File

@@ -24,16 +24,24 @@ class MetadataTypeManager(models.Manager):
class DocumentTypeMetadataTypeManager(models.Manager):
def get_by_natural_key(self, metadata_type_name, document_natural_key):
def get_by_natural_key(self, document_natural_key, metadata_type_natural_key):
Document = apps.get_model(
app_label='documents', model_name='Document'
)
MetadataType = apps.get_model(
app_label='metadata', model_name='MetadataType'
)
try:
document = Document.objects.get_by_natural_key(document_natural_key)
except Document.DoesNotExist:
raise self.model.DoesNotExist
else:
try:
metadata_type = MetadataType.objects.get_by_natural_key(metadata_type_natural_key)
except MetadataType.DoesNotExist:
raise self.model.DoesNotExist
return document.metadata.get(metadata_type_name=metadata_type_name)
return self.get(document__pk=document.pk, metadata_type__pk=metadata_type.pk)
def get_metadata_types_for(self, document_type):
DocumentType = apps.get_model(

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
@@ -190,7 +190,7 @@ class DocumentMetadata(models.Model):
return super(DocumentMetadata, self).delete(*args, **kwargs)
def natural_key(self):
return (self.metadata_type.name,) + self.document.natural_key()
return self.document.natural_key() + self.metadata_type.natural_key()
natural_key.dependencies = ['documents.Document', 'metadata.MetadataType']
@property

View File

@@ -102,4 +102,4 @@ class DocumentTypeSettingsManager(models.Manager):
except DocumentType.DoesNotExist:
raise self.model.DoesNotExist
return document_type.ocr_settings
return self.get(document_type__pk=document_type.pk)