feat(api): Setup API to be correctly versioned

ref: #248 #365
This commit is contained in:
2024-10-26 18:02:23 +09:30
parent cdacd70bf1
commit 268e3294a2
146 changed files with 510 additions and 461 deletions

View File

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

View File

@ -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}),
}

View File

@ -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,

View File

@ -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,

View File

@ -17,7 +17,7 @@ class OrganizationAPI(TestCase):
model = Organization
app_namespace = 'API'
app_namespace = 'v1'
url_name = '_api_organization'

View File

@ -21,7 +21,7 @@ class OrganizationAPI(
model = Organization
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_organization'

View File

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

View File

@ -21,7 +21,7 @@ class TeamAPI(TestCase):
model = Team
app_namespace = 'API'
app_namespace = 'v1'
url_name = '_api_team'

View File

@ -20,7 +20,7 @@ class TeamAPI(
model = Team
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_organization_team'

View File

@ -18,7 +18,7 @@ class TeamPermissionsAPI(TestCase, APIPermissions):
model = Team
app_namespace = 'API'
app_namespace = 'v1'
url_name = '_api_team'

View File

@ -20,7 +20,7 @@ class TeamUserAPI(
model = TeamUsers
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_organization_team_user'

View File

@ -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)
}
)

View File

@ -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:

View File

@ -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]))

View File

@ -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
)
)

View File

@ -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"
)

View File

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

View File

@ -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"
)

View File

@ -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:

View File

@ -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:

View File

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

View File

@ -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"
)

View File

@ -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"
)

View File

@ -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
}

View File

@ -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()

View File

@ -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)

View File

@ -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<organization_id>[0-9]+)/team', team_v2.ViewSet, basename='_api_v2_organization_team')
router.register('v2/access/organization/(?P<organization_id>[0-9]+)/team/(?P<team_id>[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<parent_group>[0-9]+)/child_group', config_group_v2.ViewSet, basename='_api_v2_config_group_child')
router.register('v2/config_management/group/(?P<group_id>[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_config_group_notes')
router.register('v2/config_management/group/(?P<group_id>[0-9]+)/software', config_group_software_v2.ViewSet, basename='_api_v2_config_group_software')
router.register('v2/core/(?P<model_class>.+)/(?P<model_id>[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<device_id>[0-9]+)/software', device_software_v2.ViewSet, basename='_api_v2_device_software')
router.register('v2/itam/device/(?P<device_id>[0-9]+)/service', service_device_v2.ViewSet, basename='_api_v2_service_device')
router.register('v2/itam/device/(?P<device_id>[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<operating_system_id>[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_operating_system_notes')
router.register('v2/itam/operating_system/(?P<operating_system_id>[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<software_id>[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_software_notes')
router.register('v2/itam/software/(?P<software_id>[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<cluster_id>[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<service_id>[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<project_id>[0-9]+)/milestone', project_milestone_v2.ViewSet, basename='_api_v2_project_milestone')
router.register('v2/itim/project_management/project/(?P<project_id>[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<cluster_type_id>[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<manufacturer_id>[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<port_id>[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/<slug:slug>/", itam_config.View.as_view(), name="_api_device_config"),
path("configuration/", config.ConfigGroupsList.as_view(), name='_api_config_groups'),

167
app/api/urls_v2.py Normal file
View File

@ -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<organization_id>[0-9]+)/team', team_v2.ViewSet, basename='_api_v2_organization_team')
router.register('access/organization/(?P<organization_id>[0-9]+)/team/(?P<team_id>[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<parent_group>[0-9]+)/child_group', config_group_v2.ViewSet, basename='_api_v2_config_group_child')
router.register('config_management/group/(?P<group_id>[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_config_group_notes')
router.register('config_management/group/(?P<group_id>[0-9]+)/software', config_group_software_v2.ViewSet, basename='_api_v2_config_group_software')
router.register('core/(?P<model_class>.+)/(?P<model_id>[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<device_id>[0-9]+)/software', device_software_v2.ViewSet, basename='_api_v2_device_software')
router.register('itam/device/(?P<device_id>[0-9]+)/service', service_device_v2.ViewSet, basename='_api_v2_service_device')
router.register('itam/device/(?P<device_id>[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<operating_system_id>[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_operating_system_notes')
router.register('itam/operating_system/(?P<operating_system_id>[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<software_id>[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_software_notes')
router.register('itam/software/(?P<software_id>[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<cluster_id>[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<service_id>[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<project_id>[0-9]+)/milestone', project_milestone_v2.ViewSet, basename='_api_v2_project_milestone')
router.register('itim/project_management/project/(?P<project_id>[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<cluster_type_id>[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<manufacturer_id>[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<port_id>[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

View File

@ -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)

View File

@ -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"<p>{text}</p>")
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 )

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)
}
)

View File

@ -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}),
}

View File

@ -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}),
}

View File

@ -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:

View File

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

View File

@ -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')),
]

View File

@ -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)
}
)

View File

@ -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,
)
}

View File

@ -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,
)
}

