예제 #1
0
def register_plugin_menu_items(section_name, menu_items):
    """
    Register a list of PluginMenuItem instances for a given menu section (e.g. plugin name)
    """
    new_menu_items = []
    new_menu_item_weight = 100

    nav_menu_items = set()

    for menu_item in menu_items:
        if isinstance(menu_item, PluginMenuItem):
            # translate old-style plugin menu definitions into the new nav-menu items and buttons

            new_menu_button_weight = 100
            new_menu_buttons = []
            for button in menu_item.buttons:
                new_menu_buttons.append(
                    NavMenuButton(
                        link=button.link,
                        title=button.title,
                        icon_class=button.icon_class,
                        button_class=button.color,
                        permissions=button.permissions,
                        weight=new_menu_button_weight,
                    ))
                new_menu_button_weight += 100

            new_menu_items.append(
                NavMenuItem(
                    link=menu_item.link,
                    name=menu_item.link_text,
                    permissions=menu_item.permissions,
                    weight=new_menu_item_weight,
                    buttons=new_menu_buttons,
                ))
            new_menu_item_weight += 100
        elif isinstance(menu_item, NavMenuTab):
            nav_menu_items.add(menu_item)
        else:
            raise TypeError(
                "Top level objects need to be an instance of NavMenuTab or PluginMenuItem: {menu_tab}"
            )

    if new_menu_items:
        # wrap bare item/button list into the default "Plugins" menu tab and appropriate grouping
        if registry["nav_menu"]["tabs"].get("Plugins"):
            weight = (registry["nav_menu"]["tabs"]["Plugins"][list(
                registry["nav_menu"]["tabs"]["Plugins"])[-1]]["weight"] + 100)
        else:
            weight = 100
        nav_menu_items.add(
            NavMenuTab(
                name="Plugins",
                weight=5000,
                groups=(NavMenuGroup(name=section_name,
                                     weight=weight,
                                     items=new_menu_items), ),
            ), )

    register_menu_items(nav_menu_items)
예제 #2
0
 ),
 NavMenuTab(
     name="Dummy Tab",
     weight=150,
     groups=(
         NavMenuGroup(
             name="Dummy Group 1",
             weight=100,
             items=(
                 NavMenuItem(
                     link="plugins:dummy_plugin:dummymodel_list",
                     name="Dummy Model",
                     permissions=["dummy_plugin.view_dummymodel"],
                     buttons=(
                         NavMenuAddButton(
                             link="plugins:dummy_plugin:dummymodel_add",
                             permissions=[
                                 "dummy_plugin.add_dummymodel",
                             ],
                         ),
                         NavMenuImportButton(
                             link="plugins:dummy_plugin:dummymodel_import",
                             permissions=["dummy_plugin.add_dummymodel"],
                         ),
                     ),
                 ),
             ),
         ),
     ),
 ),
 NavMenuTab(
예제 #3
0
 NavMenuTab(
     name="Organization",
     weight=100,
     groups=(
         NavMenuGroup(
             name="Tags",
             weight=400,
             items=(
                 NavMenuItem(
                     link="extras:tag_list",
                     name="Tags",
                     weight=100,
                     permissions=[
                         "extras.view_tags",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="extras:tag_add",
                             permissions=[
                                 "extras.add_tag",
                             ],
                         ),
                         NavMenuImportButton(
                             link="extras:tag_import",
                             permissions=[
                                 "extras.add_tag",
                             ],
                         ),
                     ),
                 ),
             ),
         ),
         NavMenuGroup(
             name="Statuses",
             weight=500,
             items=(
                 NavMenuItem(
                     link="extras:status_list",
                     name="Statuses",
                     weight=100,
                     permissions=[
                         "extras.view_status",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="extras:status_add",
                             permissions=[
                                 "extras.add_status",
                             ],
                         ),
                         NavMenuImportButton(
                             link="extras:status_import",
                             permissions=[
                                 "extras.add_status",
                             ],
                         ),
                     ),
                 ),
             ),
         ),
     ),
 ),
