Update and enable the dynamic search app
This commit is contained in:
@@ -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))
|
||||
|
||||
6
apps/dynamic_search/icons.py
Normal file
6
apps/dynamic_search/icons.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from icons.literals import ZOOM
|
||||
from icons import Icon
|
||||
|
||||
icon_search = Icon(ZOOM)
|
||||
27
apps/dynamic_search/jobs.py
Normal file
27
apps/dynamic_search/jobs.py
Normal file
@@ -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
|
||||
12
apps/dynamic_search/links.py
Normal file
12
apps/dynamic_search/links.py
Normal file
@@ -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')
|
||||
14
apps/dynamic_search/post_init.py
Normal file
14
apps/dynamic_search/post_init.py
Normal file
@@ -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()
|
||||
@@ -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()]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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',
|
||||
|
||||
2
urls.py
2
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')),
|
||||
|
||||
Reference in New Issue
Block a user