From 85ebf42a7989f5e0a2cf2868a541d5868f825e87 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 14 Sep 2012 02:00:59 -0400 Subject: [PATCH] Update and enable the dynamic search app --- apps/dynamic_search/__init__.py | 40 ++++---------------------------- apps/dynamic_search/icons.py | 6 +++++ apps/dynamic_search/jobs.py | 27 +++++++++++++++++++++ apps/dynamic_search/links.py | 12 ++++++++++ apps/dynamic_search/post_init.py | 14 +++++++++++ apps/dynamic_search/registry.py | 33 ++++++++++++-------------- settings.py | 3 +-- urls.py | 2 +- 8 files changed, 80 insertions(+), 57 deletions(-) create mode 100644 apps/dynamic_search/icons.py create mode 100644 apps/dynamic_search/jobs.py create mode 100644 apps/dynamic_search/links.py create mode 100644 apps/dynamic_search/post_init.py diff --git a/apps/dynamic_search/__init__.py b/apps/dynamic_search/__init__.py index 410d6aefff..7534a4da88 100644 --- a/apps/dynamic_search/__init__.py +++ b/apps/dynamic_search/__init__.py @@ -5,27 +5,15 @@ import logging from django.utils.translation import ugettext_lazy as _ from django.dispatch import receiver -from django.core.management import call_command - from navigation.api import register_sidebar_template, bind_links, Link from documents.models import Document -from scheduler.api import LocalScheduler from signaler.signals import post_update_index, pre_update_index -from lock_manager import Lock, LockError from .models import IndexableObject +from .links import search, search_advanced, search_again logger = logging.getLogger(__name__) -search = Link(text=_(u'search'), view='search', sprite='zoom') -search_advanced = Link(text=_(u'advanced search'), view='search_advanced', sprite='zoom_in') -search_again = Link(text=_(u'search again'), view='search_again', sprite='arrow_undo') - -register_sidebar_template(['search'], 'search_help.html') -register_sidebar_template(['search'], 'recent_searches.html') - -Document.add_to_class('mark_indexable', lambda obj: IndexableObject.objects.mark_indexable(obj)) - @receiver(pre_update_index, dispatch_uid='scheduler_shutdown_pre_update_index') def scheduler_shutdown_pre_update_index(sender, mayan_runtime, **kwargs): @@ -37,30 +25,10 @@ def scheduler_shutdown_pre_update_index(sender, mayan_runtime, **kwargs): LocalScheduler.shutdown_all() -def search_index_update(): - lock_id = u'search_index_update' - try: - logger.debug('trying to acquire lock: %s' % lock_id) - lock = Lock.acquire_lock(lock_id) - logger.debug('acquired lock: %s' % lock_id) - - logger.debug('Executing haystack\'s index update command') - call_command('update_index', '--mayan_runtime') - - lock.release() - except LockError: - logger.debug('unable to obtain lock') - pass - except Exception, instance: - logger.debug('Unhandled exception: %s' % instance) - lock.release() - pass - bind_links(['search', 'search_advanced', 'results'], [search], menu_name='form_header') bind_links(['results'], [search_again], menu_name='sidebar') -dynamic_search_scheduler = LocalScheduler('search', _(u'Search')) -dynamic_search_scheduler.add_interval_job('search_index_update', _(u'Update the search index with the most recent modified documents.'), search_index_update, seconds=INDEX_UPDATE_INTERVAL) -dynamic_search_scheduler.start() +register_sidebar_template(['search'], 'search_help.html') +register_sidebar_template(['search'], 'recent_searches.html') -# register_top_menu('search', link=Link(text=_(u'search'), view='search', sprite='zoom', children_url_regex=[r'^search/'])) +Document.add_to_class('mark_indexable', lambda obj: IndexableObject.objects.mark_indexable(obj)) diff --git a/apps/dynamic_search/icons.py b/apps/dynamic_search/icons.py new file mode 100644 index 0000000000..f71787aac5 --- /dev/null +++ b/apps/dynamic_search/icons.py @@ -0,0 +1,6 @@ +from __future__ import absolute_import + +from icons.literals import ZOOM +from icons import Icon + +icon_search = Icon(ZOOM) diff --git a/apps/dynamic_search/jobs.py b/apps/dynamic_search/jobs.py new file mode 100644 index 0000000000..f47942696a --- /dev/null +++ b/apps/dynamic_search/jobs.py @@ -0,0 +1,27 @@ +import logging + +from django.core.management import call_command + +from lock_manager import Lock, LockError + +logger = logging.getLogger(__name__) + + +def search_index_update(): + lock_id = u'search_index_update' + try: + logger.debug('trying to acquire lock: %s' % lock_id) + lock = Lock.acquire_lock(lock_id) + logger.debug('acquired lock: %s' % lock_id) + + logger.debug('Executing haystack\'s index update command') + call_command('update_index', '--mayan_runtime') + + lock.release() + except LockError: + logger.debug('unable to obtain lock') + pass + except Exception, instance: + logger.debug('Unhandled exception: %s' % instance) + lock.release() + pass diff --git a/apps/dynamic_search/links.py b/apps/dynamic_search/links.py new file mode 100644 index 0000000000..9abdf27eeb --- /dev/null +++ b/apps/dynamic_search/links.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from navigation.api import Link + +from .icons import icon_search + +menu_link = Link(text=_(u'search'), view='search', icon=icon_search, children_url_regex=[r'^search/']) +search = Link(text=_(u'search'), view='search', sprite='zoom') +search_advanced = Link(text=_(u'advanced search'), view='search_advanced', sprite='zoom_in') +search_again = Link(text=_(u'search again'), view='search_again', sprite='arrow_undo') diff --git a/apps/dynamic_search/post_init.py b/apps/dynamic_search/post_init.py new file mode 100644 index 0000000000..1ef83842b9 --- /dev/null +++ b/apps/dynamic_search/post_init.py @@ -0,0 +1,14 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from scheduler.api import LocalScheduler + +from .settings import INDEX_UPDATE_INTERVAL +from .jobs import search_index_update + + +def init_start_indexing_job(): + dynamic_search_scheduler = LocalScheduler('search', _(u'Search')) + dynamic_search_scheduler.add_interval_job('search_index_update', _(u'Update the search index with the most recent modified documents.'), search_index_update, seconds=INDEX_UPDATE_INTERVAL) + dynamic_search_scheduler.start() diff --git a/apps/dynamic_search/registry.py b/apps/dynamic_search/registry.py index edad27aa78..b8a15eddc0 100644 --- a/apps/dynamic_search/registry.py +++ b/apps/dynamic_search/registry.py @@ -2,24 +2,21 @@ from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ -#from .icons import icon_history_list -#from .links import history_list +from smart_settings import LocalScope + +from .icons import icon_search +from .links import menu_link label = _(u'Search') -#description = _(u'Handles the events registration and event logging.') +description = _(u'Handles document search and search indexing.') dependencies = ['app_registry', 'icons', 'navigation'] -#icon = icon_history_list -#tool_links = [history_list] -#- namespace=namespace, -#- name='RECENT_COUNT', -#- global_name='SEARCH_RECENT_COUNT', -#- default=5, -#- description=_(u'Maximum number of search queries to remember per user.') -#-) -#- -#-Setting( -#- namespace=namespace, -#- name='INDEX_UPDATE_INTERVAL', -#- global_name='SEARCH_INDEX_UPDATE_INTERVAL', -#- default=1800, -#- description=_(u'Interval in second on which to trigger the search index update.') +icon = icon_search +menu_links = [menu_link] +settings = [ + { + 'name': 'INDEX_UPDATE_INTERVAL', + 'default': 1800, + 'description': _(u'Interval in second on which to trigger the search index update.'), + 'scopes': [LocalScope()] + } +] diff --git a/settings.py b/settings.py index 8394b69b0a..0c67f1078e 100644 --- a/settings.py +++ b/settings.py @@ -137,7 +137,6 @@ INSTALLED_APPS = ( 'django.contrib.comments', 'django.contrib.staticfiles', # 3rd party - # South 'south', 'haystack', # Others @@ -175,7 +174,7 @@ INSTALLED_APPS = ( 'documents', 'tags', 'folders', - #'dynamic_search', + 'dynamic_search', 'document_comments', #'document_signatures', 'linking', diff --git a/urls.py b/urls.py index 3c811d7d8b..948c4c4e69 100644 --- a/urls.py +++ b/urls.py @@ -14,7 +14,7 @@ urlpatterns = patterns('', (r'^settings/', include('smart_settings.urls')), (r'^documents/', include('documents.urls')), (r'^folders/', include('folders.urls')), - #(r'^search/', include('dynamic_search.urls')), + (r'^search/', include('dynamic_search.urls')), #(r'^ocr/', include('ocr.urls')), (r'^tags/', include('tags.urls')), (r'^comments/', include('document_comments.urls')),