예제 #4
0
 ),
 NavMenuTab(
     name="Example Menu",
     weight=150,
     groups=(
         NavMenuGroup(
             name="Example Group 1",
             weight=100,
             items=(
                 NavMenuItem(
                     link="plugins:example_plugin:examplemodel_list",
                     name="Example Model",
                     permissions=["example_plugin.view_examplemodel"],
                     buttons=(
                         NavMenuAddButton(
                             link="plugins:example_plugin:examplemodel_add",
                             permissions=[
                                 "example_plugin.add_examplemodel",
                             ],
                         ),
                         NavMenuImportButton(
                             link="plugins:example_plugin:examplemodel_import",
                             permissions=["example_plugin.add_examplemodel"],
                         ),
                     ),
                 ),
             ),
         ),
     ),
 ),
 NavMenuTab(
예제 #5
0
menu_items = (NavMenuTab(
    name="Circuits",
    weight=500,
    groups=(
        NavMenuGroup(
            name="Circuits",
            weight=100,
            items=(
                NavMenuItem(
                    link="circuits:circuit_list",
                    name="Circuits",
                    weight=100,
                    permissions=[
                        "circuits.view_circuit",
                    ],
                    buttons=(
                        NavMenuAddButton(
                            link="circuits:circuit_add",
                            permissions=[
                                "circuits.add_circuit",
                            ],
                        ),
                        NavMenuImportButton(
                            link="circuits:circuit_import",
                            permissions=[
                                "circuits.add_circuit",
                            ],
                        ),
                    ),
                ),
                NavMenuItem(
                    link="circuits:circuittype_list",
                    name="Circuit Types",
                    weight=200,
                    permissions=[
                        "circuits.view_circuittype",
                    ],
                    buttons=(
                        NavMenuAddButton(
                            link="circuits:circuittype_add",
                            permissions=[
                                "circuits.add_circuittype",
                            ],
                        ),
                        NavMenuImportButton(
                            link="circuits:circuittype_import",
                            permissions=[
                                "circuits.add_circuittype",
                            ],
                        ),
                    ),
                ),
            ),
        ),
        NavMenuGroup(
            name="Providers",
            weight=200,
            items=(NavMenuItem(
                link="circuits:provider_list",
                name="Providers",
                weight=100,
                permissions=[
                    "circuits.view_provider",
                ],
                buttons=(
                    NavMenuAddButton(
                        link="circuits:provider_add",
                        permissions=[
                            "circuits.add_provider",
                        ],
                    ),
                    NavMenuImportButton(
                        link="circuits:provider_import",
                        permissions=[
                            "circuits.add_provider",
                        ],
                    ),
                ),
            ), ),
        ),
    ),
), )
예제 #6
0
 NavMenuTab(
     name="Virtualization",
     weight=400,
     groups=(
         NavMenuGroup(
             name="Virtual Machines",
             weight=100,
             items=(
                 NavMenuItem(
                     link="virtualization:virtualmachine_list",
                     name="Virtual Machines",
                     weight=100,
                     permissions=[
                         "virtualization.view_virtualmachine",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="virtualization:virtualmachine_add",
                             permissions=[
                                 "virtualization.add_virtualmachine",
                             ],
                         ),
                         NavMenuImportButton(
                             link="virtualization:virtualmachine_import",
                             permissions=[
                                 "virtualization.add_virtualmachine",
                             ],
                         ),
                     ),
                 ),
                 NavMenuItem(
                     link="virtualization:vminterface_list",
                     name="Interfaces",
                     weight=200,
                     permissions=[
                         "virtualization.view_vminterface",
                     ],
                     buttons=(
                         NavMenuImportButton(
                             link="virtualization:vminterface_import",
                             permissions=[
                                 "virtualization.add_vminterface",
                             ],
                         ),
                     ),
                 ),
             ),
         ),
         NavMenuGroup(
             name="Clusters",
             weight=200,
             items=(
                 NavMenuItem(
                     link="virtualization:cluster_list",
                     name="Clusters",
                     weight=100,
                     permissions=[
                         "virtualization.view_cluster",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="virtualization:cluster_add",
                             permissions=[
                                 "virtualization.add_cluster",
                             ],
                         ),
                         NavMenuImportButton(
                             link="virtualization:cluster_import",
                             permissions=[
                                 "virtualization.add_cluster",
                             ],
                         ),
                     ),
                 ),
                 NavMenuItem(
                     link="virtualization:clustertype_list",
                     name="Cluster Types",
                     weight=200,
                     permissions=[
                         "virtualization.view_clustertype",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="virtualization:clustertype_add",
                             permissions=[
                                 "virtualization.add_clustertype",
                             ],
                         ),
                         NavMenuImportButton(
                             link="virtualization:clustertype_import",
                             permissions=[
                                 "virtualization.add_clustertype",
                             ],
                         ),
                     ),
                 ),
                 NavMenuItem(
                     link="virtualization:clustergroup_list",
                     name="Cluster Groups",
                     weight=300,
                     permissions=[
                         "virtualization.view_clustergroup",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="virtualization:clustergroup_add",
                             permissions=[
                                 "virtualization.add_clustergroup",
                             ],
                         ),
                         NavMenuImportButton(
                             link="virtualization:clustergroup_import",
                             permissions=[
                                 "virtualization.add_clustergroup",
                             ],
                         ),
                     ),
                 ),
             ),
         ),
     ),
 ),
