fix: remove trailing slant from URLs

ref: #947
This commit is contained in:
2025-08-12 12:50:27 +09:30
parent 3131258491
commit 6732315b96
14 changed files with 100 additions and 98 deletions

View File

@ -34,17 +34,17 @@ router = DefaultRouter(trailing_slash=False)
router.register('', access_v2.Index, basename = '_api_v2_access_home')
router.register(
prefix = '(?P<model_name>[company]+)', viewset = entity.ViewSet,
prefix = '/(?P<model_name>[company]+)', viewset = entity.ViewSet,
feature_flag = '2025-00008',basename = '_api_v2_company'
)
router.register(
prefix=f'entity/(?P<model_name>[{entity_type_names}]+)?', viewset = entity.ViewSet,
prefix=f'/entity/(?P<model_name>[{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<organization_id>[0-9]+)/team', viewset = team_v2.ViewSet,
prefix = '/tenant/(?P<organization_id>[0-9]+)/team', viewset = team_v2.ViewSet,
basename = '_api_v2_organization_team'
)
@ -75,13 +75,13 @@ router.register(
# )
router.register(
prefix = 'access/tenant/(?P<organization_id>[0-9]+)/team/(?P<team_id>[0-9]+)/user',
prefix = '/access/tenant/(?P<organization_id>[0-9]+)/team/(?P<team_id>[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'
)

View File

@ -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<model_name>[{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<model_name>[{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

View File

@ -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<app_label>[{history_app_labels}]+)/(?P<model_name>[{history_type_names} \
prefix = f'/(?P<app_label>[{history_app_labels}]+)/(?P<model_name>[{history_type_names} \
]+)/(?P<model_id>[0-9]+)/history',
viewset = audit_history.ViewSet,
basename = '_api_centurionaudit_sub'
)
router.register(
prefix = f'(?P<app_label>[{notes_app_labels}]+)/(?P<model_name>[{notes_type_names} \
prefix = f'/(?P<app_label>[{notes_app_labels}]+)/(?P<model_name>[{notes_type_names} \
]+)/(?P<model_id>[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')),
]

View File

@ -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<model>.+)/(?P<model_pk>[0-9]+)/knowledge_base',
prefix = '/(?P<model>.+)/(?P<model_pk>[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'
)

View File

@ -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'.

View File

@ -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<path>.*)$', 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'),
]

View File

@ -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<parent_group>[0-9]+)/child_group', viewset = config_group_v2.ViewSet,
prefix = '/group/(?P<parent_group>[0-9]+)/child_group', viewset = config_group_v2.ViewSet,
basename = '_api_configgroups_child'
)
router.register(
prefix = 'group/(?P<config_group_id>[0-9]+)/software',
prefix = '/group/(?P<config_group_id>[0-9]+)/software',
viewset = config_group_software_v2.ViewSet,
basename = '_api_configgroupsoftware'
)

View File

@ -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>[{ticket_type_names}]+)', viewset = ticket.ViewSet,
prefix=f'/ticket/(?P<ticket_type>[{ticket_type_names}]+)', viewset = ticket.ViewSet,
feature_flag = '2025-00006', basename = '_api_ticketbase_sub'
)
router.register(
prefix = 'ticket/(?P<ticket_id>[0-9]+)/comment', viewset = ticket_comment.NoDocsViewSet,
prefix = '/ticket/(?P<ticket_id>[0-9]+)/comment', viewset = ticket_comment.NoDocsViewSet,
feature_flag = '2025-00006', basename = '_api_ticket_comment_base'
)
router.register(
prefix = 'ticket/(?P<ticket_id>[0-9]+)/comment/(?P<parent_id>[0-9]+)/threads',
prefix = '/ticket/(?P<ticket_id>[0-9]+)/comment/(?P<parent_id>[0-9]+)/threads',
viewset = ticket_comment.ViewSet,
feature_flag = '2025-00006', basename = '_api_ticket_comment_base_thread'
)
router.register(
prefix = 'ticket/(?P<ticket_id>[0-9]+)/comments', viewset = ticket_comment_depreciated.ViewSet,
prefix = '/ticket/(?P<ticket_id>[0-9]+)/comments', viewset = ticket_comment_depreciated.ViewSet,
basename = '_api_v2_ticket_comment'
)
router.register(
prefix = 'ticket/(?P<ticket_id>[0-9]+)/comments/(?P<parent_id>[0-9]+)/threads',
prefix = '/ticket/(?P<ticket_id>[0-9]+)/comments/(?P<parent_id>[0-9]+)/threads',
viewset = ticket_comment_depreciated.ViewSet,
basename = '_api_v2_ticket_comment_threads'
)
router.register(
prefix = 'ticket/(?P<ticket_id>[0-9]+)/linked_item', viewset = ticket_linked_item.ViewSet,
prefix = '/ticket/(?P<ticket_id>[0-9]+)/linked_item', viewset = ticket_linked_item.ViewSet,
basename = '_api_v2_ticket_linked_item'
)
router.register(
prefix = 'ticket/(?P<ticket_id>[0-9]+)/related_ticket', viewset = related_ticket.ViewSet,
prefix = '/ticket/(?P<ticket_id>[0-9]+)/related_ticket', viewset = related_ticket.ViewSet,
basename = '_api_v2_ticket_related'
)
router.register(
prefix=f'ticket/(?P<ticket_id>[0-9]+)/(?P<ticket_comment_model>[{ticket_comment_names}]+)',
prefix=f'/ticket/(?P<ticket_id>[0-9]+)/(?P<ticket_comment_model>[{ticket_comment_names}]+)',
viewset = ticket_comment.ViewSet,
feature_flag = '2025-00006', basename = '_api_ticket_comment_base_sub'
)
router.register(
prefix=f'ticket/(?P<ticket_id>[0-9]+)/(?P<ticket_comment_model>[{ticket_comment_names} \
prefix=f'/ticket/(?P<ticket_id>[0-9]+)/(?P<ticket_comment_model>[{ticket_comment_names} \
]+)/(?P<parent_id>[0-9]+)/threads',
viewset = ticket_comment.ViewSet,
feature_flag = '2025-00006', basename = '_api_ticket_comment_base_sub_thread'
)
router.register(
prefix = '(?P<item_class>[a-z_]+)/(?P<item_id>[0-9]+)/item_ticket',
prefix = '/(?P<item_class>[a-z_]+)/(?P<item_id>[0-9]+)/item_ticket',
viewset = ticket_linked_item.ViewSet,
basename = '_api_v2_item_tickets'
)

