def show_fgp_facets(): ''' Return True when the fgp facets and map cart should be visible ''' for group in [ 'topic_category', 'spatial_representation_type', 'fgp_viewer']: if any(f['active'] for f in h.get_facet_items_dict(group)): return True for f in h.get_facet_items_dict('collection'): if f['name'] == 'fgp': return f['active'] return False
def organization_filters(): top_organizations = {} ancestors_relations = {} tree = organization_tree() for top_organization in tree: top_organization['count'] = 0 top_organizations[top_organization['name']] = top_organization ancestors_relations[top_organization['name']] = top_organization['name'] if 'children' in top_organization and len(top_organization['children']) > 0: children = all_descendants(top_organization['children']) for child_name in children: ancestors_relations[child_name] = top_organization['name'] for organization in ckan_helpers.get_facet_items_dict('organization'): top_parent_name = ancestors_relations[organization['name']] if top_parent_name in top_organizations: top_organizations[top_parent_name]['count'] += organization['count'] if ckan_helpers.get_request_param('organization') in top_organizations: top_organizations[ckan_helpers.get_request_param('organization')]['active'] = True top_organizations_with_results = [organization for organization in top_organizations.values() if organization['count'] > 0] sorted_organizations = sorted(top_organizations_with_results, key=lambda item: item['count'], reverse=True) limit = int(request.params.get('_organization_limit', g.facets_default_number)) c.search_facets_limits['organization'] = limit if limit is not None and limit > 0: return sorted_organizations[:limit] return sorted_organizations
def feature_count(features): count = 0 for name in features: facet = h.get_facet_items_dict(name) for f in facet: count += f['count'] return count
def is_facet_active(name): """Returns if a facet is active or not""" facet_items = h.get_facet_items_dict(name) for item in facet_items: if item.get('active'): return True return False
def show_subject_facet(): ''' Return True when the subject facet should be visible ''' if any(f['active'] for f in h.get_facet_items_dict('subject')): return True return not show_fgp_facets()
def organizations_basic_info(): def convert_organization_to_dict(organization, depth): current_organization = {} organization_id = organization.pop('id') current_organization['id'] = organization_id current_organization['name'] = organization.pop('name') current_organization['title'] = organization.pop('title') current_organization['depth'] = depth # si depth == 0, la organización no es hija de otra current_organization['own_package_count'] = organizations_that_have_packages.pop(organization_id, 0) own_available_package_count = ckan_organizations_info.pop(current_organization['name'], {}).get('count', 0) children_data_dict = generate_children_data(organization.pop('children'), depth) current_organization['children'] = children_data_dict['dict_children'] current_organization['total_package_count'] = children_data_dict['current_total_package_count'] \ + current_organization['own_package_count'] current_organization['available_package_count'] = children_data_dict['current_available_package_count'] + \ own_available_package_count current_organization['active'] = current_organization['name'] == organization_in_request current_organization['display'] = not organization_in_request or current_organization['active'] return current_organization def generate_children_data(group_tree_children, depth): dict_children = [] current_available_package_count = 0 current_total_package_count = 0 for child in group_tree_children: converted_child = convert_organization_to_dict(child, depth + 1) dict_children.append(converted_child) current_available_package_count += converted_child.get('available_package_count', 0) current_total_package_count += converted_child.get('total_package_count', 0) return {'dict_children': dict_children, 'current_available_package_count': current_available_package_count, 'current_total_package_count': current_total_package_count} # Traemos las organizaciones organizations = get_organizations_tree() ckan_organizations_info = {item['name']: item for item in ckan_helpers.get_facet_items_dict('organization')} # Realizamos una query para conseguir las organizaciones que tienen datasets, y la cantidad de éstos query = search.PackageSearchQuery() q = {'q': '+capacity:public', 'fl': 'groups', 'facet.field': ['groups', 'owner_org'], 'facet.limit': -1, 'rows': 1} query.run(q) organizations_that_have_packages = query.facets.get('owner_org') # Transformamos cada organización en un dict para facilitar su uso, y agregamos información requerida organizations_data = [] organization_in_request = ckan_helpers.get_request_param('organization') for organization in organizations: current_organization = convert_organization_to_dict(organization, 0) organizations_data.append(current_organization) return organizations_data
def get_faceted_groups(items_limit=None): groups = fetch_groups() facets = ckan_helpers.get_facet_items_dict(facet='groups', limit=items_limit) facets_by_name = {} for facet in facets: facets_by_name[facet['name']] = facet for group in groups: group_name = group['name'] if group_name in facets_by_name: group['facet_active'] = facets_by_name[group['name']]['active'] group['facet_count'] = facets_by_name[group['name']]['count'] else: group['facet_active'] = False group['facet_count'] = 0 return groups
def get_facet_items_dict(facet, limit=1000, exclude_active=False): facets = h.get_facet_items_dict( facet, limit, exclude_active=exclude_active) filtered_no_items = c.search_facets.get(facet)['items'].__len__() total_no_items = json.loads( count.CountController.list[facet](count.CountController()))['count'] if filtered_no_items < 50 and filtered_no_items < total_no_items: no_items = filtered_no_items else: no_items = total_no_items if c.search_facets_limits: limit = c.search_facets_limits.get(facet) if limit: return (facets[:limit], no_items) else: return (facets, no_items)
def get_facet_items_dict_questions(facet, limit=None, exclude_active=False): if facet != 'question': return [] facets = h.get_facet_items_dict(facet, limit=None, exclude_active=False) newfacets = [] for facet in facets: if not facet or len(facet) == 0: continue newfacet = facet #Questions can get deleted from the schema, then we have no label newfacet['display_name'] = qchoices.get(facet['name'], facet['name']) newfacets.append(newfacet) return sort_by_display_name(newfacets)
def get_facet_items_dict(facet, limit=1000, exclude_active=False): facets = h.get_facet_items_dict( facet, limit, exclude_active=exclude_active) filtered_no_items = c.search_facets.get(facet)['items'].__len__() # total_no_items = json.loads( # count.CountController.list[facet](count.CountController()))['count'] # if filtered_no_items <= 50 and filtered_no_items < total_no_items: # no_items = filtered_no_items # else: # no_items = total_no_items no_items = filtered_no_items if c.search_facets_limits: limit = c.search_facets_limits.get(facet) if limit: return (facets[:limit], no_items) else: return (facets, no_items)
def get_faceted_groups(): data_dict_page_results = { 'all_fields': True, 'type': 'group', 'limit': None, 'offset': 0, } groups = logic.get_action('group_list')({}, data_dict_page_results) facets = ckan_helpers.get_facet_items_dict('groups') facets_by_name = {} for facet in facets: facets_by_name[facet['name']] = facet for group in groups: group_name = group['name'] if group_name in facets_by_name: group['facet_active'] = facets_by_name[group['name']]['active'] group['facet_count'] = facets_by_name[group['name']]['count'] else: group['facet_active'] = False group['facet_count'] = 0 return groups
def get_tag_names(): tags = h.get_facet_items_dict('tags', limit=20) tag_names = [tag['name'] for tag in tags] return json.dumps(tag_names)
def get_facet_items_dict(facet, limit=None, exclude_active=False): if facet == 'organization': return organization_filters() return ckan_helpers.get_facet_items_dict(facet, limit, exclude_active)
def get_facet_items_dict(facet, limit=None, exclude_active=False): if facet == 'organization': return organization_filters() # CKAN impone un límite de 10 para los temas. Puedo tener más de 10, por lo que no podría clickear el resto. c.search_facets_limits['groups'] = None return ckan_helpers.get_facet_items_dict(facet, limit, exclude_active)
def orgportals_get_facet_items_dict(value): try: return lib_helpers.get_facet_items_dict(value) except: return None
def orgdashboards_get_facet_items_dict(value): try: return h.get_facet_items_dict(value) except: return None
def popular_tags(self): response.headers['Content-Type'] = 'application/json;charset=utf-8' response_data = h.get_facet_items_dict('tags', limit=3) response_msg = h.json.dumps({'success': True, 'result': response_data}) return response_msg
def popular_tags(self): response.headers['Content-Type'] = 'application/json;charset=utf-8' response_data = h.get_facet_items_dict('tags', limit=3) response_msg = h.json.dumps({ 'success': True, 'result': response_data }) return response_msg
def get_facet_items_dict_categories(facet, limit=None, exclude_active=False): facets = h.get_facet_items_dict(facet, limit=None, exclude_active=False) return sort_by_display_name(facets)