コード例 #1
0
 def testNoI18NAwareCatalog(self):
     original = bool(I18NAWARE_CATALOG)
     try:
         languageFilter.func_globals['I18NAWARE_CATALOG'] = False
         query = {'Language': 'all'}
         languageFilter(query)
         self.failUnless('Language' in query)
     finally:
         languageFilter.func_globals['I18NAWARE_CATALOG'] = original
コード例 #2
0
 def testNoI18NAwareCatalog(self):
     original = bool(I18NAWARE_CATALOG)
     try:
         languageFilter.func_globals['I18NAWARE_CATALOG'] = False
         query = {'Language': 'all'}
         languageFilter(query)
         self.failUnless('Language' in query)
     finally:
         languageFilter.func_globals['I18NAWARE_CATALOG'] = original
コード例 #3
0
    def searchResults(self, REQUEST=None, **kw):
        """ Calls ZCatalog.searchResults with extra arguments that
            limit the results to what the user is allowed to see.

            This version only returns the results for the current
            language, unless you explicitly ask for all results by
            providing the Language="all" keyword.
        """
        if REQUEST is not None and kw.get('Language', '') != 'all':
            languageFilter(REQUEST)
        else:
            languageFilter(kw)
        return self.__lp_old_searchResults(REQUEST, **kw)
コード例 #4
0
    def searchResults(self, REQUEST=None, **kw):
        """ Calls ZCatalog.searchResults with extra arguments that
            limit the results to what the user is allowed to see.

            This version only returns the results for the current
            language, unless you explicitly ask for all results by
            providing the Language="all" keyword.
        """
        if REQUEST is not None and kw.get('Language', '') != 'all':
            languageFilter(REQUEST)
        else:
            languageFilter(kw)
        return self.__lp_old_searchResults(REQUEST, **kw)
コード例 #5
0
def search_solr(query, request=None, lang_query=True, **params):
    search = queryUtility(ISearch)

    if lang_query:
        dummy = {}
        languageFilter(dummy)
        prepareData(dummy)  # this replaces '' with 'any'
        langquery = 'Language:(%s)' % ' OR '.join(dummy['Language'])
        query = '(%s) AND %s' % (query, langquery)

    response = search(query, **params)
    if request is None:
        request = getSite().REQUEST
    response.request = request
    results = response.results()
    for idx, flare in enumerate(results):
        results[idx] = PloneFlare(flare, request=request)
    padResults(results, **params)  # pad the batch
    return response
コード例 #6
0
ファイル: utils.py プロジェクト: EU-OSHA/osha.theme
def search_solr(query, request=None, lang_query=True, **params):
    search = queryUtility(ISearch)

    if lang_query:
        dummy = {}
        languageFilter(dummy)
        prepareData(dummy)  # this replaces '' with 'any'
        langquery = 'Language:(%s)' % ' OR '.join(dummy['Language'])
        query = '(%s) AND %s' % (query, langquery)

    response = search(query, **params)
    if request is None:
        request = getSite().REQUEST
    response.request = request
    results = response.results()
    for idx, flare in enumerate(results):
        results[idx] = PloneFlare(flare, request=request)
    padResults(results, **params)           # pad the batch
    return response
コード例 #7
0
 def testNoFilter(self):
     self.failUnless('UID' in NOFILTERKEYS)
     query = {'UID': '123'}
     languageFilter(query)
     self.failIf('Language' in query)
コード例 #8
0
 def testAll(self):
     query = {'review_state': 'published', 'Language': 'all'}
     languageFilter(query)
     self.failIf('Language' in query)
コード例 #9
0
 def testNeutral(self):
     query = {'review_state': 'published', 'Language': ''}
     languageFilter(query)
     self.failUnless('Language' in query)
     self.assertEquals(query['Language'], '')
コード例 #10
0
 def testMultiple(self):
     query = {'review_state': 'published', 'Language': ['en', 'de']}
     languageFilter(query)
     self.failUnless('Language' in query)
     self.assertEquals(query['Language'], ['en', 'de'])
コード例 #11
0
 def testGerman(self):
     query = {'review_state': 'published', 'Language': 'de'}
     languageFilter(query)
     self.failUnless('Language' in query)
     self.assertEquals(query['Language'], 'de')
