Coverage for sm / urls.py: 92%
25 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-17 13:46 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-17 13:46 +0000
1from django.urls import path, include
2from django.conf import settings
3from django.conf.urls.static import static
4from django.contrib import admin
6from drf_spectacular.views import (
7 SpectacularAPIView,
8 SpectacularRedocView,
9 SpectacularSwaggerView,
10)
12from .views import (
13 DashboardView,
14 SearchView,
15 ImportStarterPackView,
16 HistoryDiffView,
17 TermsView,
18 PrivacyView,
19 ImpressumView,
20 HealthView,
21)
22from .views_admin import UserListView, GroupProfileUpdateView
23from .views_group import (
24 GroupMemberListView,
25 AddGroupMemberView,
26 RemoveGroupMemberView,
27 GroupPermissionUpdateView,
28 UserPermissionUpdateView,
29 InviteGroupMemberView,
30 AcceptInvitationView,
31 GroupFilterView,
32 GroupCreateView,
33)
34from .views_avatars import avatar_proxy
35from .api.views import (
36 ServerViewSet,
37 VendorViewSet,
38 StatusViewSet,
39 LocationViewSet,
40 DomainViewSet,
41 PatchtimeViewSet,
42 ClusterViewSet,
43 ClusterPackageViewSet,
44)
45from rest_framework import routers
47router = routers.DefaultRouter()
48router.register(r"servers", ServerViewSet, basename="api-server")
49router.register(r"vendors", VendorViewSet, basename="api-vendor")
50router.register(r"statuses", StatusViewSet, basename="api-status")
51router.register(r"locations", LocationViewSet, basename="api-location")
52router.register(r"domains", DomainViewSet, basename="api-domain")
53router.register(r"patchtimes", PatchtimeViewSet, basename="api-patchtime")
54router.register(r"clusters", ClusterViewSet, basename="api-cluster")
55router.register(
56 r"clusterpackages", ClusterPackageViewSet, basename="api-clusterpackage"
57)
59urlpatterns = [
60 path("admin/doc/", include("django.contrib.admindocs.urls")),
61 path("admin/", admin.site.urls),
62 # API
63 path("api/", include(router.urls)),
64 # API Schema & Docs
65 path("api/schema/", SpectacularAPIView.as_view(), name="schema"),
66 path(
67 "api/schema/swagger-ui/",
68 SpectacularSwaggerView.as_view(url_name="schema"),
69 name="swagger-ui",
70 ),
71 path(
72 "api/schema/redoc/",
73 SpectacularRedocView.as_view(url_name="schema"),
74 name="redoc",
75 ),
76 # Allauth URLs
77 path("accounts/", include("allauth.urls")),
78 # Dashboard & Search
79 path("", DashboardView.as_view(), name="dashboard"),
80 path("search/", SearchView.as_view(), name="search"),
81 path(
82 "starter-pack/import/",
83 ImportStarterPackView.as_view(),
84 name="starter_pack_import",
85 ),
86 path("avatar/<str:email_hash>/", avatar_proxy, name="avatar_proxy"),
87 path(
88 "history/<str:app_label>/<str:model_name>/<int:history_id>/",
89 HistoryDiffView.as_view(),
90 name="history_diff",
91 ),
92 # Legal Pages
93 path("terms/", TermsView.as_view(), name="terms"),
94 path("privacy/", PrivacyView.as_view(), name="privacy"),
95 path("impressum/", ImpressumView.as_view(), name="impressum"),
96 path("health/", HealthView.as_view(), name="health"),
97 # User Management (Staff)
98 path("admin/users/", UserListView.as_view(), name="user_management_list"),
99 path(
100 "admin/groups/<int:pk>/",
101 GroupProfileUpdateView.as_view(),
102 name="group_profile_edit",
103 ),
104 # Group Management (Owner)
105 path("group/members/", GroupMemberListView.as_view(), name="group_member_list"),
106 path("group/create/", GroupCreateView.as_view(), name="group_create"),
107 path(
108 "group/members/add/<int:group_id>/",
109 AddGroupMemberView.as_view(),
110 name="group_member_add",
111 ),
112 path(
113 "group/members/remove/<int:group_id>/<int:user_id>/",
114 RemoveGroupMemberView.as_view(),
115 name="group_member_remove",
116 ),
117 path(
118 "group/permissions/<int:group_id>/",
119 GroupPermissionUpdateView.as_view(),
120 name="group_permission_edit",
121 ),
122 path(
123 "group/permissions/<int:group_id>/user/<int:user_id>/",
124 UserPermissionUpdateView.as_view(),
125 name="group_user_permission_edit",
126 ),
127 path(
128 "group/invite/<int:group_id>/",
129 InviteGroupMemberView.as_view(),
130 name="group_member_invite",
131 ),
132 path(
133 "invitation/<uuid:token>/",
134 AcceptInvitationView.as_view(),
135 name="accept_invitation",
136 ),
137 path(
138 "group/filter/",
139 GroupFilterView.as_view(),
140 name="group_filter",
141 ),
142 # Project Apps
143 path("cluster/", include("cluster.urls")),
144 path("operatingsystem/", include("operatingsystem.urls")),
145 path("clusterpackage/", include("clusterpackage.urls")),
146 path("patchtime/", include("patchtime.urls")),
147 path("location/", include("location.urls")),
148 path("servermodel/", include("servermodel.urls")),
149 path("server/", include("server.urls")),
150 path("status/", include("status.urls")),
151 path("domain/", include("domain.urls")),
152 path("clustersoftware/", include("clustersoftware.urls")),
153 path("clusterpackagetype/", include("clusterpackagetype.urls")),
154 path("vendor/", include("vendor.urls")),
155]
157if "debug_toolbar" in settings.INSTALLED_APPS:
158 import debug_toolbar
160 urlpatterns = [path("__debug__/", include(debug_toolbar.urls))] + urlpatterns
162urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)