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

1from importlib import import_module 

2 

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 

7 

8from netbox.registry import registry 

9 

10from . import views 

11 

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] 

17 

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 

24 

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 ) 

31 

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 )