示例#1
0
    def __call__(self, context):
        cache_key = self.get_cache_key(context)
        request = getRequest()
        if request is not None and cache_key in request.environ:
            # prevent doing query many times
            return request.environ[cache_key]

        if not self.field.query:
            return SimpleVocabulary([])

        query = parse_query_from_data({
            'query': self.field.query,
            'sort_on': self.field.sort_on,
            'sort_reversed': self.field.sort_reversed,
        })
        catalog = getToolByName(context, 'portal_catalog')
        if query.get('sort_on', '') not in catalog._catalog.indexes:
            query['sort_on'] = 'effective'

        terms = []
        for item in catalog(**query)[:self.field.limit]:
            terms.append(
                SimpleVocabulary.createTerm(item.id, item.id, item.Title))

        value = SimpleVocabulary(terms)
        if request is not None:
            request.environ[cache_key] = value
        return value
示例#2
0
    def get_query(self):
        parsed = parse_query_from_data(self.data, self.context)
        # XXX we're forcing location queries to be depth of 1
        if 'path' in parsed and 'depth' not in parsed['path']:
            parsed['path']['depth'] = 1
        if 'sort_on' not in parsed:
            parsed['sort_on'] = 'effective'  # defaults to this

        if 'selected-year' in self.request.form:
            # need to turn this into a date query
            year = self.request.form['selected-year']
            try:
                start = DateTime(abs(int(year)), 1, 1)
                end = DateTime(int(year) + 1, 1, 1) - 1
                parsed['effective'] = {
                    'query': (start, end),
                    'range': 'min:max'
                }
            except (KeyError, AttributeError, ValueError, TypeError):
                pass

        return parsed
示例#3
0
 def query(self):
     parsed = parse_query_from_data(self.data, self.context)
     parsed['sort_limit'] = self.data.get('limit', 20) or 20
     return parsed
示例#4
0
 def get_query(self):
     parsed = parse_query_from_data(self.data, self.context)
     parsed['sort_order'] = 'reverse'
     return parsed
示例#5
0
 def query(self):
     parsed = parse_query_from_data(self.data, self.context)
     parsed['sort_limit'] = 1
     return parsed
示例#6
0
 def query(self):
     parsed = parse_query_from_data(self.data, self.context)
     # XXX we're forcing location queries to be depth of 1
     if 'path' in parsed:
         parsed['path']['depth'] = 1
     return parsed