Add natural key serialization.

This commit is contained in:
Roberto Rosario
2015-10-17 05:13:58 -04:00
parent 1907130ef2
commit 6e43b99ecd
6 changed files with 91 additions and 45 deletions

View File

@@ -38,9 +38,6 @@ class RecentDocumentManager(models.Manager):
class DocumentTypeManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
def check_delete_periods(self):
logger.info('Executing')
@@ -103,8 +100,17 @@ class DocumentTypeManager(models.Manager):
logger.info('Finshed')
def get_by_natural_key(self, label):
return self.get(label=label)
class DocumentManager(models.Manager):
def get_by_natural_key(self, uuid, *document_type_key):
from .model import DocumentType
document_type = DocumentType.objects.get_by_natural_key(*document_type_key)
return self.get(uuid=uuid, document_type=document_type)
def get_queryset(self):
return TrashCanQuerySet(
self.model, using=self._db

View File

@@ -84,11 +84,6 @@ class DocumentType(models.Model):
objects = DocumentTypeManager()
class Meta:
ordering = ('label',)
verbose_name = _('Document type')
verbose_name_plural = _('Documents types')
def __str__(self):
return self.label
@@ -98,6 +93,14 @@ class DocumentType(models.Model):
return super(DocumentType, self).delete(*args, **kwargs)
def natural_key(self):
return (self.label,)
class Meta:
ordering = ('label',)
verbose_name = _('Document type')
verbose_name_plural = _('Documents types')
@property
def deleted_documents(self):
return DeletedDocument.objects.filter(document_type=self)
@@ -170,11 +173,6 @@ class Document(models.Model):
passthrough = PassthroughManager()
trash = TrashCanManager()
class Meta:
verbose_name = _('Document')
verbose_name_plural = _('Documents')
ordering = ('-date_added',)
def __str__(self):
return self.label or ugettext('Document stub, id: %d') % self.pk
@@ -194,6 +192,10 @@ class Document(models.Model):
def get_absolute_url(self):
return reverse('documents:document_preview', args=(self.pk,))
def natural_key(self):
return (self.uuid,)
natural_key.dependencies = ['documents.DocumentType']
def save(self, *args, **kwargs):
user = kwargs.pop('_user', None)
new_document = not self.pk
@@ -208,7 +210,10 @@ class Document(models.Model):
else:
event_document_properties_edit.commit(actor=user, target=self)
# Custom methods
class Meta:
verbose_name = _('Document')
verbose_name_plural = _('Documents')
ordering = ('-date_added',)
def add_as_recent_document_for_user(self, user):
RecentDocument.objects.add_document_for_user(user, self)
@@ -351,10 +356,6 @@ class DocumentVersion(models.Model):
blank=True, editable=False, null=True, verbose_name=_('Checksum')
)
class Meta:
verbose_name = _('Document version')
verbose_name_plural = _('Document version')
def __str__(self):
return '{0} - {1}'.format(self.document, self.timestamp)
@@ -420,7 +421,9 @@ class DocumentVersion(models.Model):
sender=self.document.__class__, instance=self.document
)
# Custom methods
class Meta:
verbose_name = _('Document version')
verbose_name_plural = _('Document version')
@property
def cache_filename(self):
@@ -626,11 +629,6 @@ class DocumentPage(models.Model):
verbose_name=_('Page number')
)
class Meta:
ordering = ('page_number',)
verbose_name = _('Document page')
verbose_name_plural = _('Document pages')
def __str__(self):
return _(
'Page %(page_num)d out of %(total_pages)d of %(document)s'
@@ -647,7 +645,10 @@ class DocumentPage(models.Model):
def get_absolute_url(self):
return reverse('documents:document_page_view', args=(self.pk,))
# Custom methods
class Meta:
ordering = ('page_number',)
verbose_name = _('Document page')
verbose_name_plural = _('Document pages')
@property
def cache_filename(self):
@@ -777,10 +778,14 @@ class RecentDocument(models.Model):
objects = RecentDocumentManager()
def __str__(self):
return unicode(self.document)
def natural_key(self):
return self.document.natural_key() + self.user.natural_key()
natural_key.dependencies = ['documents.Document', 'auth.User']
class Meta:
ordering = ('-datetime_accessed',)
verbose_name = _('Recent document')
verbose_name_plural = _('Recent documents')
def __str__(self):
return unicode(self.document)

View File

@@ -0,0 +1,10 @@
from __future__ import absolute_import
from django.contrib.auth import get_user_model
from django.db import models
class FolderManager(models.Manager):
def get_by_natural_key(self, label, *user_key):
user = get_user_model().objects.get_by_natural_key(*user_key)
return self.get(label=label, user=user)

View File

@@ -12,6 +12,8 @@ from documents.models import Document
from documents.permissions import permission_document_view
from permissions import Permission
from .managers import FolderManager
@python_2_unicode_compatible
class Folder(models.Model):
@@ -26,12 +28,24 @@ class Folder(models.Model):
Document, related_name='folders', verbose_name=_('Documents')
)
objects = FolderManager()
def __str__(self):
return self.label
def get_absolute_url(self):
return reverse('folders:folder_view', args=(self.pk,))
def natural_key(self):
return (self.label,) + self.user.natural_key()
natural_key.dependencies = ['auth.User']
class Meta:
ordering = ('label',)
unique_together = ('label', 'user')
verbose_name = _('Folder')
verbose_name_plural = _('Folders')
def get_document_count(self, user):
queryset = self.documents
@@ -44,12 +58,6 @@ class Folder(models.Model):
return queryset.count()
class Meta:
ordering = ('label',)
unique_together = ('label', 'user')
verbose_name = _('Folder')
verbose_name_plural = _('Folders')
class DocumentFolder(Folder):
class Meta:

