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
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
def query(self): parsed = parse_query_from_data(self.data, self.context) parsed['sort_limit'] = self.data.get('limit', 20) or 20 return parsed
def get_query(self): parsed = parse_query_from_data(self.data, self.context) parsed['sort_order'] = 'reverse' return parsed
def query(self): parsed = parse_query_from_data(self.data, self.context) parsed['sort_limit'] = 1 return parsed
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