예제 #7
0
 NavMenuTab(
     name="Organization",
     weight=100,
     groups=(
         NavMenuGroup(
             name="Tenancy",
             weight=300,
             items=(
                 NavMenuItem(
                     link="tenancy:tenant_list",
                     name="Tenants",
                     weight=100,
                     permissions=[
                         "tenancy.view_tenant",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="tenancy:tenant_add",
                             permissions=[
                                 "tenancy.add_tag",
                             ],
                         ),
                         NavMenuImportButton(
                             link="tenancy:tenant_import",
                             permissions=[
                                 "tenancy.add_tenant",
                             ],
                         ),
                     ),
                 ),
                 NavMenuItem(
                     link="tenancy:tenantgroup_list",
                     name="Tenant Groups",
                     weight=200,
                     permissions=[
                         "tenancy.view_tenantgroup",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="tenancy:tenantgroup_add",
                             permissions=[
                                 "tenancy.add_tenantgroup",
                             ],
                         ),
                         NavMenuImportButton(
                             link="tenancy:tenantgroup_import",
                             permissions=[
                                 "tenancy.add_tenantgroup",
                             ],
                         ),
                     ),
                 ),
             ),
         ),
     ),
 ),
예제 #8
0
 NavMenuTab(
     name="Organization",
     weight=100,
     groups=(
         NavMenuGroup(
             name="Sites",
             weight=100,
             items=(
                 NavMenuItem(
                     link="dcim:site_list",
                     name="Sites",
                     weight=100,
                     permissions=[
                         "dcim.view_site",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="dcim:site_add",
                             permissions=[
                                 "dcim.add_site",
                             ],
                         ),
                         NavMenuImportButton(
                             link="dcim:site_import",
                             permissions=[
                                 "dcim.add_site",
                             ],
                         ),
                     ),
                 ),
                 NavMenuItem(
                     link="dcim:region_list",
                     name="Regions",
                     weight=200,
                     permissions=[
                         "dcim.view_region",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="dcim:region_add",
                             permissions=[
                                 "dcim.add_region",
                             ],
                         ),
                         NavMenuImportButton(
                             link="dcim:region_import",
                             permissions=[
                                 "dcim.add_region",
                             ],
                         ),
                     ),
                 ),
             ),
         ),
         NavMenuGroup(
             name="Racks",
             weight=200,
             items=(
                 NavMenuItem(
                     link="dcim:rack_list",
                     name="Racks",
                     weight=100,
                     permissions=[
                         "dcim.view_rack",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="dcim:rack_add",
                             permissions=[
                                 "dcim.add_rack",
                             ],
                         ),
                         NavMenuImportButton(
                             link="dcim:rack_import",
                             permissions=[
                                 "dcim.add_rack",
                             ],
                         ),
                     ),
                 ),
                 NavMenuItem(
                     link="dcim:rackgroup_list",
                     name="Rack Groups",
                     weight=200,
                     permissions=[
                         "dcim.view_rackgroup",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="dcim:rackgroup_add",
                             permissions=[
                                 "dcim.add_rackgroup",
                             ],
                         ),
                         NavMenuImportButton(
                             link="dcim:rackgroup_import",
                             permissions=[
                                 "dcim.add_rackgroup",
                             ],
                         ),
                     ),
                 ),
                 NavMenuItem(
                     link="dcim:rackrole_list",
                     name="Rack Roles",
                     weight=300,
                     permissions=[
                         "dcim.view_rackrole",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="dcim:rackrole_add",
                             permissions=[
                                 "dcim.add_rackrole",
                             ],
                         ),
                         NavMenuImportButton(
                             link="dcim:rackrole_import",
                             permissions=[
                                 "dcim.add_rackrole",
                             ],
                         ),
                     ),
                 ),
                 NavMenuItem(
                     link="dcim:rackreservation_list",
                     name="Reservations",
                     weight=400,
                     permissions=[
                         "dcim.view_rackreservation",
                     ],
                     buttons=(
                         NavMenuAddButton(
                             link="dcim:rackreservation_add",
                             permissions=[
                                 "dcim.add_rackreservation",
                             ],
                         ),
                         NavMenuImportButton(
                             link="dcim:rackreservation_import",
                             permissions=[
                                 "dcim.add_rackreservation",
                             ],
                         ),
                     ),
                 ),
                 NavMenuItem(
                     link="dcim:rack_elevation_list",
                     name="Elevations",
                     weight=500,
                     permissions=[
                         "dcim.view_rack",
                     ],
                     buttons=(),
                 ),
             ),
         ),
     ),
 ),