View File

@@ -8,7 +8,15 @@ from django.contrib.contenttypes.models import ContentType
logger = logging.getLogger(__name__)
class RoleManager(models.Manager):
def get_by_natural_key(self, label):
return self.get(label=label)
class StoredPermissionManager(models.Manager):
def get_by_natural_key(self, namespace, name):
return self.get(namespace=namespace, name=name)
def get_for_holder(self, holder):
ct = ContentType.objects.get_for_model(holder)
return self.model.objects.filter(

View File

@@ -8,7 +8,7 @@ from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
from .managers import StoredPermissionManager
from .managers import RoleManager, StoredPermissionManager
logger = logging.getLogger(__name__)
@@ -20,12 +20,6 @@ class StoredPermission(models.Model):
objects = StoredPermissionManager()
class Meta:
ordering = ('namespace',)
unique_together = ('namespace', 'name')
verbose_name = _('Permission')
verbose_name_plural = _('Permissions')
def __init__(self, *args, **kwargs):
from .classes import Permission
@@ -43,6 +37,15 @@ class StoredPermission(models.Model):
def __str__(self):
return unicode(getattr(self, 'volatile_permission', self.name))
def natural_key(self):
return (self.namespace, self.name)
class Meta:
ordering = ('namespace',)
unique_together = ('namespace', 'name')
verbose_name = _('Permission')
verbose_name_plural = _('Permissions')
def requester_has_this(self, user):
logger.debug('user: %s', user)
if user.is_superuser or user.is_staff:
@@ -70,13 +73,19 @@ class Role(models.Model):
Group, related_name='roles', verbose_name=_('Groups')
)
class Meta:
ordering = ('label',)
verbose_name = _('Role')
verbose_name_plural = _('Roles')
objects = RoleManager()
def __str__(self):
return self.label
def get_absolute_url(self):
return reverse('permissions:role_list')
def natural_key(self):
return (self.label,)
natural_key.dependencies = ['auth.Group', 'permissions.StoredPermission']
class Meta:
ordering = ('label',)
verbose_name = _('Role')
verbose_name_plural = _('Roles')