From 268e3294a27cb7516f81f6861b42722bcdf5b5da Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 26 Oct 2024 18:02:23 +0930 Subject: [PATCH] feat(api): Setup API to be correctly versioned ref: #248 #365 --- Release-Notes.md | 4 +- app/access/serializers/organization.py | 6 +- app/access/serializers/team_user.py | 4 +- app/access/serializers/teams.py | 6 +- .../organization/test_organizaiton_api.py | 2 +- .../organization/test_organizaiton_api_v2.py | 2 +- .../test_organizaiton_permission_api.py | 2 +- app/access/tests/unit/team/test_team_api.py | 2 +- .../tests/unit/team/test_team_api_v2.py | 2 +- .../unit/team/test_team_permission_api.py | 2 +- .../unit/team_user/test_team_user_api_v2.py | 2 +- app/access/viewsets/index.py | 2 +- app/api/serializers/access.py | 14 +- app/api/serializers/config.py | 4 +- app/api/serializers/core/ticket.py | 4 +- app/api/serializers/core/ticket_category.py | 2 +- app/api/serializers/core/ticket_comment.py | 2 +- .../core/ticket_comment_category.py | 2 +- app/api/serializers/itam/device.py | 6 +- app/api/serializers/itam/software.py | 2 +- .../project_management/project_milestone.py | 2 +- .../project_management/project_state.py | 2 +- .../project_management/project_type.py | 2 +- .../project_management/projects.py | 6 +- .../unit/inventory/test_api_inventory.py | 14 +- .../test_inventory_permission_api.py | 10 +- app/api/urls.py | 146 --------------- app/api/urls_v2.py | 167 ++++++++++++++++++ app/api/views/assistance/index.py | 2 +- app/api/views/index.py | 22 +-- app/api/views/itim/index.py | 6 +- app/api/views/project_management/index.py | 2 +- app/api/views/settings/index.py | 10 +- app/api/viewsets/index.py | 25 ++- app/app/serializers/content_type.py | 4 +- app/app/serializers/permission.py | 4 +- app/app/serializers/user.py | 2 +- app/app/settings.py | 14 +- app/app/urls.py | 8 +- app/app/viewsets/base/index.py | 6 +- app/assistance/serializers/knowledge_base.py | 12 +- .../serializers/knowledge_base_category.py | 10 +- .../test_knowledge_base_api_v2.py | 2 +- .../test_knowledge_base_viewset.py | 2 +- .../test_knowledge_base_category_api_v2.py | 2 +- .../test_knowledge_base_category_viewset.py | 2 +- .../tests/unit/test_assistance_viewset.py | 2 +- app/assistance/viewsets/index.py | 4 +- .../serializers/config_group.py | 16 +- .../serializers/config_group_software.py | 6 +- .../config_groups/test_config_groups_api.py | 2 +- .../test_config_groups_api_v2.py | 2 +- .../test_config_groups_viewset.py | 2 +- .../test_config_groups_software_api_v2.py | 2 +- .../test_config_groups_software_viewset.py | 2 +- .../unit/test_config_management_viewset.py | 2 +- app/config_management/viewsets/index.py | 2 +- app/core/serializers/celery_log.py | 4 +- app/core/serializers/history.py | 4 +- app/core/serializers/manufacturer.py | 8 +- app/core/serializers/notes.py | 14 +- .../manufacturer/test_manufacturer_api_v2.py | 2 +- .../manufacturer/test_manufacturer_viewset.py | 2 +- .../unit/test_history/test_history_viewset.py | 2 +- .../unit/test_notes/test_notes_api_v2.py | 2 +- .../test_task_result_api_v2.py | 2 +- .../test_task_result_viewset.py | 2 +- .../unit/ticket/test_ticket_permission_api.py | 8 +- .../test_ticket_category_permission_api.py | 2 +- .../test_ticket_comment_permission_api.py | 8 +- ..._ticket_comment_category_permission_api.py | 2 +- app/itam/serializers/device.py | 18 +- app/itam/serializers/device_model.py | 4 +- app/itam/serializers/device_software.py | 4 +- app/itam/serializers/device_type.py | 4 +- app/itam/serializers/operating_system.py | 10 +- .../serializers/operating_system_version.py | 8 +- app/itam/serializers/software.py | 14 +- app/itam/serializers/software_category.py | 4 +- app/itam/serializers/software_version.py | 6 +- app/itam/tests/unit/device/test_device_api.py | 10 +- .../tests/unit/device/test_device_api_v2.py | 2 +- .../unit/device/test_device_permission_api.py | 2 +- .../tests/unit/device/test_device_viewset.py | 2 +- .../device_model/test_device_model_api_v2.py | 2 +- .../device_model/test_device_model_viewset.py | 2 +- .../test_device_software_api_v2.py | 2 +- .../test_device_software_viewset.py | 2 +- .../device_type/test_device_type_api_v2.py | 2 +- .../device_type/test_device_type_viewset.py | 2 +- .../test_operating_system_api_v2.py | 2 +- .../test_operating_system_viewset.py | 2 +- .../test_operating_system_version_api_v2.py | 2 +- .../test_operating_system_version_viewset.py | 2 +- .../tests/unit/software/test_software_api.py | 2 +- .../unit/software/test_software_api_v2.py | 21 ++- .../software/test_software_permission_api.py | 2 +- .../unit/software/test_software_viewset.py | 2 +- .../test_software_category_api_v2.py | 2 +- .../test_software_category_viewset.py | 2 +- .../test_software_version_api_v2.py | 2 +- .../test_software_version_viewset.py | 2 +- app/itam/tests/unit/test_itam_viewset.py | 2 +- app/itam/viewsets/index.py | 6 +- app/itim/serializers/cluster.py | 8 +- app/itim/serializers/cluster_type.py | 8 +- app/itim/serializers/port.py | 8 +- app/itim/serializers/service.py | 8 +- .../tests/unit/cluster/test_cluster_api_v2.py | 2 +- .../unit/cluster/test_cluster_viewset.py | 2 +- .../cluster_types/test_cluster_type_api_v2.py | 2 +- .../test_cluster_type_viewset.py | 2 +- app/itim/tests/unit/port/test_port_api_v2.py | 2 +- app/itim/tests/unit/port/test_port_viewset.py | 2 +- .../tests/unit/service/test_service_api_v2.py | 4 +- .../unit/service/test_service_viewset.py | 2 +- app/itim/tests/unit/test_itim_viewset.py | 2 +- app/itim/viewsets/index.py | 4 +- app/project_management/serializers/project.py | 10 +- .../serializers/project_milestone.py | 4 +- .../serializers/project_states.py | 4 +- .../serializers/project_type.py | 4 +- .../tests/unit/project/test_project_api_v2.py | 2 +- .../project/test_project_permission_api.py | 2 +- .../unit/project/test_project_viewset.py | 2 +- .../test_project_milestone_api_v2.py | 2 +- .../test_project_milestone_permission_api.py | 2 +- .../test_project_milestone_viewset.py | 2 +- .../test_project_state_api_v2.py | 2 +- .../test_project_state_permission_api.py | 2 +- .../test_project_state_viewset.py | 2 +- .../project_type/test_project_type_api_v2.py | 2 +- .../test_project_type_permission_api.py | 2 +- .../project_type/test_project_type_viewset.py | 2 +- .../unit/test_project_management_viewset.py | 2 +- app/project_management/viewsets/index.py | 2 +- app/settings/serializers/app_settings.py | 4 +- app/settings/serializers/external_links.py | 8 +- app/settings/serializers/user_settings.py | 4 +- .../app_settings/test_app_settings_api_v2.py | 2 +- .../app_settings/test_app_settings_viewset.py | 2 +- .../tests/unit/test_settings_viewset.py | 2 +- .../test_user_settings_api_v2.py | 2 +- .../test_user_settings_viewset.py | 2 +- app/settings/viewsets/index.py | 26 +-- app/templates/base.html.j2 | 2 +- 146 files changed, 510 insertions(+), 461 deletions(-) create mode 100644 app/api/urls_v2.py diff --git a/Release-Notes.md b/Release-Notes.md index cb973f06..e45be88e 100644 --- a/Release-Notes.md +++ b/Release-Notes.md @@ -12,10 +12,12 @@ API redesign in preparation for moving the UI out of centurion to it's [own proj We are make the above possible by ensuring a more stringent test policy. -- New API will be at path `api/v2` and will remain until v2.0.0 release of Centurion on which the `api/v2` path will be moved to `api` +- New API will be at path `api/v2`. - API v1 is now **Feature frozen** with only bug fixes being completed. It's recommended that you move to and start using API v2 as this has feature parity with API v1. +- API v1 is **depreciated** + - Depreciation of **ALL** API urls. API v1 Will be [removed in v2.0.0](https://github.com/nofusscomputing/centurion_erp/issues/343) release of Centurion. diff --git a/app/access/serializers/organization.py b/app/access/serializers/organization.py index 72855314..c57c3e30 100644 --- a/app/access/serializers/organization.py +++ b/app/access/serializers/organization.py @@ -17,7 +17,7 @@ class OrganizationBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_organization-detail", format="html" + view_name="v2:_api_v2_organization-detail", format="html" ) class Meta: @@ -47,8 +47,8 @@ class OrganizationModelSerializer(OrganizationBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_organization-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), - 'teams': reverse("API:_api_v2_organization_team-list", request=self._context['view'].request, kwargs={'organization_id': item.pk}), + '_self': reverse("v2:_api_v2_organization-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + 'teams': reverse("v2:_api_v2_organization_team-list", request=self._context['view'].request, kwargs={'organization_id': item.pk}), } diff --git a/app/access/serializers/team_user.py b/app/access/serializers/team_user.py index 45c97f9e..e9464a42 100644 --- a/app/access/serializers/team_user.py +++ b/app/access/serializers/team_user.py @@ -22,7 +22,7 @@ class TeamUserBaseSerializer(serializers.ModelSerializer): def get_url(self, item): return reverse( - "API:_api_v2_organization_team_user-detail", + "v2:_api_v2_organization_team_user-detail", request=self.context['view'].request, kwargs={ 'organization_id': item.team.organization.id, @@ -58,7 +58,7 @@ class TeamUserModelSerializer(TeamUserBaseSerializer): return { '_self': reverse( - 'API:_api_v2_organization_team_user-detail', + 'v2:_api_v2_organization_team_user-detail', request=self.context['view'].request, kwargs={ 'organization_id': item.team.organization.id, diff --git a/app/access/serializers/teams.py b/app/access/serializers/teams.py index 7bda46b1..42ba5951 100644 --- a/app/access/serializers/teams.py +++ b/app/access/serializers/teams.py @@ -23,7 +23,7 @@ class TeamBaseSerializer(serializers.ModelSerializer): def get_url(self, item): return reverse( - "API:_api_v2_organization_team-detail", + "v2:_api_v2_organization_team-detail", request=self.context['view'].request, kwargs={ 'organization_id': item.organization.id, @@ -61,7 +61,7 @@ class TeamModelSerializer(TeamBaseSerializer): return { '_self': reverse( - 'API:_api_v2_organization_team-detail', + 'v2:_api_v2_organization_team-detail', request=self.context['view'].request, kwargs={ 'organization_id': item.organization.id, @@ -69,7 +69,7 @@ class TeamModelSerializer(TeamBaseSerializer): } ), 'users': reverse( - 'API:_api_v2_organization_team_user-list', + 'v2:_api_v2_organization_team_user-list', request=self.context['view'].request, kwargs={ 'organization_id': item.organization.id, diff --git a/app/access/tests/unit/organization/test_organizaiton_api.py b/app/access/tests/unit/organization/test_organizaiton_api.py index 904ba2bc..2f103199 100644 --- a/app/access/tests/unit/organization/test_organizaiton_api.py +++ b/app/access/tests/unit/organization/test_organizaiton_api.py @@ -17,7 +17,7 @@ class OrganizationAPI(TestCase): model = Organization - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_organization' diff --git a/app/access/tests/unit/organization/test_organizaiton_api_v2.py b/app/access/tests/unit/organization/test_organizaiton_api_v2.py index 60076c46..be29c4bc 100644 --- a/app/access/tests/unit/organization/test_organizaiton_api_v2.py +++ b/app/access/tests/unit/organization/test_organizaiton_api_v2.py @@ -21,7 +21,7 @@ class OrganizationAPI( model = Organization - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_organization' diff --git a/app/access/tests/unit/organization/test_organizaiton_permission_api.py b/app/access/tests/unit/organization/test_organizaiton_permission_api.py index dc96f60d..6f3bb582 100644 --- a/app/access/tests/unit/organization/test_organizaiton_permission_api.py +++ b/app/access/tests/unit/organization/test_organizaiton_permission_api.py @@ -20,7 +20,7 @@ class OrganizationPermissionsAPI(TestCase, APIPermissionChange, APIPermissionVie model_name = 'organization' app_label = 'access' - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_organization' diff --git a/app/access/tests/unit/team/test_team_api.py b/app/access/tests/unit/team/test_team_api.py index ec8039c5..c8fffe45 100644 --- a/app/access/tests/unit/team/test_team_api.py +++ b/app/access/tests/unit/team/test_team_api.py @@ -21,7 +21,7 @@ class TeamAPI(TestCase): model = Team - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_team' diff --git a/app/access/tests/unit/team/test_team_api_v2.py b/app/access/tests/unit/team/test_team_api_v2.py index f7b2c0bd..cd6fe825 100644 --- a/app/access/tests/unit/team/test_team_api_v2.py +++ b/app/access/tests/unit/team/test_team_api_v2.py @@ -20,7 +20,7 @@ class TeamAPI( model = Team - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_organization_team' diff --git a/app/access/tests/unit/team/test_team_permission_api.py b/app/access/tests/unit/team/test_team_permission_api.py index 1ea0a108..7345cae2 100644 --- a/app/access/tests/unit/team/test_team_permission_api.py +++ b/app/access/tests/unit/team/test_team_permission_api.py @@ -18,7 +18,7 @@ class TeamPermissionsAPI(TestCase, APIPermissions): model = Team - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_team' diff --git a/app/access/tests/unit/team_user/test_team_user_api_v2.py b/app/access/tests/unit/team_user/test_team_user_api_v2.py index 2b3cca09..634e565a 100644 --- a/app/access/tests/unit/team_user/test_team_user_api_v2.py +++ b/app/access/tests/unit/team_user/test_team_user_api_v2.py @@ -20,7 +20,7 @@ class TeamUserAPI( model = TeamUsers - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_organization_team_user' diff --git a/app/access/viewsets/index.py b/app/access/viewsets/index.py index c93c9c00..552aaa6c 100644 --- a/app/access/viewsets/index.py +++ b/app/access/viewsets/index.py @@ -25,6 +25,6 @@ class Index(CommonViewSet): return Response( { - "organization": reverse('API:_api_v2_organization-list', request=request) + "organization": reverse('v2:_api_v2_organization-list', request=request) } ) diff --git a/app/api/serializers/access.py b/app/api/serializers/access.py index 44eadf19..e520a5fd 100644 --- a/app/api/serializers/access.py +++ b/app/api/serializers/access.py @@ -25,7 +25,7 @@ class TeamSerializerBase(serializers.ModelSerializer): request = self.context.get('request') - return request.build_absolute_uri(reverse("API:_api_team", args=[obj.organization.id,obj.pk])) + return request.build_absolute_uri(reverse("v1:_api_team", args=[obj.organization.id,obj.pk])) @@ -48,7 +48,7 @@ class TeamSerializer(TeamSerializerBase): team = Team.objects.get(pk=obj.id) - return request.build_absolute_uri(reverse('API:_api_team_permission', args=[team.organization_id,team.id])) + return request.build_absolute_uri(reverse('v1:_api_team_permission', args=[team.organization_id,team.id])) def validate(self, data): @@ -67,7 +67,7 @@ class TeamSerializer(TeamSerializerBase): request = self.context.get('request') - return request.build_absolute_uri(reverse('API:_api_team', args=[obj.organization_id,obj.id])) + return request.build_absolute_uri(reverse('v1:_api_team', args=[obj.organization_id,obj.id])) class Meta: @@ -93,7 +93,7 @@ class TeamSerializer(TeamSerializerBase): class OrganizationListSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField( - view_name="API:_api_organization", format="html" + view_name="v1:_api_organization", format="html" ) @@ -110,7 +110,7 @@ class OrganizationListSerializer(serializers.ModelSerializer): class OrganizationSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField( - view_name="API:_api_organization", format="html" + view_name="v1:_api_organization", format="html" ) team_url = serializers.SerializerMethodField('get_url') @@ -121,11 +121,11 @@ class OrganizationSerializer(serializers.ModelSerializer): team = Team.objects.filter(pk=obj.id) - return request.build_absolute_uri(reverse('API:_api_organization_teams', args=[obj.id])) + return request.build_absolute_uri(reverse('v1:_api_organization_teams', args=[obj.id])) teams = TeamSerializer(source='team_set', many=True, read_only=False) - view_name="API:_api_organization" + view_name="v1:_api_organization" class Meta: diff --git a/app/api/serializers/config.py b/app/api/serializers/config.py index 84b74325..b15bce92 100644 --- a/app/api/serializers/config.py +++ b/app/api/serializers/config.py @@ -28,7 +28,7 @@ class ParentGroupSerializer(serializers.ModelSerializer): request = self.context.get('request') - return request.build_absolute_uri(reverse("API:_api_config_group", args=[obj.pk])) + return request.build_absolute_uri(reverse("v1:_api_config_group", args=[obj.pk])) @@ -59,7 +59,7 @@ class ConfigGroupsSerializerBase(serializers.ModelSerializer): request = self.context.get('request') - return request.build_absolute_uri(reverse("API:_api_config_group", args=[obj.pk])) + return request.build_absolute_uri(reverse("v1:_api_config_group", args=[obj.pk])) diff --git a/app/api/serializers/core/ticket.py b/app/api/serializers/core/ticket.py index a855fa1a..877f6f04 100644 --- a/app/api/serializers/core/ticket.py +++ b/app/api/serializers/core/ticket.py @@ -54,7 +54,7 @@ class TicketSerializer( return request.build_absolute_uri( reverse( - 'API:' + view_name + '-detail', + 'v1:' + view_name + '-detail', kwargs = kwargs ) ) @@ -100,7 +100,7 @@ class TicketSerializer( return request.build_absolute_uri( reverse( - 'API:' + view_name + '-list', + 'v1:' + view_name + '-list', kwargs = kwargs ) ) diff --git a/app/api/serializers/core/ticket_category.py b/app/api/serializers/core/ticket_category.py index fc151766..5c14ce62 100644 --- a/app/api/serializers/core/ticket_category.py +++ b/app/api/serializers/core/ticket_category.py @@ -15,7 +15,7 @@ class TicketCategorySerializer( ): url = serializers.HyperlinkedIdentityField( - view_name="API:_api_ticket_category-detail", format="html" + view_name="v1:_api_ticket_category-detail", format="html" ) diff --git a/app/api/serializers/core/ticket_comment.py b/app/api/serializers/core/ticket_comment.py index 4a21ea39..4ba36740 100644 --- a/app/api/serializers/core/ticket_comment.py +++ b/app/api/serializers/core/ticket_comment.py @@ -38,7 +38,7 @@ class TicketCommentSerializer(serializers.ModelSerializer): return request.build_absolute_uri( - reverse('API:' + view_name + '-detail', + reverse('v1:' + view_name + '-detail', kwargs={ 'ticket_id': item.ticket.id, 'pk': item.id diff --git a/app/api/serializers/core/ticket_comment_category.py b/app/api/serializers/core/ticket_comment_category.py index dbb03d6d..82a51c21 100644 --- a/app/api/serializers/core/ticket_comment_category.py +++ b/app/api/serializers/core/ticket_comment_category.py @@ -13,7 +13,7 @@ class TicketCommentCategorySerializer( ): url = serializers.HyperlinkedIdentityField( - view_name="API:_api_ticket_comment_category-detail", format="html" + view_name="v1:_api_ticket_comment_category-detail", format="html" ) diff --git a/app/api/serializers/itam/device.py b/app/api/serializers/itam/device.py index 3c0760ec..d3ce38cd 100644 --- a/app/api/serializers/itam/device.py +++ b/app/api/serializers/itam/device.py @@ -13,7 +13,7 @@ from itam.models.device import Device class DeviceConfigGroupsSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField( - view_name="API:_api_config_group", format="html" + view_name="v1:_api_config_group", format="html" ) class Meta: @@ -36,7 +36,7 @@ class DeviceConfigGroupsSerializer(serializers.ModelSerializer): class DeviceSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField( - view_name="API:device-detail", format="html" + view_name="v1:device-detail", format="html" ) config = serializers.SerializerMethodField('get_device_config') @@ -46,7 +46,7 @@ class DeviceSerializer(serializers.ModelSerializer): def get_device_config(self, device): request = self.context.get('request') - return request.build_absolute_uri(reverse('API:_api_device_config', args=[device.slug])) + return request.build_absolute_uri(reverse('v1:_api_device_config', args=[device.slug])) class Meta: diff --git a/app/api/serializers/itam/software.py b/app/api/serializers/itam/software.py index f3e2d430..681cfd8d 100644 --- a/app/api/serializers/itam/software.py +++ b/app/api/serializers/itam/software.py @@ -7,7 +7,7 @@ from itam.models.device import Software class SoftwareSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField( - view_name="API:software-detail", format="html" + view_name="v1:software-detail", format="html" ) class Meta: diff --git a/app/api/serializers/project_management/project_milestone.py b/app/api/serializers/project_management/project_milestone.py index 5d1de5f9..f95178f3 100644 --- a/app/api/serializers/project_management/project_milestone.py +++ b/app/api/serializers/project_management/project_milestone.py @@ -19,7 +19,7 @@ class ProjectMilestoneSerializer( request = self.context.get('request') return request.build_absolute_uri( - reverse('API:_api_project_milestone-detail', + reverse('v1:_api_project_milestone-detail', kwargs={ 'project_id': item.project.id, 'pk': item.id diff --git a/app/api/serializers/project_management/project_state.py b/app/api/serializers/project_management/project_state.py index 5789c201..e1c96184 100644 --- a/app/api/serializers/project_management/project_state.py +++ b/app/api/serializers/project_management/project_state.py @@ -12,7 +12,7 @@ class ProjectStateSerializer( ): url = serializers.HyperlinkedIdentityField( - view_name="API:_api_project_state-detail", format="html" + view_name="v1:_api_project_state-detail", format="html" ) diff --git a/app/api/serializers/project_management/project_type.py b/app/api/serializers/project_management/project_type.py index 5bbd9077..55101baa 100644 --- a/app/api/serializers/project_management/project_type.py +++ b/app/api/serializers/project_management/project_type.py @@ -12,7 +12,7 @@ class ProjectTypeSerializer( ): url = serializers.HyperlinkedIdentityField( - view_name="API:_api_project_state-detail", format="html" + view_name="v1:_api_project_state-detail", format="html" ) diff --git a/app/api/serializers/project_management/projects.py b/app/api/serializers/project_management/projects.py index 1e4c0b4b..2250897f 100644 --- a/app/api/serializers/project_management/projects.py +++ b/app/api/serializers/project_management/projects.py @@ -22,7 +22,7 @@ class ProjectSerializer( request = self.context.get('request') - return request.build_absolute_uri(reverse("API:_api_projects-detail", args=[item.pk])) + return request.build_absolute_uri(reverse("v1:_api_projects-detail", args=[item.pk])) project_tasks_url = serializers.SerializerMethodField('get_url_project_tasks') @@ -34,7 +34,7 @@ class ProjectSerializer( return request.build_absolute_uri( reverse( - 'API:_api_project_tasks-list', + 'v1:_api_project_tasks-list', kwargs={ 'project_id': item.id } @@ -50,7 +50,7 @@ class ProjectSerializer( return request.build_absolute_uri( reverse( - 'API:_api_project_milestone-list', + 'v1:_api_project_milestone-list', kwargs={ 'project_id': item.id } diff --git a/app/api/tests/unit/inventory/test_api_inventory.py b/app/api/tests/unit/inventory/test_api_inventory.py index c9edf985..5490d72a 100644 --- a/app/api/tests/unit/inventory/test_api_inventory.py +++ b/app/api/tests/unit/inventory/test_api_inventory.py @@ -160,7 +160,7 @@ class InventoryAPI(TestCase): """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') client.force_login(self.add_user) response = client.post(url, data=self.inventory, content_type='application/json') @@ -182,7 +182,7 @@ class InventoryAPI(TestCase): """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') client.force_login(self.add_user) response = client.post(url, data=self.inventory, content_type='application/json') @@ -201,7 +201,7 @@ class InventoryAPI(TestCase): """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') client.force_login(self.add_user) response = client.post(url, data=self.inventory, content_type='application/json') @@ -220,7 +220,7 @@ class InventoryAPI(TestCase): """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') client.force_login(self.add_user) response = client.post(url, data=self.inventory, content_type='application/json') @@ -239,7 +239,7 @@ class InventoryAPI(TestCase): """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') client.force_login(self.add_user) response = client.post(url, data=self.inventory, content_type='application/json') @@ -395,7 +395,7 @@ class InventoryAPI(TestCase): """ Successful inventory upload returns 200 for existing device""" client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') client.force_login(self.add_user) response = client.post(url, data=self.inventory, content_type='application/json') @@ -409,7 +409,7 @@ class InventoryAPI(TestCase): """ Incorrectly formated inventory upload returns 400 """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') mod_inventory = self.inventory.copy() diff --git a/app/api/tests/unit/inventory/test_inventory_permission_api.py b/app/api/tests/unit/inventory/test_inventory_permission_api.py index b5b45f64..ec2a910b 100644 --- a/app/api/tests/unit/inventory/test_inventory_permission_api.py +++ b/app/api/tests/unit/inventory/test_inventory_permission_api.py @@ -201,7 +201,7 @@ class InventoryPermissionsAPI(TestCase): """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') response = client.put(url, data=self.inventory, content_type='application/json') @@ -218,7 +218,7 @@ class InventoryPermissionsAPI(TestCase): """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') client.force_login(self.no_permissions_user) @@ -236,7 +236,7 @@ class InventoryPermissionsAPI(TestCase): """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') client.force_login(self.different_organization_user) @@ -254,7 +254,7 @@ class InventoryPermissionsAPI(TestCase): """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') client.force_login(self.view_user) @@ -272,7 +272,7 @@ class InventoryPermissionsAPI(TestCase): """ client = Client() - url = reverse('API:_api_device_inventory') + url = reverse('v1:_api_device_inventory') client.force_login(self.add_user) diff --git a/app/api/urls.py b/app/api/urls.py index 1b38c4f2..a484561c 100644 --- a/app/api/urls.py +++ b/app/api/urls.py @@ -29,81 +29,6 @@ from .views.itam.device import DeviceViewSet from .views.itam import inventory -from api.viewsets import ( - index as v2 -) - -from app.viewsets.base import ( - index as base_index_v2, - content_type as content_type_v2, - permisson as permission_v2, - user as user_v2 -) - -from access.viewsets import ( - index as access_v2, - organization as organization_v2, - team as team_v2, - team_user as team_user_v2 -) - -from assistance.viewsets import ( - index as assistance_index_v2, - knowledge_base as knowledge_base_v2, - knowledge_base_category as knowledge_base_category_v2 -) - -from config_management.viewsets import ( - index as config_management_v2, - config_group as config_group_v2, - config_group_software as config_group_software_v2 -) - -from core.viewsets import ( - history as history_v2, - notes as notes_v2, - manufacturer as manufacturer_v2, - celery_log as celery_log_v2 -) - -from itam.viewsets import ( - index as itam_index_v2, - device as device_v2, - device_model as device_model_v2, - device_type as device_type_v2, - device_software as device_software_v2, - operating_system as operating_system_v2, - operating_system_version as operating_system_version_v2, - software as software_v2, - software_category as software_category_v2, - software_version as software_version_v2, -) - -from itim.viewsets import ( - index as itim_v2, - cluster as cluster_v2, - cluster_type as cluster_type_v2, - port as port_v2, - service as service_v2, - service_device as service_device_v2 -) - -from project_management.viewsets import ( - index as project_management_v2, - project as project_v2, - project_milestone as project_milestone_v2, - project_state as project_state_v2, - project_type as project_type_v2, -) - -from settings.viewsets import ( - app_settings as app_settings_v2, - external_link as external_link_v2, - index as settings_index_v2, - user_settings as user_settings_v2 -) - - app_name = "API" @@ -139,81 +64,10 @@ router.register('settings/ticket_comment_categories', ticket_comment_categories. router.register('software', software.SoftwareViewSet, basename='software') -# API V2 -router.register('v2', v2.Index, basename='_api_v2_home') - -router.register('v2/access', access_v2.Index, basename='_api_v2_access_home') -router.register('v2/access/organization', organization_v2.ViewSet, basename='_api_v2_organization') -router.register('v2/access/organization/(?P[0-9]+)/team', team_v2.ViewSet, basename='_api_v2_organization_team') -router.register('v2/access/organization/(?P[0-9]+)/team/(?P[0-9]+)/user', team_user_v2.ViewSet, basename='_api_v2_organization_team_user') - -router.register('v2/assistance', assistance_index_v2.Index, basename='_api_v2_assistance_home') -router.register('v2/assistance/knowledge_base', knowledge_base_v2.ViewSet, basename='_api_v2_knowledge_base') - -router.register('v2/base', base_index_v2.Index, basename='_api_v2_base_home') -router.register('v2/base/content_type', content_type_v2.ViewSet, basename='_api_v2_content_type') -router.register('v2/base/permission', permission_v2.ViewSet, basename='_api_v2_permission') -router.register('v2/base/user', user_v2.ViewSet, basename='_api_v2_user') - -router.register('v2/config_management', config_management_v2.Index, basename='_api_v2_config_management_home') -router.register('v2/config_management/group', config_group_v2.ViewSet, basename='_api_v2_config_group') -router.register('v2/config_management/group/(?P[0-9]+)/child_group', config_group_v2.ViewSet, basename='_api_v2_config_group_child') -router.register('v2/config_management/group/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_config_group_notes') -router.register('v2/config_management/group/(?P[0-9]+)/software', config_group_software_v2.ViewSet, basename='_api_v2_config_group_software') - -router.register('v2/core/(?P.+)/(?P[0-9]+)/history', history_v2.ViewSet, basename='_api_v2_model_history') - -router.register('v2/itam', itam_index_v2.Index, basename='_api_v2_itam_home') -router.register('v2/itam/device', device_v2.ViewSet, basename='_api_v2_device') -router.register('v2/itam/device/(?P[0-9]+)/software', device_software_v2.ViewSet, basename='_api_v2_device_software') -router.register('v2/itam/device/(?P[0-9]+)/service', service_device_v2.ViewSet, basename='_api_v2_service_device') -router.register('v2/itam/device/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_device_notes') -router.register('v2/itam/operating_system', operating_system_v2.ViewSet, basename='_api_v2_operating_system') -router.register('v2/itam/operating_system/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_operating_system_notes') -router.register('v2/itam/operating_system/(?P[0-9]+)/version', operating_system_version_v2.ViewSet, basename='_api_v2_operating_system_version') -router.register('v2/itam/software', software_v2.ViewSet, basename='_api_v2_software') -router.register('v2/itam/software/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_software_notes') -router.register('v2/itam/software/(?P[0-9]+)/version', software_version_v2.ViewSet, basename='_api_v2_software_version') - -router.register('v2/itim', itim_v2.Index, basename='_api_v2_itim_home') -router.register('v2/itim/cluster', cluster_v2.ViewSet, basename='_api_v2_cluster') -router.register('v2/itim/cluster/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_cluster_notes') -router.register('v2/itim/service', service_v2.ViewSet, basename='_api_v2_service') -router.register('v2/itim/service/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_service_notes') - -router.register('v2/project_management', project_management_v2.Index, basename='_api_v2_project_management_home') -router.register('v2/project_management/project', project_v2.ViewSet, basename='_api_v2_project') -router.register('v2/project_management/project/(?P[0-9]+)/milestone', project_milestone_v2.ViewSet, basename='_api_v2_project_milestone') -router.register('v2/itim/project_management/project/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_project_notes') - -router.register('v2/settings', settings_index_v2.Index, basename='_api_v2_settings_home') -router.register('v2/settings/app_settings', app_settings_v2.ViewSet, basename='_api_v2_app_settings') -router.register('v2/settings/cluster_type', cluster_type_v2.ViewSet, basename='_api_v2_cluster_type') -router.register('v2/settings/cluster_type/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_cluster_type_notes') -router.register('v2/settings/device_model', device_model_v2.ViewSet, basename='_api_v2_device_model') -router.register('v2/settings/device_type', device_type_v2.ViewSet, basename='_api_v2_device_type') -router.register('v2/settings/external_link', external_link_v2.ViewSet, basename='_api_v2_external_link') -router.register('v2/settings/knowledge_base_category', knowledge_base_category_v2.ViewSet, basename='_api_v2_knowledge_base_category') -router.register('v2/settings/manufacturer', manufacturer_v2.ViewSet, basename='_api_v2_manufacturer') -router.register('v2/settings/manufacturer/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_manufacturer_notes') -router.register('v2/settings/port', port_v2.ViewSet, basename='_api_v2_port') -router.register('v2/settings/port/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_port_notes') -router.register('v2/settings/project_state', project_state_v2.ViewSet, basename='_api_v2_project_state') -router.register('v2/settings/project_type', project_type_v2.ViewSet, basename='_api_v2_project_type') -router.register('v2/settings/software_category', software_category_v2.ViewSet, basename='_api_v2_software_category') -router.register('v2/settings/user_settings', user_settings_v2.ViewSet, basename='_api_v2_user_settings') - - -router.register('v2/settings/celery_log', celery_log_v2.ViewSet, basename='_api_v2_celery_log') - urlpatterns = [ path("assistance", assistance.index.Index.as_view(), name="_api_assistance"), - # - # Sof Old Paths to be refactored - # - path("config//", itam_config.View.as_view(), name="_api_device_config"), path("configuration/", config.ConfigGroupsList.as_view(), name='_api_config_groups'), diff --git a/app/api/urls_v2.py b/app/api/urls_v2.py new file mode 100644 index 00000000..d88ca648 --- /dev/null +++ b/app/api/urls_v2.py @@ -0,0 +1,167 @@ +from django.urls import path + +from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView + +from rest_framework.routers import DefaultRouter + +from api.viewsets import ( + index as v2 +) + +from app.viewsets.base import ( + index as base_index_v2, + content_type as content_type_v2, + permisson as permission_v2, + user as user_v2 +) + +from access.viewsets import ( + index as access_v2, + organization as organization_v2, + team as team_v2, + team_user as team_user_v2 +) + +from assistance.viewsets import ( + index as assistance_index_v2, + knowledge_base as knowledge_base_v2, + knowledge_base_category as knowledge_base_category_v2, +) + +from config_management.viewsets import ( + index as config_management_v2, + config_group as config_group_v2, + config_group_software as config_group_software_v2 +) + +from core.viewsets import ( + history as history_v2, + notes as notes_v2, + manufacturer as manufacturer_v2, + celery_log as celery_log_v2 +) + +from itam.viewsets import ( + index as itam_index_v2, + device as device_v2, + device_model as device_model_v2, + device_type as device_type_v2, + device_software as device_software_v2, + operating_system as operating_system_v2, + operating_system_version as operating_system_version_v2, + software as software_v2, + software_category as software_category_v2, + software_version as software_version_v2, +) + +from itim.viewsets import ( + index as itim_v2, + cluster as cluster_v2, + cluster_type as cluster_type_v2, + port as port_v2, + service as service_v2, + service_device as service_device_v2 +) + +from project_management.viewsets import ( + index as project_management_v2, + project as project_v2, + project_milestone as project_milestone_v2, + project_state as project_state_v2, + project_type as project_type_v2, +) + +from settings.viewsets import ( + app_settings as app_settings_v2, + external_link as external_link_v2, + index as settings_index_v2, + user_settings as user_settings_v2 +) + +app_name = "API" + + +router = DefaultRouter(trailing_slash=False) + + +router.register('', v2.Index, basename='_api_v2_home') + +router.register('access', access_v2.Index, basename='_api_v2_access_home') +router.register('access/organization', organization_v2.ViewSet, basename='_api_v2_organization') +router.register('access/organization/(?P[0-9]+)/team', team_v2.ViewSet, basename='_api_v2_organization_team') +router.register('access/organization/(?P[0-9]+)/team/(?P[0-9]+)/user', team_user_v2.ViewSet, basename='_api_v2_organization_team_user') + + +router.register('assistance', assistance_index_v2.Index, basename='_api_v2_assistance_home') +router.register('assistance/knowledge_base', knowledge_base_v2.ViewSet, basename='_api_v2_knowledge_base') + + +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('config_management', config_management_v2.Index, basename='_api_v2_config_management_home') +router.register('config_management/group', config_group_v2.ViewSet, basename='_api_v2_config_group') +router.register('config_management/group/(?P[0-9]+)/child_group', config_group_v2.ViewSet, basename='_api_v2_config_group_child') +router.register('config_management/group/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_config_group_notes') +router.register('config_management/group/(?P[0-9]+)/software', config_group_software_v2.ViewSet, basename='_api_v2_config_group_software') + + +router.register('core/(?P.+)/(?P[0-9]+)/history', history_v2.ViewSet, basename='_api_v2_model_history') + + +router.register('itam', itam_index_v2.Index, basename='_api_v2_itam_home') +router.register('itam/device', device_v2.ViewSet, basename='_api_v2_device') +router.register('itam/device/(?P[0-9]+)/software', device_software_v2.ViewSet, basename='_api_v2_device_software') +router.register('itam/device/(?P[0-9]+)/service', service_device_v2.ViewSet, basename='_api_v2_service_device') +router.register('itam/device/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_device_notes') +router.register('itam/operating_system', operating_system_v2.ViewSet, basename='_api_v2_operating_system') +router.register('itam/operating_system/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_operating_system_notes') +router.register('itam/operating_system/(?P[0-9]+)/version', operating_system_version_v2.ViewSet, basename='_api_v2_operating_system_version') +router.register('itam/software', software_v2.ViewSet, basename='_api_v2_software') +router.register('itam/software/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_software_notes') +router.register('itam/software/(?P[0-9]+)/version', software_version_v2.ViewSet, basename='_api_v2_software_version') + + +router.register('itim', itim_v2.Index, basename='_api_v2_itim_home') +router.register('itim/cluster', cluster_v2.ViewSet, basename='_api_v2_cluster') +router.register('itim/cluster/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_cluster_notes') +router.register('itim/service', service_v2.ViewSet, basename='_api_v2_service') +router.register('itim/service/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_service_notes') + + +router.register('project_management', project_management_v2.Index, basename='_api_v2_project_management_home') +router.register('project_management/project', project_v2.ViewSet, basename='_api_v2_project') +router.register('project_management/project/(?P[0-9]+)/milestone', project_milestone_v2.ViewSet, basename='_api_v2_project_milestone') +router.register('itim/project_management/project/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_project_notes') + + +router.register('settings', settings_index_v2.Index, basename='_api_v2_settings_home') +router.register('settings/app_settings', app_settings_v2.ViewSet, basename='_api_v2_app_settings') +router.register('settings/celery_log', celery_log_v2.ViewSet, basename='_api_v2_celery_log') +router.register('settings/cluster_type', cluster_type_v2.ViewSet, basename='_api_v2_cluster_type') +router.register('settings/cluster_type/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_cluster_type_notes') +router.register('settings/device_model', device_model_v2.ViewSet, basename='_api_v2_device_model') +router.register('settings/device_type', device_type_v2.ViewSet, basename='_api_v2_device_type') +router.register('settings/external_link', external_link_v2.ViewSet, basename='_api_v2_external_link') +router.register('settings/knowledge_base_category', knowledge_base_category_v2.ViewSet, basename='_api_v2_knowledge_base_category') +router.register('settings/manufacturer', manufacturer_v2.ViewSet, basename='_api_v2_manufacturer') +router.register('settings/manufacturer/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_manufacturer_notes') +router.register('settings/port', port_v2.ViewSet, basename='_api_v2_port') +router.register('settings/port/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_port_notes') +router.register('settings/project_state', project_state_v2.ViewSet, basename='_api_v2_project_state') +router.register('settings/project_type', project_type_v2.ViewSet, basename='_api_v2_project_type') +router.register('settings/software_category', software_category_v2.ViewSet, basename='_api_v2_software_category') +router.register('settings/user_settings', user_settings_v2.ViewSet, basename='_api_v2_user_settings') + + +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'), + +] + +urlpatterns += router.urls diff --git a/app/api/views/assistance/index.py b/app/api/views/assistance/index.py index 7099652b..983af1bd 100644 --- a/app/api/views/assistance/index.py +++ b/app/api/views/assistance/index.py @@ -29,7 +29,7 @@ class Index(views.APIView): def get(self, request, *args, **kwargs): body: dict = { - 'requests': reverse('API:_api_assistance_request-list', request=request) + 'requests': reverse('v1:_api_assistance_request-list', request=request) } return Response(body) diff --git a/app/api/views/index.py b/app/api/views/index.py index be6f4506..60587359 100644 --- a/app/api/views/index.py +++ b/app/api/views/index.py @@ -18,10 +18,10 @@ class Index(viewsets.ViewSet): def get_view_name(self): - return "API Index" + return "API" def get_view_description(self, html=False) -> str: - text = "My REST API" + text = "Centurion ERP Rest API" if html: return mark_safe(f"