View File

@ -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(?:/(?P<model_name>gitlab|github))?',
prefix = r'/git_repository(?:/(?P<model_name>gitlab|github))?',
viewset = git_repository.ViewSet,
feature_flag = '2025-00001', basename = '_api_gitrepository'
)
router.register(
prefix = r'(?P<model_name>githubrepository|gitlabrepository)',
prefix = r'/(?P<model_name>githubrepository|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'
)

View File

@ -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<organization_id>[0-9]+)/flags/(?P<software_id>[0-9]+)', public_feature_flag.ViewSet, basename='_api_checkin')
router.register('/(?P<organization_id>[0-9]+)/flags/(?P<software_id>[0-9]+)', public_feature_flag.ViewSet, basename='_api_checkin')
urlpatterns = router.urls

View File

@ -34,57 +34,57 @@ router.register(
basename = '_api_v2_itam_home'
)
router.register(
prefix = '(?P<model_name>[itamassetbase]+)', viewset = asset.ViewSet,
prefix = '/(?P<model_name>[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<device_id>[0-9]+)/operating_system',
prefix = '/device/(?P<device_id>[0-9]+)/operating_system',
viewset = device_operating_system.ViewSet,
basename = '_api_deviceoperatingsystem')
router.register(
prefix = 'device/(?P<device_id>[0-9]+)/software', viewset = device_software_v2.ViewSet,
prefix = '/device/(?P<device_id>[0-9]+)/software', viewset = device_software_v2.ViewSet,
basename = '_api_devicesoftware'
)
router.register(
prefix = 'device/(?P<device_id>[0-9]+)/service', viewset = service_device_v2.ViewSet,
prefix = '/device/(?P<device_id>[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<operating_system_id>[0-9]+)/installs',
prefix = '/operating_system/(?P<operating_system_id>[0-9]+)/installs',
viewset = device_operating_system.ViewSet,
basename = '_api_v2_operating_system_installs'
)
router.register(
prefix = 'operating_system/(?P<operating_system_id>[0-9]+)/version',
prefix = '/operating_system/(?P<operating_system_id>[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<software_id>[0-9]+)/installs', viewset = device_software_v2.ViewSet,
prefix = '/software/(?P<software_id>[0-9]+)/installs', viewset = device_software_v2.ViewSet,
basename = '_api_v2_software_installs'
)
router.register(
prefix = 'software/(?P<software_id>[0-9]+)/version', viewset = software_version_v2.ViewSet,
prefix = '/software/(?P<software_id>[0-9]+)/version', viewset = software_version_v2.ViewSet,
basename = '_api_softwareversion'
)
router.register(
prefix = 'software/(?P<software_id>[0-9]+)/feature_flag',
prefix = '/software/(?P<software_id>[0-9]+)/feature_flag',
viewset = software_enable_feature_flag.ViewSet,
basename = '_api_softwareenablefeatureflag'
)

View File

@ -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<cluster_id>[0-9]+)/service', viewset = service_cluster.ViewSet,
prefix = '/cluster/(?P<cluster_id>[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'
)

View File

@ -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<project_id>[0-9]+)/milestone',
prefix = '/project/(?P<project_id>[0-9]+)/milestone',
viewset = project_milestone.ViewSet,
basename = '_api_projectmilestone'
)
router.register(
prefix = 'project/(?P<project_id>[0-9]+)/project_task',
prefix = '/project/(?P<project_id>[0-9]+)/project_task',
viewset = project_task.ViewSet,
basename = '_api_v2_ticket_project_task'
)

View File

@ -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<model_id>[0-9]+)/token', viewset = auth_token.ViewSet,
prefix = '/user_(?P<model_id>[0-9]+)/token', viewset = auth_token.ViewSet,
basename = '_api_authtoken'
)