コード例 #12
0
 def testNeutral(self):
     query = {'review_state': 'published', 'Language': ''}
     languageFilter(query)
     self.failUnless('Language' in query)
     self.assertEquals(query['Language'], '')
コード例 #13
0
 def testNoTool(self):
     self.loginAsPortalOwner()
     del self.portal['portal_languages']
     query = {'Language': 'all'}
     languageFilter(query)
     self.failUnless('Language' in query)
コード例 #14
0
 def testEnglish(self):
     query = {'review_state': 'published'}
     languageFilter(query)
     self.failUnless('Language' in query)
     self.assertEquals(query['Language'], ['en', ''])
コード例 #15
0
ファイル: search.py プロジェクト: collective/collective.solr
    def buildQueryAndParameters(self, default=None, **args):
        """ helper to build a querystring for simple use-cases """
        schema = self.getManager().getSchema() or {}

        params = subtractQueryParameters(args)
        params = cleanupQueryParameters(params, schema)
        config = self.getConfig()

        languageFilter(args)
        prepareData(args)
        mangleQuery(args, config, schema)

        logger.debug('building query for "%r", %r', default, args)
        schema = self.getManager().getSchema() or {}
        # no default search field in Solr 7
        defaultSearchField = getattr(
            schema,
            'defaultSearchField',
            'SearchableText'
        )
        args[None] = default
        query = {}

        for name, value in sorted(args.items()):
            field = schema.get(name or defaultSearchField, None)
            if field is None or not field.indexed:
                logger.info(
                    'dropping unknown search attribute "%s" '
                    ' (%r) for query: %r', name, value, args
                )
                continue
            if isinstance(value, bool):
                value = str(value).lower()
            elif not value:     # solr doesn't like empty fields (+foo:"")
                if not name:
                    continue
                logger.info(
                    'empty search term form "%s:%s", aborting buildQuery' % (
                        name,
                        value
                    )
                )
                return {}, params
            elif field.class_ == 'solr.BoolField':
                if not isinstance(value, (tuple, list)):
                    value = [value]
                falses = '0', 'False', MV
                true = lambda v: bool(v) and v not in falses
                value = set(map(true, value))
                if not len(value) == 1:
                    assert len(value) == 2      # just to make sure
                    continue                    # skip when "true or false"
                value = str(value.pop()).lower()
            elif isinstance(value, (tuple, list)):
                # list items should be treated as literals, but
                # nevertheless only get quoted when necessary
                value = '(%s)' % ' OR '.join(map(quote_iterable_item, value))
            elif isinstance(value, set):        # sets are taken literally
                if len(value) == 1:
                    query[name] = ''.join(value)
                else:
                    query[name] = '(%s)' % ' OR '.join(value)
                continue
            elif isinstance(value, basestring):
                if field.class_ == 'solr.TextField':
                    if isWildCard(value):
                        value = prepare_wildcard(value)
                    value = quote(value, textfield=True)
                    # if we have an intra-word hyphen, we need quotes
                    if '\\-' in value or '\\+' in value:
                        if value[0] != '"':
                            value = '"%s"' % value
                else:
                    value = quote(value)
                if not value:   # don't search for empty strings, even quoted
                    continue
            else:
                logger.info(
                    'skipping unsupported value "%r" (%s)', value, name
                )
                continue
            if name is None:
                if value and value[0] not in '+-':
                    value = '+%s' % value
            else:
                value = '+%s:%s' % (name, value)
            query[name] = value
        logger.debug('built query "%s"', query)

        if query:
            optimizeQueryParameters(query, params)
        return query, params
コード例 #16
0
 def testGerman(self):
     query = {'review_state': 'published', 'Language': 'de'}
     languageFilter(query)
     self.failUnless('Language' in query)
     self.assertEquals(query['Language'], 'de')
コード例 #17
0
 def testNoFilterExplicitLanguage(self):
     self.failUnless('UID' in NOFILTERKEYS)
     query = {'UID': '123', 'Language': 'de'}
     languageFilter(query)
     self.failUnless('Language' in query)
     self.assertEquals(query['Language'], 'de')
