Move stub filtering to the Document model manager

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-04-13 22:39:22 -04:00
parent 334f0cd03f
commit c0f51103d2
8 changed files with 17 additions and 21 deletions

View File

@@ -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)
===================

View File

@@ -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

View File

@@ -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)

View File

@@ -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):

View File

@@ -71,7 +71,7 @@ def task_delete_stubs():
)
logger.info('Executing')
Document.objects.delete_stubs()
Document.passthrough.delete_stubs()
logger.info('Finshed')

View File

@@ -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):

View File

@@ -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 = [

View File

@@ -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='/'
)