Add natural key serialization.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
10
mayan/apps/folders/managers.py
Normal file
10
mayan/apps/folders/managers.py
Normal 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)
|
||||
@@ -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:
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user