Skip to content

Commit

Permalink
chore: more work on getting detail view working, notes
Browse files Browse the repository at this point in the history
  • Loading branch information
jon-nfc committed Oct 11, 2024
1 parent 6ff93e4 commit 2ca9eb0
Show file tree
Hide file tree
Showing 4 changed files with 205 additions and 1 deletion.
5 changes: 5 additions & 0 deletions app/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@
organization as organization_v2
)

from core.viewsets import (
notes as notes_v2
)


app_name = "API"

Expand Down Expand Up @@ -117,6 +121,7 @@
router.register('v2/itam/device', device_v2.ViewSet, basename='_api_v2_device')
router.register('v2/itam/device/(?P<device_id>[0-9]+)/device_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/settings', settings_index_v2.Index, basename='_api_v2_settings_home')
router.register('v2/settings/device_model', device_model_v2.ViewSet, basename='_api_v2_device_model')
Expand Down
2 changes: 1 addition & 1 deletion app/api/v2/serializers/itam/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def get_url(self, item):
'_self': reverse("API:_api_v2_device-detail", request=self._context['view'].request, kwargs={'pk': item.pk}),
'external_links': reverse("API:_api_v2_external_link-list", request=self._context['view'].request) + '?devices=true',
'history': 'ToDo',
'notes': 'ToDo',
'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}),
'tickets': 'ToDo'
Expand Down
123 changes: 123 additions & 0 deletions app/core/serializers/notes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
from rest_framework.fields import empty
from rest_framework.reverse import reverse
from rest_framework import serializers

from access.serializers.organization import OrganizationBaseSerializer


from core.models.notes import Notes



class NotesBaseSerializer(serializers.ModelSerializer):

display_name = serializers.SerializerMethodField('get_display_name')

def get_display_name(self, item):

return str( item )

url = serializers.HyperlinkedIdentityField(
view_name="API:_api_v2_device-detail", format="html"
)

class Meta:

model = Notes

fields = [
'id',
'display_name',
'name',
'url',
]

read_only_fields = [
'id',
'display_name',
'name',
'url',
]


class NotesModelSerializer(NotesBaseSerializer):


# operating_system = OperatingSystemModelSerializer(source='id', many=False, read_only=False)

_urls = serializers.SerializerMethodField('get_url')

def get_url(self, item):

return {
'_self': reverse("API:_api_v2_device_notes-detail",
request=self._context['view'].request,
kwargs={'device_id': self._kwargs['context']['view'].kwargs['device_id'], 'pk': item.pk}
),
# 'history': 'ToDo',
# 'notes': 'ToDo',
# 'services': 'ToDo',
# 'software': reverse("API:_api_v2_device_software-list", request=self._context['view'].request, kwargs={'device_id': item.pk}),
# 'tickets': 'ToDo'
}

# rendered_config = serializers.SerializerMethodField('get_rendered_config')
# rendered_config = serializers.JSONField(source='get_configuration')


# def get_rendered_config(self, item):

# return item.get_configuration(0)


class Meta:

model = Notes

fields = '__all__'

# fields = [
# 'id',
# 'display_name',
# 'name',
# 'device_type',
# # 'operating_system',
# 'model_notes',
# 'serial_number',
# 'uuid',
# 'is_global',
# 'is_virtual',
# 'device_model',
# 'config',
# 'rendered_config',
# 'inventorydate',
# 'created',
# 'modified',
# 'organization',
# '_urls',
# ]

read_only_fields = [
'id',
'display_name',
'created',
'modified',
'_urls',
]


def __init__(self, instance=None, data=empty, **kwargs):

super().__init__(instance=instance, data=data, **kwargs)

# self.rendered_config = serializers.JSONField(initial=self.Meta.model.get_configuration(0))



class NotesViewSerializer(NotesModelSerializer):

# device_model = DeviceModelBaseSerializer(many=False, read_only=True)

# device_type = DeviceTypeBaseSerializer(many=False, read_only=True)

organization = OrganizationBaseSerializer(many=False, read_only=True)
76 changes: 76 additions & 0 deletions app/core/viewsets/notes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
from django.db.models import Q
from django.shortcuts import get_object_or_404

from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse

from rest_framework import generics, viewsets
from rest_framework.response import Response

from access.mixin import OrganizationMixin

from api.views.mixin import OrganizationPermissionAPI

from core.serializers.notes import (
Notes,
NotesModelSerializer as ModelSerializer,
NotesViewSerializer as ViewSerializer
)

from api.v2.views.metadata import NavigationMetadata



class ViewSet(OrganizationMixin, viewsets.ModelViewSet):

filterset_fields = [
'device'
]


model = Notes

metadata_class = NavigationMetadata

permission_classes = [
OrganizationPermissionAPI
]

def get_serializer_class(self):

if (
self.action == 'list'
or self.action == 'retrieve'
):

return ViewSerializer


return ModelSerializer


def create(self, request, *args, **kwargs):

return super().create(request, *args, **kwargs)


def list(self, request, *args, **kwargs):

return super().list(request, *args, **kwargs)


def retrieve(self, request, *args, **kwargs):

return super().retrieve(request, *args, **kwargs)


def get_queryset(self):

self.queryset = self.model.objects.filter(device_id=self.kwargs['device_id']).order_by('-created')

return self.queryset

def get_view_name(self):
if self.detail:
return "Device Note"

return 'Device Notes'

0 comments on commit 2ca9eb0

Please sign in to comment.