Coverage for netbox/plugins/urls.py: 42%
20 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from importlib import import_module
3from django.apps import apps
4from django.conf.urls import include
5from django.urls import path
6from django.utils.module_loading import import_string, module_has_submodule
8from netbox.registry import registry
10from . import views
12plugin_patterns = []
13plugin_api_patterns = [
14 path('', views.PluginsAPIRootView.as_view(), name='api-root'),
15 path('installed-plugins/', views.InstalledPluginsAPIView.as_view(), name='plugins-list')
16]
18# Register base/API URL patterns for each plugin
19for plugin_path in registry['plugins']['installed']: 19 ↛ 20line 19 didn't jump to line 20 because the loop on line 19 never started
20 plugin = import_module(plugin_path)
21 plugin_name = plugin_path.split('.')[-1]
22 app = apps.get_app_config(plugin_name)
23 base_url = getattr(app, 'base_url') or app.label
25 # Check if the plugin specifies any base URLs
26 if module_has_submodule(plugin, 'urls'):
27 urlpatterns = import_string(f"{plugin_path}.urls.urlpatterns")
28 plugin_patterns.append(
29 path(f"{base_url}/", include((urlpatterns, app.label)))
30 )
32 # Check if the plugin specifies any API URLs
33 if module_has_submodule(plugin, 'api.urls'):
34 urlpatterns = import_string(f"{plugin_path}.api.urls.urlpatterns")
35 plugin_api_patterns.append(
36 path(f"{base_url}/", include((urlpatterns, f"{app.label}-api")))
37 )