Add natural key support to Document pages.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -4,6 +4,7 @@ from datetime import timedelta
|
||||
import logging
|
||||
|
||||
from django.apps import apps
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.db import models
|
||||
from django.db.models import F, Max
|
||||
from django.utils.encoding import force_text
|
||||
@@ -33,17 +34,30 @@ class DocumentManager(models.Manager):
|
||||
document.invalidate_cache()
|
||||
|
||||
|
||||
class DocumentPageManager(models.Manager):
|
||||
def get_by_natural_key(self, page_number, document_version_natural_key):
|
||||
DocumentVersion = apps.get_model(
|
||||
app_label='documents', model_name='DocumentVersion'
|
||||
)
|
||||
try:
|
||||
document_version = DocumentVersion.objects.get_by_natural_key(*document_version_natural_key)
|
||||
except DocumentVersion.DoesNotExist:
|
||||
raise self.model.DoesNotExist
|
||||
|
||||
return self.get(document_version__pk=document_version.pk, page_number=page_number)
|
||||
|
||||
|
||||
class DocumentVersionManager(models.Manager):
|
||||
def get_by_natural_key(self, document_natural_key, checksum):
|
||||
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)
|
||||
document = Document.objects.get_by_natural_key(*document_natural_key)
|
||||
except Document.DoesNotExist:
|
||||
raise self.model.DoesNotExist
|
||||
|
||||
return document.versions.get(checksum=checksum)
|
||||
return self.get(document__pk=document.pk, checksum=checksum)
|
||||
|
||||
|
||||
class DocumentTypeManager(models.Manager):
|
||||
@@ -189,6 +203,26 @@ class RecentDocumentManager(models.Manager):
|
||||
self.filter(pk__in=list(recent_to_delete)).delete()
|
||||
return new_recent
|
||||
|
||||
def get_by_natural_key(self, datetime_accessed, document_natural_key, user_natural_key):
|
||||
Document = apps.get_model(
|
||||
app_label='documents', model_name='Document'
|
||||
)
|
||||
User = get_user_model()
|
||||
try:
|
||||
document = Document.objects.get_by_natural_key(*document_natural_key)
|
||||
except Document.DoesNotExist:
|
||||
raise self.model.DoesNotExist
|
||||
else:
|
||||
try:
|
||||
user = User.objects.get_by_natural_key(*user_natural_key)
|
||||
except User.DoesNotExist:
|
||||
raise self.model.DoesNotExist
|
||||
|
||||
return self.get(
|
||||
document__pk=document.pk, user__pk=user.pk,
|
||||
datetime_accessed=datetime_accessed
|
||||
)
|
||||
|
||||
def get_for_user(self, user):
|
||||
document_model = apps.get_model('documents', 'document')
|
||||
|
||||
|
||||
@@ -33,9 +33,9 @@ from .events import (
|
||||
)
|
||||
from .literals import DEFAULT_DELETE_PERIOD, DEFAULT_DELETE_TIME_UNIT
|
||||
from .managers import (
|
||||
DocumentManager, DocumentVersionManager, DocumentTypeManager,
|
||||
DuplicatedDocumentManager, PassthroughManager, RecentDocumentManager,
|
||||
TrashCanManager
|
||||
DocumentManager, DocumentPageManager, DocumentVersionManager,
|
||||
DocumentTypeManager, DuplicatedDocumentManager, PassthroughManager,
|
||||
RecentDocumentManager, TrashCanManager
|
||||
)
|
||||
from .permissions import permission_document_view
|
||||
from .settings import (
|
||||
@@ -509,7 +509,7 @@ class DocumentVersion(models.Model):
|
||||
)
|
||||
|
||||
def natural_key(self):
|
||||
return self.document.natural_key() + (self.checksum,)
|
||||
return (self.checksum, self.document.natural_key())
|
||||
natural_key.dependencies = ['documents.Document']
|
||||
|
||||
def invalidate_cache(self):
|
||||
@@ -735,6 +735,8 @@ class DocumentPage(models.Model):
|
||||
verbose_name=_('Page number')
|
||||
)
|
||||
|
||||
objects = DocumentPageManager()
|
||||
|
||||
class Meta:
|
||||
ordering = ('page_number',)
|
||||
verbose_name = _('Document page')
|
||||
@@ -894,6 +896,10 @@ class DocumentPage(models.Model):
|
||||
for cached_image in self.cached_images.all():
|
||||
cached_image.delete()
|
||||
|
||||
def natural_key(self):
|
||||
return (self.page_number, self.document_version.natural_key())
|
||||
natural_key.dependencies = ['documents.DocumentVersion']
|
||||
|
||||
@property
|
||||
def siblings(self):
|
||||
return DocumentPage.objects.filter(
|
||||
@@ -962,7 +968,7 @@ class RecentDocument(models.Model):
|
||||
return force_text(self.document)
|
||||
|
||||
def natural_key(self):
|
||||
return self.document.natural_key() + self.user.natural_key()
|
||||
return (self.datetime_accessed, self.document.natural_key(), self.user.natural_key())
|
||||
natural_key.dependencies = ['documents.Document', settings.AUTH_USER_MODEL]
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user