コード例 #1
0
    def results(self, b_size=5, b_start=0):
        """Apply a custom query over the collection results."""
        custom_query = {}
        b_start = int(b_start)

        text = self.request.form.get('SearchableText', '')
        if text:
            custom_query['SearchableText'] = quote_chars(text)

        created = self.request.form.get('created', {})
        if self.valid_period(created):
            custom_query['created'] = created

        sort_on = self.request.form.get('sort_on', '')
        if sort_on not in ('', 'Date', 'sortable_title'):
            sort_on = ''
        sort_order = 'reverse' if sort_on == 'Date' else 'ascending'
        custom_query['sort_order'] = sort_order

        results = self.context.results(
            b_start=b_start,
            b_size=b_size,
            custom_query=custom_query,
            sort_on=sort_on,
        )
        return results
コード例 #2
0
    def results(self, b_size=5, b_start=0):
        """Apply a custom query over the collection results."""
        custom_query = {}
        b_start = int(b_start)

        text = self.request.form.get('SearchableText', '')
        if text:
            custom_query['SearchableText'] = quote_chars(text)

        created = self.request.form.get('created', {})
        if self.valid_period(created):
            custom_query['created'] = created

        sort_on = self.request.form.get('sort_on', '')
        if sort_on not in ('', 'Date', 'sortable_title'):
            sort_on = ''
        sort_order = 'reverse' if sort_on == 'Date' else 'ascending'
        custom_query['sort_order'] = sort_order

        results = self.context.results(
            b_start=b_start,
            b_size=b_size,
            custom_query=custom_query,
            sort_on=sort_on,
        )
        return results
コード例 #3
0
    def results(self, batch=True, b_size=16, b_start=0):
        """Return latests media on the site"""
        query = {
            'sort_on': 'Date',
            'sort_order': 'reverse',
        }
        if batch:
            b_start = int(b_start)

        text = self.request.form.get('SearchableText', '')
        if text:
            query['SearchableText'] = quote_chars(text)

        portal_type = self.request.form.get('portal_type', '')
        portal_type = self.filter_types(portal_type)
        query['portal_type'] = self.filter_types(portal_type)

        created = self.request.form.get('created', {})
        if self.valid_period(created):
            query['created'] = created

        # TODO: include results in current context only
        results = api.content.find(**query)
        results = IContentListing(results)
        if batch:
            results = Batch(results, b_size, b_start)
        return results
コード例 #4
0
ファイル: __init__.py プロジェクト: lmu/lmu.policy.base
 def searchterms(self, quote=True):
     q = self.request.get('q', '')
     for char in ('?', '-', '+', '*'):
         q = q.replace(char, ' ')
     q = quote_chars(q)
     if quote:
         return url_quote_plus(q)
     return q
コード例 #5
0
    def _filter_query(self, query):
        """The _filter_query of the standard search view (plone.app.search)
        cancel the query generation if not SearchableText is given.
        In some case (for example in opengever.advancedsearch), we generate
        also searches without a searchabletext. So we temporarily fake
        the SearchableText.

        Besides that we also handle date range queries and subject queries
        separately.

        XXX This method should be removed, after the solr integration
        meta-XXX should it? now it contains custom stuff.

        """
        request = self.request
        text = query.get('SearchableText', None)
        if text is None:
            text = request.form.get('SearchableText', '')

        for key, value in request.form.items():
            self.handle_query_filter_value(query, key, value)

        if text:
            query['SearchableText'] = quote_chars(text)

        # don't filter on created at all if we want all results
        created = query.get('created')
        if created:
            if created.get('query'):
                if created['query'][0] <= EVER:
                    del query['created']

        # respect `types_not_searched` setting
        types = query.get('portal_type', [])
        if 'query' in types:
            types = types['query']
        query['portal_type'] = self.filter_types(types)
        # respect effective/expiration date
        query['show_inactive'] = False
        # respect navigation root
        if 'path' not in query:
            query['path'] = getNavigationRoot(self.context)

        # Special treatment for the Subject index
        # The index only stores unicode values, so we have to search
        # for unicode values.
        if 'Subject' in query:
            query['Subject'] = safe_unicode(query['Subject'])

        return query
コード例 #6
0
ファイル: search.py プロジェクト: lukasgraf/opengever.core
    def _filter_query(self, query):
        """The _filter_query of the standard search view (plone.app.search)
        cancel the query generation if not SearchableText is given.
        In some case (for example in opengever.advancedsearch), we generate
        also searches without a searchabletext. So we temporarily fake
        the SearchableText.

        Besides that we also handle date range queries and subject queries
        separately.

        XXX This method should be removed, after the solr integration
        meta-XXX should it? now it contains custom stuff.

        """
        request = self.request
        text = query.get('SearchableText', None)
        if text is None:
            text = request.form.get('SearchableText', '')

        for key, value in request.form.items():
            self.handle_query_filter_value(query, key, value)

        if text:
            query['SearchableText'] = quote_chars(text)

        # don't filter on created at all if we want all results
        created = query.get('created')
        if created:
            if created.get('query'):
                if created['query'][0] <= EVER:
                    del query['created']

        # respect `types_not_searched` setting
        types = query.get('portal_type', [])
        if 'query' in types:
            types = types['query']
        query['portal_type'] = self.filter_types(types)
        # respect effective/expiration date
        query['show_inactive'] = False
        # respect navigation root
        if 'path' not in query:
            query['path'] = getNavigationRoot(self.context)

        # Special treatment for the Subject index
        # The index only stores unicode values, so we have to search
        # for unicode values.
        if 'Subject' in query:
            query['Subject'] = safe_unicode(query['Subject'])

        return query
