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