diff --git a/HISTORY.rst b/HISTORY.rst index 4b07a9c71c..1a77e14463 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -45,6 +45,7 @@ * Add dashboard app. * Remove queryset slicing hack from the Document list view. And slice the Recently Added Document queryset itself. +* Move stub filtering to the Document model manager. 3.1.11 (2019-04-XX) =================== diff --git a/docs/releases/3.2.rst b/docs/releases/3.2.rst index 0292318d11..6deace1f43 100644 --- a/docs/releases/3.2.rst +++ b/docs/releases/3.2.rst @@ -69,6 +69,7 @@ Other changes * Add dashboard app. * Remove queryset slicing hack from the Document list view. And slice the Recently Added Document queryset itself. +* Move stub filtering to the Document model manager. Removals diff --git a/mayan/apps/documents/dashboard_widgets.py b/mayan/apps/documents/dashboard_widgets.py index e47f151871..244a44fa2d 100644 --- a/mayan/apps/documents/dashboard_widgets.py +++ b/mayan/apps/documents/dashboard_widgets.py @@ -55,7 +55,7 @@ class DashboardWidgetDocumentsTotal(DashboardWidgetNumeric): ) self.count = AccessControlList.objects.filter_by_access( permission=permission_document_view, user=request.user, - queryset=Document.objects.filter(is_stub=False) + queryset=Document.objects.all() ).count() return super(DashboardWidgetDocumentsTotal, self).render(request) diff --git a/mayan/apps/documents/managers.py b/mayan/apps/documents/managers.py index 8aacf5f4a3..f26dd5fff0 100644 --- a/mayan/apps/documents/managers.py +++ b/mayan/apps/documents/managers.py @@ -17,17 +17,13 @@ logger = logging.getLogger(__name__) class DocumentManager(models.Manager): - def delete_stubs(self): - for stale_stub_document in self.filter(is_stub=True, date_added__lt=now() - timedelta(seconds=STUB_EXPIRATION_INTERVAL)): - stale_stub_document.delete(trash=False) - def get_by_natural_key(self, uuid): return self.model.passthrough.get(uuid=force_text(uuid)) def get_queryset(self): return TrashCanQuerySet( self.model, using=self._db - ).filter(in_trash=False) + ).filter(in_trash=False).filter(is_stub=False) def invalidate_cache(self): for document in self.model.objects.all(): @@ -237,7 +233,9 @@ class FavoriteDocumentManager(models.Manager): class PassthroughManager(models.Manager): - pass + def delete_stubs(self): + for stale_stub_document in self.filter(is_stub=True, date_added__lt=now() - timedelta(seconds=STUB_EXPIRATION_INTERVAL)): + stale_stub_document.delete(to_trash=False) class RecentDocumentManager(models.Manager): diff --git a/mayan/apps/documents/tasks.py b/mayan/apps/documents/tasks.py index c4a9256aa9..1fbf4a6ef9 100644 --- a/mayan/apps/documents/tasks.py +++ b/mayan/apps/documents/tasks.py @@ -71,7 +71,7 @@ def task_delete_stubs(): ) logger.info('Executing') - Document.objects.delete_stubs() + Document.passthrough.delete_stubs() logger.info('Finshed') diff --git a/mayan/apps/documents/tests/test_models.py b/mayan/apps/documents/tests/test_models.py index 85d5c9b8c1..4c3fff3f2e 100644 --- a/mayan/apps/documents/tests/test_models.py +++ b/mayan/apps/documents/tests/test_models.py @@ -258,18 +258,18 @@ class DocumentManagerTestCase(BaseTestCase): document_type=self.document_type ) - Document.objects.delete_stubs() + Document.passthrough.delete_stubs() - self.assertEqual(Document.objects.count(), 1) + self.assertEqual(Document.passthrough.count(), 1) document_stub.date_added = document_stub.date_added - timedelta( seconds=STUB_EXPIRATION_INTERVAL + 1 ) document_stub.save() - Document.objects.delete_stubs() + Document.passthrough.delete_stubs() - self.assertEqual(Document.objects.count(), 0) + self.assertEqual(Document.passthrough.count(), 0) class DuplicatedDocumentsTestCase(GenericDocumentTestCase): diff --git a/mayan/apps/documents/views/document_views.py b/mayan/apps/documents/views/document_views.py index 30d9c58e48..b0abddd2b0 100644 --- a/mayan/apps/documents/views/document_views.py +++ b/mayan/apps/documents/views/document_views.py @@ -102,7 +102,7 @@ class DocumentListView(SingleObjectListView): } def get_object_list(self): - return self.get_document_queryset().filter(is_stub=False) + return self.get_document_queryset() class DocumentDocumentTypeEditView(MultipleObjectFormActionView): @@ -203,7 +203,7 @@ class DocumentDownloadFormView(FormView): return self.model.objects.filter( pk__in=id_list.split(',') - ).filter(is_stub=False) + ) def get_extra_context(self): subtemplates_list = [ diff --git a/mayan/apps/mirroring/filesystems.py b/mayan/apps/mirroring/filesystems.py index 5041bc1363..d4c600267e 100644 --- a/mayan/apps/mirroring/filesystems.py +++ b/mayan/apps/mirroring/filesystems.py @@ -80,9 +80,7 @@ class IndexFilesystem(Operations): if access_only: return True else: - return Document.objects.get( - is_stub=False, pk=document_pk - ) + return Document.objects.get(pk=document_pk) for count, part in enumerate(parts[1:]): try: @@ -95,9 +93,7 @@ class IndexFilesystem(Operations): else: try: if node.index_template_node.link_documents: - document = node.documents.get( - is_stub=False, label=part - ) + document = node.documents.get(label=part) logger.debug( 'path %s is a valid file path', path ) @@ -207,7 +203,7 @@ class IndexFilesystem(Operations): # Documents if node.index_template_node.link_documents: - queryset = node.documents.filter(is_stub=False).values('label').exclude( + queryset = node.documents.values('label').exclude( label__contains='/' )