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:
@@ -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
|
||||||
|
|||||||
@@ -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=(
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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()
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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 <a href="%(url)s">%(text)s</a>' % {
|
s='%(icon)s <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(
|
||||||
[
|
[
|
||||||
' ' * node.get_level(),
|
' ' * 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))
|
||||||
|
|||||||
Reference in New Issue
Block a user