Ejemplo n.º 1
0
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]
Ejemplo n.º 2
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)
Ejemplo n.º 3
0
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]
Ejemplo n.º 4
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
Ejemplo n.º 5
0
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
    ]
Ejemplo n.º 6
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
Ejemplo n.º 7
0
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
    ]
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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