diff --git a/app/access/urls_api.py b/app/access/urls_api.py index bd9a96cf..6dee2800 100644 --- a/app/access/urls_api.py +++ b/app/access/urls_api.py @@ -34,17 +34,17 @@ router = DefaultRouter(trailing_slash=False) router.register('', access_v2.Index, basename = '_api_v2_access_home') router.register( - prefix = '(?P[company]+)', viewset = entity.ViewSet, + prefix = '/(?P[company]+)', viewset = entity.ViewSet, feature_flag = '2025-00008',basename = '_api_v2_company' ) router.register( - prefix=f'entity/(?P[{entity_type_names}]+)?', viewset = entity.ViewSet, + prefix=f'/entity/(?P[{entity_type_names}]+)?', viewset = entity.ViewSet, feature_flag = '2025-00002', basename = '_api_entity_sub' ) router.register( - prefix = 'entity', viewset = entity.NoDocsViewSet, + prefix = '/entity', viewset = entity.NoDocsViewSet, feature_flag = '2025-00002', basename = '_api_entity' ) @@ -54,7 +54,7 @@ router.register( # ) router.register( - prefix = 'tenant', viewset = organization.ViewSet, + prefix = '/tenant', viewset = organization.ViewSet, basename = '_api_tenant' ) @@ -64,7 +64,7 @@ router.register( # ) router.register( - prefix = 'tenant/(?P[0-9]+)/team', viewset = team_v2.ViewSet, + prefix = '/tenant/(?P[0-9]+)/team', viewset = team_v2.ViewSet, basename = '_api_v2_organization_team' ) @@ -75,13 +75,13 @@ router.register( # ) router.register( - prefix = 'access/tenant/(?P[0-9]+)/team/(?P[0-9]+)/user', + prefix = '/access/tenant/(?P[0-9]+)/team/(?P[0-9]+)/user', viewset = team_user_v2.ViewSet, basename = '_api_v2_organization_team_user' ) router.register( - prefix = 'role', viewset = role.ViewSet, + prefix = '/role', viewset = role.ViewSet, feature_flag = '2025-00003', basename = '_api_role' ) diff --git a/app/accounting/urls.py b/app/accounting/urls.py index 408c9d86..cd6b6732 100644 --- a/app/accounting/urls.py +++ b/app/accounting/urls.py @@ -42,7 +42,7 @@ asset_type_names = str(asset_type_names)[:-1] if not asset_type_names: asset_type_names = 'none' -router.register(f'asset/(?P[{asset_type_names}]+)?', asset.ViewSet, feature_flag = '2025-00004', basename='_api_asset_sub') -router.register('asset', asset.NoDocsViewSet, feature_flag = '2025-00004', basename='_api_asset') +router.register(f'/asset/(?P[{asset_type_names}]+)?', asset.ViewSet, feature_flag = '2025-00004', basename='_api_asset_sub') +router.register('/asset', asset.NoDocsViewSet, feature_flag = '2025-00004', basename='_api_asset') urlpatterns = router.urls diff --git a/app/api/urls_v2.py b/app/api/urls_v2.py index 087231b7..7e6fc46b 100644 --- a/app/api/urls_v2.py +++ b/app/api/urls_v2.py @@ -61,22 +61,22 @@ router = DefaultRouter(trailing_slash=False) router.register('', v2.Index, basename='_api_v2_home') -router.register('base', base_index_v2.Index, basename='_api_v2_base_home') -router.register('base/content_type', content_type_v2.ViewSet, basename='_api_v2_content_type') -router.register('base/permission', permission_v2.ViewSet, basename='_api_v2_permission') -router.register('base/user', user_v2.ViewSet, basename='_api_v2_user') +router.register('/base', base_index_v2.Index, basename='_api_v2_base_home') +router.register('/base/content_type', content_type_v2.ViewSet, basename='_api_v2_content_type') +router.register('/base/permission', permission_v2.ViewSet, basename='_api_v2_permission') +router.register('/base/user', user_v2.ViewSet, basename='_api_v2_user') router.register( - prefix = f'(?P[{history_app_labels}]+)/(?P[{history_type_names} \ + prefix = f'/(?P[{history_app_labels}]+)/(?P[{history_type_names} \ ]+)/(?P[0-9]+)/history', viewset = audit_history.ViewSet, basename = '_api_centurionaudit_sub' ) router.register( - prefix = f'(?P[{notes_app_labels}]+)/(?P[{notes_type_names} \ + prefix = f'/(?P[{notes_app_labels}]+)/(?P[{notes_type_names} \ ]+)/(?P[0-9]+)/notes', viewset = centurion_model_notes.ViewSet, basename = '_api_centurionmodelnote_sub' @@ -85,24 +85,24 @@ router.register( urlpatterns = [ - path('schema', SpectacularAPIView.as_view(api_version='v2'), name='schema-v2',), - path('docs', SpectacularSwaggerView.as_view(url_name='schema-v2'), name='_api_v2_docs'), + path('/schema', SpectacularAPIView.as_view(api_version='v2'), name='schema-v2',), + path('/docs', SpectacularSwaggerView.as_view(url_name='schema-v2'), name='_api_v2_docs'), ] urlpatterns += router.urls urlpatterns += [ - path(route = "access/", view = include("access.urls_api")), - path(route = "accounting/", view = include("accounting.urls")), - path(route = "assistance/", view = include("assistance.urls_api")), - path(route = "config_management/", view = include("config_management.urls_api")), - path(route = "core/", view = include("core.urls_api")), - path(route = "devops/", view = include("devops.urls")), - path(route = "hr/", view = include('human_resources.urls')), - path(route = "itam/", view = include("itam.urls_api")), - path(route = "itim/", view = include("itim.urls_api")), - path(route = "project_management/", view = include("project_management.urls_api")), - path(route = "settings/", view = include("settings.urls_api")), - path(route = 'public/', view = include('api.urls_public')), + path(route = "/access", view = include("access.urls_api")), + path(route = "/accounting", view = include("accounting.urls")), + path(route = "/assistance", view = include("assistance.urls_api")), + path(route = "/config_management", view = include("config_management.urls_api")), + path(route = "/core", view = include("core.urls_api")), + path(route = "/devops", view = include("devops.urls")), + path(route = "/hr", view = include('human_resources.urls')), + path(route = "/itam", view = include("itam.urls_api")), + path(route = "/itim", view = include("itim.urls_api")), + path(route = "/project_management", view = include("project_management.urls_api")), + path(route = "/settings", view = include("settings.urls_api")), + path(route = '/public', view = include('api.urls_public')), ] diff --git a/app/assistance/urls_api.py b/app/assistance/urls_api.py index df81aa2b..18f50b01 100644 --- a/app/assistance/urls_api.py +++ b/app/assistance/urls_api.py @@ -19,16 +19,16 @@ router.register( basename = '_api_v2_assistance_home' ) router.register( - prefix = 'knowledge_base', viewset = knowledge_base_v2.ViewSet, + prefix = '/knowledge_base', viewset = knowledge_base_v2.ViewSet, basename = '_api_knowledgebase' ) router.register( - prefix = '(?P.+)/(?P[0-9]+)/knowledge_base', + prefix = '/(?P.+)/(?P[0-9]+)/knowledge_base', viewset = model_knowledge_base_article.ViewSet, basename = '_api_v2_model_kb' ) router.register( - prefix = 'ticket/request', viewset = request_ticket_v2.ViewSet, + prefix = '/ticket/request', viewset = request_ticket_v2.ViewSet, basename = '_api_v2_ticket_request' ) diff --git a/app/centurion/settings.py b/app/centurion/settings.py index b3f9de31..280ca65e 100644 --- a/app/centurion/settings.py +++ b/app/centurion/settings.py @@ -20,6 +20,7 @@ import django.db.models.options as options options.DEFAULT_NAMES = (*options.DEFAULT_NAMES, 'sub_model_type', 'itam_sub_model_type') +APPEND_SLASH = False AUTH_USER_MODEL = 'auth.User' # Build paths inside the project like this: BASE_DIR / 'subdir'. diff --git a/app/centurion/urls.py b/app/centurion/urls.py index 4970f85e..87b26c2d 100644 --- a/app/centurion/urls.py +++ b/app/centurion/urls.py @@ -4,14 +4,14 @@ from django.contrib.auth import views as auth_views from django.views.static import serve from django.urls import include, path, re_path - +from rest_framework import urls urlpatterns = [ - path('admin/', admin.site.urls, name='_administration'), + path('admin', admin.site.urls, name='_administration'), - path('account/password_change/', auth_views.PasswordChangeView.as_view(template_name="password_change.html.j2"), name="change_password"), + path('account/password_change', auth_views.PasswordChangeView.as_view(template_name="password_change.html.j2"), name="change_password"), - path("account/", include("django.contrib.auth.urls")), + path("account", include("django.contrib.auth.urls")), re_path(r'^static/(?P.*)$', serve,{'document_root': settings.STATIC_ROOT}), @@ -30,15 +30,16 @@ if settings.API_ENABLED: urlpatterns += [ - path("api/", include("api.urls", namespace = 'v1')), + path("api", include("api.urls", namespace = 'v1')), - path("api/v2/", include("api.urls_v2", namespace = 'v2')), + path("api/v2", include("api.urls_v2", namespace = 'v2')), ] urlpatterns += [ - path('api/v2/auth/', include('rest_framework.urls')), + path('api/v2/auth/login', auth_views.LoginView.as_view(template_name='rest_framework/login.html'), name='login'), + path('api/v2/auth/logout', auth_views.LogoutView.as_view(), name='logout'), ] diff --git a/app/config_management/urls_api.py b/app/config_management/urls_api.py index 340a6a18..865d5385 100644 --- a/app/config_management/urls_api.py +++ b/app/config_management/urls_api.py @@ -18,15 +18,15 @@ router.register( basename = '_api_v2_config_management_home' ) router.register( - prefix = 'group', viewset = config_group_v2.ViewSet, + prefix = '/group', viewset = config_group_v2.ViewSet, basename = '_api_configgroups' ) router.register( - prefix = 'group/(?P[0-9]+)/child_group', viewset = config_group_v2.ViewSet, + prefix = '/group/(?P[0-9]+)/child_group', viewset = config_group_v2.ViewSet, basename = '_api_configgroups_child' ) router.register( - prefix = 'group/(?P[0-9]+)/software', + prefix = '/group/(?P[0-9]+)/software', viewset = config_group_software_v2.ViewSet, basename = '_api_configgroupsoftware' ) diff --git a/app/core/urls_api.py b/app/core/urls_api.py index 75cc27ba..4a198f72 100644 --- a/app/core/urls_api.py +++ b/app/core/urls_api.py @@ -41,59 +41,59 @@ router: DefaultRouter = DefaultRouter(trailing_slash=False) router.register( - 'history', audit_history.NoDocsViewSet, + '/history', audit_history.NoDocsViewSet, basename = '_api_centurionaudit' ) router.register( - prefix=f'ticket', viewset = ticket.NoDocsViewSet, + prefix=f'/ticket', viewset = ticket.NoDocsViewSet, feature_flag = '2025-00006', basename = '_api_ticketbase' ) router.register( - prefix=f'ticket/(?P[{ticket_type_names}]+)', viewset = ticket.ViewSet, + prefix=f'/ticket/(?P[{ticket_type_names}]+)', viewset = ticket.ViewSet, feature_flag = '2025-00006', basename = '_api_ticketbase_sub' ) router.register( - prefix = 'ticket/(?P[0-9]+)/comment', viewset = ticket_comment.NoDocsViewSet, + prefix = '/ticket/(?P[0-9]+)/comment', viewset = ticket_comment.NoDocsViewSet, feature_flag = '2025-00006', basename = '_api_ticket_comment_base' ) router.register( - prefix = 'ticket/(?P[0-9]+)/comment/(?P[0-9]+)/threads', + prefix = '/ticket/(?P[0-9]+)/comment/(?P[0-9]+)/threads', viewset = ticket_comment.ViewSet, feature_flag = '2025-00006', basename = '_api_ticket_comment_base_thread' ) router.register( - prefix = 'ticket/(?P[0-9]+)/comments', viewset = ticket_comment_depreciated.ViewSet, + prefix = '/ticket/(?P[0-9]+)/comments', viewset = ticket_comment_depreciated.ViewSet, basename = '_api_v2_ticket_comment' ) router.register( - prefix = 'ticket/(?P[0-9]+)/comments/(?P[0-9]+)/threads', + prefix = '/ticket/(?P[0-9]+)/comments/(?P[0-9]+)/threads', viewset = ticket_comment_depreciated.ViewSet, basename = '_api_v2_ticket_comment_threads' ) router.register( - prefix = 'ticket/(?P[0-9]+)/linked_item', viewset = ticket_linked_item.ViewSet, + prefix = '/ticket/(?P[0-9]+)/linked_item', viewset = ticket_linked_item.ViewSet, basename = '_api_v2_ticket_linked_item' ) router.register( - prefix = 'ticket/(?P[0-9]+)/related_ticket', viewset = related_ticket.ViewSet, + prefix = '/ticket/(?P[0-9]+)/related_ticket', viewset = related_ticket.ViewSet, basename = '_api_v2_ticket_related' ) router.register( - prefix=f'ticket/(?P[0-9]+)/(?P[{ticket_comment_names}]+)', + prefix=f'/ticket/(?P[0-9]+)/(?P[{ticket_comment_names}]+)', viewset = ticket_comment.ViewSet, feature_flag = '2025-00006', basename = '_api_ticket_comment_base_sub' ) router.register( - prefix=f'ticket/(?P[0-9]+)/(?P[{ticket_comment_names} \ + prefix=f'/ticket/(?P[0-9]+)/(?P[{ticket_comment_names} \ ]+)/(?P[0-9]+)/threads', viewset = ticket_comment.ViewSet, feature_flag = '2025-00006', basename = '_api_ticket_comment_base_sub_thread' ) router.register( - prefix = '(?P[a-z_]+)/(?P[0-9]+)/item_ticket', + prefix = '/(?P[a-z_]+)/(?P[0-9]+)/item_ticket', viewset = ticket_linked_item.ViewSet, basename = '_api_v2_item_tickets' ) diff --git a/app/devops/urls.py b/app/devops/urls.py index c24962ac..15d5e991 100644 --- a/app/devops/urls.py +++ b/app/devops/urls.py @@ -13,21 +13,21 @@ app_name = "devops" router = DefaultRouter(trailing_slash=False) router.register( - prefix = 'feature_flag', viewset = feature_flag.ViewSet, + prefix = '/feature_flag', viewset = feature_flag.ViewSet, basename = '_api_featureflag' ) router.register( - prefix = r'git_repository(?:/(?Pgitlab|github))?', + prefix = r'/git_repository(?:/(?Pgitlab|github))?', viewset = git_repository.ViewSet, feature_flag = '2025-00001', basename = '_api_gitrepository' ) router.register( - prefix = r'(?Pgithubrepository|gitlabrepository)', + prefix = r'/(?Pgithubrepository|gitlabrepository)', viewset = git_repository.ViewSet, feature_flag = '2025-00001', basename = '_api_gitrepository_sub' ) router.register( - prefix = 'git_group', viewset = git_group.ViewSet, + prefix = '/git_group', viewset = git_group.ViewSet, feature_flag = '2025-00001', basename = '_api_gitgroup' ) diff --git a/app/devops/urls_public.py b/app/devops/urls_public.py index 08f68964..3b458aa1 100644 --- a/app/devops/urls_public.py +++ b/app/devops/urls_public.py @@ -11,8 +11,8 @@ app_name = "devops" router = SimpleRouter(trailing_slash=False) -router.register('flags', feature_flag_endpoints.Index, basename='_api_v2_flags') +router.register('/flags', feature_flag_endpoints.Index, basename='_api_v2_flags') -router.register('(?P[0-9]+)/flags/(?P[0-9]+)', public_feature_flag.ViewSet, basename='_api_checkin') +router.register('/(?P[0-9]+)/flags/(?P[0-9]+)', public_feature_flag.ViewSet, basename='_api_checkin') urlpatterns = router.urls diff --git a/app/itam/urls_api.py b/app/itam/urls_api.py index 46760edd..ffbcdd56 100644 --- a/app/itam/urls_api.py +++ b/app/itam/urls_api.py @@ -34,57 +34,57 @@ router.register( basename = '_api_v2_itam_home' ) router.register( - prefix = '(?P[itamassetbase]+)', viewset = asset.ViewSet, + prefix = '/(?P[itamassetbase]+)', viewset = asset.ViewSet, feature_flag = '2025-00007', basename = '_api_itamassetbase' ) router.register( - prefix = 'device', viewset = device.ViewSet, + prefix = '/device', viewset = device.ViewSet, basename = '_api_device' ) router.register( - prefix = 'device/(?P[0-9]+)/operating_system', + prefix = '/device/(?P[0-9]+)/operating_system', viewset = device_operating_system.ViewSet, basename = '_api_deviceoperatingsystem') router.register( - prefix = 'device/(?P[0-9]+)/software', viewset = device_software_v2.ViewSet, + prefix = '/device/(?P[0-9]+)/software', viewset = device_software_v2.ViewSet, basename = '_api_devicesoftware' ) router.register( - prefix = 'device/(?P[0-9]+)/service', viewset = service_device_v2.ViewSet, + prefix = '/device/(?P[0-9]+)/service', viewset = service_device_v2.ViewSet, basename = '_api_v2_service_device' ) router.register( - prefix = 'inventory', viewset = inventory.ViewSet, + prefix = '/inventory', viewset = inventory.ViewSet, basename = '_api_v2_inventory' ) router.register( - prefix = 'operating_system', viewset = operating_system_v2.ViewSet, + prefix = '/operating_system', viewset = operating_system_v2.ViewSet, basename = '_api_operatingsystem' ) router.register( - prefix = 'operating_system/(?P[0-9]+)/installs', + prefix = '/operating_system/(?P[0-9]+)/installs', viewset = device_operating_system.ViewSet, basename = '_api_v2_operating_system_installs' ) router.register( - prefix = 'operating_system/(?P[0-9]+)/version', + prefix = '/operating_system/(?P[0-9]+)/version', viewset = operating_system_version_v2.ViewSet, basename = '_api_operatingsystemversion' ) router.register( - prefix = 'software', viewset = software_v2.ViewSet, + prefix = '/software', viewset = software_v2.ViewSet, basename = '_api_software' ) router.register( - prefix = 'software/(?P[0-9]+)/installs', viewset = device_software_v2.ViewSet, + prefix = '/software/(?P[0-9]+)/installs', viewset = device_software_v2.ViewSet, basename = '_api_v2_software_installs' ) router.register( - prefix = 'software/(?P[0-9]+)/version', viewset = software_version_v2.ViewSet, + prefix = '/software/(?P[0-9]+)/version', viewset = software_version_v2.ViewSet, basename = '_api_softwareversion' ) router.register( - prefix = 'software/(?P[0-9]+)/feature_flag', + prefix = '/software/(?P[0-9]+)/feature_flag', viewset = software_enable_feature_flag.ViewSet, basename = '_api_softwareenablefeatureflag' ) diff --git a/app/itim/urls_api.py b/app/itim/urls_api.py index dd92e9d5..935d36d8 100644 --- a/app/itim/urls_api.py +++ b/app/itim/urls_api.py @@ -23,27 +23,27 @@ router.register( basename = '_api_v2_itim_home' ) router.register( - prefix = 'ticket/change', viewset = change.ViewSet, + prefix = '/ticket/change', viewset = change.ViewSet, basename = '_api_v2_ticket_change' ) router.register( - prefix = 'cluster', viewset = cluster_v2.ViewSet, + prefix = '/cluster', viewset = cluster_v2.ViewSet, basename = '_api_cluster' ) router.register( - prefix = 'cluster/(?P[0-9]+)/service', viewset = service_cluster.ViewSet, + prefix = '/cluster/(?P[0-9]+)/service', viewset = service_cluster.ViewSet, basename = '_api_v2_service_cluster' ) router.register( - prefix = 'ticket/incident', viewset = incident.ViewSet, + prefix = '/ticket/incident', viewset = incident.ViewSet, basename = '_api_v2_ticket_incident' ) router.register( - prefix = 'ticket/problem', viewset = problem.ViewSet, + prefix = '/ticket/problem', viewset = problem.ViewSet, basename = '_api_v2_ticket_problem' ) router.register( - prefix = 'service', viewset = service.ViewSet, + prefix = '/service', viewset = service.ViewSet, basename = '_api_service' ) diff --git a/app/project_management/urls_api.py b/app/project_management/urls_api.py index 6209e2ab..10bae4e5 100644 --- a/app/project_management/urls_api.py +++ b/app/project_management/urls_api.py @@ -20,16 +20,16 @@ router.register( basename = '_api_v2_project_management_home' ) router.register( - prefix = 'project', viewset = project.ViewSet, + prefix = '/project', viewset = project.ViewSet, basename = '_api_project' ) router.register( - prefix = 'project/(?P[0-9]+)/milestone', + prefix = '/project/(?P[0-9]+)/milestone', viewset = project_milestone.ViewSet, basename = '_api_projectmilestone' ) router.register( - prefix = 'project/(?P[0-9]+)/project_task', + prefix = '/project/(?P[0-9]+)/project_task', viewset = project_task.ViewSet, basename = '_api_v2_ticket_project_task' ) diff --git a/app/settings/urls_api.py b/app/settings/urls_api.py index 3333050f..9ddedc46 100644 --- a/app/settings/urls_api.py +++ b/app/settings/urls_api.py @@ -52,70 +52,70 @@ router.register( basename = '_api_v2_settings_home' ) router.register( - prefix = 'app_settings', viewset = app_settings.ViewSet, + prefix = '/app_settings', viewset = app_settings.ViewSet, basename = '_api_appsettings' ) router.register( - prefix = 'celery_log', viewset = celery_log_v2.ViewSet, + prefix = '/celery_log', viewset = celery_log_v2.ViewSet, basename = '_api_v2_celery_log' ) router.register( - prefix = 'cluster_type', viewset = cluster_type_v2.ViewSet, + prefix = '/cluster_type', viewset = cluster_type_v2.ViewSet, basename = '_api_clustertype' ) router.register( - prefix = 'device_model', viewset = device_model.ViewSet, + prefix = '/device_model', viewset = device_model.ViewSet, basename = '_api_devicemodel' ) router.register( - prefix = 'device_type', viewset = device_type.ViewSet, + prefix = '/device_type', viewset = device_type.ViewSet, basename = '_api_devicetype' ) router.register( - prefix = 'external_link', viewset = external_link.ViewSet, + prefix = '/external_link', viewset = external_link.ViewSet, basename = '_api_externallink' ) router.register( - prefix = 'knowledge_base_category', + prefix = '/knowledge_base_category', viewset = knowledge_base_category_v2.ViewSet, basename = '_api_knowledgebasecategory' ) router.register( - prefix = 'manufacturer', viewset = manufacturer_v2.ViewSet, + prefix = '/manufacturer', viewset = manufacturer_v2.ViewSet, basename = '_api_manufacturer' ) router.register( - prefix = 'port', viewset = port_v2.ViewSet, + prefix = '/port', viewset = port_v2.ViewSet, basename = '_api_port' ) router.register( - prefix = 'project_state', + prefix = '/project_state', viewset = project_state.ViewSet, basename = '_api_projectstate' ) router.register( - prefix = 'project_type', viewset = project_type.ViewSet, + prefix = '/project_type', viewset = project_type.ViewSet, basename = '_api_projecttype' ) router.register( - prefix = 'software_category', viewset = software_category_v2.ViewSet, + prefix = '/software_category', viewset = software_category_v2.ViewSet, basename = '_api_softwarecategory' ) router.register( - prefix = 'ticket_category', + prefix = '/ticket_category', viewset = ticket_category.ViewSet, basename = '_api_ticketcategory' ) router.register( - prefix = 'ticket_comment_category', + prefix = '/ticket_comment_category', viewset = ticket_comment_category.ViewSet, basename = '_api_ticketcommentcategory' ) router.register( - prefix = 'user_settings', viewset = user_settings.ViewSet, + prefix = '/user_settings', viewset = user_settings.ViewSet, basename = '_api_usersettings' ) router.register( - prefix = 'user_(?P[0-9]+)/token', viewset = auth_token.ViewSet, + prefix = '/user_(?P[0-9]+)/token', viewset = auth_token.ViewSet, basename = '_api_authtoken' )