コード例 #18
0
 def testNoFilter(self):
     self.failUnless('UID' in NOFILTERKEYS)
     query = {'UID': '123'}
     languageFilter(query)
     self.failIf('Language' in query)
コード例 #19
0
 def testAll(self):
     query = {'review_state': 'published', 'Language': 'all'}
     languageFilter(query)
     self.failIf('Language' in query)
コード例 #20
0
 def testNoFilterExplicitLanguage(self):
     self.failUnless('UID' in NOFILTERKEYS)
     query = {'UID': '123', 'Language': 'de'}
     languageFilter(query)
     self.failUnless('Language' in query)
     self.assertEquals(query['Language'], 'de')
コード例 #21
0
ファイル: search.py プロジェクト: tschorr/collective.solr
    def buildQueryAndParameters(self, default=None, **args):
        """ helper to build a querystring for simple use-cases """
        schema = self.getManager().getSchema() or {}

        params = subtractQueryParameters(args)
        params = cleanupQueryParameters(params, schema)
        config = self.getConfig()

        languageFilter(args)
        prepareData(args)
        mangleQuery(args, config, schema)

        logger.debug('building query for "%r", %r', default, args)
        schema = self.getManager().getSchema() or {}
        defaultSearchField = getattr(schema, 'defaultSearchField', None)
        args[None] = default
        query = {}

        for name, value in sorted(args.items()):
            field = schema.get(name or defaultSearchField, None)
            if field is None or not field.indexed:
                logger.info(
                    'dropping unknown search attribute "%s" '
                    ' (%r) for query: %r', name, value, args)
                continue
            if isinstance(value, bool):
                value = str(value).lower()
            elif not value:  # solr doesn't like empty fields (+foo:"")
                if not name:
                    continue
                logger.info(
                    'empty search term form "%s:%s", aborting buildQuery' %
                    (name, value))
                return {}, params
            elif field.class_ == 'solr.BoolField':
                if not isinstance(value, (tuple, list)):
                    value = [value]
                falses = '0', 'False', MV
                true = lambda v: bool(v) and v not in falses
                value = set(map(true, value))
                if not len(value) == 1:
                    assert len(value) == 2  # just to make sure
                    continue  # skip when "true or false"
                value = str(value.pop()).lower()
            elif isinstance(value, (tuple, list)):
                # list items should be treated as literals, but
                # nevertheless only get quoted when necessary
                value = '(%s)' % ' OR '.join(map(quote_iterable_item, value))
            elif isinstance(value, set):  # sets are taken literally
                if len(value) == 1:
                    query[name] = ''.join(value)
                else:
                    query[name] = '(%s)' % ' OR '.join(value)
                continue
            elif isinstance(value, basestring):
                if field.class_ == 'solr.TextField':
                    if isWildCard(value):
                        value = prepare_wildcard(value)
                    value = quote(value, textfield=True)
                    # if we have an intra-word hyphen, we need quotes
                    if '\\-' in value or '\\+' in value:
                        if value[0] != '"':
                            value = '"%s"' % value
                else:
                    value = quote(value)
                if not value:  # don't search for empty strings, even quoted
                    continue
            else:
                logger.info('skipping unsupported value "%r" (%s)', value,
                            name)
                continue
            if name is None:
                if value and value[0] not in '+-':
                    value = '+%s' % value
            else:
                value = '+%s:%s' % (name, value)
            query[name] = value
        logger.debug('built query "%s"', query)

        if query:
            optimizeQueryParameters(query, params)
        return query, params
コード例 #22
0
 def testNoTool(self):
     self.loginAsPortalOwner()
     del self.portal['portal_languages']
     query = {'Language': 'all'}
     languageFilter(query)
     self.failUnless('Language' in query)
コード例 #23
0
 def testEnglish(self):
     query = {'review_state': 'published'}
     languageFilter(query)
     self.failUnless('Language' in query)
     self.assertEquals(query['Language'], ['en', ''])
コード例 #24
0
 def testMultiple(self):
     query = {'review_state': 'published', 'Language': ['en', 'de']}
     languageFilter(query)
     self.failUnless('Language' in query)
     self.assertEquals(query['Language'], ['en', 'de'])