Initial audit of the document index app

Add keyword arguments to calls. Sort methods and parameters.

Signed-off-by: Roberto Rosario <Roberto.Rosario.Gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-01-02 19:16:32 -04:00
parent 82651ff32c
commit 3dc8df46b9
12 changed files with 160 additions and 128 deletions

View File

@@ -62,7 +62,7 @@ class APIIndexNodeInstanceDocumentListView(generics.ListAPIView):
def get_queryset(self): def get_queryset(self):
index_node_instance = get_object_or_404( index_node_instance = get_object_or_404(
klass=IndexInstanceNode, pk=self.kwargs['pk'] klass=IndexInstanceNode, pk=self.kwargs['index_instance_node_pk']
) )
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
permissions=permission_document_indexing_view, permissions=permission_document_indexing_view,
@@ -109,7 +109,7 @@ class APIDocumentIndexListView(generics.ListAPIView):
serializer_class = IndexInstanceNodeSerializer serializer_class = IndexInstanceNodeSerializer
def get_queryset(self): def get_queryset(self):
document = get_object_or_404(klass=Document, pk=self.kwargs['pk']) document = get_object_or_404(klass=Document, pk=self.kwargs['document_pk'])
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
permissions=permission_document_view, user=self.request.user, permissions=permission_document_view, user=self.request.user,
obj=document obj=document

View File

