diff --git a/mayan/apps/documents/managers.py b/mayan/apps/documents/managers.py index 32754e4a57..486579f854 100644 --- a/mayan/apps/documents/managers.py +++ b/mayan/apps/documents/managers.py @@ -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 diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index d2a11ba5ff..e2d3d80aaa 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -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) diff --git a/mayan/apps/folders/managers.py b/mayan/apps/folders/managers.py new file mode 100644 index 0000000000..725a39d429 --- /dev/null +++ b/mayan/apps/folders/managers.py @@ -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) diff --git a/mayan/apps/folders/models.py b/mayan/apps/folders/models.py index cbad0d8c08..a5e2a83d58 100644 --- a/mayan/apps/folders/models.py +++ b/mayan/apps/folders/models.py @@ -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: diff --git a/mayan/apps/permissions/managers.py b/mayan/apps/permissions/managers.py index cdf36264a6..39cd52756c 100644 --- a/mayan/apps/permissions/managers.py +++ b/mayan/apps/permissions/managers.py @@ -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( diff --git a/mayan/apps/permissions/models.py b/mayan/apps/permissions/models.py index 26b5d39a17..35b55cf0b9 100644 --- a/mayan/apps/permissions/models.py +++ b/mayan/apps/permissions/models.py @@ -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')