def count(dataset_name=None, **query): '''Count the number of element that are in the *dataset_name* and match the ***query*. ``dataset`` A dataset name or a :class:`openspending.model.Dataset` object ``**query`` Parameters for an *AND* query. Only the *key* values objects matching these queries will be counted. Returns: The count as an int. ''' browser = Browser({}) # we don't want any docs. Facets listed in the Response browser.limit(0) if dataset_name is not None: browser.filter_by('+dataset:%s' % dataset_name) for (key, value) in query.items(): if isinstance(value, bool): if value: value = 'true' else: value = 'false' filter_ = '+%s:%s' % (key, value) browser.filter_by(filter_) return browser.num_results
def facets_for_fields(facet_fields, dataset_name=None, **query): '''Get the facets for the fields *facet_fields* for all elements that are part of the dataset *dataset_name* and that match ***query*. ``facet_fields`` A ``list`` of field names ``dataset`` A dataset name or a :class:`openspending.model.Dataset` object ``**query`` Parameters for an *AND* query. Only the *key* values objects matching these queries will be counted. Returns: A ``dict`` where the keys are the names in the facet_fields list and the values are dictionaries with "<facet value>:<count>" items. ''' # browser with no limit for facets. browser = Browser({'facet_limit': -1}) browser.facet_by(*facet_fields) # we don't want any docs. Facets listed in the Response browser.limit(0) if dataset_name is not None: browser.filter_by('+dataset:%s' % dataset_name) for (key, value) in query.items(): if isinstance(value, bool): if value: value = 'true' else: value = 'false' filter_ = '+%s:%s' % (key, value) browser.filter_by(filter_) return dict([(f, browser.facet_values(f)) for f in facet_fields])