@@ -65,12 +65,14 @@ class DocumentIndexingApp(MayanAppConfig):
app_label='documents', model_name='DocumentType' app_label='documents', model_name='DocumentType'
) )
DocumentIndexInstanceNode = self.get_model('DocumentIndexInstanceNode') DocumentIndexInstanceNode = self.get_model(
model_name='DocumentIndexInstanceNode'
)
Index = self.get_model('Index') Index = self.get_model(model_name='Index')
IndexInstance = self.get_model('IndexInstance') IndexInstance = self.get_model(model_name='IndexInstance')
IndexInstanceNode = self.get_model('IndexInstanceNode') IndexInstanceNode = self.get_model(model_name='IndexInstanceNode')
IndexTemplateNode = self.get_model('IndexTemplateNode') IndexTemplateNode = self.get_model(model_name='IndexTemplateNode')
ModelPermission.register( ModelPermission.register(
model=Index, permissions=( model=Index, permissions=(

View File

@@ -23,8 +23,9 @@ class IndexListForm(forms.Form):
user = kwargs.pop('user') user = kwargs.pop('user')
super(IndexListForm, self).__init__(*args, **kwargs) super(IndexListForm, self).__init__(*args, **kwargs)
queryset = AccessControlList.objects.filter_by_access( queryset = AccessControlList.objects.filter_by_access(
permission=permission_document_indexing_rebuild, user=user, permission=permission_document_indexing_rebuild,
queryset=Index.objects.filter(enabled=True) queryset=Index.objects.filter(enabled=True),
user=user
) )
self.fields['indexes'].queryset = queryset self.fields['indexes'].queryset = queryset

View File

@@ -15,7 +15,7 @@ class IndexManager(models.Manager):
return self.get(slug=slug) return self.get(slug=slug)
def index_document(self, document): def index_document(self, document):
for index in self.filter(enabled=True, document_types=document.document_type): for index in self.filter(document_types=document.document_type, enabled=True):
index.index_document(document=document) index.index_document(document=document)
def rebuild(self): def rebuild(self):

View File

@@ -65,8 +65,8 @@ class Index(models.Model):
def get_absolute_url(self): def get_absolute_url(self):
try: try:
return reverse( return reverse(
'indexing:index_instance_node_view', viewname='indexing:index_instance_node_view',
args=(self.instance_root.pk,) kwargs={'index_instance_node_pk': self.instance_root.pk}
) )
except IndexInstanceNode.DoesNotExist: except IndexInstanceNode.DoesNotExist:
return '#' return '#'
@@ -190,24 +190,19 @@ class IndexTemplateNode(MPTTModel):
'Enter a template to render. ' 'Enter a template to render. '
'Use Django\'s default templating language ' 'Use Django\'s default templating language '
'(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)' '(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)'
), ), verbose_name=_('Indexing expression')
verbose_name=_('Indexing expression')
) )
enabled = models.BooleanField( enabled = models.BooleanField(
default=True, default=True, help_text=_(
help_text=_(
'Causes this node to be visible and updated when document data ' 'Causes this node to be visible and updated when document data '
'changes.' 'changes.'
), ), verbose_name=_('Enabled')
verbose_name=_('Enabled')
) )
link_documents = models.BooleanField( link_documents = models.BooleanField(
default=False, default=False, help_text=_(
help_text=_(
'Check this option to have this node act as a container for ' 'Check this option to have this node act as a container for '
'documents and not as a parent for further nodes.' 'documents and not as a parent for further nodes.'
), ), verbose_name=_('Link documents')
verbose_name=_('Link documents')
) )
class Meta: class Meta:
@@ -216,7 +211,7 @@ class IndexTemplateNode(MPTTModel):
def __str__(self): def __str__(self):
if self.is_root_node(): if self.is_root_node():
return ugettext('Root') return ugettext(message='Root')
else: else:
return self.expression return self.expression
@@ -250,7 +245,7 @@ class IndexTemplateNode(MPTTModel):
for child in self.get_children(): for child in self.get_children():
child.index_document( child.index_document(
document=document, acquire_lock=False, acquire_lock=False, document=document,
index_instance_node_parent=index_instance_root_node index_instance_node_parent=index_instance_root_node
) )
elif self.enabled: elif self.enabled:
@@ -267,7 +262,7 @@ class IndexTemplateNode(MPTTModel):
try: try:
context = {'document': document} context = {'document': document}
template = Template(self.expression) template = Template(source=self.expression)
result = template.render(**context) result = template.render(**context)
except Exception as exception: except Exception as exception:
logger.debug('Evaluating error: %s', exception) logger.debug('Evaluating error: %s', exception)
@@ -294,7 +289,7 @@ class IndexTemplateNode(MPTTModel):
for child in self.get_children(): for child in self.get_children():
child.index_document( child.index_document(
document=document, acquire_lock=False, acquire_lock=False, document=document,
index_instance_node_parent=index_instance_node index_instance_node_parent=index_instance_node
) )
finally: finally:
@@ -341,7 +336,7 @@ class IndexInstanceNode(MPTTModel):
# Prevent another process to delete this node. # Prevent another process to delete this node.
try: try:
lock = locking_backend.acquire_lock( lock = locking_backend.acquire_lock(
self.index_template_node.get_lock_string() name=self.index_template_node.get_lock_string()
) )
except LockError: except LockError:
raise raise
@@ -359,7 +354,10 @@ class IndexInstanceNode(MPTTModel):
lock.release() lock.release()
def get_absolute_url(self): def get_absolute_url(self):
return reverse('indexing:index_instance_node_view', args=(self.pk,)) return reverse(
viewname='indexing:index_instance_node_view',
kwargs={'index_instance_node_pk': self.pk}
)
def get_children_count(self): def get_children_count(self):
return self.get_children().count() return self.get_children().count()
@@ -369,28 +367,29 @@ class IndexInstanceNode(MPTTModel):
def get_descendants_document_count(self, user): def get_descendants_document_count(self, user):
return AccessControlList.objects.filter_by_access( return AccessControlList.objects.filter_by_access(
permission=permission_document_view, user=user, permission=permission_document_view,
queryset=Document.objects.filter( queryset=Document.objects.filter(
index_instance_nodes__in=self.get_descendants( index_instance_nodes__in=self.get_descendants(
include_self=True include_self=True
) )
) ), user=user
).count() ).count()
def get_full_path(self): def get_full_path(self):
result = [] result = []
for node in self.get_ancestors(include_self=True): for node in self.get_ancestors(include_self=True):
if node.is_root_node(): if node.is_root_node():
result.append(force_text(self.index())) result.append(force_text(s=self.index()))
else: else:
result.append(force_text(node)) result.append(force_text(s=node))
return ' / '.join(result) return ' / '.join(result)
def get_item_count(self, user): def get_item_count(self, user):
if self.index_template_node.link_documents: if self.index_template_node.link_documents:
queryset = AccessControlList.objects.filter_by_access( queryset = AccessControlList.objects.filter_by_access(
permission_document_view, user, queryset=self.documents permission=permission_document_view, queryset=self.documents,
user=user
) )
return queryset.count() return queryset.count()
@@ -417,7 +416,7 @@ class IndexInstanceNode(MPTTModel):
# parent template node for the lock # parent template node for the lock
try: try:
lock = locking_backend.acquire_lock( lock = locking_backend.acquire_lock(
self.index_template_node.get_lock_string() name=self.index_template_node.get_lock_string()
) )
except LockError: except LockError:
raise raise