コード例 #7
0
 def _update_query(self):
     """build query from request"""
     self.query = {
         "path": self.context_path,
         "sort_on": "modified",
         "sort_order": "reverse",
     }
     self._update_query_portal_type()
     text = self.request.get('SearchableText', None)
     if text is not None:
         self.query["SearchableText"] = quote_chars(text)
     for k, v in self.request.form.items():
         if v and k in self.valid_keys:
             self.query[k] = v
     if self.query['sort_on'] == 'relevance':
         del self.query['sort_on']
コード例 #8
0
 def _update_query(self):
     """build query from request"""
     self.query = {
         "path": self.context_path,
         "sort_on": "modified",
         "sort_order": "reverse",
     }
     self._update_query_portal_type()
     text = self.request.get('SearchableText', None)
     if text is not None:
         self.query["SearchableText"] = quote_chars(text)
     for k, v in self.request.form.items():
         if v and k in self.valid_keys:
             self.query[k] = v
     if self.query['sort_on'] == 'relevance':
         del self.query['sort_on']
コード例 #9
0
    def filter_query(self, query):
        """The filter query of the standard search view (plone.app.search)
        cancel the query generation if not SearchableText is given.
        In some case (for example in opengever.advancedsearch), we generate
        also searches without a searchabletext. So we temporarily fake
        the SearchableText.

        XXX This method should be removed, after the solr integration"""

        request = self.request
        text = query.get('SearchableText', None)
        if text is None:
            text = request.form.get('SearchableText', '')

        catalog = getToolByName(self.context, 'portal_catalog')
        valid_keys = self.valid_keys + tuple(catalog.indexes())

        for k, v in request.form.items():
            if v and ((k in valid_keys) or k.startswith('facet.')) \
                    and not k.endswith('_usage'):
                if '%s_usage' % (k) in request.form.keys():
                    v = {'query': (DateTime(v[0]), DateTime(v[1])),
                         'range': 'min:max'}
                query[k] = v

        if text:
            query['SearchableText'] = quote_chars(text)

        # don't filter on created at all if we want all results
        created = query.get('created')
        if created:
            if created.get('query'):
                if created['query'][0] <= EVER:
                    del query['created']

        # respect `types_not_searched` setting
        types = query.get('portal_type', [])
        if 'query' in types:
            types = types['query']
        query['portal_type'] = self.filter_types(types)
        # respect effective/expiration date
        query['show_inactive'] = False
        # respect navigation root
        if 'path' not in query:
            query['path'] = getNavigationRoot(self.context)

        return query
コード例 #10
0
ファイル: search.py プロジェクト: andersonsmith/bika.lims
    def filter_query(self, query):
        request = self.request
        text = query.get('SearchableText', None)
        if text is None:
            text = request.form.get('SearchableText', '')
        if not text:
            # Without text, the only meaningful case is Subject
            subjects = request.form.get('Subject')
            if not subjects:
                return

        valid_keys = self.valid_keys
        for catalog_name in self.catalogs:
            catalog = getToolByName(self.context, catalog_name)
            valid_keys = valid_keys + tuple(catalog.indexes())
        valid_keys = sorted(set(valid_keys))

        for k, v in request.form.items():
            if v and ((k in valid_keys) or k.startswith('facet.')):
                query[k] = v
        if text:
            query['SearchableText'] = quote_chars(text)

        # don't filter on created at all if we want all results
        created = query.get('created')
        if created:
            if created.get('query'):
                if created['query'][0] <= EVER:
                    del query['created']

        # respect `types_not_searched` setting
        types = query.get('portal_type', [])
        if 'query' in types:
            types = types['query']
        query['portal_type'] = self.filter_types(types)
        # respect effective/expiration date
        query['show_inactive'] = False
        # respect navigation root
        if 'path' not in query:
            query['path'] = getNavigationRoot(self.context)

        return query
コード例 #11
0
def filter_query(self, query):
    request = self.request

    catalog = getToolByName(self.context, 'portal_catalog')
    valid_indexes = tuple(catalog.indexes())
    valid_keys = self.valid_keys + valid_indexes

    text = query.get('SearchableText', None)
    if text is None:
        text = request.form.get('SearchableText', '')
    if not text:
        # Without text, must provide a meaningful non-empty search
        valid = set(valid_indexes).intersection(request.form.keys()) or \
            set(valid_indexes).intersection(query.keys())
        if not valid:
            return

    for k, v in request.form.items():
        if v and ((k in valid_keys) or k.startswith('facet.')):
            query[k] = v
    if text:
        query['SearchableText'] = quote_chars(text) + '*'

    # don't filter on created at all if we want all results
    created = query.get('created')
    if created:
        if created.get('query'):
            if created['query'][0] <= EVER:
                del query['created']

    # respect `types_not_searched` setting
    types = query.get('portal_type', [])
    if 'query' in types:
        types = types['query']
    query['portal_type'] = self.filter_types(types)
    # respect effective/expiration date
    query['show_inactive'] = False
    # respect navigation root
    if 'path' not in query:
        query['path'] = getNavigationRoot(self.context)

    return query
