From 2c6339b56ae2eb6ee13e2d117b1765ddba1dccc2 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 2 Feb 2012 09:33:28 -0400 Subject: [PATCH] Small updates and fixes --- apps/document_indexing/admin.py | 9 +------- apps/document_indexing/api.py | 38 +++++++++++---------------------- apps/document_indexing/forms.py | 2 +- apps/document_indexing/tools.py | 17 +++++++++++++++ apps/document_indexing/urls.py | 2 +- apps/document_indexing/views.py | 10 ++++----- 6 files changed, 37 insertions(+), 41 deletions(-) create mode 100644 apps/document_indexing/tools.py diff --git a/apps/document_indexing/admin.py b/apps/document_indexing/admin.py index 7ec0de2423..1b9c833754 100644 --- a/apps/document_indexing/admin.py +++ b/apps/document_indexing/admin.py @@ -8,20 +8,13 @@ from .models import (Index, IndexTemplateNode, IndexInstanceNode, DocumentRenameCount) -#class IndexInstanceInline(admin.StackedInline): -# model = IndexInstance -# extra = 1# -# classes = ('collapse-open',) -# allow_add = True - - class IndexTemplateNodeAdmin(MPTTModelAdmin): list_display = ('expression', 'enabled', 'link_documents') class IndexInstanceNodeAdmin(MPTTModelAdmin): model = IndexInstanceNode - list_display = ('value',)# 'get_document_list_display') + list_display = ('value',) admin.site.register(Index) diff --git a/apps/document_indexing/api.py b/apps/document_indexing/api.py index 4b3a40e075..26c6808ed7 100644 --- a/apps/document_indexing/api.py +++ b/apps/document_indexing/api.py @@ -5,7 +5,6 @@ from django.utils.translation import ugettext from django.core.urlresolvers import reverse from django.template.defaultfilters import slugify -from documents.models import Document from metadata.classes import MetadataObject from .models import (Index, IndexTemplateNode, IndexInstanceNode, @@ -14,9 +13,7 @@ from .conf.settings import (AVAILABLE_INDEXING_FUNCTIONS, MAX_SUFFIX_COUNT, SLUGIFY_PATHS) from .filesystem import (fs_create_index_directory, fs_create_document_link, fs_delete_document_link, - fs_delete_index_directory, fs_delete_directory_recusive, - assemble_suffixed_filename) -from .widgets import get_instance_link + fs_delete_index_directory, assemble_suffixed_filename) from .exceptions import MaxSuffixCountReached if SLUGIFY_PATHS == False: @@ -41,7 +38,7 @@ def update_indexes(document): for index in Index.objects.filter(enabled=True): root_instance, created = IndexInstanceNode.objects.get_or_create(index_template_node=index.template_root, parent=None) for template_node in index.template_root.get_children(): - index_warnings = _evaluate_index(eval_dict, document, template_node, root_instance) + index_warnings = cascade_eval(eval_dict, document, template_node, root_instance) warnings.extend(index_warnings) return warnings @@ -54,26 +51,15 @@ def delete_indexes(document): warnings = [] for index_instance in document.indexinstancenode_set.all(): - index_warnings = _remove_document_from_index_instance(document, index_instance) + index_warnings = cascade_document_remove(document, index_instance) warnings.extend(index_warnings) return warnings -def do_rebuild_all_indexes(): - fs_delete_directory_recusive() - IndexInstanceNone.objects.delete() - DocumentRenameCount.objects.delete() - for document in Document.objects.all(): - update_indexes(document) - - return [] # Warnings - None - - # Internal functions def find_lowest_available_suffix(index_instance, document): - # TODO: verify extension's role in query - index_instance_documents = DocumentRenameCount.objects.filter(index_instance_node=index_instance)#.filter(document__file_extension=document.file_extension) + index_instance_documents = DocumentRenameCount.objects.filter(index_instance_node=index_instance) files_list = [] for index_instance_document in index_instance_documents: files_list.append(assemble_suffixed_filename(index_instance_document.document.file_filename, index_instance_document.suffix)) @@ -85,7 +71,7 @@ def find_lowest_available_suffix(index_instance, document): raise MaxSuffixCountReached(ugettext(u'Maximum suffix (%s) count reached.') % MAX_SUFFIX_COUNT) -def _evaluate_index(eval_dict, document, template_node, parent_index_instance=None): +def cascade_eval(eval_dict, document, template_node, parent_index_instance=None): """ Evaluate an enabled index expression and update or create all the related index instances also recursively calling itself to evaluate @@ -101,7 +87,7 @@ def _evaluate_index(eval_dict, document, template_node, parent_index_instance=No index_instance.parent = parent_index_instance index_instance.save() #if created: - #fs_create_index_directory(index_instance) + fs_create_index_directory(index_instance) if template_node.link_documents: suffix = find_lowest_available_suffix(index_instance, document) document_count = DocumentRenameCount( @@ -111,11 +97,11 @@ def _evaluate_index(eval_dict, document, template_node, parent_index_instance=No ) document_count.save() - #fs_create_document_link(index_instance, document, suffix) + fs_create_document_link(index_instance, document, suffix) index_instance.documents.add(document) for child in template_node.get_children(): - children_warnings = _evaluate_index( + children_warnings = cascade_eval( eval_dict, document, child, index_instance ) warnings.extend(children_warnings) @@ -130,7 +116,7 @@ def _evaluate_index(eval_dict, document, template_node, parent_index_instance=No return warnings -def _remove_document_from_index_instance(document, index_instance): +def cascade_document_remove(document, index_instance): """ Delete a documents reference from an index instance and call itself recusively deleting documents and empty index instances up to the @@ -139,16 +125,16 @@ def _remove_document_from_index_instance(document, index_instance): warnings = [] try: document_rename_count = DocumentRenameCount.objects.get(index_instance_node=index_instance, document=document) - #fs_delete_document_link(index_instance, document, document_rename_count.suffix) + fs_delete_document_link(index_instance, document, document_rename_count.suffix) document_rename_count.delete() index_instance.documents.remove(document) if index_instance.documents.count() == 0 and index_instance.get_children().count() == 0: # if there are no more documents and no children, delete # node and check parent for the same conditions parent = index_instance.parent - #fs_delete_index_directory(index_instance) + fs_delete_index_directory(index_instance) index_instance.delete() - parent_warnings = _remove_document_from_index_instance( + parent_warnings = cascade_document_remove( document, parent ) warnings.extend(parent_warnings) diff --git a/apps/document_indexing/forms.py b/apps/document_indexing/forms.py index e9224b9ab0..ae42376d6f 100644 --- a/apps/document_indexing/forms.py +++ b/apps/document_indexing/forms.py @@ -22,6 +22,6 @@ class IndexTemplateNodeForm(forms.ModelForm): super(IndexTemplateNodeForm, self).__init__(*args, **kwargs) self.fields['index'].widget = forms.widgets.HiddenInput() self.fields['parent'].widget = forms.widgets.HiddenInput() - + class Meta: model = IndexTemplateNode diff --git a/apps/document_indexing/tools.py b/apps/document_indexing/tools.py new file mode 100644 index 0000000000..07e62c83ce --- /dev/null +++ b/apps/document_indexing/tools.py @@ -0,0 +1,17 @@ +from __future__ import absolute_import + +from documents.models import Document + +from .models import IndexInstanceNode, DocumentRenameCount +from .filesystem import fs_delete_directory_recusive +from .api import update_indexes + + +def do_rebuild_all_indexes(): + fs_delete_directory_recusive() + IndexInstanceNode.objects.delete() + DocumentRenameCount.objects.delete() + for document in Document.objects.all(): + update_indexes(document) + + return [] # Warnings - None diff --git a/apps/document_indexing/urls.py b/apps/document_indexing/urls.py index ecb7ffbeda..099f0f3afe 100644 --- a/apps/document_indexing/urls.py +++ b/apps/document_indexing/urls.py @@ -13,7 +13,7 @@ urlpatterns = patterns('document_indexing.views', url(r'^index/list/$', 'index_list', (), 'index_list'), url(r'^instance/node/(?P\d+)/$', 'index_instance_node_view', (), 'index_instance_node_view'), - + url(r'^rebuild/all/$', 'rebuild_index_instances', (), 'rebuild_index_instances'), url(r'^list/for/document/(?P\d+)/$', 'document_index_list', (), 'document_index_list'), ) diff --git a/apps/document_indexing/views.py b/apps/document_indexing/views.py index 2e3f02a57b..d44c5d105e 100644 --- a/apps/document_indexing/views.py +++ b/apps/document_indexing/views.py @@ -7,7 +7,6 @@ from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.contrib import messages -#from django.utils.safestring import mark_safe from django.core.urlresolvers import reverse from django.utils.html import conditional_escape, mark_safe from django.core.exceptions import PermissionDenied @@ -18,12 +17,12 @@ from documents.models import Document from documents.views import document_list from common.utils import encapsulate from acls.utils import apply_default_acls +from acls.models import AccessEntry from .forms import IndexForm, IndexTemplateNodeForm from .models import (Index, IndexTemplateNode, IndexInstanceNode) -from .api import do_rebuild_all_indexes -from .widgets import (index_instance_item_link, get_instance_link, - get_breadcrumbs) +from .tools import do_rebuild_all_indexes +from .widgets import (index_instance_item_link, get_breadcrumbs) from .permissions import (PERMISSION_DOCUMENT_INDEXING_VIEW, PERMISSION_DOCUMENT_INDEXING_REBUILD_INDEXES, PERMISSION_DOCUMENT_INDEXING_SETUP, @@ -32,6 +31,7 @@ from .permissions import (PERMISSION_DOCUMENT_INDEXING_VIEW, PERMISSION_DOCUMENT_INDEXING_DELETE ) + # Setup views def index_setup_list(request): context = { @@ -41,7 +41,7 @@ def index_setup_list(request): 'extra_columns': [ {'name': _(u'name'), 'attribute': 'name'}, {'name': _(u'title'), 'attribute': 'title'}, - ] + ] } queryset = Index.objects.all()