View File

@@ -7,21 +7,21 @@ from mayan.apps.permissions import PermissionNamespace
namespace = PermissionNamespace(label=_('Indexing'), name='document_indexing') namespace = PermissionNamespace(label=_('Indexing'), name='document_indexing')
permission_document_indexing_create = namespace.add_permission( permission_document_indexing_create = namespace.add_permission(
name='document_index_create', label=_('Create new document indexes') label=_('Create new document indexes'), name='document_index_create'
) )
permission_document_indexing_edit = namespace.add_permission( permission_document_indexing_edit = namespace.add_permission(
name='document_index_edit', label=_('Edit document indexes') label=_('Edit document indexes'), name='document_index_edit'
) )
permission_document_indexing_delete = namespace.add_permission( permission_document_indexing_delete = namespace.add_permission(
name='document_index_delete', label=_('Delete document indexes') label=_('Delete document indexes'), name='document_index_delete'
) )
permission_document_indexing_instance_view = namespace.add_permission( permission_document_indexing_instance_view = namespace.add_permission(
name='document_index_instance_view', label=_('View document index instances'),
label=_('View document index instances') name='document_index_instance_view'
) )
permission_document_indexing_view = namespace.add_permission( permission_document_indexing_view = namespace.add_permission(
name='document_index_view', label=_('View document indexes') label=_('View document indexes'), name='document_index_view'
) )
permission_document_indexing_rebuild = namespace.add_permission( permission_document_indexing_rebuild = namespace.add_permission(
name='document_rebuild_indexes', label=_('Rebuild document indexes') label=_('Rebuild document indexes'), name='document_rebuild_indexes'
) )

View File

@@ -5,21 +5,21 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.common.queues import queue_tools from mayan.apps.common.queues import queue_tools
from mayan.apps.task_manager.classes import CeleryQueue from mayan.apps.task_manager.classes import CeleryQueue
queue_indexing = CeleryQueue(name='indexing', label=_('Indexing')) queue_indexing = CeleryQueue(label=_('Indexing'), name='indexing')
queue_indexing.add_task_type( queue_indexing.add_task_type(
name='mayan.apps.document_indexing.tasks.task_delete_empty', label=_('Delete empty index nodes'),
label=_('Delete empty index nodes') name='mayan.apps.document_indexing.tasks.task_delete_empty'
) )
queue_indexing.add_task_type( queue_indexing.add_task_type(
name='mayan.apps.document_indexing.tasks.task_remove_document', label=_('Remove document'),
label=_('Remove document') name='mayan.apps.document_indexing.tasks.task_remove_document'
) )
queue_indexing.add_task_type( queue_indexing.add_task_type(
name='mayan.apps.document_indexing.tasks.task_index_document', label=_('Index document'),
label=_('Index document') name='mayan.apps.document_indexing.tasks.task_index_document'
) )
queue_tools.add_task_type( queue_tools.add_task_type(
name='mayan.apps.document_indexing.tasks.task_rebuild_index', label=_('Rebuild index'),
label=_('Rebuild index') name='mayan.apps.document_indexing.tasks.task_rebuild_index'
) )