View File

@ -21,7 +21,7 @@ class KnowledgeBaseAPI(
model = KnowledgeBase
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_knowledge_base'

View File

@ -20,7 +20,7 @@ class KnowledgeBasePermissionsAPI(TestCase, APIPermissions):
model = KnowledgeBase
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_knowledge_base'

View File

@ -21,7 +21,7 @@ class KnowledgeBaseCategoryAPI(
model = KnowledgeBaseCategory
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_knowledge_base_category'

View File

@ -16,7 +16,7 @@ class KnowledgeBaseCategoryPermissionsAPI(TestCase, APIPermissions):
model = KnowledgeBaseCategory
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_knowledge_base_category'

View File

@ -16,7 +16,7 @@ class AssistanceViewset(
viewset = Index
route_name = 'API:_api_v2_assistance_home'
route_name = 'v2:_api_v2_assistance_home'
@classmethod

View File

@ -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),
}
)

View File

@ -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,
),
}

View File

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

View File

@ -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)

View File

@ -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)

View File

@ -20,7 +20,7 @@ class ConfigGroupsPermissionsAPI(TestCase, APIPermissions):
model = ConfigGroups
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_config_group'

View File

@ -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)

View File

@ -20,7 +20,7 @@ class ConfigGroupSoftwarePermissionsAPI(TestCase, APIPermissions):
model = ConfigGroupSoftware
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_config_group_software'

View File

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

View File

@ -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),
}
)

View File

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

View File

@ -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'],

View File

@ -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}),
}

View File

@ -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'],

View File

@ -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)

View File

@ -20,7 +20,7 @@ class ManufacturerPermissionsAPI(TestCase, APIPermissions):
model = Manufacturer
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_manufacturer'

View File

@ -23,7 +23,7 @@ class HistoryPermissionsAPI(TestCase, APIPermissions):
model = History
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_model_history'

View File

@ -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)

View File

@ -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)

View File

@ -34,7 +34,7 @@ class TaskResultPermissionsAPI(
model = TaskResult
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_celery_log'

View File

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

View File

@ -18,7 +18,7 @@ class TicketCategoryPermissionsAPI(TestCase, APIPermissions):
model = TicketCategory
app_namespace = 'API'
app_namespace = 'v1'
url_name = '_api_ticket_category-detail'

View File

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

View File

@ -18,7 +18,7 @@ class TicketCommentCategoryPermissionsAPI(TestCase, APIPermissions):
model = TicketCommentCategory
app_namespace = 'API'
app_namespace = 'v1'
url_name = '_api_ticket_comment_category-detail'

View File

@ -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}),
}

View File

@ -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:

View File

@ -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'],

View File

@ -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})
}

View File

@ -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}),
}

View File

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

View File

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

View File

@ -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',
}

View File

@ -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,

View File

@ -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)

View File

@ -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)

View File

@ -17,7 +17,7 @@ class DevicePermissionsAPI(TestCase, APIPermissions):
model = Device
app_namespace = 'API'
app_namespace = 'v1'
url_name = 'device-detail'

View File

@ -16,7 +16,7 @@ class DevicePermissionsAPI(TestCase, APIPermissions):
model = Device
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_device'

View File

@ -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)

View File

@ -16,7 +16,7 @@ class DeviceModelPermissionsAPI(TestCase, APIPermissions):
model = DeviceModel
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_device_model'

View File

@ -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)

View File

@ -17,7 +17,7 @@ class DeviceSoftwarePermissionsAPI(TestCase, APIPermissions):
model = DeviceSoftware
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_device_software'

View File

@ -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)

View File

@ -16,7 +16,7 @@ class DeviceTypePermissionsAPI(TestCase, APIPermissions):
model = DeviceType
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_device_type'

View File

@ -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)

View File

@ -16,7 +16,7 @@ class OperatingSystemPermissionsAPI(TestCase, APIPermissions):
model = OperatingSystem
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_operating_system'

View File

@ -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)

View File

@ -16,7 +16,7 @@ class OperatingSystemVersionPermissionsAPI(TestCase, APIPermissions):
model = OperatingSystemVersion
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_operating_system_version'

View File

@ -21,7 +21,7 @@ class SoftwareAPI(TestCase):
model = Software
app_namespace = 'API'
app_namespace = 'v1'
url_name = 'software-detail'

View File

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

View File

@ -18,7 +18,7 @@ class SoftwarePermissionsAPI(TestCase, APIPermissions):
model = Software
app_namespace = 'API'
app_namespace = 'v1'
url_name = 'software-detail'

View File

@ -16,7 +16,7 @@ class SoftwarePermissionsAPI(TestCase, APIPermissions):
model = Software
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_software'

View File

@ -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)

View File

@ -16,7 +16,7 @@ class SoftwareCategoryPermissionsAPI(TestCase, APIPermissions):
model = SoftwareCategory
app_namespace = 'API'
app_namespace = 'v2'
url_name = '_api_v2_software_category'

Some files were not shown because too many files have changed in this diff Show More