| 123456789101112131415161718192021222324252627282930313233343536373839 |
- from django.apps import apps
- from django.conf import settings
- from django.conf.urls import include
- from django.contrib.admin.views.decorators import staff_member_required
- from django.urls import path
- from extras.plugins.utils import import_object
- from . import views
- # Initialize URL base, API, and admin URL patterns for plugins
- plugin_patterns = []
- plugin_api_patterns = [
- path('', views.PluginsAPIRootView.as_view(), name='api-root'),
- path('installed-plugins/', views.InstalledPluginsAPIView.as_view(), name='plugins-list')
- ]
- plugin_admin_patterns = [
- path('installed-plugins/', staff_member_required(views.InstalledPluginsAdminView.as_view()), name='plugins_list')
- ]
- # Register base/API URL patterns for each plugin
- for plugin_path in settings.PLUGINS:
- plugin_name = plugin_path.split('.')[-1]
- app = apps.get_app_config(plugin_name)
- base_url = getattr(app, 'base_url') or app.label
- # Check if the plugin specifies any base URLs
- urlpatterns = import_object(f"{plugin_path}.urls.urlpatterns")
- if urlpatterns is not None:
- plugin_patterns.append(
- path(f"{base_url}/", include((urlpatterns, app.label)))
- )
- # Check if the plugin specifies any API URLs
- urlpatterns = import_object(f"{plugin_path}.api.urls.urlpatterns")
- if urlpatterns is not None:
- plugin_api_patterns.append(
- path(f"{base_url}/", include((urlpatterns, f"{app.label}-api")))
- )
|