View File

@@ -92,7 +92,7 @@ class IndexTestCase(DocumentIndexingTestMixin, DocumentTestMixin, BaseTestCase):
document = self.upload_document() document = self.upload_document()
self.assertEqual( self.assertEqual(
[instance.value for instance in IndexInstanceNode.objects.all().order_by('pk')], [instance.value for instance in IndexInstanceNode.objects.all().order_by('index_instance_node_pk')],
[ [
'', force_text(document.date_added.year), '', force_text(document.date_added.year),
force_text(document.date_added.month).zfill(2) force_text(document.date_added.month).zfill(2)
@@ -100,7 +100,7 @@ class IndexTestCase(DocumentIndexingTestMixin, DocumentTestMixin, BaseTestCase):
) )
self.assertTrue( self.assertTrue(
document in list(IndexInstanceNode.objects.order_by('pk').last().documents.all()) document in list(IndexInstanceNode.objects.order_by('index_instance_node_pk').last().documents.all())
) )
def test_dual_level_dual_document_index(self): def test_dual_level_dual_document_index(self):
@@ -131,7 +131,7 @@ class IndexTestCase(DocumentIndexingTestMixin, DocumentTestMixin, BaseTestCase):
Index.objects.rebuild() Index.objects.rebuild()
self.assertEqual( self.assertEqual(
[instance.value for instance in IndexInstanceNode.objects.all().order_by('pk')], [instance.value for instance in IndexInstanceNode.objects.all().order_by('index_instance_node_pk')],
[ [
'', force_text(self.document_2.uuid), self.document_2.label, '', force_text(self.document_2.uuid), self.document_2.label,
force_text(self.document.uuid), self.document.label force_text(self.document.uuid), self.document.label

View File

@@ -45,7 +45,10 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
self.assertEqual(Index.objects.first().label, TEST_INDEX_LABEL) self.assertEqual(Index.objects.first().label, TEST_INDEX_LABEL)
def _request_index_delete_view(self, index): def _request_index_delete_view(self, index):
return self.post('indexing:index_setup_delete', args=(index.pk,)) return self.post(
viewname='indexing:index_setup_delete',
kwargs={'index_pk': index.pk}
)
def test_index_delete_view_no_permission(self): def test_index_delete_view_no_permission(self):
index = Index.objects.create( index = Index.objects.create(
@@ -72,7 +75,9 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
def _request_index_edit_view(self, index): def _request_index_edit_view(self, index):
return self.post( return self.post(
'indexing:index_setup_edit', args=(index.pk,), data={ viewname='indexing:index_setup_edit', kwargs={
'index_pk': index.pk
}, data={
'label': TEST_INDEX_LABEL_EDITED, 'slug': TEST_INDEX_SLUG 'label': TEST_INDEX_LABEL_EDITED, 'slug': TEST_INDEX_SLUG
} }
) )
@@ -122,7 +127,8 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
def _request_index_instance_node_view(self, index_instance_node): def _request_index_instance_node_view(self, index_instance_node):
return self.get( return self.get(
'indexing:index_instance_node_view', args=(index_instance_node.pk,) viewname='indexing:index_instance_node_view',
kwargs={'index_instance_node_pk': index_instance_node.pk}
) )
def test_index_instance_node_view_no_permission(self): def test_index_instance_node_view_no_permission(self):
@@ -146,7 +152,9 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
index_instance_node=self.index.instance_root index_instance_node=self.index.instance_root
) )
self.assertContains(response, text=TEST_INDEX_LABEL, status_code=200) self.assertContains(
response=response, text=TEST_INDEX_LABEL, status_code=200
)
def _request_index_rebuild_get_view(self): def _request_index_rebuild_get_view(self):
return self.get( return self.get(

View File

@@ -17,80 +17,86 @@ from .views import (
urlpatterns = [ urlpatterns = [
url( url(
r'^setup/index/list/$', SetupIndexListView.as_view(), regex=r'^indexes/$', name='index_setup_list',
name='index_setup_list' view=SetupIndexListView.as_view()
), ),
url( url(
r'^setup/index/create/$', SetupIndexCreateView.as_view(), regex=r'^indexes/create/$', name='index_setup_create',
name='index_setup_create' view=SetupIndexCreateView.as_view()
), ),
url( url(
r'^setup/index/(?P<pk>\d+)/edit/$', SetupIndexEditView.as_view(), regex=r'^indexes/(?P<index_pk>\d+)/delete/$',
name='index_setup_edit' name='index_setup_delete', view=SetupIndexDeleteView.as_view()
), ),
url( url(
r'^setup/index/(?P<pk>\d+)/delete/$', SetupIndexDeleteView.as_view(), regex=r'^indexes/(?P<index_pk>\d+)/edit/$',
name='index_setup_delete' name='index_setup_edit', view=SetupIndexEditView.as_view()
), ),
url( url(
r'^setup/index/(?P<pk>\d+)/template/$', regex=r'^indexes/(?P<index_pk>\d+)/templates/$',
SetupIndexTreeTemplateListView.as_view(), name='index_setup_view' name='index_setup_view', view=SetupIndexTreeTemplateListView.as_view()
), ),
url( url(
r'^setup/index/(?P<pk>\d+)/document_types/$', regex=r'^indexes/(?P<index_pk>\d+)/document_types/$',
SetupIndexDocumentTypesView.as_view(), name='index_setup_document_types',
name='index_setup_document_types' view=SetupIndexDocumentTypesView.as_view()
), ),
url( url(
r'^setup/template/node/(?P<pk>\d+)/create/child/$', regex=r'^indexes/templates/nodes/(?P<index_template_node_pk>\d+)/create/child/$',
TemplateNodeCreateView.as_view(), name='template_node_create' name='template_node_create', view=TemplateNodeCreateView.as_view()
), ),
url( url(
r'^setup/template/node/(?P<pk>\d+)/edit/$', regex=r'^indexes/templates/nodes/(?P<index_template_node_pk>\d+)/edit/$',
TemplateNodeEditView.as_view(), name='template_node_edit' name='template_node_edit', view=TemplateNodeEditView.as_view()
), ),
url( url(
r'^setup/template/node/(?P<pk>\d+)/delete/$', regex=r'^indexes/templates/nodes/(?P<index_template_node_pk>\d+)/delete/$',
TemplateNodeDeleteView.as_view(), name='template_node_delete' name='template_node_delete', view=TemplateNodeDeleteView.as_view()
), ),
url(r'^index/list/$', IndexListView.as_view(), name='index_list'),
url( url(
r'^instance/node/(?P<pk>\d+)/$', IndexInstanceNodeView.as_view(), regex=r'^indexes/instances/list/$', name='index_list',
name='index_instance_node_view' view=IndexListView.as_view()
),
url(
regex=r'^indexes/instances/node/(?P<index_instance_node_pk>\d+)/$',
name='index_instance_node_view', view=IndexInstanceNodeView.as_view()
), ),
url( url(
r'^rebuild/all/$', RebuildIndexesView.as_view(), regex=r'^indexes/rebuild/$', name='rebuild_index_instances',
name='rebuild_index_instances' view=RebuildIndexesView.as_view()
), ),
url( url(
r'^list/for/document/(?P<pk>\d+)/$', regex=r'^documents/(?P<document_pk>\d+)/indexes/$',
DocumentIndexNodeListView.as_view(), name='document_index_list' name='document_index_list', view=DocumentIndexNodeListView.as_view()
), ),
] ]
api_urls = [ api_urls = [
url( url(
r'^indexes/node/(?P<pk>[0-9]+)/documents/$', regex=r'^indexes/nodes/(?P<index_instance_node_pk>[0-9]+)/documents/$',
APIIndexNodeInstanceDocumentListView.as_view(), name='index-node-documents',
name='index-node-documents' view=APIIndexNodeInstanceDocumentListView.as_view(),
), ),
url( url(
r'^indexes/template/(?P<pk>[0-9]+)/$', APIIndexTemplateView.as_view(), regex=r'^indexes/templates/(?P<index_template_node_pk>[0-9]+)/$',
name='index-template-detail' name='index-template-detail', view=APIIndexTemplateView.as_view()
), ),
url( url(
r'^indexes/(?P<pk>[0-9]+)/$', APIIndexView.as_view(), regex=r'^indexes/(?P<index_pk>\d+)/$', name='index-detail',
name='index-detail' view=APIIndexView.as_view()
), ),
url( url(
r'^indexes/(?P<pk>[0-9]+)/template/$', regex=r'^indexes/(?P<index_pk>\d+)/templates/$',
APIIndexTemplateListView.as_view(), name='index-template-detail' name='index-template-detail', view=APIIndexTemplateListView.as_view()
), ),
url(r'^indexes/$', APIIndexListView.as_view(), name='index-list'),
url( url(
r'^documents/(?P<pk>[0-9]+)/indexes/$', regex=r'^indexes/$', name='index-list',
APIDocumentIndexListView.as_view(), name='document-index-list' view=APIIndexListView.as_view()
),
url(
regex=r'^documents/(?P<document_pk>\d+)/indexes/$',
name='document-index-list',
view=APIDocumentIndexListView.as_view()
), ),
] ]

View File

@@ -39,14 +39,15 @@ class SetupIndexCreateView(SingleObjectCreateView):
extra_context = {'title': _('Create index')} extra_context = {'title': _('Create index')}
fields = ('label', 'slug', 'enabled') fields = ('label', 'slug', 'enabled')
model = Index model = Index
post_action_redirect = reverse_lazy('indexing:index_setup_list') post_action_redirect = reverse_lazy(viewname='indexing:index_setup_list')
view_permission = permission_document_indexing_create view_permission = permission_document_indexing_create
class SetupIndexDeleteView(SingleObjectDeleteView): class SetupIndexDeleteView(SingleObjectDeleteView):
model = Index model = Index
post_action_redirect = reverse_lazy('indexing:index_setup_list')
object_permission = permission_document_indexing_delete object_permission = permission_document_indexing_delete
pk_url_kwarg = 'index_pk'
post_action_redirect = reverse_lazy(viewname='indexing:index_setup_list')
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -58,8 +59,9 @@ class SetupIndexDeleteView(SingleObjectDeleteView):
class SetupIndexEditView(SingleObjectEditView): class SetupIndexEditView(SingleObjectEditView):
fields = ('label', 'slug', 'enabled') fields = ('label', 'slug', 'enabled')
model = Index model = Index
post_action_redirect = reverse_lazy('indexing:index_setup_list')
object_permission = permission_document_indexing_edit object_permission = permission_document_indexing_edit
pk_url_kwarg = 'index_pk'
post_action_redirect = reverse_lazy(viewname='indexing:index_setup_list')
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -101,25 +103,25 @@ class SetupIndexDocumentTypesView(AssignRemoveView):
def get_document_queryset(self): def get_document_queryset(self):
return AccessControlList.objects.filter_by_access( return AccessControlList.objects.filter_by_access(
permission_document_view, self.request.user, permission_document_view, queryset=DocumentType.objects.all(),
queryset=DocumentType.objects.all() user=self.request.user
) )
def get_extra_context(self): def get_extra_context(self):
return { return {
'object': self.get_object(), 'object': self.get_object(),
'title': _(
'Document types linked to index: %s'
) % self.get_object(),
'subtitle': _( 'subtitle': _(
'Only the documents of the types selected will be shown ' 'Only the documents of the types selected will be shown '
'in the index when built. Only the events of the documents ' 'in the index when built. Only the events of the documents '
'of the types select will trigger updates in the index.' 'of the types select will trigger updates in the index.'
), ),
'title': _(
'Document types linked to index: %s'
) % self.get_object()
} }
def get_object(self): def get_object(self):
return get_object_or_404(klass=Index, pk=self.kwargs['pk']) return get_object_or_404(klass=Index, pk=self.kwargs['index_pk'])
def left_list(self): def left_list(self):
return AssignRemoveView.generate_choices( return AssignRemoveView.generate_choices(
@@ -133,7 +135,7 @@ class SetupIndexDocumentTypesView(AssignRemoveView):
def right_list(self): def right_list(self):
return AssignRemoveView.generate_choices( return AssignRemoveView.generate_choices(
self.get_document_queryset() & self.get_object().document_types.all() choices=self.get_document_queryset() & self.get_object().document_types.all()
) )
@@ -149,7 +151,7 @@ class SetupIndexTreeTemplateListView(SingleObjectListView):
} }
def get_index(self): def get_index(self):
return get_object_or_404(klass=Index, pk=self.kwargs['pk']) return get_object_or_404(klass=Index, pk=self.kwargs['index_pk'])
def get_object_list(self): def get_object_list(self):
return self.get_index().template_root.get_descendants( return self.get_index().template_root.get_descendants(
@@ -163,13 +165,13 @@ class TemplateNodeCreateView(SingleObjectCreateView):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
permissions=permission_document_indexing_edit, user=request.user, obj=self.get_parent_node().index,
obj=self.get_parent_node().index permissions=permission_document_indexing_edit, user=request.user
) )
return super( return super(
TemplateNodeCreateView, self TemplateNodeCreateView, self
).dispatch(request, *args, **kwargs) ).dispatch(request=request, *args, **kwargs)
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -185,7 +187,9 @@ class TemplateNodeCreateView(SingleObjectCreateView):
} }
def get_parent_node(self): def get_parent_node(self):
return get_object_or_404(klass=IndexTemplateNode, pk=self.kwargs['pk']) return get_object_or_404(
klass=IndexTemplateNode, pk=self.kwargs['index_template_node_pk']
)
class TemplateNodeDeleteView(SingleObjectDeleteView): class TemplateNodeDeleteView(SingleObjectDeleteView):
@@ -205,7 +209,8 @@ class TemplateNodeDeleteView(SingleObjectDeleteView):
def get_post_action_redirect(self): def get_post_action_redirect(self):
return reverse( return reverse(
'indexing:index_setup_view', args=(self.get_object().index.pk,) viewname='indexing:index_setup_view',
kwargs={'index_pk': self.get_object().index.pk}
) )
@@ -227,7 +232,8 @@ class TemplateNodeEditView(SingleObjectEditView):
def get_post_action_redirect(self): def get_post_action_redirect(self):
return reverse( return reverse(
'indexing:index_setup_view', args=(self.get_object().index.pk,) viewname='indexing:index_setup_view',
kwargs={'index_pk': self.get_object().index.pk}
) )
@@ -252,7 +258,9 @@ class IndexListView(SingleObjectListView):
def get_object_list(self): def get_object_list(self):
queryset = IndexInstance.objects.filter(enabled=True) queryset = IndexInstance.objects.filter(enabled=True)
return queryset.filter(node_templates__index_instance_nodes__isnull=False).distinct() return queryset.filter(
node_templates__index_instance_nodes__isnull=False
).distinct()
class IndexInstanceNodeView(DocumentListView): class IndexInstanceNodeView(DocumentListView):
@@ -260,21 +268,24 @@ class IndexInstanceNodeView(DocumentListView):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
self.index_instance_node = get_object_or_404( self.index_instance_node = get_object_or_404(
klass=IndexInstanceNode, pk=self.kwargs['pk'] klass=IndexInstanceNode, pk=self.kwargs['index_instance_node_pk']
) )
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
obj=self.index_instance_node.index(),
permissions=permission_document_indexing_instance_view, permissions=permission_document_indexing_instance_view,
user=request.user, obj=self.index_instance_node.index() user=request.user
) )
if self.index_instance_node: if self.index_instance_node:
if self.index_instance_node.index_template_node.link_documents: if self.index_instance_node.index_template_node.link_documents:
return super(IndexInstanceNodeView, self).dispatch( return super(IndexInstanceNodeView, self).dispatch(
request, *args, **kwargs request=request, *args, **kwargs
) )
return SingleObjectListView.dispatch(self, request, *args, **kwargs) return SingleObjectListView.dispatch(
self, request=request, *args, **kwargs
)
def get_document_queryset(self): def get_document_queryset(self):
if self.index_instance_node: if self.index_instance_node:
@@ -331,16 +342,18 @@ class DocumentIndexNodeListView(SingleObjectListView):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
permissions=permission_document_view, user=request.user, obj=self.get_document(), permissions=permission_document_view,
obj=self.get_document() user=request.user
) )
return super( return super(
DocumentIndexNodeListView, self DocumentIndexNodeListView, self
).dispatch(request, *args, **kwargs) ).dispatch(request=request, *args, **kwargs)
def get_document(self): def get_document(self):
return get_object_or_404(klass=Document, pk=self.kwargs['pk']) return get_object_or_404(
klass=Document, pk=self.kwargs['document_pk']
)
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -381,7 +394,7 @@ class RebuildIndexesView(FormView):
count += 1 count += 1
messages.success( messages.success(
self.request, ungettext( request=self.request, message=ungettext(
singular='%(count)d index queued for rebuild.', singular='%(count)d index queued for rebuild.',
plural='%(count)d indexes queued for rebuild.', plural='%(count)d indexes queued for rebuild.',
number=count number=count
@@ -398,4 +411,4 @@ class RebuildIndexesView(FormView):
} }
def get_post_action_redirect(self): def get_post_action_redirect(self):
return reverse('common:tools_list') return reverse(viewname='common:tools_list')

View File

@@ -12,7 +12,7 @@ def get_instance_link(index_instance_node):
Return an HTML anchor to an index node instance Return an HTML anchor to an index node instance
""" """
return mark_safe( return mark_safe(
'<a href="{url}">{text}</a>'.format( s='<a href="{url}">{text}</a>'.format(
url=index_instance_node.get_absolute_url(), url=index_instance_node.get_absolute_url(),
text=escape(index_instance_node.get_full_path()) text=escape(index_instance_node.get_full_path())
) )
@@ -20,6 +20,7 @@ def get_instance_link(index_instance_node):
def index_instance_item_link(index_instance_item): def index_instance_item_link(index_instance_item):
#TODO: Replace with a file template
IndexInstanceNode = apps.get_model( IndexInstanceNode = apps.get_model(
app_label='document_indexing', model_name='IndexInstanceNode' app_label='document_indexing', model_name='IndexInstanceNode'
) )
@@ -33,7 +34,7 @@ def index_instance_item_link(index_instance_item):
icon = '' icon = ''
return mark_safe( return mark_safe(
'%(icon)s&nbsp;<a href="%(url)s">%(text)s</a>' % { s='%(icon)s&nbsp;<a href="%(url)s">%(text)s</a>' % {
'url': index_instance_item.get_absolute_url(), 'url': index_instance_item.get_absolute_url(),
'icon': icon, 'icon': icon,
'text': index_instance_item 'text': index_instance_item
@@ -45,8 +46,9 @@ def node_level(node):
""" """
Render an indented tree like output for a specific node Render an indented tree like output for a specific node
""" """
#TODO: Replace with a file template
return mark_safe( return mark_safe(
''.join( s=''.join(
[ [
'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' * node.get_level(), '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' * node.get_level(),
'' if node.is_root_node() else icon_index_level_up.render(), '' if node.is_root_node() else icon_index_level_up.render(),
@@ -57,6 +59,7 @@ def node_level(node):
def node_tree(node, user): def node_tree(node, user):
#TODO: Replace with a file template
result = [] result = []
result.append('<div class="list-group">') result.append('<div class="list-group">')
@@ -84,4 +87,4 @@ def node_tree(node, user):
result.append('</div>') result.append('</div>')
return mark_safe(''.join(result)) return mark_safe(s=''.join(result))