Initial updates to convert document indexing app to new registry and icon system
This commit is contained in:
@@ -6,16 +6,14 @@ from django.db.models.signals import post_save, pre_delete, post_delete
|
||||
from django.dispatch import receiver
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from app_registry.models import App
|
||||
from documents.models import Document
|
||||
from maintenance.api import MaintenanceNamespace
|
||||
#from maintenance.api import MaintenanceNamespace
|
||||
from metadata.models import DocumentMetadata
|
||||
from navigation.api import (register_top_menu, register_sidebar_template,
|
||||
bind_links, Link)
|
||||
from project_setup.api import register_setup
|
||||
from navigation.api import (register_sidebar_template,
|
||||
bind_links)
|
||||
|
||||
from .api import update_indexes, delete_indexes
|
||||
from .links import (index_setup, index_setup_list, index_setup_create,
|
||||
from .links import (index_setup_list, index_setup_create,
|
||||
index_setup_edit, index_setup_delete, index_setup_view,
|
||||
template_node_create, template_node_edit, template_node_delete,
|
||||
index_parent, document_index_list, rebuild_index_instances,
|
||||
@@ -24,10 +22,8 @@ from .models import (Index, IndexTemplateNode, IndexInstanceNode)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
register_top_menu('indexes', link=Link(text=_('indexes'), sprite='tab', view='index_list', children_view_regex=[r'^index_[i,l]']))
|
||||
|
||||
namespace = MaintenanceNamespace(_(u'indexes'))
|
||||
namespace.create_tool(rebuild_index_instances)
|
||||
#namespace = MaintenanceNamespace(_(u'indexes'))
|
||||
#namespace.create_tool(rebuild_index_instances)
|
||||
|
||||
register_sidebar_template(['index_instance_list'], 'indexing_help.html')
|
||||
|
||||
@@ -37,8 +33,6 @@ bind_links([Index, 'index_setup_list', 'index_setup_create', 'template_node_edit
|
||||
bind_links([Index], [index_setup_edit, index_setup_delete, index_setup_view, index_setup_document_types])
|
||||
bind_links([IndexTemplateNode], [template_node_create, template_node_edit, template_node_delete])
|
||||
|
||||
register_setup(index_setup)
|
||||
|
||||
|
||||
@receiver(post_save, dispatch_uid='document_index_update', sender=Document)
|
||||
def document_index_update(sender, **kwargs):
|
||||
@@ -70,12 +64,3 @@ def document_metadata_index_delete(sender, **kwargs):
|
||||
def document_metadata_index_post_delete(sender, **kwargs):
|
||||
# TODO: save result in index log
|
||||
update_indexes(kwargs['instance'].document)
|
||||
|
||||
try:
|
||||
app = App.register('document_indexing', _(u'Document indexing'))
|
||||
except App.UnableToRegister:
|
||||
pass
|
||||
else:
|
||||
app.set_dependencies(['app_registry', 'documents'])
|
||||
#aelse:
|
||||
# AppBackup(app, [ModelBackup()])
|
||||
|
||||
@@ -8,18 +8,18 @@ from django.db.models import Q
|
||||
from metadata.classes import MetadataClass
|
||||
|
||||
from .models import Index, IndexInstanceNode, DocumentRenameCount
|
||||
from .conf.settings import (AVAILABLE_INDEXING_FUNCTIONS,
|
||||
MAX_SUFFIX_COUNT, SLUGIFY_PATHS)
|
||||
#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, assemble_suffixed_filename)
|
||||
from .exceptions import MaxSuffixCountReached
|
||||
|
||||
if SLUGIFY_PATHS == False:
|
||||
# Do not slugify path or filenames and extensions
|
||||
SLUGIFY_FUNCTION = lambda x: x
|
||||
else:
|
||||
SLUGIFY_FUNCTION = slugify
|
||||
#if SLUGIFY_PATHS == False:
|
||||
# # Do not slugify path or filenames and extensions
|
||||
# SLUGIFY_FUNCTION = lambda x: x
|
||||
#else:
|
||||
SLUGIFY_FUNCTION = slugify
|
||||
|
||||
|
||||
# External functions
|
||||
|
||||
@@ -1,52 +1 @@
|
||||
"""Configuration options for the document_indexing app"""
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from common.utils import proper_name
|
||||
from smart_settings.api import Setting, SettingNamespace
|
||||
|
||||
available_indexing_functions = {
|
||||
'proper_name': proper_name
|
||||
}
|
||||
|
||||
namespace = SettingNamespace('document_indexing', _(u'Indexing'), module='document_indexing.conf.settings', sprite='tab')
|
||||
|
||||
# Definition
|
||||
|
||||
Setting(
|
||||
namespace=namespace,
|
||||
name='AVAILABLE_INDEXING_FUNCTIONS',
|
||||
global_name='DOCUMENT_INDEXING_AVAILABLE_INDEXING_FUNCTIONS',
|
||||
default=available_indexing_functions,
|
||||
)
|
||||
|
||||
Setting(
|
||||
namespace=namespace,
|
||||
name='SUFFIX_SEPARATOR',
|
||||
global_name='DOCUMENT_INDEXING_SUFFIX_SEPARATOR',
|
||||
default=u'_',
|
||||
)
|
||||
|
||||
# Filesystem serving
|
||||
|
||||
Setting(
|
||||
namespace=namespace,
|
||||
name='SLUGIFY_PATHS',
|
||||
global_name='DOCUMENT_INDEXING_FILESYSTEM_SLUGIFY_PATHS',
|
||||
default=False,
|
||||
)
|
||||
|
||||
Setting(
|
||||
namespace=namespace,
|
||||
name='MAX_SUFFIX_COUNT',
|
||||
global_name='DOCUMENT_INDEXING_FILESYSTEM_MAX_SUFFIX_COUNT',
|
||||
default=1000,
|
||||
)
|
||||
|
||||
Setting(
|
||||
namespace=namespace,
|
||||
name='FILESYSTEM_SERVING',
|
||||
global_name='DOCUMENT_INDEXING_FILESYSTEM_SERVING',
|
||||
default={},
|
||||
description=_(u'A dictionary that maps the index name and where on the filesystem that index will be mirrored.'),
|
||||
)
|
||||
|
||||
@@ -5,7 +5,7 @@ import os
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from .conf.settings import (FILESYSTEM_SERVING, SUFFIX_SEPARATOR)
|
||||
#from .conf.settings import (FILESYSTEM_SERVING, SUFFIX_SEPARATOR)
|
||||
|
||||
|
||||
def assemble_suffixed_filename(filename, suffix=0):
|
||||
|
||||
24
apps/document_indexing/icons.py
Normal file
24
apps/document_indexing/icons.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from icons.literals import (FOLDER_PAGE, TAB, TAB_ADD, TAB_EDIT,
|
||||
TAB_DELETE, TAB_VIEW, INDEX, NODE, TEXTFIELD, TEXTFIELD_DELETE,
|
||||
ARROW_UP)
|
||||
from icons import Icon
|
||||
|
||||
icon_index_setup = Icon(TAB)
|
||||
icon_index_setup_list = Icon(TAB)
|
||||
icon_index_setup_create = Icon(TAB_ADD)
|
||||
icon_index_setup_edit = Icon(TAB_EDIT)
|
||||
icon_index_setup_delete = Icon(TAB_DELETE)
|
||||
icon_index_setup_view = Icon(TAB_VIEW)
|
||||
icon_index_setup_document_types = Icon(INDEX)
|
||||
|
||||
icon_template_node_create = Icon(NODE)
|
||||
icon_template_node_edit = Icon(TEXTFIELD)
|
||||
icon_template_node_delete = Icon(TEXTFIELD_DELETE)
|
||||
|
||||
icon_index_list = Icon(TAB)
|
||||
icon_index_parent = Icon(ARROW_UP)
|
||||
icon_document_index_list = Icon(FOLDER_PAGE)
|
||||
|
||||
icon_rebuild_index_instances = Icon(FOLDER_PAGE)
|
||||
@@ -12,6 +12,11 @@ from .permissions import (PERMISSION_DOCUMENT_INDEXING_VIEW,
|
||||
PERMISSION_DOCUMENT_INDEXING_EDIT,
|
||||
PERMISSION_DOCUMENT_INDEXING_DELETE
|
||||
)
|
||||
from .icons import (icon_index_setup, icon_index_setup_list, icon_index_setup_create,
|
||||
icon_index_setup_edit, icon_index_setup_delete, icon_index_setup_view,
|
||||
icon_index_setup_document_types, icon_template_node_create,
|
||||
icon_template_node_edit, icon_template_node_delete, icon_index_list,
|
||||
icon_index_parent, icon_document_index_list, icon_rebuild_index_instances)
|
||||
|
||||
|
||||
def is_root_node(context):
|
||||
@@ -21,21 +26,23 @@ def is_root_node(context):
|
||||
def is_not_instance_root_node(context):
|
||||
return context['object'].parent is not None
|
||||
|
||||
index_setup = Link(text=_(u'indexes'), view='index_setup_list', icon='tab.png', permissions=[PERMISSION_DOCUMENT_INDEXING_SETUP]) # children_view_regex=[r'^index_setup', r'^template_node'])
|
||||
index_setup_list = Link(text=_(u'index list'), view='index_setup_list', sprite='tab', permissions=[PERMISSION_DOCUMENT_INDEXING_SETUP])
|
||||
index_setup_create = Link(text=_(u'create index'), view='index_setup_create', sprite='tab_add', permissions=[PERMISSION_DOCUMENT_INDEXING_CREATE])
|
||||
index_setup_edit = Link(text=_(u'edit'), view='index_setup_edit', args='index.pk', sprite='tab_edit', permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT])
|
||||
index_setup_delete = Link(text=_(u'delete'), view='index_setup_delete', args='index.pk', sprite='tab_delete', permissions=[PERMISSION_DOCUMENT_INDEXING_DELETE])
|
||||
index_setup_view = Link(text=_(u'tree template'), view='index_setup_view', args='index.pk', sprite='textfield', permissions=[PERMISSION_DOCUMENT_INDEXING_SETUP])
|
||||
index_setup_document_types = Link(text=_(u'document types'), view='index_setup_document_types', args='index.pk', sprite='layout', permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT]) # children_view_regex=[r'^index_setup', r'^template_node'])
|
||||
|
||||
template_node_create = Link(text=_(u'new child node'), view='template_node_create', args='node.pk', sprite='textfield_add', permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT])
|
||||
template_node_edit = Link(text=_(u'edit'), view='template_node_edit', args='node.pk', sprite='textfield', permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT], conditional_disable=is_root_node)
|
||||
template_node_delete = Link(text=_(u'delete'), view='template_node_delete', args='node.pk', sprite='textfield_delete', permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT], conditional_disable=is_root_node)
|
||||
link_menu = Link(text=_('indexes'), icon=icon_index_setup, view='index_list', children_view_regex=[r'^index_[i,l]'])
|
||||
index_setup = Link(text=_(u'indexes'), view='index_setup_list', icon=icon_index_setup, permissions=[PERMISSION_DOCUMENT_INDEXING_SETUP]) # children_view_regex=[r'^index_setup', r'^template_node'])
|
||||
index_setup_list = Link(text=_(u'index list'), view='index_setup_list', icon=icon_index_setup_list, permissions=[PERMISSION_DOCUMENT_INDEXING_SETUP])
|
||||
index_setup_create = Link(text=_(u'create index'), view='index_setup_create', icon=icon_index_setup_create, permissions=[PERMISSION_DOCUMENT_INDEXING_CREATE])
|
||||
index_setup_edit = Link(text=_(u'edit'), view='index_setup_edit', args='index.pk', icon=icon_index_setup_edit, permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT])
|
||||
index_setup_delete = Link(text=_(u'delete'), view='index_setup_delete', args='index.pk', icon=icon_index_setup_delete, permissions=[PERMISSION_DOCUMENT_INDEXING_DELETE])
|
||||
index_setup_view = Link(text=_(u'tree template'), view='index_setup_view', args='index.pk', icon=icon_index_setup_view, permissions=[PERMISSION_DOCUMENT_INDEXING_SETUP])
|
||||
index_setup_document_types = Link(text=_(u'document types'), view='index_setup_document_types', args='index.pk', icon=icon_index_setup_document_types, permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT]) # children_view_regex=[r'^index_setup', r'^template_node'])
|
||||
|
||||
index_list = Link(text=_(u'index list'), view='index_list', sprite='tab', permissions=[PERMISSION_DOCUMENT_INDEXING_VIEW])
|
||||
template_node_create = Link(text=_(u'new child node'), view='template_node_create', args='node.pk', icon=icon_template_node_create, permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT])
|
||||
template_node_edit = Link(text=_(u'edit'), view='template_node_edit', args='node.pk', icon=icon_template_node_edit, permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT], conditional_disable=is_root_node)
|
||||
template_node_delete = Link(text=_(u'delete'), view='template_node_delete', args='node.pk', icon=icon_template_node_delete, permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT], conditional_disable=is_root_node)
|
||||
|
||||
index_parent = Link(text=_(u'go up one level'), view='index_instance_node_view', args='object.parent.pk', sprite='arrow_up', permissions=[PERMISSION_DOCUMENT_INDEXING_VIEW], dont_mark_active=True, condition=is_not_instance_root_node)
|
||||
document_index_list = Link(text=_(u'indexes'), view='document_index_list', args='object.pk', sprite='folder_page', permissions=[PERMISSION_DOCUMENT_INDEXING_VIEW, PERMISSION_DOCUMENT_VIEW])
|
||||
index_list = Link(text=_(u'index list'), view='index_list', icon=icon_index_list, permissions=[PERMISSION_DOCUMENT_INDEXING_VIEW])
|
||||
|
||||
rebuild_index_instances = Link(text=_('rebuild indexes'), view='rebuild_index_instances', sprite='folder_page', permissions=[PERMISSION_DOCUMENT_INDEXING_REBUILD_INDEXES], description=_(u'Deletes and creates from scratch all the document indexes.'))
|
||||
index_parent = Link(text=_(u'go up one level'), view='index_instance_node_view', args='object.parent.pk', icon=icon_index_parent, permissions=[PERMISSION_DOCUMENT_INDEXING_VIEW], dont_mark_active=True, condition=is_not_instance_root_node)
|
||||
document_index_list = Link(text=_(u'indexes'), view='document_index_list', args='object.pk', icon=icon_document_index_list, permissions=[PERMISSION_DOCUMENT_INDEXING_VIEW, PERMISSION_DOCUMENT_VIEW])
|
||||
|
||||
rebuild_index_instances = Link(text=_('rebuild indexes'), view='rebuild_index_instances', icon=icon_rebuild_index_instances, permissions=[PERMISSION_DOCUMENT_INDEXING_REBUILD_INDEXES], description=_(u'Deletes and creates from scratch all the document indexes.'))
|
||||
|
||||
@@ -8,10 +8,12 @@ from mptt.fields import TreeForeignKey
|
||||
|
||||
from documents.models import Document, DocumentType
|
||||
|
||||
from .conf.settings import AVAILABLE_INDEXING_FUNCTIONS
|
||||
#from .conf.settings import AVAILABLE_INDEXING_FUNCTIONS
|
||||
|
||||
available_indexing_functions_string = (_(u'Available functions: %s') % u','.join([u'%s()' % name for name, function in AVAILABLE_INDEXING_FUNCTIONS.items()])) if AVAILABLE_INDEXING_FUNCTIONS else u''
|
||||
#available_indexing_functions_string = (_(u'Available functions: %s') % u','.join([u'%s()' % name for name, function in AVAILABLE_INDEXING_FUNCTIONS.items()])) if AVAILABLE_INDEXING_FUNCTIONS else u''
|
||||
|
||||
#TODO: fix settings
|
||||
#TODO: add natural key support
|
||||
|
||||
class Index(models.Model):
|
||||
name = models.CharField(unique=True, max_length=64, verbose_name=_(u'name'), help_text=_(u'Internal name used to reference this index.'))
|
||||
|
||||
68
apps/document_indexing/registry.py
Normal file
68
apps/document_indexing/registry.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from .icons import icon_index_setup
|
||||
from .links import index_setup, link_menu
|
||||
|
||||
label = _(u'Document indexing')
|
||||
description = _(u'Handles organization indexing for documents.')
|
||||
dependencies = ['app_registry', 'icons', 'navigation', 'metadata']
|
||||
icon = icon_index_setup
|
||||
setup_links = [index_setup]
|
||||
menu_links = [link_menu]
|
||||
bootstrap_models = ['index', 'indextemplatenode']
|
||||
|
||||
"""
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from common.utils import proper_name
|
||||
from smart_settings.api import Setting, SettingNamespace
|
||||
|
||||
available_indexing_functions = {
|
||||
'proper_name': proper_name
|
||||
}
|
||||
|
||||
namespace = SettingNamespace('document_indexing', _(u'Indexing'), module='document_indexing.conf.settings', sprite='tab')
|
||||
|
||||
# Definition
|
||||
|
||||
Setting(
|
||||
namespace=namespace,
|
||||
name='AVAILABLE_INDEXING_FUNCTIONS',
|
||||
global_name='DOCUMENT_INDEXING_AVAILABLE_INDEXING_FUNCTIONS',
|
||||
default=available_indexing_functions,
|
||||
)
|
||||
|
||||
Setting(
|
||||
namespace=namespace,
|
||||
name='SUFFIX_SEPARATOR',
|
||||
global_name='DOCUMENT_INDEXING_SUFFIX_SEPARATOR',
|
||||
default=u'_',
|
||||
)
|
||||
|
||||
# Filesystem serving
|
||||
|
||||
Setting(
|
||||
namespace=namespace,
|
||||
name='SLUGIFY_PATHS',
|
||||
global_name='DOCUMENT_INDEXING_FILESYSTEM_SLUGIFY_PATHS',
|
||||
default=False,
|
||||
)
|
||||
|
||||
Setting(
|
||||
namespace=namespace,
|
||||
name='MAX_SUFFIX_COUNT',
|
||||
global_name='DOCUMENT_INDEXING_FILESYSTEM_MAX_SUFFIX_COUNT',
|
||||
default=1000,
|
||||
)
|
||||
|
||||
Setting(
|
||||
namespace=namespace,
|
||||
name='FILESYSTEM_SERVING',
|
||||
global_name='DOCUMENT_INDEXING_FILESYSTEM_SERVING',
|
||||
default={},
|
||||
description=_(u'A dictionary that maps the index name and where on the filesystem that index will be mirrored.'),
|
||||
)
|
||||
"""
|
||||
@@ -181,7 +181,7 @@ INSTALLED_APPS = (
|
||||
'ocr',
|
||||
'main',
|
||||
#'installation',
|
||||
#'document_indexing',
|
||||
'document_indexing',
|
||||
#'sources',
|
||||
#'mailer',
|
||||
#'document_acls',
|
||||
|
||||
2
urls.py
2
urls.py
@@ -21,7 +21,7 @@ urlpatterns = patterns('',
|
||||
(r'^user_management/', include('user_management.urls')),
|
||||
(r'^metadata/', include('metadata.urls')),
|
||||
(r'^linking/', include('linking.urls')),
|
||||
#(r'^document_indexing/', include('document_indexing.urls')),
|
||||
(r'^document_indexing/', include('document_indexing.urls')),
|
||||
(r'^history/', include('history.urls')),
|
||||
(r'^converter/', include('converter.urls')),
|
||||
#(r'^sources/', include('sources.urls')),
|
||||
|
||||
Reference in New Issue
Block a user