1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

added admin and api views for listing all plugins, and refactored urls import

This commit is contained in:
John Anderson
2020-03-20 20:10:02 -04:00
parent e220c38b97
commit 4e84e8048f
10 changed files with 242 additions and 39 deletions

View File

@@ -0,0 +1,53 @@
import importlib
from django.apps import apps
from django.conf import settings
from django.conf.urls import include
from django.core.exceptions import ImproperlyConfigured
from django.urls import path
from django.utils.module_loading import import_string
from . import views
# Plugins
plugin_patterns = []
plugin_api_patterns = []
for plugin in settings.PLUGINS:
app = apps.get_app_config(plugin)
url_slug = getattr(app, 'url_slug') or app.label
# Check if the plugin specifies any URLs
try:
urlpatterns = import_string(f"{plugin}.urls.urlpatterns")
except ImportError:
# No urls defined
urlpatterns = None
if urlpatterns:
plugin_patterns.append(
path(f"{url_slug}/", include((urlpatterns, app.label)))
)
# Check if the plugin specifies any API URLs
try:
urlpatterns = import_string(f"{plugin}.api.urls.urlpatterns")
app_name = import_string(f"{plugin}.api.urls.app_name")
except ImportError:
# No urls defined
urlpatterns = None
if urlpatterns:
plugin_api_patterns.append(
path(f"{url_slug}/", include((urlpatterns, app_name)))
)
# Plugin list admin view
admin_plugin_patterns = [
path('', views.installed_plugins_admin_view, name='plugins_list')
]
# Plugin list API view
plugin_api_patterns += [
path('', views.PluginsAPIRootView.as_view(), name='api-root'),
path('installed-plugins/', views.InstalledPluginsAPIView.as_view(), name='plugins-list')
]