def get_menu_entry_categories(request): menu_categories = OrderedDict() menu_category_icons = {} for identifier, category_name, icon in MENU_CATEGORIES: menu_categories[identifier] = _MenuCategory(category_name, icon) menu_category_icons[identifier] = icon modules = list(get_modules()) for module in modules: menu_category_icons.update( (force_text(key), force_text(value)) for (key, value) in module.get_menu_category_icons().items() if key not in menu_category_icons ) for module in modules: if get_missing_permissions(request.user, module.get_required_permissions()): continue for entry in (module.get_menu_entries(request=request) or ()): category_identifier = entry.category category = menu_categories.get(category_identifier) if category_identifier else None if not category: category_identifier = force_text(category_identifier or module.name) category = menu_categories.get(category_identifier) if not category: menu_categories[category_identifier] = category = _MenuCategory( name=category_identifier, icon=menu_category_icons.get(category_identifier, "fa fa-circle") ) category.entries.append(entry) return [c for identifier, c in six.iteritems(menu_categories) if len(c.entries) > 0]
def get_menu_entry_categories(request): # noqa (C901) menu_categories = OrderedDict() # Update main menu from provides main_menu = extend_main_menu(MAIN_MENU) menu_category_icons = {} for menu_item in main_menu: identifier = menu_item["identifier"] icon = menu_item["icon"] menu_categories[identifier] = _MenuCategory( identifier=identifier, name=menu_item["title"], icon=icon, ) menu_category_icons[identifier] = icon modules = list(get_modules()) for module in modules: menu_category_icons.update( (force_text(key), force_text(value)) for (key, value) in module.get_menu_category_icons().items() if key not in menu_category_icons) all_categories = set() for module in modules: if get_missing_permissions(request.user, module.get_required_permissions()): continue for entry in module.get_menu_entries(request=request) or (): category = menu_categories.get(entry.category) if not category: category_identifier = force_text(entry.category or module.name) category = menu_categories.get(category_identifier) if not category: menu_categories[ category_identifier] = category = _MenuCategory( identifier=category_identifier, name=category_identifier, icon=menu_category_icons.get( category_identifier, "fa fa-circle"), ) category.entries.append(entry) all_categories.add(category) # clean categories that eventually have no children or entries categories = [] for cat in all_categories: if not cat.entries: continue categories.append(cat) clean_categories = [ c for menu_identifier, c in six.iteritems(menu_categories) if c in categories ] return customize_menu(clean_categories, request)
def get_menu_entry_categories(request): menu_categories = OrderedDict() menu_children = OrderedDict() menu_category_icons = {} for menu_item in MAIN_MENU: identifier = menu_item["identifier"] icon = menu_item["icon"] menu_categories[identifier] = _MenuCategory( identifier=identifier, name=menu_item["title"], icon=icon, ) for child in menu_item["children"]: child_identifier = "%s:%s" % (identifier, child["identifier"]) child_category = _MenuCategory(child["identifier"], child["title"], None) menu_children[child_identifier] = child_category menu_categories[identifier].children.append(child_category) menu_category_icons[identifier] = icon modules = list(get_modules()) for module in modules: menu_category_icons.update( (force_text(key), force_text(value)) for (key, value) in module.get_menu_category_icons().items() if key not in menu_category_icons ) all_categories = set() for module in modules: if get_missing_permissions(request.user, module.get_required_permissions()): continue for entry in (module.get_menu_entries(request=request) or ()): category_identifier = entry.category subcategory = entry.subcategory entry_identifier = "%s:%s" % (category_identifier, subcategory) if subcategory else category_identifier menu_items = menu_children if subcategory else menu_categories category = menu_items.get(entry_identifier) if not category: category_identifier = force_text(category_identifier or module.name) category = menu_items.get(category_identifier) if not category: menu_items[category_identifier] = category = _MenuCategory( identifier=category_identifier, name=category_identifier, icon=menu_category_icons.get(category_identifier, "fa fa-circle") ) category.entries.append(entry) if subcategory: parent = menu_categories.get(category_identifier) all_categories.add(parent) else: all_categories.add(category) return [c for menu_identifier, c in six.iteritems(menu_categories) if c in all_categories]
def get_service_handler(base_url, proxy_base=None, service_type=enumerations.AUTO): """Return the appropriate remote service handler for the input URL. If the service type is not explicitly passed in it will be guessed from """ handlers = OrderedDict({ enumerations.WMS: { "OWS": True, "handler": WmsServiceHandler }, enumerations.GN_WMS: { "OWS": True, "handler": GeoNodeServiceHandler }, # enumerations.WFS: {"OWS": True, "handler": ServiceHandlerBase}, # enumerations.TMS: {"OWS": False, "handler": ServiceHandlerBase}, enumerations.REST_MAP: { "OWS": False, "handler": ArcMapServiceHandler }, enumerations.REST_IMG: { "OWS": False, "handler": ArcImageServiceHandler }, # enumerations.CSW: {"OWS": False, "handler": ServiceHandlerBase}, # enumerations.HGL: {"OWS": True, "handler": ServiceHandlerBase}, # TODO: verify this # enumerations.OGP: {"OWS": False, "handler": ServiceHandlerBase}, # TODO: verify this }) if service_type in (enumerations.AUTO, enumerations.OWS): if service_type == enumerations.AUTO: to_check = handlers.keys() else: to_check = [k for k, v in handlers.items() if v["OWS"]] for type_ in to_check: logger.debug("Checking {}...".format(type_)) try: service = get_service_handler(base_url, type_) except Exception: pass # move on to the next service type else: break else: raise RuntimeError("Could not parse service {!r} with any of the " "available service handlers".format(base_url)) else: handler = handlers.get(service_type, {}).get("handler") try: service = handler(base_url) except Exception: logger.exception( msg="Could not parse service {!r}".format(base_url)) raise return service
def get_menu_entry_categories(request): menu_categories = OrderedDict() menu_category_icons = {} for identifier, category_name, icon in MENU_CATEGORIES: menu_categories[identifier] = _MenuCategory(identifier, category_name, icon) menu_category_icons[identifier] = icon modules = list(get_modules()) for module in modules: menu_category_icons.update( (force_text(key), force_text(value)) for (key, value) in module.get_menu_category_icons().items() if key not in menu_category_icons) for module in modules: if get_missing_permissions(request.user, module.get_required_permissions()): continue for entry in (module.get_menu_entries(request=request) or ()): category_identifier = entry.category category = menu_categories.get( category_identifier) if category_identifier else None if not category: category_identifier = force_text(category_identifier or module.name) category = menu_categories.get(category_identifier) if not category: menu_categories[ category_identifier] = category = _MenuCategory( identifier=category_identifier, name=category_identifier, icon=menu_category_icons.get( category_identifier, "fa fa-circle")) category.entries.append(entry) return [ c for identifier, c in six.iteritems(menu_categories) if len(c.entries) > 0 ]
def get_service_handler(base_url, proxy_base=None, service_type=enumerations.AUTO): """Return the appropriate remote service handler for the input URL. If the service type is not explicitly passed in it will be guessed from """ handlers = OrderedDict({ enumerations.WMS: {"OWS": True, "handler": WmsServiceHandler}, enumerations.GN_WMS: {"OWS": True, "handler": GeoNodeServiceHandler}, # enumerations.WFS: {"OWS": True, "handler": ServiceHandlerBase}, # enumerations.TMS: {"OWS": False, "handler": ServiceHandlerBase}, enumerations.REST_MAP: {"OWS": False, "handler": ArcMapServiceHandler}, enumerations.REST_IMG: {"OWS": False, "handler": ArcImageServiceHandler}, # enumerations.CSW: {"OWS": False, "handler": ServiceHandlerBase}, # enumerations.HGL: {"OWS": True, "handler": ServiceHandlerBase}, # TODO: verify this # enumerations.OGP: {"OWS": False, "handler": ServiceHandlerBase}, # TODO: verify this }) if service_type in (enumerations.AUTO, enumerations.OWS): if service_type == enumerations.AUTO: to_check = handlers.keys() else: to_check = [k for k, v in handlers.items() if v["OWS"]] for type_ in to_check: logger.debug("Checking {}...".format(type_)) try: service = get_service_handler(base_url, type_) except Exception: pass # move on to the next service type else: break else: raise RuntimeError("Could not parse service {!r} with any of the " "available service handlers".format(base_url)) else: handler = handlers.get(service_type, {}).get("handler") try: service = handler(base_url) except Exception: logger.exception( msg="Could not parse service {!r}".format(base_url)) raise return service
def get_menu_entry_categories(request): menu_categories = OrderedDict() menu_children = OrderedDict() # Update main menu from provides main_menu = extend_main_menu(MAIN_MENU) menu_category_icons = {} for menu_item in main_menu: identifier = menu_item["identifier"] icon = menu_item["icon"] menu_categories[identifier] = _MenuCategory( identifier=identifier, name=menu_item["title"], icon=icon, ) for child in menu_item["children"]: child_identifier = "%s:%s" % (identifier, child["identifier"]) child_category = _MenuCategory(child["identifier"], child["title"], None) menu_children[child_identifier] = child_category menu_categories[identifier].children.append(child_category) menu_category_icons[identifier] = icon modules = list(get_modules()) for module in modules: menu_category_icons.update( (force_text(key), force_text(value)) for (key, value) in module.get_menu_category_icons().items() if key not in menu_category_icons) all_categories = set() for module in modules: if get_missing_permissions(request.user, module.get_required_permissions()): continue for entry in (module.get_menu_entries(request=request) or ()): category_identifier = entry.category subcategory = entry.subcategory entry_identifier = "%s:%s" % ( category_identifier, subcategory) if subcategory else category_identifier menu_items = menu_children if subcategory else menu_categories category = menu_items.get(entry_identifier) if not category: category_identifier = force_text(category_identifier or module.name) category = menu_items.get(category_identifier) if not category: menu_items[category_identifier] = category = _MenuCategory( identifier=category_identifier, name=category_identifier, icon=menu_category_icons.get(category_identifier, "fa fa-circle")) category.entries.append(entry) if subcategory: parent = menu_categories.get(category_identifier) all_categories.add(parent) else: all_categories.add(category) return [ c for menu_identifier, c in six.iteritems(menu_categories) if c in all_categories ]
def get_service_handler(base_url, service_type=enumerations.AUTO, headers=None): """Return the appropriate remote service handler for the input URL. If the service type is not explicitly passed in it will be guessed from """ handlers = OrderedDict({ enumerations.WMS: {"OWS": True, "handler": ExchangeWmsServiceHandler}, # enumerations.WFS: {"OWS": True, "handler": ServiceHandlerBase}, # enumerations.TMS: {"OWS": False, "handler": ServiceHandlerBase}, enumerations.REST: {"OWS": False, "handler": ExchangeMapserverServiceHandler}, # enumerations.CSW: {"OWS": False, "handler": ServiceHandlerBase}, # enumerations.HGL: {"OWS": True, "handler": ServiceHandlerBase}, # enumerations.OGP: {"OWS": False, "handler": ServiceHandlerBase}, }) if service_type in (enumerations.AUTO, enumerations.OWS): if service_type == enumerations.AUTO: to_check = handlers.keys() else: to_check = [k for k, v in handlers.items() if v["OWS"]] for type_ in to_check: logger.info("Checking {}...".format(type_)) try: service = get_service_handler(base_url, type_, headers=(headers or None)) except Exception: pass # move on to the next service type else: break else: raise RuntimeError("Could not parse service {!r} with any of the " "available service handlers".format(base_url)) else: handler = handlers.get(service_type, {}).get("handler") if (base_url.lower().startswith('https') and (callable(has_ssl_config) and has_ssl_config(base_url, via_query=True))): # has_ssl_config needs to query db, as call may be from task # worker, whose hostnameport_pattern_cache may be out of sync base_url = pki_route(base_url) logger.debug('Rewritten URL for pki proxy: {0}'.format(base_url)) bearer_header = {'Authorization': "Bearer {0}".format( get_bearer_token(valid_time=30))} logger.debug('Add bearer_header: {0}'.format(repr(bearer_header))) if headers and isinstance(headers, dict): headers.update(bearer_header) else: headers = bearer_header # Pass service type to pki_request view, for workarounds headers['PKI_SERVICE_TYPE'] = "{0}".format(service_type) try: service = handler(base_url, headers=headers) except Exception as e: logger.exception( msg="Could not parse service {!r}".format(base_url)) raise e return service
def get_service_handler(base_url, service_type=enumerations.AUTO, headers=None): """Return the appropriate remote service handler for the input URL. If the service type is not explicitly passed in it will be guessed from """ handlers = OrderedDict({ enumerations.WMS: { "OWS": True, "handler": ExchangeWmsServiceHandler }, # enumerations.WFS: {"OWS": True, "handler": ServiceHandlerBase}, # enumerations.TMS: {"OWS": False, "handler": ServiceHandlerBase}, enumerations.REST: { "OWS": False, "handler": ExchangeMapserverServiceHandler }, # enumerations.CSW: {"OWS": False, "handler": ServiceHandlerBase}, # enumerations.HGL: {"OWS": True, "handler": ServiceHandlerBase}, # enumerations.OGP: {"OWS": False, "handler": ServiceHandlerBase}, }) if service_type in (enumerations.AUTO, enumerations.OWS): if service_type == enumerations.AUTO: to_check = handlers.keys() else: to_check = [k for k, v in handlers.items() if v["OWS"]] for type_ in to_check: logger.info("Checking {}...".format(type_)) try: service = get_service_handler(base_url, type_, headers=(headers or None)) except Exception: pass # move on to the next service type else: break else: raise RuntimeError("Could not parse service {!r} with any of the " "available service handlers".format(base_url)) else: handler = handlers.get(service_type, {}).get("handler") if (base_url.lower().startswith('https') and (callable(has_ssl_config) and has_ssl_config(base_url, via_query=True))): # has_ssl_config needs to query db, as call may be from task # worker, whose hostnameport_pattern_cache may be out of sync base_url = pki_route(base_url) logger.debug('Rewritten URL for pki proxy: {0}'.format(base_url)) bearer_header = { 'Authorization': "Bearer {0}".format(get_bearer_token(valid_time=30)) } logger.debug('Add bearer_header: {0}'.format(repr(bearer_header))) if headers and isinstance(headers, dict): headers.update(bearer_header) else: headers = bearer_header # Pass service type to pki_request view, for workarounds headers['PKI_SERVICE_TYPE'] = "{0}".format(service_type) try: service = handler(base_url, headers=headers) except Exception as e: logger.exception( msg="Could not parse service {!r}".format(base_url)) raise e return service