예제 #9
0
menu_items = (NavMenuTab(
    name="IPAM",
    weight=300,
    groups=(
        NavMenuGroup(
            name="IP Addresses",
            weight=100,
            items=(NavMenuItem(
                link="ipam:ipaddress_list",
                name="IP Addresses",
                weight=100,
                permissions=[
                    "ipam.view_ipaddress",
                ],
                buttons=(
                    NavMenuAddButton(
                        link="ipam:ipaddress_add",
                        permissions=[
                            "ipam.add_ipaddress",
                        ],
                    ),
                    NavMenuImportButton(
                        link="ipam:ipaddress_import",
                        permissions=[
                            "ipam.add_ipaddress",
                        ],
                    ),
                ),
            ), ),
        ),
        NavMenuGroup(
            name="Prefixes",
            weight=200,
            items=(
                NavMenuItem(
                    link="ipam:prefix_list",
                    name="Prefixes",
                    weight=100,
                    permissions=[
                        "ipam.view_prefix",
                    ],
                    buttons=(
                        NavMenuAddButton(
                            link="ipam:prefix_add",
                            permissions=[
                                "ipam.add_prefix",
                            ],
                        ),
                        NavMenuImportButton(
                            link="ipam:prefix_import",
                            permissions=[
                                "ipam.add_prefix",
                            ],
                        ),
                    ),
                ),
                NavMenuItem(
                    link="ipam:role_list",
                    name="Prefix/VLAN Roles",
                    weight=200,
                    permissions=[
                        "ipam.view_role",
                    ],
                    buttons=(
                        NavMenuAddButton(
                            link="ipam:role_add",
                            permissions=[
                                "ipam.add_role",
                            ],
                        ),
                        NavMenuImportButton(
                            link="ipam:role_import",
                            permissions=[
                                "ipam.add_role",
                            ],
                        ),
                    ),
                ),
            ),
        ),
        NavMenuGroup(
            name="Aggregates",
            weight=300,
            items=(
                NavMenuItem(
                    link="ipam:aggregate_list",
                    name="Aggregates",
                    weight=100,
                    permissions=[
                        "ipam.view_aggregate",
                    ],
                    buttons=(
                        NavMenuAddButton(
                            link="ipam:aggregate_add",
                            permissions=[
                                "ipam.add_aggregate",
                            ],
                        ),
                        NavMenuImportButton(
                            link="ipam:aggregate_import",
                            permissions=[
                                "ipam.add_aggregate",
                            ],
                        ),
                    ),
                ),
                NavMenuItem(
                    link="ipam:rir_list",
                    name="RIRs",
                    weight=200,
                    permissions=[
                        "ipam.view_rir",
                    ],
                    buttons=(
                        NavMenuAddButton(
                            link="ipam:rir_add",
                            permissions=[
                                "ipam.add_rir",
                            ],
                        ),
                        NavMenuImportButton(
                            link="ipam:rir_import",
                            permissions=[
                                "ipam.add_rir",
                            ],
                        ),
                    ),
                ),
            ),
        ),
        NavMenuGroup(
            name="VRFs",
            weight=400,
            items=(
                NavMenuItem(
                    link="ipam:vrf_list",
                    name="VRFs",
                    weight=100,
                    permissions=[
                        "ipam.view_vrf",
                    ],
                    buttons=(
                        NavMenuAddButton(
                            link="ipam:vrf_add",
                            permissions=[
                                "ipam.add_vrf",
                            ],
                        ),
                        NavMenuImportButton(
                            link="ipam:vrf_import",
                            permissions=[
                                "ipam.add_vrf",
                            ],
                        ),
                    ),
                ),
                NavMenuItem(
                    link="ipam:routetarget_list",
                    name="Route Targets",
                    weight=200,
                    permissions=[
                        "ipam.view_routetarget",
                    ],
                    buttons=(
                        NavMenuAddButton(
                            link="ipam:routetarget_add",
                            permissions=[
                                "ipam.add_routetarget",
                            ],
                        ),
                        NavMenuImportButton(
                            link="ipam:routetarget_import",
                            permissions=[
                                "ipam.add_routetarget",
                            ],
                        ),
                    ),
                ),
            ),
        ),
        NavMenuGroup(
            name="VLANs",
            weight=500,
            items=(
                NavMenuItem(
                    link="ipam:vlan_list",
                    name="VLANs",
                    weight=100,
                    permissions=[
                        "ipam.view_vlan",
                    ],
                    buttons=(
                        NavMenuAddButton(
                            link="ipam:vlan_add",
                            permissions=[
                                "ipam.add_vlan",
                            ],
                        ),
                        NavMenuImportButton(
                            link="ipam:vlan_import",
                            permissions=[
                                "ipam.add_vlan",
                            ],
                        ),
                    ),
                ),
                NavMenuItem(
                    link="ipam:vlangroup_list",
                    name="VLAN Groups",
                    weight=200,
                    permissions=[
                        "ipam.view_vlangroup",
                    ],
                    buttons=(
                        NavMenuAddButton(
                            link="ipam:vlangroup_add",
                            permissions=[
                                "ipam.add_vlangroup",
                            ],
                        ),
                        NavMenuImportButton(
                            link="ipam:vlangroup_import",
                            permissions=[
                                "ipam.add_vlangroup",
                            ],
                        ),
                    ),
                ),
            ),
        ),
        NavMenuGroup(
            name="Services",
            weight=600,
            items=(NavMenuItem(
                link="ipam:service_list",
                name="Services",
                weight=100,
                permissions=[
                    "ipam.view_service",
                ],
                buttons=(NavMenuImportButton(
                    link="ipam:service_import",
                    permissions=[
                        "ipam.add_service",
                    ],
                ), ),
            ), ),
        ),
    ),
), )