{text}

") else: @@ -32,15 +32,15 @@ class Index(viewsets.ViewSet): API: dict = { # "teams": reverse("_api_teams", request=request), - 'assistance': reverse("API:_api_assistance", request=request), - "devices": reverse("API:device-list", request=request), - "config_groups": reverse("API:_api_config_groups", request=request), - 'itim': reverse("API:_api_itim", request=request), - "organizations": reverse("API:_api_orgs", request=request), - 'project_management': reverse("API:_api_project_management", request=request), - "settings": reverse('API:_settings', request=request), - "software": reverse("API:software-list", request=request), - 'v2': reverse("API:_api_v2_home-list", request=request) + 'assistance': reverse("v1:_api_assistance", request=request), + "devices": reverse("v1:device-list", request=request), + "config_groups": reverse("v1:_api_config_groups", request=request), + 'itim': reverse("v1:_api_itim", request=request), + "organizations": reverse("v1:_api_orgs", request=request), + 'project_management': reverse("v1:_api_project_management", request=request), + "settings": reverse('v1:_settings', request=request), + "software": reverse("v1:software-list", request=request), + 'v2': reverse("v2:_api_v2_home-list", request=request) } return Response( API ) diff --git a/app/api/views/itim/index.py b/app/api/views/itim/index.py index a82b1688..feb70477 100644 --- a/app/api/views/itim/index.py +++ b/app/api/views/itim/index.py @@ -28,9 +28,9 @@ class Index(views.APIView): def get(self, request, *args, **kwargs): body: dict = { - 'changes': reverse('API:_api_itim_change-list', request=request), - 'incidents': reverse('API:_api_itim_incident-list', request=request), - 'problems': reverse('API:_api_itim_problem-list', request=request), + 'changes': reverse('v1:_api_itim_change-list', request=request), + 'incidents': reverse('v1:_api_itim_incident-list', request=request), + 'problems': reverse('v1:_api_itim_problem-list', request=request), } return Response(body) diff --git a/app/api/views/project_management/index.py b/app/api/views/project_management/index.py index 06d04255..ed423c95 100644 --- a/app/api/views/project_management/index.py +++ b/app/api/views/project_management/index.py @@ -30,7 +30,7 @@ class Index(views.APIView): def get(self, request, *args, **kwargs): body: dict = { - 'projects': reverse('API:_api_projects-list', request=request) + 'projects': reverse('v1:_api_projects-list', request=request) } return Response(body) diff --git a/app/api/views/settings/index.py b/app/api/views/settings/index.py index 2de2a4f1..c366add7 100644 --- a/app/api/views/settings/index.py +++ b/app/api/views/settings/index.py @@ -37,11 +37,11 @@ class View(views.APIView): status = Http.Status.OK response_data: dict = { - "permissions": reverse('API:_settings_permissions', request=request), - "project_state": reverse('API:_api_project_state-list', request=request), - "project_type": reverse('API:_api_project_type-list', request=request), - "ticket_categories": reverse('API:_api_ticket_category-list', request=request), - "ticket_comment_categories": reverse('API:_api_ticket_comment_category-list', request=request) + "permissions": reverse('v1:_settings_permissions', request=request), + "project_state": reverse('v1:_api_project_state-list', request=request), + "project_type": reverse('v1:_api_project_type-list', request=request), + "ticket_categories": reverse('v1:_api_ticket_category-list', request=request), + "ticket_comment_categories": reverse('v1:_api_ticket_comment_category-list', request=request) } return Response(data=response_data,status=status) diff --git a/app/api/viewsets/index.py b/app/api/viewsets/index.py index a739d138..998b04e3 100644 --- a/app/api/viewsets/index.py +++ b/app/api/viewsets/index.py @@ -16,26 +16,23 @@ class Index(CommonViewSet): 'OPTIONS' ] - view_description = """Centurion ERP API V2. + view_description = 'Centurion ERP API V2.' - This endpoint will move to path `/api/` on release of - v2.0.0 of Centurion ERP. - """ - - view_name = "API v2" + view_name = "v2" def list(self, request, *args, **kwargs): return Response( { - "access": reverse('API:_api_v2_access_home-list', request=request), - "assistance": reverse('API:_api_v2_assistance_home-list', request=request), - "base": reverse('API:_api_v2_base_home-list', request=request), - "itam": reverse('API:_api_v2_itam_home-list', request=request), - "itim": reverse('API:_api_v2_itim_home-list', request=request), - "config_management": reverse('API:_api_v2_config_management_home-list', request=request), - "project_management": reverse('API:_api_v2_project_management_home-list', request=request), - "settings": reverse('API:_api_v2_settings_home-list', request=request) + "access": reverse('v2:_api_v2_access_home-list', request=request), + "assistance": reverse('v2:_api_v2_assistance_home-list', request=request), + "docs": reverse('v2:_api_v2_docs', request=request), + "base": reverse('v2:_api_v2_base_home-list', request=request), + "itam": reverse('v2:_api_v2_itam_home-list', request=request), + "itim": reverse('v2:_api_v2_itim_home-list', request=request), + "config_management": reverse('v2:_api_v2_config_management_home-list', request=request), + "project_management": reverse('v2:_api_v2_project_management_home-list', request=request), + "settings": reverse('v2:_api_v2_settings_home-list', request=request) } ) diff --git a/app/app/serializers/content_type.py b/app/app/serializers/content_type.py index 79ae32de..ae846077 100644 --- a/app/app/serializers/content_type.py +++ b/app/app/serializers/content_type.py @@ -15,7 +15,7 @@ class ContentTypeBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_content_type-detail", format="html" + view_name="v2:_api_v2_content_type-detail", format="html" ) class Meta: @@ -46,7 +46,7 @@ class ContentTypeViewSerializer(ContentTypeBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_content_type-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_content_type-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), } diff --git a/app/app/serializers/permission.py b/app/app/serializers/permission.py index 8b110bca..eb8d45e7 100644 --- a/app/app/serializers/permission.py +++ b/app/app/serializers/permission.py @@ -16,7 +16,7 @@ class PermissionBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_permission-detail", format="html" + view_name="v2:_api_v2_permission-detail", format="html" ) class Meta: @@ -49,7 +49,7 @@ class PermissionViewSerializer(PermissionBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_permission-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_permission-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), } diff --git a/app/app/serializers/user.py b/app/app/serializers/user.py index 23a959b9..b21b3387 100644 --- a/app/app/serializers/user.py +++ b/app/app/serializers/user.py @@ -14,7 +14,7 @@ class UserBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_user-detail", format="html" + view_name="v2:_api_v2_user-detail", format="html" ) class Meta: diff --git a/app/app/settings.py b/app/app/settings.py index cad22346..7680eb7b 100644 --- a/app/app/settings.py +++ b/app/app/settings.py @@ -274,12 +274,19 @@ if API_ENABLED: # 'TEST_REQUEST_DEFAULT_FORMAT': 'vnd.api+json' 'TEST_REQUEST_DEFAULT_FORMAT': 'json', 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', + 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning', + 'DEFAULT_VERSION': 'v1', + 'ALLOWED_VERSIONS': [ + 'v1', + 'v2' + ] } SPECTACULAR_SETTINGS = { - 'TITLE': 'ITSM API', - 'DESCRIPTION': """This UI is intended to serve as the API documentation. + 'TITLE': 'Centurion ERP API', + 'DESCRIPTION': """This UI exists to server the purpose of being the API documentation. +Centurion ERP's API is versioned, with [v1 Depreciated](/api/swagger) and [v2 as the current](/api/v2/docs). ## Authentication Access to the API is restricted and requires authentication. Available authentication methods are: @@ -308,10 +315,9 @@ curl: ``` """, - 'VERSION': '1.0.0', + 'VERSION': '', 'SCHEMA_PATH_PREFIX': '/api/v2/|/api/', 'SERVE_INCLUDE_SCHEMA': False, - 'SWAGGER_UI_DIST': 'SIDECAR', 'SWAGGER_UI_FAVICON_HREF': 'SIDECAR', 'REDOC_DIST': 'SIDECAR', diff --git a/app/app/urls.py b/app/app/urls.py index 46bc92a9..94446dd4 100644 --- a/app/app/urls.py +++ b/app/app/urls.py @@ -66,11 +66,15 @@ if settings.SSO_ENABLED: if settings.API_ENABLED: + urlpatterns += [ - path("api/", include("api.urls")), - path('api/schema/', SpectacularAPIView.as_view(), name='schema'), + path("api/", include("api.urls", namespace = 'v1')), + path('api/schema/', SpectacularAPIView.as_view(api_version='v1'), name='schema'), path('api/swagger/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'), + + path("api/v2/", include("api.urls_v2", namespace = 'v2')), + ] diff --git a/app/app/viewsets/base/index.py b/app/app/viewsets/base/index.py index 7cfda34c..b2b47294 100644 --- a/app/app/viewsets/base/index.py +++ b/app/app/viewsets/base/index.py @@ -24,8 +24,8 @@ class Index(CommonViewSet): return Response( { - "content_type": reverse('API:_api_v2_content_type-list', request=request), - "permission": reverse('API:_api_v2_permission-list', request=request), - "user": reverse('API:_api_v2_user-list', request=request) + "content_type": reverse('v2:_api_v2_content_type-list', request=request), + "permission": reverse('v2:_api_v2_permission-list', request=request), + "user": reverse('v2:_api_v2_user-list', request=request) } ) diff --git a/app/assistance/serializers/knowledge_base.py b/app/assistance/serializers/knowledge_base.py index 71d4ff95..4d52558e 100644 --- a/app/assistance/serializers/knowledge_base.py +++ b/app/assistance/serializers/knowledge_base.py @@ -26,7 +26,7 @@ class KnowledgeBaseBaseSerializer(serializers.ModelSerializer): def get_url(self, item): return reverse( - "API:_api_v2_knowledge_base-detail", + "v2:_api_v2_knowledge_base-detail", request=self.context['view'].request, kwargs={ 'pk': item.pk @@ -63,29 +63,29 @@ class KnowledgeBaseModelSerializer(KnowledgeBaseBaseSerializer): return { '_self': reverse( - 'API:_api_v2_knowledge_base-detail', + 'v2:_api_v2_knowledge_base-detail', request=self.context['view'].request, kwargs={ 'pk': item.pk } ), 'category': reverse( - 'API:_api_v2_knowledge_base_category-list', + 'v2:_api_v2_knowledge_base_category-list', request=self.context['view'].request, ), 'organization': reverse( - 'API:_api_v2_organization-list', + 'v2:_api_v2_organization-list', request=self.context['view'].request, ), 'team': reverse( - 'API:_api_v2_organization_team-list', + 'v2:_api_v2_organization_team-list', request=self.context['view'].request, kwargs={ 'organization_id': item.organization.id, } ), 'user': reverse( - 'API:_api_v2_user-list', + 'v2:_api_v2_user-list', request=self.context['view'].request, ) } diff --git a/app/assistance/serializers/knowledge_base_category.py b/app/assistance/serializers/knowledge_base_category.py index 9519a2a3..ab5b976d 100644 --- a/app/assistance/serializers/knowledge_base_category.py +++ b/app/assistance/serializers/knowledge_base_category.py @@ -27,7 +27,7 @@ class KnowledgeBaseCategoryBaseSerializer(serializers.ModelSerializer): def get_url(self, item): return reverse( - "API:_api_v2_knowledge_base_category-detail", + "v2:_api_v2_knowledge_base_category-detail", request=self.context['view'].request, kwargs={ 'pk': item.pk @@ -64,25 +64,25 @@ class KnowledgeBaseCategoryModelSerializer(KnowledgeBaseCategoryBaseSerializer): return { '_self': reverse( - 'API:_api_v2_knowledge_base_category-detail', + 'v2:_api_v2_knowledge_base_category-detail', request=self.context['view'].request, kwargs={ 'pk': item.pk } ), 'organization': reverse( - 'API:_api_v2_organization-list', + 'v2:_api_v2_organization-list', request=self.context['view'].request, ), 'team': reverse( - 'API:_api_v2_organization_team-list', + 'v2:_api_v2_organization_team-list', request=self.context['view'].request, kwargs={ 'organization_id': item.organization.id, } ), 'user': reverse( - 'API:_api_v2_user-list', + 'v2:_api_v2_user-list', request=self.context['view'].request, ) } diff --git a/app/assistance/tests/unit/knowledge_base/test_knowledge_base_api_v2.py b/app/assistance/tests/unit/knowledge_base/test_knowledge_base_api_v2.py index 8dfb9880..1f9f7b47 100644 --- a/app/assistance/tests/unit/knowledge_base/test_knowledge_base_api_v2.py +++ b/app/assistance/tests/unit/knowledge_base/test_knowledge_base_api_v2.py @@ -21,7 +21,7 @@ class KnowledgeBaseAPI( model = KnowledgeBase - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_knowledge_base' diff --git a/app/assistance/tests/unit/knowledge_base/test_knowledge_base_viewset.py b/app/assistance/tests/unit/knowledge_base/test_knowledge_base_viewset.py index 920f3e71..2769c899 100644 --- a/app/assistance/tests/unit/knowledge_base/test_knowledge_base_viewset.py +++ b/app/assistance/tests/unit/knowledge_base/test_knowledge_base_viewset.py @@ -20,7 +20,7 @@ class KnowledgeBasePermissionsAPI(TestCase, APIPermissions): model = KnowledgeBase - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_knowledge_base' diff --git a/app/assistance/tests/unit/knowledge_base_category/test_knowledge_base_category_api_v2.py b/app/assistance/tests/unit/knowledge_base_category/test_knowledge_base_category_api_v2.py index 649a92f0..5302225c 100644 --- a/app/assistance/tests/unit/knowledge_base_category/test_knowledge_base_category_api_v2.py +++ b/app/assistance/tests/unit/knowledge_base_category/test_knowledge_base_category_api_v2.py @@ -21,7 +21,7 @@ class KnowledgeBaseCategoryAPI( model = KnowledgeBaseCategory - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_knowledge_base_category' diff --git a/app/assistance/tests/unit/knowledge_base_category/test_knowledge_base_category_viewset.py b/app/assistance/tests/unit/knowledge_base_category/test_knowledge_base_category_viewset.py index cbf0e9cb..4e196efb 100644 --- a/app/assistance/tests/unit/knowledge_base_category/test_knowledge_base_category_viewset.py +++ b/app/assistance/tests/unit/knowledge_base_category/test_knowledge_base_category_viewset.py @@ -16,7 +16,7 @@ class KnowledgeBaseCategoryPermissionsAPI(TestCase, APIPermissions): model = KnowledgeBaseCategory - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_knowledge_base_category' diff --git a/app/assistance/tests/unit/test_assistance_viewset.py b/app/assistance/tests/unit/test_assistance_viewset.py index 6b3b441d..cb64ad27 100644 --- a/app/assistance/tests/unit/test_assistance_viewset.py +++ b/app/assistance/tests/unit/test_assistance_viewset.py @@ -16,7 +16,7 @@ class AssistanceViewset( viewset = Index - route_name = 'API:_api_v2_assistance_home' + route_name = 'v2:_api_v2_assistance_home' @classmethod diff --git a/app/assistance/viewsets/index.py b/app/assistance/viewsets/index.py index 264dd650..f2fd76ce 100644 --- a/app/assistance/viewsets/index.py +++ b/app/assistance/viewsets/index.py @@ -25,7 +25,7 @@ class Index(CommonViewSet): return Response( { - "knowledge_base": reverse('API:_api_v2_knowledge_base-list', request=request), - "request": "ToDo" + "knowledge_base": reverse('v2:_api_v2_knowledge_base-list', request=request), + "request": reverse('v2:_api_v2_ticket_request-list', request=request), } ) diff --git a/app/config_management/serializers/config_group.py b/app/config_management/serializers/config_group.py index 11dac261..481f798a 100644 --- a/app/config_management/serializers/config_group.py +++ b/app/config_management/serializers/config_group.py @@ -22,7 +22,7 @@ class ConfigGroupBaseSerializer(serializers.ModelSerializer): def get_url(self, item): return reverse( - "API:_api_v2_config_group-detail", + "v2:_api_v2_config_group-detail", request=self.context['view'].request, kwargs={ 'pk': item.pk @@ -59,41 +59,41 @@ class ConfigGroupModelSerializer(ConfigGroupBaseSerializer): return { '_self': reverse( - 'API:_api_v2_config_group-detail', + 'v2:_api_v2_config_group-detail', request = self.context['view'].request, kwargs = { 'pk': item.pk } ), 'child_groups': reverse( - 'API:_api_v2_config_group_child-list', + 'v2:_api_v2_config_group_child-list', request = self.context['view'].request, kwargs = { 'parent_group': item.pk } ), 'configgroups': reverse( - 'API:_api_v2_config_group-list', + 'v2:_api_v2_config_group-list', request = self.context['view'].request, ), 'group_software': reverse( - 'API:_api_v2_config_group_software-list', + 'v2:_api_v2_config_group_software-list', request=self.context['view'].request, kwargs = { 'group_id': item.pk } ), 'notes': reverse( - "API:_api_v2_config_group_notes-list", + "v2:_api_v2_config_group_notes-list", request=self._context['view'].request, kwargs={'group_id': item.pk} ), 'organization': reverse( - 'API:_api_v2_organization-list', + 'v2:_api_v2_organization-list', request=self.context['view'].request, ), 'parent': reverse( - 'API:_api_v2_config_group-list', + 'v2:_api_v2_config_group-list', request=self.context['view'].request, ), } diff --git a/app/config_management/serializers/config_group_software.py b/app/config_management/serializers/config_group_software.py index bef851c6..f2c6b7d5 100644 --- a/app/config_management/serializers/config_group_software.py +++ b/app/config_management/serializers/config_group_software.py @@ -26,7 +26,7 @@ class ConfigGroupSoftwareBaseSerializer(serializers.ModelSerializer): def get_url(self, item): return reverse( - "API:_api_v2_config_group-detail", + "v2:_api_v2_config_group-detail", request=self.context['view'].request, kwargs={ 'group_id': item.config_group.pk, @@ -64,7 +64,7 @@ class ConfigGroupSoftwareModelSerializer(ConfigGroupSoftwareBaseSerializer): return { '_self': reverse( - 'API:_api_v2_config_group_software-detail', + 'v2:_api_v2_config_group_software-detail', request = self.context['view'].request, kwargs = { 'group_id': item.config_group.pk, @@ -72,7 +72,7 @@ class ConfigGroupSoftwareModelSerializer(ConfigGroupSoftwareBaseSerializer): } ), 'organization': reverse( - 'API:_api_v2_organization-list', + 'v2:_api_v2_organization-list', request=self.context['view'].request, ), 'softwareversion': 'ToDo', diff --git a/app/config_management/tests/unit/config_groups/test_config_groups_api.py b/app/config_management/tests/unit/config_groups/test_config_groups_api.py index 838e1bd2..65d35c9e 100644 --- a/app/config_management/tests/unit/config_groups/test_config_groups_api.py +++ b/app/config_management/tests/unit/config_groups/test_config_groups_api.py @@ -70,7 +70,7 @@ class ConfigGroupsAPI( ) client = Client() - url = reverse('API:_api_config_group', kwargs=self.url_view_kwargs) + url = reverse('v1:_api_config_group', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/config_management/tests/unit/config_groups/test_config_groups_api_v2.py b/app/config_management/tests/unit/config_groups/test_config_groups_api_v2.py index 3d9d1b7f..56066b00 100644 --- a/app/config_management/tests/unit/config_groups/test_config_groups_api_v2.py +++ b/app/config_management/tests/unit/config_groups/test_config_groups_api_v2.py @@ -71,7 +71,7 @@ class ConfigGroupsAPI( ) client = Client() - url = reverse('API:_api_v2_config_group-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_config_group-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/config_management/tests/unit/config_groups/test_config_groups_viewset.py b/app/config_management/tests/unit/config_groups/test_config_groups_viewset.py index d948a1e6..67795de0 100644 --- a/app/config_management/tests/unit/config_groups/test_config_groups_viewset.py +++ b/app/config_management/tests/unit/config_groups/test_config_groups_viewset.py @@ -20,7 +20,7 @@ class ConfigGroupsPermissionsAPI(TestCase, APIPermissions): model = ConfigGroups - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_config_group' diff --git a/app/config_management/tests/unit/config_groups_software/test_config_groups_software_api_v2.py b/app/config_management/tests/unit/config_groups_software/test_config_groups_software_api_v2.py index 85861be8..fa205dd2 100644 --- a/app/config_management/tests/unit/config_groups_software/test_config_groups_software_api_v2.py +++ b/app/config_management/tests/unit/config_groups_software/test_config_groups_software_api_v2.py @@ -85,7 +85,7 @@ class ConfigGroupsAPI( ) client = Client() - url = reverse('API:_api_v2_config_group_software-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_config_group_software-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/config_management/tests/unit/config_groups_software/test_config_groups_software_viewset.py b/app/config_management/tests/unit/config_groups_software/test_config_groups_software_viewset.py index c8df61df..1d92be79 100644 --- a/app/config_management/tests/unit/config_groups_software/test_config_groups_software_viewset.py +++ b/app/config_management/tests/unit/config_groups_software/test_config_groups_software_viewset.py @@ -20,7 +20,7 @@ class ConfigGroupSoftwarePermissionsAPI(TestCase, APIPermissions): model = ConfigGroupSoftware - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_config_group_software' diff --git a/app/config_management/tests/unit/test_config_management_viewset.py b/app/config_management/tests/unit/test_config_management_viewset.py index c3b8768c..8b4495c3 100644 --- a/app/config_management/tests/unit/test_config_management_viewset.py +++ b/app/config_management/tests/unit/test_config_management_viewset.py @@ -16,7 +16,7 @@ class ConfigManagementViewset( viewset = Index - route_name = 'API:_api_v2_config_management_home' + route_name = 'v2:_api_v2_config_management_home' @classmethod diff --git a/app/config_management/viewsets/index.py b/app/config_management/viewsets/index.py index 3674cea9..a4a95700 100644 --- a/app/config_management/viewsets/index.py +++ b/app/config_management/viewsets/index.py @@ -25,6 +25,6 @@ class Index(CommonViewSet): return Response( { - "group": reverse('API:_api_v2_config_group-list', request=request), + "group": reverse('v2:_api_v2_config_group-list', request=request), } ) diff --git a/app/core/serializers/celery_log.py b/app/core/serializers/celery_log.py index 9dc44362..e82d0e30 100644 --- a/app/core/serializers/celery_log.py +++ b/app/core/serializers/celery_log.py @@ -20,7 +20,7 @@ class TaskResultBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_celery_log-detail", format="html" + view_name="v2:_api_v2_celery_log-detail", format="html" ) @@ -49,7 +49,7 @@ class TaskResultModelSerializer(TaskResultBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_celery_log-detail", + '_self': reverse("v2:_api_v2_celery_log-detail", request=self._context['view'].request, kwargs={ 'pk': item.pk diff --git a/app/core/serializers/history.py b/app/core/serializers/history.py index a6722fa8..deaca3d1 100644 --- a/app/core/serializers/history.py +++ b/app/core/serializers/history.py @@ -19,7 +19,7 @@ class HistoryBaseSerializer(serializers.ModelSerializer): def get_my_url(self, item): - return reverse("API:_api_v2_model_history-detail", + return reverse("v2:_api_v2_model_history-detail", request=self._context['view'].request, kwargs={ 'model_class': self._kwargs['context']['view'].kwargs['model_class'], @@ -58,7 +58,7 @@ class HistoryModelSerializer(HistoryBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_model_history-detail", + '_self': reverse("v2:_api_v2_model_history-detail", request=self._context['view'].request, kwargs={ 'model_class': self._kwargs['context']['view'].kwargs['model_class'], diff --git a/app/core/serializers/manufacturer.py b/app/core/serializers/manufacturer.py index e4e369a7..29dab0ff 100644 --- a/app/core/serializers/manufacturer.py +++ b/app/core/serializers/manufacturer.py @@ -18,7 +18,7 @@ class ManufacturerBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_manufacturer-detail", format="html" + view_name="v2:_api_v2_manufacturer-detail", format="html" ) @@ -47,21 +47,21 @@ class ManufacturerModelSerializer(ManufacturerBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_manufacturer-detail", + '_self': reverse("v2:_api_v2_manufacturer-detail", request=self._context['view'].request, kwargs={ 'pk': item.pk } ), 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, 'model_id': item.pk } ), - # 'notes': reverse("API:_api_v2_manufacturer_notes-list", request=self._context['view'].request, kwargs={'manufacturer_id': item.pk}), + # 'notes': reverse("v2:_api_v2_manufacturer_notes-list", request=self._context['view'].request, kwargs={'manufacturer_id': item.pk}), } diff --git a/app/core/serializers/notes.py b/app/core/serializers/notes.py index 991a81dc..dcfa3426 100644 --- a/app/core/serializers/notes.py +++ b/app/core/serializers/notes.py @@ -26,7 +26,7 @@ class NoteBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_device-detail", format="html" + view_name="v2:_api_v2_device-detail", format="html" ) class Meta: @@ -59,7 +59,7 @@ class NoteModelSerializer(NoteBaseSerializer): if 'group_id' in self._kwargs['context']['view'].kwargs: - _self = reverse("API:_api_v2_config_group_notes-detail", + _self = reverse("v2:_api_v2_config_group_notes-detail", request=self._context['view'].request, kwargs={ 'group_id': self._kwargs['context']['view'].kwargs['group_id'], @@ -69,7 +69,7 @@ class NoteModelSerializer(NoteBaseSerializer): elif 'device_id' in self._kwargs['context']['view'].kwargs: - _self = reverse("API:_api_v2_device_notes-detail", + _self = reverse("v2:_api_v2_device_notes-detail", request=self._context['view'].request, kwargs={ 'device_id': self._kwargs['context']['view'].kwargs['device_id'], @@ -79,7 +79,7 @@ class NoteModelSerializer(NoteBaseSerializer): elif 'operating_system_id' in self._kwargs['context']['view'].kwargs: - _self = reverse("API:_api_v2_operating_system_notes-detail", + _self = reverse("v2:_api_v2_operating_system_notes-detail", request=self._context['view'].request, kwargs={ 'operating_system_id': self._kwargs['context']['view'].kwargs['operating_system_id'], @@ -89,7 +89,7 @@ class NoteModelSerializer(NoteBaseSerializer): elif 'service_id' in self._kwargs['context']['view'].kwargs: - _self = reverse("API:_api_v2_service_notes-detail", + _self = reverse("v2:_api_v2_service_notes-detail", request=self._context['view'].request, kwargs={ 'service_id': self._kwargs['context']['view'].kwargs['service_id'], @@ -99,7 +99,7 @@ class NoteModelSerializer(NoteBaseSerializer): elif 'project_id' in self._kwargs['context']['view'].kwargs: - _self = reverse("API:_api_v2_project_notes-detail", + _self = reverse("v2:_api_v2_project_notes-detail", request=self._context['view'].request, kwargs={ 'project_id': self._kwargs['context']['view'].kwargs['project_id'], @@ -109,7 +109,7 @@ class NoteModelSerializer(NoteBaseSerializer): elif 'software_id' in self._kwargs['context']['view'].kwargs: - _self = reverse("API:_api_v2_software_notes-detail", + _self = reverse("v2:_api_v2_software_notes-detail", request=self._context['view'].request, kwargs={ 'software_id': self._kwargs['context']['view'].kwargs['software_id'], diff --git a/app/core/tests/unit/manufacturer/test_manufacturer_api_v2.py b/app/core/tests/unit/manufacturer/test_manufacturer_api_v2.py index fee76eaf..ff192d2e 100644 --- a/app/core/tests/unit/manufacturer/test_manufacturer_api_v2.py +++ b/app/core/tests/unit/manufacturer/test_manufacturer_api_v2.py @@ -63,7 +63,7 @@ class ManufacturerAPI( ) client = Client() - url = reverse('API:_api_v2_manufacturer-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_manufacturer-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/core/tests/unit/manufacturer/test_manufacturer_viewset.py b/app/core/tests/unit/manufacturer/test_manufacturer_viewset.py index 66447711..9a1aa77a 100644 --- a/app/core/tests/unit/manufacturer/test_manufacturer_viewset.py +++ b/app/core/tests/unit/manufacturer/test_manufacturer_viewset.py @@ -20,7 +20,7 @@ class ManufacturerPermissionsAPI(TestCase, APIPermissions): model = Manufacturer - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_manufacturer' diff --git a/app/core/tests/unit/test_history/test_history_viewset.py b/app/core/tests/unit/test_history/test_history_viewset.py index 975cad51..db8d7adf 100644 --- a/app/core/tests/unit/test_history/test_history_viewset.py +++ b/app/core/tests/unit/test_history/test_history_viewset.py @@ -23,7 +23,7 @@ class HistoryPermissionsAPI(TestCase, APIPermissions): model = History - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_model_history' diff --git a/app/core/tests/unit/test_notes/test_notes_api_v2.py b/app/core/tests/unit/test_notes/test_notes_api_v2.py index f32af688..6222e4e3 100644 --- a/app/core/tests/unit/test_notes/test_notes_api_v2.py +++ b/app/core/tests/unit/test_notes/test_notes_api_v2.py @@ -95,7 +95,7 @@ class NotesAPI( client = Client() - url = reverse('API:_api_v2_device_notes-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_device_notes-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/core/tests/unit/test_task_result/test_task_result_api_v2.py b/app/core/tests/unit/test_task_result/test_task_result_api_v2.py index 1d40a6d7..93575aa9 100644 --- a/app/core/tests/unit/test_task_result/test_task_result_api_v2.py +++ b/app/core/tests/unit/test_task_result/test_task_result_api_v2.py @@ -76,7 +76,7 @@ class CeleryTaskResultAPI( self.url_view_kwargs = {'pk': self.item.id} client = Client() - url = reverse('API:_api_v2_celery_log-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_celery_log-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/core/tests/unit/test_task_result/test_task_result_viewset.py b/app/core/tests/unit/test_task_result/test_task_result_viewset.py index 17b82852..a0b80c3c 100644 --- a/app/core/tests/unit/test_task_result/test_task_result_viewset.py +++ b/app/core/tests/unit/test_task_result/test_task_result_viewset.py @@ -34,7 +34,7 @@ class TaskResultPermissionsAPI( model = TaskResult - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_celery_log' diff --git a/app/core/tests/unit/ticket/test_ticket_permission_api.py b/app/core/tests/unit/ticket/test_ticket_permission_api.py index 24134c60..740a05bf 100644 --- a/app/core/tests/unit/ticket/test_ticket_permission_api.py +++ b/app/core/tests/unit/ticket/test_ticket_permission_api.py @@ -186,7 +186,7 @@ class ChangeTicketPermissionsAPI(TicketPermissionsAPI, TestCase): ticket_type_enum: int = int(Ticket.TicketType.CHANGE.value) - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_itim_change-detail' @@ -202,7 +202,7 @@ class IncidentTicketPermissionsAPI(TicketPermissionsAPI, TestCase): ticket_type_enum: int = int(Ticket.TicketType.INCIDENT.value) - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_itim_incident-detail' @@ -218,7 +218,7 @@ class ProblemTicketPermissionsAPI(TicketPermissionsAPI, TestCase): ticket_type_enum: int = int(Ticket.TicketType.PROBLEM.value) - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_itim_problem-detail' @@ -234,7 +234,7 @@ class RequestTicketPermissionsAPI(TicketPermissionsAPI, TestCase): ticket_type_enum: int = int(Ticket.TicketType.REQUEST.value) - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_assistance_request-detail' diff --git a/app/core/tests/unit/ticket_category/test_ticket_category_permission_api.py b/app/core/tests/unit/ticket_category/test_ticket_category_permission_api.py index ce5f333e..7ad322f4 100644 --- a/app/core/tests/unit/ticket_category/test_ticket_category_permission_api.py +++ b/app/core/tests/unit/ticket_category/test_ticket_category_permission_api.py @@ -18,7 +18,7 @@ class TicketCategoryPermissionsAPI(TestCase, APIPermissions): model = TicketCategory - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_ticket_category-detail' diff --git a/app/core/tests/unit/ticket_comment/test_ticket_comment_permission_api.py b/app/core/tests/unit/ticket_comment/test_ticket_comment_permission_api.py index caa4bc34..c802635b 100644 --- a/app/core/tests/unit/ticket_comment/test_ticket_comment_permission_api.py +++ b/app/core/tests/unit/ticket_comment/test_ticket_comment_permission_api.py @@ -251,7 +251,7 @@ class ChangeCommentTicketPermissionsAPI(TicketCommentPermissionsAPI, TestCase): ticket_type_enum: int = int(Ticket.TicketType.CHANGE.value) - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_itim_change_ticket_comments-detail' @@ -267,7 +267,7 @@ class IncidentTicketCommentPermissionsAPI(TicketCommentPermissionsAPI, TestCase) ticket_type_enum: int = int(Ticket.TicketType.INCIDENT.value) - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_itim_incident_ticket_comments-detail' @@ -283,7 +283,7 @@ class ProblemTicketCommentPermissionsAPI(TicketCommentPermissionsAPI, TestCase): ticket_type_enum: int = int(Ticket.TicketType.PROBLEM.value) - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_itim_problem_ticket_comments-detail' @@ -299,7 +299,7 @@ class RequestTicketCommentPermissionsAPI(TicketCommentPermissionsAPI, TestCase): ticket_type_enum: int = int(Ticket.TicketType.REQUEST.value) - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_assistance_request_ticket_comments-detail' diff --git a/app/core/tests/unit/ticket_comment_category/test_ticket_comment_category_permission_api.py b/app/core/tests/unit/ticket_comment_category/test_ticket_comment_category_permission_api.py index fe0f35eb..34d39953 100644 --- a/app/core/tests/unit/ticket_comment_category/test_ticket_comment_category_permission_api.py +++ b/app/core/tests/unit/ticket_comment_category/test_ticket_comment_category_permission_api.py @@ -18,7 +18,7 @@ class TicketCommentCategoryPermissionsAPI(TestCase, APIPermissions): model = TicketCommentCategory - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_ticket_comment_category-detail' diff --git a/app/itam/serializers/device.py b/app/itam/serializers/device.py index 710fa938..86bd8553 100644 --- a/app/itam/serializers/device.py +++ b/app/itam/serializers/device.py @@ -27,7 +27,7 @@ class DeviceBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_device-detail", format="html" + view_name="v2:_api_v2_device-detail", format="html" ) class Meta: @@ -55,21 +55,21 @@ class DeviceModelSerializer(DeviceBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_device-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), - 'device_model': reverse("API:_api_v2_device_model-list", request=self._context['view'].request), - 'device_type': reverse("API:_api_v2_device_type-list", request=self._context['view'].request), - 'external_links': reverse("API:_api_v2_external_link-list", request=self._context['view'].request) + '?devices=true', + '_self': reverse("v2:_api_v2_device-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + 'device_model': reverse("v2:_api_v2_device_model-list", request=self._context['view'].request), + 'device_type': reverse("v2:_api_v2_device_type-list", request=self._context['view'].request), + 'external_links': reverse("v2:_api_v2_external_link-list", request=self._context['view'].request) + '?devices=true', 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, 'model_id': item.pk } ), - 'notes': reverse("API:_api_v2_device_notes-list", request=self._context['view'].request, kwargs={'device_id': item.pk}), - 'service': reverse("API:_api_v2_service_device-list", request=self._context['view'].request, kwargs={'device_id': item.pk}), - 'software': reverse("API:_api_v2_device_software-list", request=self._context['view'].request, kwargs={'device_id': item.pk}), + 'notes': reverse("v2:_api_v2_device_notes-list", request=self._context['view'].request, kwargs={'device_id': item.pk}), + 'service': reverse("v2:_api_v2_service_device-list", request=self._context['view'].request, kwargs={'device_id': item.pk}), + 'software': reverse("v2:_api_v2_device_software-list", request=self._context['view'].request, kwargs={'device_id': item.pk}), } diff --git a/app/itam/serializers/device_model.py b/app/itam/serializers/device_model.py index 63711203..6b8e4e8f 100644 --- a/app/itam/serializers/device_model.py +++ b/app/itam/serializers/device_model.py @@ -20,7 +20,7 @@ class DeviceModelBaseSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_device_model-detail", format="html" + view_name="v2:_api_v2_device_model-detail", format="html" ) class Meta: @@ -50,7 +50,7 @@ class DeviceModelModelSerializer(DeviceModelBaseSerializer): def get_url(self, obj): return { - '_self': reverse("API:_api_v2_device_model-detail", request=self._context['view'].request, kwargs={'pk': obj.pk}) + '_self': reverse("v2:_api_v2_device_model-detail", request=self._context['view'].request, kwargs={'pk': obj.pk}) } class Meta: diff --git a/app/itam/serializers/device_software.py b/app/itam/serializers/device_software.py index 9b03bdca..73cb536a 100644 --- a/app/itam/serializers/device_software.py +++ b/app/itam/serializers/device_software.py @@ -26,7 +26,7 @@ class DeviceSoftwareBaseSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_device_software-detail", format="html" + view_name="v2:_api_v2_device_software-detail", format="html" ) @@ -58,7 +58,7 @@ class DeviceSoftwareModelSerializer(DeviceSoftwareBaseSerializer): return { '_self': reverse( - "API:_api_v2_device_software-detail", + "v2:_api_v2_device_software-detail", request=self._context['view'].request, kwargs={ 'device_id': self._context['view'].kwargs['device_id'], diff --git a/app/itam/serializers/device_type.py b/app/itam/serializers/device_type.py index 8a08841b..2b5a755c 100644 --- a/app/itam/serializers/device_type.py +++ b/app/itam/serializers/device_type.py @@ -16,7 +16,7 @@ class DeviceTypeBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_device_type-detail", format="html" + view_name="v2:_api_v2_device_type-detail", format="html" ) class Meta: @@ -46,7 +46,7 @@ class DeviceTypeModelSerializer(DeviceTypeBaseSerializer): def get_url(self, obj): return { - '_self': reverse("API:_api_v2_device_type-detail", request=self._context['view'].request, kwargs={'pk': obj.pk}) + '_self': reverse("v2:_api_v2_device_type-detail", request=self._context['view'].request, kwargs={'pk': obj.pk}) } diff --git a/app/itam/serializers/operating_system.py b/app/itam/serializers/operating_system.py index 4565a970..64b2cce5 100644 --- a/app/itam/serializers/operating_system.py +++ b/app/itam/serializers/operating_system.py @@ -19,7 +19,7 @@ class OperatingSystemBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_operating_system-detail", format="html" + view_name="v2:_api_v2_operating_system-detail", format="html" ) class Meta: @@ -51,18 +51,18 @@ class OperatingSystemModelSerializer(OperatingSystemBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_operating_system-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_operating_system-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, 'model_id': item.pk } ), - 'notes': reverse("API:_api_v2_operating_system_notes-list", request=self._context['view'].request, kwargs={'operating_system_id': item.pk}), + 'notes': reverse("v2:_api_v2_operating_system_notes-list", request=self._context['view'].request, kwargs={'operating_system_id': item.pk}), 'tickets': 'ToDo', - 'version': reverse("API:_api_v2_operating_system_version-list", request=self._context['view'].request, kwargs={'operating_system_id': item.pk}), + 'version': reverse("v2:_api_v2_operating_system_version-list", request=self._context['view'].request, kwargs={'operating_system_id': item.pk}), } diff --git a/app/itam/serializers/operating_system_version.py b/app/itam/serializers/operating_system_version.py index c1c42e40..ce9e4cbd 100644 --- a/app/itam/serializers/operating_system_version.py +++ b/app/itam/serializers/operating_system_version.py @@ -25,7 +25,7 @@ class OperatingSystemVersionBaseSerializer(serializers.ModelSerializer): def my_url(self, item): return reverse( - "API:_api_v2_operating_system_version-detail", + "v2:_api_v2_operating_system_version-detail", request=self.context['view'].request, kwargs={ 'operating_system_id': self._context['view'].kwargs['operating_system_id'], @@ -64,7 +64,7 @@ class OperatingSystemVersionModelSerializer(OperatingSystemVersionBaseSerializer return { '_self': reverse( - "API:_api_v2_operating_system_version-detail", + "v2:_api_v2_operating_system_version-detail", request=self._context['view'].request, kwargs={ 'operating_system_id': self._context['view'].kwargs['operating_system_id'], @@ -72,7 +72,7 @@ class OperatingSystemVersionModelSerializer(OperatingSystemVersionBaseSerializer } ), 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, @@ -80,7 +80,7 @@ class OperatingSystemVersionModelSerializer(OperatingSystemVersionBaseSerializer } ), 'notes': reverse( - "API:_api_v2_operating_system_notes-list", + "v2:_api_v2_operating_system_notes-list", request=self._context['view'].request, kwargs={ 'operating_system_id': item.pk diff --git a/app/itam/serializers/software.py b/app/itam/serializers/software.py index 5e117636..5ca93fee 100644 --- a/app/itam/serializers/software.py +++ b/app/itam/serializers/software.py @@ -19,7 +19,7 @@ class SoftwareBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_software-detail", format="html" + view_name="v2:_api_v2_software-detail", format="html" ) class Meta: @@ -49,21 +49,21 @@ class SoftwareModelSerializer(SoftwareBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_software-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), - 'external_links': reverse("API:_api_v2_external_link-list", request=self._context['view'].request) + '?software=true', + '_self': reverse("v2:_api_v2_software-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + 'external_links': reverse("v2:_api_v2_external_link-list", request=self._context['view'].request) + '?software=true', 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, 'model_id': item.pk } ), - 'notes': reverse("API:_api_v2_software_notes-list", request=self._context['view'].request, kwargs={'software_id': item.pk}), - 'publisher': reverse("API:_api_v2_manufacturer-list", request=self._context['view'].request), + 'notes': reverse("v2:_api_v2_software_notes-list", request=self._context['view'].request, kwargs={'software_id': item.pk}), + 'publisher': reverse("v2:_api_v2_manufacturer-list", request=self._context['view'].request), 'services': 'ToDo', 'version': reverse( - "API:_api_v2_software_version-list", + "v2:_api_v2_software_version-list", request=self._context['view'].request, kwargs={ 'software_id': item.pk diff --git a/app/itam/serializers/software_category.py b/app/itam/serializers/software_category.py index 340ae0ce..747e87b0 100644 --- a/app/itam/serializers/software_category.py +++ b/app/itam/serializers/software_category.py @@ -18,7 +18,7 @@ class SoftwareCategoryBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_software_category-detail", format="html" + view_name="v2:_api_v2_software_category-detail", format="html" ) class Meta: @@ -48,7 +48,7 @@ class SoftwareCategoryModelSerializer(SoftwareCategoryBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_software_category-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_software_category-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), 'history': 'ToDo', 'notes': 'ToDo', } diff --git a/app/itam/serializers/software_version.py b/app/itam/serializers/software_version.py index 77b1d778..f5514acd 100644 --- a/app/itam/serializers/software_version.py +++ b/app/itam/serializers/software_version.py @@ -22,7 +22,7 @@ class SoftwareVersionBaseSerializer(serializers.ModelSerializer): def my_url(self, item): return reverse( - "API:_api_v2_software_version-detail", + "v2:_api_v2_software_version-detail", request=self.context['view'].request, kwargs={ 'software_id': item.software.pk, @@ -58,7 +58,7 @@ class SoftwareVersionModelSerializer(SoftwareVersionBaseSerializer): return { '_self': reverse( - "API:_api_v2_software_version-detail", + "v2:_api_v2_software_version-detail", request=self._context['view'].request, kwargs={ 'software_id': item.software.pk, @@ -66,7 +66,7 @@ class SoftwareVersionModelSerializer(SoftwareVersionBaseSerializer): } ), 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, diff --git a/app/itam/tests/unit/device/test_device_api.py b/app/itam/tests/unit/device/test_device_api.py index 34c03bb9..dd7f6f49 100644 --- a/app/itam/tests/unit/device/test_device_api.py +++ b/app/itam/tests/unit/device/test_device_api.py @@ -199,7 +199,7 @@ class DeviceAPI(TestCase): client = Client() - url = reverse('API:device-detail', kwargs=self.url_view_kwargs) + url = reverse('v1:device-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) @@ -420,7 +420,7 @@ class DeviceAPI(TestCase): """ client = Client() - url = reverse('API:device-list') + url = reverse('v1:device-list') client.force_login(self.add_user) @@ -444,7 +444,7 @@ class DeviceAPI(TestCase): """ client = Client() - url = reverse('API:device-list') + url = reverse('v1:device-list') client.force_login(self.add_user) @@ -468,7 +468,7 @@ class DeviceAPI(TestCase): """ client = Client() - url = reverse('API:device-list') + url = reverse('v1:device-list') client.force_login(self.add_user) @@ -492,7 +492,7 @@ class DeviceAPI(TestCase): """ client = Client() - url = reverse('API:device-list') + url = reverse('v1:device-list') client.force_login(self.add_user) diff --git a/app/itam/tests/unit/device/test_device_api_v2.py b/app/itam/tests/unit/device/test_device_api_v2.py index e665fc02..dc1f1fbf 100644 --- a/app/itam/tests/unit/device/test_device_api_v2.py +++ b/app/itam/tests/unit/device/test_device_api_v2.py @@ -90,7 +90,7 @@ class DeviceAPI( ) client = Client() - url = reverse('API:_api_v2_device-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_device-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itam/tests/unit/device/test_device_permission_api.py b/app/itam/tests/unit/device/test_device_permission_api.py index f2699cd5..1b26667a 100644 --- a/app/itam/tests/unit/device/test_device_permission_api.py +++ b/app/itam/tests/unit/device/test_device_permission_api.py @@ -17,7 +17,7 @@ class DevicePermissionsAPI(TestCase, APIPermissions): model = Device - app_namespace = 'API' + app_namespace = 'v1' url_name = 'device-detail' diff --git a/app/itam/tests/unit/device/test_device_viewset.py b/app/itam/tests/unit/device/test_device_viewset.py index 74113752..f1293ab8 100644 --- a/app/itam/tests/unit/device/test_device_viewset.py +++ b/app/itam/tests/unit/device/test_device_viewset.py @@ -16,7 +16,7 @@ class DevicePermissionsAPI(TestCase, APIPermissions): model = Device - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_device' diff --git a/app/itam/tests/unit/device_model/test_device_model_api_v2.py b/app/itam/tests/unit/device_model/test_device_model_api_v2.py index 3ebbc1a5..5a2b2e07 100644 --- a/app/itam/tests/unit/device_model/test_device_model_api_v2.py +++ b/app/itam/tests/unit/device_model/test_device_model_api_v2.py @@ -72,7 +72,7 @@ class DeviceModelAPI( ) client = Client() - url = reverse('API:_api_v2_device_model-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_device_model-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itam/tests/unit/device_model/test_device_model_viewset.py b/app/itam/tests/unit/device_model/test_device_model_viewset.py index aabbdb52..bc1e3dbb 100644 --- a/app/itam/tests/unit/device_model/test_device_model_viewset.py +++ b/app/itam/tests/unit/device_model/test_device_model_viewset.py @@ -16,7 +16,7 @@ class DeviceModelPermissionsAPI(TestCase, APIPermissions): model = DeviceModel - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_device_model' diff --git a/app/itam/tests/unit/device_software/test_device_software_api_v2.py b/app/itam/tests/unit/device_software/test_device_software_api_v2.py index c485d185..f7e9ed96 100644 --- a/app/itam/tests/unit/device_software/test_device_software_api_v2.py +++ b/app/itam/tests/unit/device_software/test_device_software_api_v2.py @@ -106,7 +106,7 @@ class DeviceSoftwareAPI( ) client = Client() - url = reverse('API:_api_v2_device_software-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_device_software-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itam/tests/unit/device_software/test_device_software_viewset.py b/app/itam/tests/unit/device_software/test_device_software_viewset.py index b9fa6950..4c1f038f 100644 --- a/app/itam/tests/unit/device_software/test_device_software_viewset.py +++ b/app/itam/tests/unit/device_software/test_device_software_viewset.py @@ -17,7 +17,7 @@ class DeviceSoftwarePermissionsAPI(TestCase, APIPermissions): model = DeviceSoftware - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_device_software' diff --git a/app/itam/tests/unit/device_type/test_device_type_api_v2.py b/app/itam/tests/unit/device_type/test_device_type_api_v2.py index b9669b5b..c03c01be 100644 --- a/app/itam/tests/unit/device_type/test_device_type_api_v2.py +++ b/app/itam/tests/unit/device_type/test_device_type_api_v2.py @@ -63,7 +63,7 @@ class DeviceTypeAPI( ) client = Client() - url = reverse('API:_api_v2_device_type-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_device_type-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itam/tests/unit/device_type/test_device_type_viewset.py b/app/itam/tests/unit/device_type/test_device_type_viewset.py index fed7edb3..c2db4d21 100644 --- a/app/itam/tests/unit/device_type/test_device_type_viewset.py +++ b/app/itam/tests/unit/device_type/test_device_type_viewset.py @@ -16,7 +16,7 @@ class DeviceTypePermissionsAPI(TestCase, APIPermissions): model = DeviceType - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_device_type' diff --git a/app/itam/tests/unit/operating_system/test_operating_system_api_v2.py b/app/itam/tests/unit/operating_system/test_operating_system_api_v2.py index c118017c..f7bcc6ee 100644 --- a/app/itam/tests/unit/operating_system/test_operating_system_api_v2.py +++ b/app/itam/tests/unit/operating_system/test_operating_system_api_v2.py @@ -74,7 +74,7 @@ class OperatingSystemAPI( ) client = Client() - url = reverse('API:_api_v2_operating_system-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_operating_system-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itam/tests/unit/operating_system/test_operating_system_viewset.py b/app/itam/tests/unit/operating_system/test_operating_system_viewset.py index ddc77052..021ff869 100644 --- a/app/itam/tests/unit/operating_system/test_operating_system_viewset.py +++ b/app/itam/tests/unit/operating_system/test_operating_system_viewset.py @@ -16,7 +16,7 @@ class OperatingSystemPermissionsAPI(TestCase, APIPermissions): model = OperatingSystem - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_operating_system' diff --git a/app/itam/tests/unit/operating_system_version/test_operating_system_version_api_v2.py b/app/itam/tests/unit/operating_system_version/test_operating_system_version_api_v2.py index e98eb0f3..3c3905d9 100644 --- a/app/itam/tests/unit/operating_system_version/test_operating_system_version_api_v2.py +++ b/app/itam/tests/unit/operating_system_version/test_operating_system_version_api_v2.py @@ -72,7 +72,7 @@ class OperatingSystemVersionAPI( ) client = Client() - url = reverse('API:_api_v2_operating_system_version-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_operating_system_version-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itam/tests/unit/operating_system_version/test_operating_system_version_viewset.py b/app/itam/tests/unit/operating_system_version/test_operating_system_version_viewset.py index 6c60f733..bfa7091c 100644 --- a/app/itam/tests/unit/operating_system_version/test_operating_system_version_viewset.py +++ b/app/itam/tests/unit/operating_system_version/test_operating_system_version_viewset.py @@ -16,7 +16,7 @@ class OperatingSystemVersionPermissionsAPI(TestCase, APIPermissions): model = OperatingSystemVersion - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_operating_system_version' diff --git a/app/itam/tests/unit/software/test_software_api.py b/app/itam/tests/unit/software/test_software_api.py index ad01f72a..70c0cf09 100644 --- a/app/itam/tests/unit/software/test_software_api.py +++ b/app/itam/tests/unit/software/test_software_api.py @@ -21,7 +21,7 @@ class SoftwareAPI(TestCase): model = Software - app_namespace = 'API' + app_namespace = 'v1' url_name = 'software-detail' diff --git a/app/itam/tests/unit/software/test_software_api_v2.py b/app/itam/tests/unit/software/test_software_api_v2.py index ae48866f..58934945 100644 --- a/app/itam/tests/unit/software/test_software_api_v2.py +++ b/app/itam/tests/unit/software/test_software_api_v2.py @@ -80,7 +80,7 @@ class SoftwareAPI( ) client = Client() - url = reverse('API:_api_v2_software-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_software-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) @@ -308,3 +308,22 @@ class SoftwareAPI( """ assert type(self.api_data['_urls']['version']) is str + + + + def test_api_field_exists_urls_tickets(self): + """ Test for existance of API Field + + _urls.tickets field must exist + """ + + assert 'tickets' in self.api_data['_urls'] + + + def test_api_field_type_urls_tickets(self): + """ Test for type for API Field + + _urls.tickets field must be str + """ + + assert type(self.api_data['_urls']['tickets']) is str diff --git a/app/itam/tests/unit/software/test_software_permission_api.py b/app/itam/tests/unit/software/test_software_permission_api.py index 4378819c..30cca90d 100644 --- a/app/itam/tests/unit/software/test_software_permission_api.py +++ b/app/itam/tests/unit/software/test_software_permission_api.py @@ -18,7 +18,7 @@ class SoftwarePermissionsAPI(TestCase, APIPermissions): model = Software - app_namespace = 'API' + app_namespace = 'v1' url_name = 'software-detail' diff --git a/app/itam/tests/unit/software/test_software_viewset.py b/app/itam/tests/unit/software/test_software_viewset.py index 1025ea7c..d2d1eebc 100644 --- a/app/itam/tests/unit/software/test_software_viewset.py +++ b/app/itam/tests/unit/software/test_software_viewset.py @@ -16,7 +16,7 @@ class SoftwarePermissionsAPI(TestCase, APIPermissions): model = Software - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_software' diff --git a/app/itam/tests/unit/software_category/test_software_category_api_v2.py b/app/itam/tests/unit/software_category/test_software_category_api_v2.py index 6ca334d8..07a2a58f 100644 --- a/app/itam/tests/unit/software_category/test_software_category_api_v2.py +++ b/app/itam/tests/unit/software_category/test_software_category_api_v2.py @@ -72,7 +72,7 @@ class SoftwareCategoryAPI( ) client = Client() - url = reverse('API:_api_v2_software_category-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_software_category-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itam/tests/unit/software_category/test_software_category_viewset.py b/app/itam/tests/unit/software_category/test_software_category_viewset.py index cd21c560..fdf0d700 100644 --- a/app/itam/tests/unit/software_category/test_software_category_viewset.py +++ b/app/itam/tests/unit/software_category/test_software_category_viewset.py @@ -16,7 +16,7 @@ class SoftwareCategoryPermissionsAPI(TestCase, APIPermissions): model = SoftwareCategory - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_software_category' diff --git a/app/itam/tests/unit/software_version/test_software_version_api_v2.py b/app/itam/tests/unit/software_version/test_software_version_api_v2.py index 62fcc007..2bc2d1d2 100644 --- a/app/itam/tests/unit/software_version/test_software_version_api_v2.py +++ b/app/itam/tests/unit/software_version/test_software_version_api_v2.py @@ -71,7 +71,7 @@ class SoftwareVersionCategoryAPI( ) client = Client() - url = reverse('API:_api_v2_software_version-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_software_version-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itam/tests/unit/software_version/test_software_version_viewset.py b/app/itam/tests/unit/software_version/test_software_version_viewset.py index 2b309ae5..1e9feffd 100644 --- a/app/itam/tests/unit/software_version/test_software_version_viewset.py +++ b/app/itam/tests/unit/software_version/test_software_version_viewset.py @@ -16,7 +16,7 @@ class SoftwareVersionPermissionsAPI(TestCase, APIPermissions): model = SoftwareVersion - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_software_version' diff --git a/app/itam/tests/unit/test_itam_viewset.py b/app/itam/tests/unit/test_itam_viewset.py index ae28710f..128ab06c 100644 --- a/app/itam/tests/unit/test_itam_viewset.py +++ b/app/itam/tests/unit/test_itam_viewset.py @@ -16,7 +16,7 @@ class ItamViewset( viewset = Index - route_name = 'API:_api_v2_itam_home' + route_name = 'v2:_api_v2_itam_home' @classmethod diff --git a/app/itam/viewsets/index.py b/app/itam/viewsets/index.py index 833d0c8d..96833e07 100644 --- a/app/itam/viewsets/index.py +++ b/app/itam/viewsets/index.py @@ -25,8 +25,8 @@ class Index(CommonViewSet): return Response( { - "device": reverse('API:_api_v2_device-list', request=request), - "operating_system": reverse('API:_api_v2_operating_system-list', request=request), - "software": reverse('API:_api_v2_software-list', request=request) + "device": reverse('v2:_api_v2_device-list', request=request), + "operating_system": reverse('v2:_api_v2_operating_system-list', request=request), + "software": reverse('v2:_api_v2_software-list', request=request) } ) diff --git a/app/itim/serializers/cluster.py b/app/itim/serializers/cluster.py index c45c2a38..86fcbe1f 100644 --- a/app/itim/serializers/cluster.py +++ b/app/itim/serializers/cluster.py @@ -19,7 +19,7 @@ class ClusterBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_cluster-detail", format="html" + view_name="v2:_api_v2_cluster-detail", format="html" ) class Meta: @@ -48,16 +48,16 @@ class ClusterModelSerializer(ClusterBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_cluster-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_cluster-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, 'model_id': item.pk } ), - 'notes': reverse("API:_api_v2_cluster_notes-list", request=self._context['view'].request, kwargs={'cluster_id': item.pk}), + 'notes': reverse("v2:_api_v2_cluster_notes-list", request=self._context['view'].request, kwargs={'cluster_id': item.pk}), 'tickets': 'ToDo' } diff --git a/app/itim/serializers/cluster_type.py b/app/itim/serializers/cluster_type.py index c84ed120..524a3fac 100644 --- a/app/itim/serializers/cluster_type.py +++ b/app/itim/serializers/cluster_type.py @@ -18,7 +18,7 @@ class ClusterTypeBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_cluster_type-detail", format="html" + view_name="v2:_api_v2_cluster_type-detail", format="html" ) class Meta: @@ -47,16 +47,16 @@ class ClusterTypeModelSerializer(ClusterTypeBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_cluster_type-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_cluster_type-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, 'model_id': item.pk } ), - 'notes': reverse("API:_api_v2_cluster_type_notes-list", request=self._context['view'].request, kwargs={'cluster_type_id': item.pk}), + 'notes': reverse("v2:_api_v2_cluster_type_notes-list", request=self._context['view'].request, kwargs={'cluster_type_id': item.pk}), } diff --git a/app/itim/serializers/port.py b/app/itim/serializers/port.py index 32ceb9bd..28eb9bd2 100644 --- a/app/itim/serializers/port.py +++ b/app/itim/serializers/port.py @@ -18,7 +18,7 @@ class PortBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_port-detail", format="html" + view_name="v2:_api_v2_port-detail", format="html" ) name = serializers.SerializerMethodField('get_display_name') @@ -50,16 +50,16 @@ class PortModelSerializer(PortBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_port-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_port-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, 'model_id': item.pk } ), - 'notes': reverse("API:_api_v2_port_notes-list", request=self._context['view'].request, kwargs={'port_id': item.pk}), + 'notes': reverse("v2:_api_v2_port_notes-list", request=self._context['view'].request, kwargs={'port_id': item.pk}), } diff --git a/app/itim/serializers/service.py b/app/itim/serializers/service.py index 56e3e0bf..aeecd36b 100644 --- a/app/itim/serializers/service.py +++ b/app/itim/serializers/service.py @@ -21,7 +21,7 @@ class ServiceBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_service-detail", format="html" + view_name="v2:_api_v2_service-detail", format="html" ) class Meta: @@ -50,16 +50,16 @@ class ServiceModelSerializer(ServiceBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_service-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_service-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, 'model_id': item.pk } ), - 'notes': reverse("API:_api_v2_service_notes-list", request=self._context['view'].request, kwargs={'service_id': item.pk}), + 'notes': reverse("v2:_api_v2_service_notes-list", request=self._context['view'].request, kwargs={'service_id': item.pk}), 'tickets': 'ToDo' } diff --git a/app/itim/tests/unit/cluster/test_cluster_api_v2.py b/app/itim/tests/unit/cluster/test_cluster_api_v2.py index 091dc9dc..237c1715 100644 --- a/app/itim/tests/unit/cluster/test_cluster_api_v2.py +++ b/app/itim/tests/unit/cluster/test_cluster_api_v2.py @@ -95,7 +95,7 @@ class ClusterAPI( ) client = Client() - url = reverse('API:_api_v2_cluster-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_cluster-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itim/tests/unit/cluster/test_cluster_viewset.py b/app/itim/tests/unit/cluster/test_cluster_viewset.py index 6b7dce1a..5f40216d 100644 --- a/app/itim/tests/unit/cluster/test_cluster_viewset.py +++ b/app/itim/tests/unit/cluster/test_cluster_viewset.py @@ -16,7 +16,7 @@ class ClusterPermissionsAPI(TestCase, APIPermissions): model = Cluster - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_cluster' diff --git a/app/itim/tests/unit/cluster_types/test_cluster_type_api_v2.py b/app/itim/tests/unit/cluster_types/test_cluster_type_api_v2.py index f796c456..93bfbaaa 100644 --- a/app/itim/tests/unit/cluster_types/test_cluster_type_api_v2.py +++ b/app/itim/tests/unit/cluster_types/test_cluster_type_api_v2.py @@ -65,7 +65,7 @@ class ClusterTypeAPI( ) client = Client() - url = reverse('API:_api_v2_cluster_type-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_cluster_type-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itim/tests/unit/cluster_types/test_cluster_type_viewset.py b/app/itim/tests/unit/cluster_types/test_cluster_type_viewset.py index 7fd3a340..7b4ab828 100644 --- a/app/itim/tests/unit/cluster_types/test_cluster_type_viewset.py +++ b/app/itim/tests/unit/cluster_types/test_cluster_type_viewset.py @@ -16,7 +16,7 @@ class ClusterTypePermissionsAPI(TestCase, APIPermissions): model = ClusterType - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_cluster_type' diff --git a/app/itim/tests/unit/port/test_port_api_v2.py b/app/itim/tests/unit/port/test_port_api_v2.py index 4ce1ef32..9a8b38f5 100644 --- a/app/itim/tests/unit/port/test_port_api_v2.py +++ b/app/itim/tests/unit/port/test_port_api_v2.py @@ -66,7 +66,7 @@ class PortAPI( ) client = Client() - url = reverse('API:_api_v2_port-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_port-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/itim/tests/unit/port/test_port_viewset.py b/app/itim/tests/unit/port/test_port_viewset.py index 98a94c65..fc61ae97 100644 --- a/app/itim/tests/unit/port/test_port_viewset.py +++ b/app/itim/tests/unit/port/test_port_viewset.py @@ -16,7 +16,7 @@ class PortPermissionsAPI(TestCase, APIPermissions): model = Port - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_port' diff --git a/app/itim/tests/unit/service/test_service_api_v2.py b/app/itim/tests/unit/service/test_service_api_v2.py index 97a8568e..f8fabbad 100644 --- a/app/itim/tests/unit/service/test_service_api_v2.py +++ b/app/itim/tests/unit/service/test_service_api_v2.py @@ -108,7 +108,7 @@ class ServiceAPI( ) client = Client() - url = reverse('API:_api_v2_service-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_service-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) @@ -117,7 +117,7 @@ class ServiceAPI( self.api_data = response.data - url = reverse('API:_api_v2_service-detail', kwargs={'pk': self.item_two.id}) + url = reverse('v2:_api_v2_service-detail', kwargs={'pk': self.item_two.id}) client.force_login(self.view_user) response = client.get(url) diff --git a/app/itim/tests/unit/service/test_service_viewset.py b/app/itim/tests/unit/service/test_service_viewset.py index 5282ead7..279dbd25 100644 --- a/app/itim/tests/unit/service/test_service_viewset.py +++ b/app/itim/tests/unit/service/test_service_viewset.py @@ -18,7 +18,7 @@ class ServicePermissionsAPI(TestCase, APIPermissions): model = Service - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_service' diff --git a/app/itim/tests/unit/test_itim_viewset.py b/app/itim/tests/unit/test_itim_viewset.py index 012f6cc4..d1e0f4dc 100644 --- a/app/itim/tests/unit/test_itim_viewset.py +++ b/app/itim/tests/unit/test_itim_viewset.py @@ -16,7 +16,7 @@ class ITIMViewset( viewset = Index - route_name = 'API:_api_v2_itim_home' + route_name = 'v2:_api_v2_itim_home' @classmethod diff --git a/app/itim/viewsets/index.py b/app/itim/viewsets/index.py index 2f7ebaea..a00e2d1c 100644 --- a/app/itim/viewsets/index.py +++ b/app/itim/viewsets/index.py @@ -26,9 +26,9 @@ class Index(CommonViewSet): return Response( { "change": "ToDo", - "cluster": reverse('API:_api_v2_cluster-list', request=request), + "cluster": reverse('v2:_api_v2_cluster-list', request=request), "incident": "ToDo", "problem": "ToDo", - "service": reverse('API:_api_v2_service-list', request=request), + "service": reverse('v2:_api_v2_service-list', request=request), } ) diff --git a/app/project_management/serializers/project.py b/app/project_management/serializers/project.py index e4f45910..5a4aae5a 100644 --- a/app/project_management/serializers/project.py +++ b/app/project_management/serializers/project.py @@ -25,7 +25,7 @@ class ProjectBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_project-detail", format="html" + view_name="v2:_api_v2_project-detail", format="html" ) class Meta: @@ -55,17 +55,17 @@ class ProjectModelSerializer(ProjectBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_project-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_project-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, 'model_id': item.pk } ), - 'milestone': reverse("API:_api_v2_project_milestone-list", request=self._context['view'].request, kwargs={'project_id': item.pk}), - 'notes': reverse("API:_api_v2_project_notes-list", request=self._context['view'].request, kwargs={'project_id': item.pk}), + 'milestone': reverse("v2:_api_v2_project_milestone-list", request=self._context['view'].request, kwargs={'project_id': item.pk}), + 'notes': reverse("v2:_api_v2_project_notes-list", request=self._context['view'].request, kwargs={'project_id': item.pk}), 'tickets': 'ToDo' } diff --git a/app/project_management/serializers/project_milestone.py b/app/project_management/serializers/project_milestone.py index 04915f31..e1eba818 100644 --- a/app/project_management/serializers/project_milestone.py +++ b/app/project_management/serializers/project_milestone.py @@ -22,7 +22,7 @@ class ProjectMilestoneBaseSerializer(serializers.ModelSerializer): def get_url(self, item): return reverse( - "API:_api_v2_project_milestone-detail", + "v2:_api_v2_project_milestone-detail", request=self._context['view'].request, kwargs={ 'project_id': item.project.id, @@ -58,7 +58,7 @@ class ProjectMilestoneModelSerializer(ProjectMilestoneBaseSerializer): return { '_self': reverse( - "API:_api_v2_project_milestone-detail", + "v2:_api_v2_project_milestone-detail", request=self._context['view'].request, kwargs={ 'project_id': item.project.id, diff --git a/app/project_management/serializers/project_states.py b/app/project_management/serializers/project_states.py index 665564cd..52a657aa 100644 --- a/app/project_management/serializers/project_states.py +++ b/app/project_management/serializers/project_states.py @@ -19,7 +19,7 @@ class ProjectStateBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_project_state-detail", format="html" + view_name="v2:_api_v2_project_state-detail", format="html" ) @@ -51,7 +51,7 @@ class ProjectStateModelSerializer(ProjectStateBaseSerializer): return { '_self': reverse( - "API:_api_v2_project_state-detail", + "v2:_api_v2_project_state-detail", request=self._context['view'].request, kwargs={ 'pk': item.pk diff --git a/app/project_management/serializers/project_type.py b/app/project_management/serializers/project_type.py index 1ee9c15b..a8e79b04 100644 --- a/app/project_management/serializers/project_type.py +++ b/app/project_management/serializers/project_type.py @@ -19,7 +19,7 @@ class ProjectTypeBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_project_type-detail", format="html" + view_name="v2:_api_v2_project_type-detail", format="html" ) @@ -50,7 +50,7 @@ class ProjectTypeModelSerializer(ProjectTypeBaseSerializer): return { '_self': reverse( - "API:_api_v2_project_type-detail", + "v2:_api_v2_project_type-detail", request=self._context['view'].request, kwargs={ 'pk': item.pk diff --git a/app/project_management/tests/unit/project/test_project_api_v2.py b/app/project_management/tests/unit/project/test_project_api_v2.py index d9e3ee9a..4b30dada 100644 --- a/app/project_management/tests/unit/project/test_project_api_v2.py +++ b/app/project_management/tests/unit/project/test_project_api_v2.py @@ -106,7 +106,7 @@ class ProjectAPI( self.url_view_kwargs = {'pk': self.item.id} client = Client() - url = reverse('API:_api_v2_project-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_project-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/project_management/tests/unit/project/test_project_permission_api.py b/app/project_management/tests/unit/project/test_project_permission_api.py index fe0f35eb..34d39953 100644 --- a/app/project_management/tests/unit/project/test_project_permission_api.py +++ b/app/project_management/tests/unit/project/test_project_permission_api.py @@ -18,7 +18,7 @@ class TicketCommentCategoryPermissionsAPI(TestCase, APIPermissions): model = TicketCommentCategory - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_ticket_comment_category-detail' diff --git a/app/project_management/tests/unit/project/test_project_viewset.py b/app/project_management/tests/unit/project/test_project_viewset.py index 407560aa..ea8fc7d0 100644 --- a/app/project_management/tests/unit/project/test_project_viewset.py +++ b/app/project_management/tests/unit/project/test_project_viewset.py @@ -17,7 +17,7 @@ class ProjectPermissionsAPI(TestCase, APIPermissions): model = Project - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_project' diff --git a/app/project_management/tests/unit/project_milestone/test_project_milestone_api_v2.py b/app/project_management/tests/unit/project_milestone/test_project_milestone_api_v2.py index c6fd6639..87629a4b 100644 --- a/app/project_management/tests/unit/project_milestone/test_project_milestone_api_v2.py +++ b/app/project_management/tests/unit/project_milestone/test_project_milestone_api_v2.py @@ -85,7 +85,7 @@ class ProjectMilestoneAPI( self.url_view_kwargs = {'project_id': project.id, 'pk': self.item.id} client = Client() - url = reverse('API:_api_v2_project_milestone-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_project_milestone-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/project_management/tests/unit/project_milestone/test_project_milestone_permission_api.py b/app/project_management/tests/unit/project_milestone/test_project_milestone_permission_api.py index 47d9d394..f8f3ce27 100644 --- a/app/project_management/tests/unit/project_milestone/test_project_milestone_permission_api.py +++ b/app/project_management/tests/unit/project_milestone/test_project_milestone_permission_api.py @@ -20,7 +20,7 @@ class ProjectMilestonePermissionsAPI(TestCase, APIPermissions): model = ProjectMilestone - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_project_milestone-detail' diff --git a/app/project_management/tests/unit/project_milestone/test_project_milestone_viewset.py b/app/project_management/tests/unit/project_milestone/test_project_milestone_viewset.py index d2f60755..d8c29d1f 100644 --- a/app/project_management/tests/unit/project_milestone/test_project_milestone_viewset.py +++ b/app/project_management/tests/unit/project_milestone/test_project_milestone_viewset.py @@ -16,7 +16,7 @@ class ProjectMilestonePermissionsAPI(TestCase, APIPermissions): model = ProjectMilestone - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_project_milestone' diff --git a/app/project_management/tests/unit/project_state/test_project_state_api_v2.py b/app/project_management/tests/unit/project_state/test_project_state_api_v2.py index 9fe2a2be..9dd72d0d 100644 --- a/app/project_management/tests/unit/project_state/test_project_state_api_v2.py +++ b/app/project_management/tests/unit/project_state/test_project_state_api_v2.py @@ -106,7 +106,7 @@ class ProjectStateAPI( self.url_view_kwargs = {'pk': self.item.id} client = Client() - url = reverse('API:_api_v2_project_state-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_project_state-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/project_management/tests/unit/project_state/test_project_state_permission_api.py b/app/project_management/tests/unit/project_state/test_project_state_permission_api.py index 65f1c41e..adbeb073 100644 --- a/app/project_management/tests/unit/project_state/test_project_state_permission_api.py +++ b/app/project_management/tests/unit/project_state/test_project_state_permission_api.py @@ -19,7 +19,7 @@ class ProjectStatePermissionsAPI(TestCase, APIPermissions): model = ProjectState - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_project_state-detail' diff --git a/app/project_management/tests/unit/project_state/test_project_state_viewset.py b/app/project_management/tests/unit/project_state/test_project_state_viewset.py index 029a7072..7b45f1f1 100644 --- a/app/project_management/tests/unit/project_state/test_project_state_viewset.py +++ b/app/project_management/tests/unit/project_state/test_project_state_viewset.py @@ -16,7 +16,7 @@ class ProjectStatePermissionsAPI(TestCase, APIPermissions): model = ProjectState - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_project_state' diff --git a/app/project_management/tests/unit/project_type/test_project_type_api_v2.py b/app/project_management/tests/unit/project_type/test_project_type_api_v2.py index 3acff895..969c530b 100644 --- a/app/project_management/tests/unit/project_type/test_project_type_api_v2.py +++ b/app/project_management/tests/unit/project_type/test_project_type_api_v2.py @@ -85,7 +85,7 @@ class ProjectTypeAPI( self.url_view_kwargs = {'pk': self.item.id} client = Client() - url = reverse('API:_api_v2_project_type-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_project_type-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/project_management/tests/unit/project_type/test_project_type_permission_api.py b/app/project_management/tests/unit/project_type/test_project_type_permission_api.py index 23272b79..7254151d 100644 --- a/app/project_management/tests/unit/project_type/test_project_type_permission_api.py +++ b/app/project_management/tests/unit/project_type/test_project_type_permission_api.py @@ -19,7 +19,7 @@ class ProjectTypePermissionsAPI(TestCase, APIPermissions): model = ProjectType - app_namespace = 'API' + app_namespace = 'v1' url_name = '_api_project_type-detail' diff --git a/app/project_management/tests/unit/project_type/test_project_type_viewset.py b/app/project_management/tests/unit/project_type/test_project_type_viewset.py index f41f7e21..5f68f5d9 100644 --- a/app/project_management/tests/unit/project_type/test_project_type_viewset.py +++ b/app/project_management/tests/unit/project_type/test_project_type_viewset.py @@ -16,7 +16,7 @@ class ProjectTypePermissionsAPI(TestCase, APIPermissions): model = ProjectType - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_project_type' diff --git a/app/project_management/tests/unit/test_project_management_viewset.py b/app/project_management/tests/unit/test_project_management_viewset.py index 121a7b50..5af1bd47 100644 --- a/app/project_management/tests/unit/test_project_management_viewset.py +++ b/app/project_management/tests/unit/test_project_management_viewset.py @@ -17,7 +17,7 @@ class ProjectManagementViewset( viewset = Index - route_name = 'API:_api_v2_project_management_home' + route_name = 'v2:_api_v2_project_management_home' @classmethod diff --git a/app/project_management/viewsets/index.py b/app/project_management/viewsets/index.py index 0914da61..c9d6fa47 100644 --- a/app/project_management/viewsets/index.py +++ b/app/project_management/viewsets/index.py @@ -25,6 +25,6 @@ class Index(CommonViewSet): return Response( { - "project": reverse('API:_api_v2_project-list', request=request), + "project": reverse('v2:_api_v2_project-list', request=request), } ) diff --git a/app/settings/serializers/app_settings.py b/app/settings/serializers/app_settings.py index a743bec1..b55500e8 100644 --- a/app/settings/serializers/app_settings.py +++ b/app/settings/serializers/app_settings.py @@ -17,7 +17,7 @@ class AppSettingsBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_app_settings-detail", format="html" + view_name="v2:_api_v2_app_settings-detail", format="html" ) class Meta: @@ -47,7 +47,7 @@ class AppSettingsModelSerializer(AppSettingsBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_app_settings-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_app_settings-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), } diff --git a/app/settings/serializers/external_links.py b/app/settings/serializers/external_links.py index 32027c4a..2039a8db 100644 --- a/app/settings/serializers/external_links.py +++ b/app/settings/serializers/external_links.py @@ -17,7 +17,7 @@ class ExternalLinkBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_external_link-detail", format="html" + view_name="v2:_api_v2_external_link-detail", format="html" ) class Meta: @@ -47,16 +47,16 @@ class ExternalLinkModelSerializer(ExternalLinkBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_external_link-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_external_link-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), 'history': reverse( - "API:_api_v2_model_history-list", + "v2:_api_v2_model_history-list", request=self._context['view'].request, kwargs={ 'model_class': self.Meta.model._meta.model_name, 'model_id': item.pk } ), - 'notes': reverse("API:_api_v2_device_notes-list", request=self._context['view'].request, kwargs={'device_id': item.pk}), + 'notes': reverse("v2:_api_v2_device_notes-list", request=self._context['view'].request, kwargs={'device_id': item.pk}), } diff --git a/app/settings/serializers/user_settings.py b/app/settings/serializers/user_settings.py index 0e2ea20d..5536ee3c 100644 --- a/app/settings/serializers/user_settings.py +++ b/app/settings/serializers/user_settings.py @@ -17,7 +17,7 @@ class UserSettingsBaseSerializer(serializers.ModelSerializer): return str( item ) url = serializers.HyperlinkedIdentityField( - view_name="API:_api_v2_user_settings-detail", format="html" + view_name="v2:_api_v2_user_settings-detail", format="html" ) class Meta: @@ -47,7 +47,7 @@ class UserSettingsModelSerializer(UserSettingsBaseSerializer): def get_url(self, item): return { - '_self': reverse("API:_api_v2_user_settings-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), + '_self': reverse("v2:_api_v2_user_settings-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), } diff --git a/app/settings/tests/unit/app_settings/test_app_settings_api_v2.py b/app/settings/tests/unit/app_settings/test_app_settings_api_v2.py index 8fc03772..94e89ff1 100644 --- a/app/settings/tests/unit/app_settings/test_app_settings_api_v2.py +++ b/app/settings/tests/unit/app_settings/test_app_settings_api_v2.py @@ -75,7 +75,7 @@ class AppSettingsAPI( self.url_view_kwargs = {'pk': self.item.id} client = Client() - url = reverse('API:_api_v2_app_settings-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_app_settings-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/settings/tests/unit/app_settings/test_app_settings_viewset.py b/app/settings/tests/unit/app_settings/test_app_settings_viewset.py index 42ee833d..dd6e0830 100644 --- a/app/settings/tests/unit/app_settings/test_app_settings_viewset.py +++ b/app/settings/tests/unit/app_settings/test_app_settings_viewset.py @@ -28,7 +28,7 @@ class AppSettingsPermissionsAPI( model = AppSettings - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_app_settings' diff --git a/app/settings/tests/unit/test_settings_viewset.py b/app/settings/tests/unit/test_settings_viewset.py index 3d3c69e2..db9effb6 100644 --- a/app/settings/tests/unit/test_settings_viewset.py +++ b/app/settings/tests/unit/test_settings_viewset.py @@ -17,7 +17,7 @@ class SettingsViewset( viewset = Index - route_name = 'API:_api_v2_settings_home' + route_name = 'v2:_api_v2_settings_home' @classmethod diff --git a/app/settings/tests/unit/user_settings/test_user_settings_api_v2.py b/app/settings/tests/unit/user_settings/test_user_settings_api_v2.py index b450b0e9..eddb3046 100644 --- a/app/settings/tests/unit/user_settings/test_user_settings_api_v2.py +++ b/app/settings/tests/unit/user_settings/test_user_settings_api_v2.py @@ -78,7 +78,7 @@ class UserSettingsAPI( self.url_view_kwargs = {'pk': self.item.id} client = Client() - url = reverse('API:_api_v2_user_settings-detail', kwargs=self.url_view_kwargs) + url = reverse('v2:_api_v2_user_settings-detail', kwargs=self.url_view_kwargs) client.force_login(self.view_user) diff --git a/app/settings/tests/unit/user_settings/test_user_settings_viewset.py b/app/settings/tests/unit/user_settings/test_user_settings_viewset.py index 77897e93..85044dd8 100644 --- a/app/settings/tests/unit/user_settings/test_user_settings_viewset.py +++ b/app/settings/tests/unit/user_settings/test_user_settings_viewset.py @@ -26,7 +26,7 @@ class UserSettingsPermissionsAPI( model = UserSettings - app_namespace = 'API' + app_namespace = 'v2' url_name = '_api_v2_user_settings' diff --git a/app/settings/viewsets/index.py b/app/settings/viewsets/index.py index 10e381b0..eda9f543 100644 --- a/app/settings/viewsets/index.py +++ b/app/settings/viewsets/index.py @@ -107,20 +107,20 @@ class Index(CommonViewSet): return Response( { - "app_settings": reverse('API:_api_v2_app_settings-detail', request=request, kwargs={'pk': 1}), - "celery_log": reverse('API:_api_v2_celery_log-list', request=request), - "cluster_type": reverse('API:_api_v2_cluster_type-list', request=request), - "device_model": reverse('API:_api_v2_device_model-list', request=request), - "device_type": reverse('API:_api_v2_device_type-list', request=request), - "external_link": reverse('API:_api_v2_external_link-list', request=request), - "knowledge_base_category": reverse('API:_api_v2_knowledge_base_category-list', request=request), - "manufacturer": reverse('API:_api_v2_manufacturer-list', request=request), - "port": reverse('API:_api_v2_port-list', request=request), - "project_state": reverse('API:_api_v2_project_state-list', request=request), - "project_type": reverse('API:_api_v2_project_type-list', request=request), - "software_category": reverse('API:_api_v2_software_category-list', request=request), + "app_settings": reverse('v2:_api_v2_app_settings-detail', request=request, kwargs={'pk': 1}), + "celery_log": reverse('v2:_api_v2_celery_log-list', request=request), + "cluster_type": reverse('v2:_api_v2_cluster_type-list', request=request), + "device_model": reverse('v2:_api_v2_device_model-list', request=request), + "device_type": reverse('v2:_api_v2_device_type-list', request=request), + "external_link": reverse('v2:_api_v2_external_link-list', request=request), + "knowledge_base_category": reverse('v2:_api_v2_knowledge_base_category-list', request=request), + "manufacturer": reverse('v2:_api_v2_manufacturer-list', request=request), + "port": reverse('v2:_api_v2_port-list', request=request), + "project_state": reverse('v2:_api_v2_project_state-list', request=request), + "project_type": reverse('v2:_api_v2_project_type-list', request=request), + "software_category": reverse('v2:_api_v2_software_category-list', request=request), "user_settings": reverse( - 'API:_api_v2_user_settings-detail', + 'v2:_api_v2_user_settings-detail', request=request, kwargs={ 'pk': request.user.id diff --git a/app/templates/base.html.j2 b/app/templates/base.html.j2 index ac1b20b4..cb6b8b52 100644 --- a/app/templates/base.html.j2 +++ b/app/templates/base.html.j2 @@ -133,7 +133,7 @@ section h2 span svg { {% include 'icons/api.svg' %} - + {% include 'icons/swagger_docs.svg' %}