コード例 #12
0
    def filter_query(self, query):
        request = self.request
        text = query.get('SearchableText', None)
        if text is None:
            text = request.form.get('SearchableText', '')
        if not text:
            # Without text, the only meaningful case is Subject
            subjects = request.form.get('Subject')
            if not subjects:
                return

        valid_keys = self.valid_keys
        for catalog_name in self.catalogs:
            catalog = getToolByName(self.context, catalog_name)
            valid_keys = valid_keys + tuple(catalog.indexes())
        valid_keys = sorted(set(valid_keys))

        for k, v in request.form.items():
            if v and ((k in valid_keys) or k.startswith('facet.')):
                query[k] = v
        if text:
            query['SearchableText'] = quote_chars(text)

        # don't filter on created at all if we want all results
        created = query.get('created')
        if created:
            if created.get('query'):
                if created['query'][0] <= EVER:
                    del query['created']

        # respect `types_not_searched` setting
        types = query.get('portal_type', [])
        if 'query' in types:
            types = types['query']
        query['portal_type'] = self.filter_types(types)
        # respect effective/expiration date
        query['show_inactive'] = False
        # respect navigation root
        if 'path' not in query:
            query['path'] = getNavigationRoot(self.context)

        return query
コード例 #13
0
def filter_query(self, query):
    request = self.request
    catalog = getToolByName(self.context, 'portal_catalog')
    valid_indexes = tuple(catalog.indexes())
    valid_keys = self.valid_keys + valid_indexes
    text = query.get('SearchableText', None)
    if text is None:
        text = request.form.get('SearchableText', '')
    if not text:
        # Without text, must provide a meaningful non-empty search
        valid = set(valid_indexes).intersection(request.form.keys()) or \
            set(valid_indexes).intersection(query.keys())
        if not valid:
            return

    for k, v in request.form.items():
        if v and ((k in valid_keys) or k.startswith('facet.')):
            query[k] = v
    if text:
        query['SearchableText'] = quote_chars(text) + '*'

    # don't filter on created at all if we want all results
    created = query.get('created')
    if created:
        if created.get('query'):
            if created['query'][0] <= EVER:
                del query['created']

    # respect `types_not_searched` setting
    types = query.get('portal_type', [])
    if 'query' in types:
        types = types['query']
    query['portal_type'] = self.filter_types(types)
    # respect effective/expiration date
    query['show_inactive'] = False
    # respect navigation root
    if 'path' not in query:
        query['path'] = getNavigationRoot(self.context)

    return query
コード例 #14
0
ファイル: search.py プロジェクト: PMR2/cellml.pmr2
    def base_filter_query(self, query):
        # based on filter_query, but with substantial difference so not
        # subclassing the original method.

        request = self.request
        rawtext = text = query.get('SearchableText', None)
        if text is None:
            text = request.form.get('SearchableText', '')
        if not text:
            # Without text, the only meaningful case is Subject
            subjects = request.form.get('Subject')
            if not subjects:
                return
        else:
            rawtext = text = text.strip()
            if '*' not in text:
                text += '*'

        # Stuff text into all PMR2/CellML/Cmeta indexes.

        cmeta_indexes = (
            'pmr2_authors_family_name',
            # XXX ^ this will become
            # 'cmeta_authors_family_name',
            'cmeta_citation_title_keyword',
            'cmeta_citation_publication_year',
        )

        if rawtext:
            searchkeys = rawtext.lower().split()

            for i in cmeta_indexes:
                query[i] = searchkeys

        # XXX this should be configurable
        query['pmr2_review_state'] = ['published']

        catalog = getToolByName(self.context, 'portal_catalog')
        # AdvancedQuery does not understand these other keywords
        # valid_keys = self.valid_keys + tuple(catalog.indexes())
        valid_keys = tuple(catalog.indexes())

        for k, v in request.form.items():
            # XXX not sure what facet is, aside from a deprecated
            # product.
            # if v and ((k in valid_keys) or k.startswith('facet.')):
            if v and (k in valid_keys):
                query[k] = v

        if text:
            query['SearchableText'] = quote_chars(text)

        # don't filter on created at all if we want all results
        created = query.get('created')
        if created:
            if created.get('query'):
                if created['query'][0] <= EVER:
                    del query['created']

        # respect `types_not_searched` setting
        types = query.get('portal_type', [])
        if 'query' in types:
            types = types['query']
        query['portal_type'] = self.filter_types(types)

        # # respect effective/expiration date
        # query['show_inactive'] = False

        # respect navigation root
        if 'path' not in query:
            query['path'] = getNavigationRoot(self.context)
        return query