コード例 #1
0
ファイル: dpsearch.py プロジェクト: kcl-ddh/digipal
    def search(self):
        from digipal.views.faceted_search import faceted_search
        cts = faceted_search.get_types(None)

        class Req(object):

            def __init__(self):
                self.META = {}
                self.GET = {}
                self.REQUEST = self.GET
                self.user = None

            def set_user(self, name):
                from django.contrib.auth.models import User
                self.user = User.objects.filter(username=name).first() or None

            def set_query_string(self, query_string):
                self.META['QUERY_STRING'] = query_string
                if query_string:
                    for pair in query_string.split('&'):
                        parts = pair.split('=')
                        if len(parts) == 2:
                            self.GET[parts[0]] = parts[1]

        request = Req()
        request.set_user(self.options['user'])
        request.set_query_string(self.options['qs'])

        for ct in faceted_search.get_types(None):
            if ct.get_key() == self.options['index_filter']:
                records = ct.get_requested_records(request)

                print '%s records found' % len(records)
                for record in records:
                    print record.id, repr(record)
コード例 #2
0
    def search(self):
        from digipal.views.faceted_search import faceted_search
        cts = faceted_search.get_types(None)

        class Req(object):
            def __init__(self):
                self.META = {}
                self.GET = {}
                self.REQUEST = self.GET
                self.user = None

            def set_user(self, name):
                from django.contrib.auth.models import User
                self.user = User.objects.filter(username=name).first() or None

            def set_query_string(self, query_string):
                self.META['QUERY_STRING'] = query_string
                if query_string:
                    for pair in query_string.split('&'):
                        parts = pair.split('=')
                        if len(parts) == 2:
                            self.GET[parts[0]] = parts[1]

        request = Req()
        request.set_user(self.options['user'])
        request.set_query_string(self.options['qs'])

        for ct in faceted_search.get_types(None):
            if ct.get_key() == self.options['index_filter']:
                records = ct.get_requested_records(request)

                print '%s records found' % len(records)
                for record in records:
                    print record.id, repr(record)
コード例 #3
0
ファイル: search_indexer.py プロジェクト: kcl-ddh/digipal
    def build_indexes(self, index_filter=[]):
        """ Rebuild indexes based on the keys in index_filter. All if index_filter is empty"""
        self.indexable_types = []
        for ct in faceted_search.get_types(True):
            if not index_filter or ct.key in index_filter:
                self.indexable_types.append(ct)

        self.write_state_initial()
        for ct in self.indexable_types:
            self.write_state_update(ct, 0.001)

            self.create_index_schema(ct)
            self.populate_index(ct)
            self.optimize_index(ct)

            self.write_state_update(ct, 1.0)
コード例 #4
0
ファイル: search_indexer.py プロジェクト: suzypiat/digipal
    def build_indexes(self, index_filter=[]):
        ''' Rebuild indexes based on the keys in index_filter. All if index_filter is empty'''
        self.indexable_types = []
        for ct in faceted_search.get_types(True):
            if not index_filter or ct.key in index_filter:
                self.indexable_types.append(ct)

        self.write_state_initial()
        for ct in self.indexable_types:
            self.write_state_update(ct, 0.001)

            self.create_index_schema(ct)
            self.populate_index(ct)
            self.optimize_index(ct)

            self.write_state_update(ct, 1.0)
コード例 #5
0
ファイル: search.py プロジェクト: kcl-ddh/digipal
def search_index_view(request):
    context = {'indexes': OrderedDict()}

    '''
    todo
    DONE reindex selected indexes in background
    . show when indexer is working
    . lock form (if working)
    . show last time indexer started (if working)
    . ajaxify
    . vue.js?
    '''

    from digipal.views.faceted_search import faceted_search
    from digipal.utils import get_all_files_under
    from datetime import datetime
    from digipal.views.faceted_search.search_indexer import SearchIndexer

    indexer = SearchIndexer()

    content_types = faceted_search.get_types(True)

    # process request
    action = request.POST.get('action', '')
    reindexes = []

    if action == 'cancel':
        context['indexing'] = indexer.read_state()
        if context['indexing']:
            import signal
            pid = context['indexing']['pid']
            # kill process
            try:
                res = os.kill(pid, signal.SIGKILL)
            except OSError, e:
                # Process doesn't exist
                if e.errno == 3:
                    pass
            # reset state
            indexer.clear_state()
コード例 #6
0
def search_index_view(request):
    context = {'indexes': OrderedDict()}
    '''
    todo
    DONE reindex selected indexes in background
    . show when indexer is working
    . lock form (if working)
    . show last time indexer started (if working)
    . ajaxify
    . vue.js?
    '''

    from digipal.views.faceted_search import faceted_search
    from digipal.utils import get_all_files_under
    from datetime import datetime
    from digipal.views.faceted_search.search_indexer import SearchIndexer

    indexer = SearchIndexer()

    content_types = faceted_search.get_types(True)

    # process request
    action = request.POST.get('action', '')
    reindexes = []

    if action == 'cancel':
        context['indexing'] = indexer.read_state()
        if context['indexing']:
            import signal
            pid = context['indexing']['pid']
            # kill process
            try:
                res = os.kill(pid, signal.SIGKILL)
            except OSError, e:
                # Process doesn't exist
                if e.errno == 3:
                    pass
            # reset state
            indexer.clear_state()
コード例 #7
0
ファイル: search.py プロジェクト: kcl-ddh/digipal
def search_index_view(request):
    context = {"indexes": SortedDict()}

    """
    todo
    DONE reindex selected indexes in background
    . show when indexer is working
    . lock form (if working)
    . show last time indexer started (if working)
    . ajaxify
    . vue.js?
    """

    from digipal.views.faceted_search import faceted_search
    from digipal.utils import get_all_files_under
    from datetime import datetime
    from digipal.views.faceted_search.search_indexer import SearchIndexer

    indexer = SearchIndexer()

    content_types = faceted_search.get_types(True)

    # process request
    action = request.POST.get("action", "")
    reindexes = []
    if action == "reindex":
        for ct in content_types:
            if request.POST.get("select-%s" % ct.key):
                reindexes.append(ct.key)

        if reindexes:
            dputils.call_management_command("dpsearch", "index_facets", **{"if": ",".join(reindexes)})
            context["indexing"] = indexer.get_state_initial(reindexes)
    if not "indexing" in context:
        context["indexing"] = indexer.read_state()

    context["running"] = context["indexing"] and context["indexing"]["progress"] < 1.0
    now = datetime.now()
    if context["indexing"] and (
        not context["running"] and ((now - context["indexing"]["updated"]).total_seconds() > (60 * 10))
    ):
        context["indexing"] = None

    # read the index stats
    for ct in content_types:
        info = {"date": 0, "size": 0}
        context["indexes"][ct.key] = {
            "object": ct,
            "info": info,
            "indexing": context["indexing"]["indexes"].get(ct.key, None) if context["indexing"] else None,
        }

        for afile in get_all_files_under(ct.get_whoosh_index_path(), file_types="f"):
            info["size"] += os.path.getsize(afile)
            info["date"] = max(info["date"], os.path.getmtime(afile))

        info["date"] = datetime.fromtimestamp(info["date"])
        info["size"] = int(info["size"])

    context["title"] = "Search Indexer"

    template = "search/search_index.html"
    if request.is_ajax():
        template = "search/search_index_fragment.html"

    ret = render_to_response(template, context, context_instance=RequestContext(request))
    return ret