refactor(core): move get_url to common serializer

reduces duplicated code

ref: #602 #605
This commit is contained in:
2025-02-16 02:44:31 +09:30
parent 460bf40175
commit 7cd4cb965b
29 changed files with 158 additions and 575 deletions

View File

@ -51,7 +51,7 @@ class DeviceBaseSerializer(serializers.ModelSerializer):
class DeviceModelSerializer(
common.CommonModelSerializer,
DeviceBaseSerializer
DeviceBaseSerializer,
):
_urls = serializers.SerializerMethodField('get_url')
@ -60,40 +60,13 @@ class DeviceModelSerializer(
request = None
if 'view' in self._context:
get_url = super().get_url( item = item )
if hasattr(self._context['view'], 'request'):
get_url.update({
request = self._context['view'].request
return {
'_self': item.get_url( request = request ),
'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(
"v2:_api_v2_model_history-list",
request=self._context['view'].request,
kwargs={
'model_class': self.Meta.model._meta.model_name,
'model_id': item.pk
}
),
'knowledge_base': reverse(
"v2:_api_v2_model_kb-list",
request=self._context['view'].request,
kwargs={
'model': self.Meta.model._meta.model_name,
'model_pk': item.pk
}
),
'notes': reverse(
"v2:_api_v2_device_note-list",
request=self._context['view'].request,
kwargs={
'model_id': item.pk
}
),
'operating_system': reverse("v2:_api_v2_device_operating_system-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}),
@ -105,7 +78,9 @@ class DeviceModelSerializer(
'item_id': item.pk
}
)
}
})
return get_url
context = serializers.SerializerMethodField('get_cont')

View File

@ -52,26 +52,6 @@ class DeviceModelModelSerializer(
_urls = serializers.SerializerMethodField('get_url')
def get_url(self, obj) -> dict:
return {
'_self': obj.get_url( request = self._context['view'].request ),
'knowledge_base': reverse(
"v2:_api_v2_model_kb-list",
request=self._context['view'].request,
kwargs={
'model': self.Meta.model._meta.model_name,
'model_pk': obj.pk
}
),
'notes': reverse(
"v2:_api_v2_device_model_note-list",
request=self._context['view'].request,
kwargs={
'model_id': obj.pk
}
),
}
class Meta:

View File

@ -60,22 +60,32 @@ class DeviceOperatingSystemModelSerializer(
def get_url(self, obj) -> dict:
get_url = super().get_url( item = item )
del get_url['history']
del get_url['knowledge_base']
del get_url['notes']
if self._context.get('view', None):
if self.context['view'].kwargs.get('device_id'):
return {
get_url.update({
'_self': obj.get_url( request = self._context['view'].request )
}
})
elif self.context['view'].kwargs.get('operating_system_id'):
return {
get_url.update({
'_self': reverse("v2:_api_v2_operating_system_installs-detail", request = self._context['view'].request, kwargs = {
'operating_system_id': obj.operating_system_version.operating_system.pk,
'pk': obj.pk
} )
}
})
return get_url

View File

@ -60,22 +60,32 @@ class DeviceSoftwareModelSerializer(
def get_url(self, obj) -> dict:
if 'view' in self._context:
get_url = super().get_url( item = item )
del get_url['history']
del get_url['knowledge_base']
del get_url['notes']
if 'view' in self._context:
if 'software_id' in self._context['view'].kwargs:
return {
get_url.update({
'_self': reverse("v2:_api_v2_software_installs-detail", request = self._context['view'].request, kwargs = {
'software_id': obj.software.pk,
'pk': obj.pk
} )
}
})
elif 'device_id' in self._context['view'].kwargs:
return {
get_url.update({
'_self': obj.get_url( request = self._context['view'].request )
}
})
return get_url

View File

@ -48,27 +48,6 @@ class DeviceTypeModelSerializer(
_urls = serializers.SerializerMethodField('get_url')
def get_url(self, obj) -> dict:
return {
'_self': obj.get_url( request = self._context['view'].request ),
'knowledge_base': reverse(
"v2:_api_v2_model_kb-list",
request=self._context['view'].request,
kwargs={
'model': self.Meta.model._meta.model_name,
'model_pk': obj.pk
}
),
'notes': reverse(
"v2:_api_v2_device_type_note-list",
request=self._context['view'].request,
kwargs={
'model_id': obj.pk
}
),
}
class Meta:

View File

@ -55,33 +55,10 @@ class OperatingSystemModelSerializer(
def get_url(self, item) -> dict:
return {
'_self': item.get_url( request = self._context['view'].request ),
'history': reverse(
"v2:_api_v2_model_history-list",
request=self._context['view'].request,
kwargs={
'model_class': self.Meta.model._meta.model_name,
'model_id': item.pk
}
),
get_url = super().get_url( item = item )
get_url.update({
'installations': reverse("v2:_api_v2_operating_system_installs-list", request=self._context['view'].request, kwargs={'operating_system_id': item.pk}),
'knowledge_base': reverse(
"v2:_api_v2_model_kb-list",
request=self._context['view'].request,
kwargs={
'model': self.Meta.model._meta.model_name,
'model_pk': item.pk
}
),
'notes': reverse(
"v2:_api_v2_operating_system_note-list",
request=self._context['view'].request,
kwargs={
'model_id': item.pk
}
),
'tickets': reverse(
"v2:_api_v2_item_tickets-list",
request=self._context['view'].request,
@ -91,7 +68,9 @@ class OperatingSystemModelSerializer(
}
),
'version': reverse("v2:_api_v2_operating_system_version-list", request=self._context['view'].request, kwargs={'operating_system_id': item.pk}),
}
})
return get_url

View File

@ -58,38 +58,6 @@ class OperatingSystemVersionModelSerializer(
_urls = serializers.SerializerMethodField('get_url')
def get_url(self, item) -> dict:
return {
'_self': item.get_url( request = self._context['view'].request ),
'history': reverse(
"v2:_api_v2_model_history-list",
request=self._context['view'].request,
kwargs={
'model_class': self.Meta.model._meta.model_name,
'model_id': item.pk
}
),
'knowledge_base': reverse(
"v2:_api_v2_model_kb-list",
request=self._context['view'].request,
kwargs={
'model': self.Meta.model._meta.model_name,
'model_pk': item.pk
}
),
'notes': reverse(
"v2:_api_v2_operating_system_version_note-list",
request=self._context['view'].request,
kwargs={
'operating_system_id': item.operating_system.id,
'model_id': item.pk
}
),
'tickets': 'ToDo'
}
class Meta:

View File

@ -53,33 +53,11 @@ class SoftwareModelSerializer(
def get_url(self, item) -> dict:
return {
'_self': item.get_url( request = self._context['view'].request ),
get_url = super().get_url( item = item )
get_url.update({
'external_links': reverse("v2:_api_v2_external_link-list", request=self._context['view'].request) + '?software=true',
'history': reverse(
"v2:_api_v2_model_history-list",
request=self._context['view'].request,
kwargs={
'model_class': self.Meta.model._meta.model_name,
'model_id': item.pk
}
),
'installations': reverse("v2:_api_v2_software_installs-list", request=self._context['view'].request, kwargs={'software_id': item.pk}),
'knowledge_base': reverse(
"v2:_api_v2_model_kb-list",
request=self._context['view'].request,
kwargs={
'model': self.Meta.model._meta.model_name,
'model_pk': item.pk
}
),
'notes': reverse(
"v2:_api_v2_software_note-list",
request=self._context['view'].request,
kwargs={
'model_id': item.pk
}
),
'publisher': reverse("v2:_api_v2_manufacturer-list", request=self._context['view'].request),
'services': 'ToDo',
'version': reverse(
@ -97,7 +75,10 @@ class SoftwareModelSerializer(
'item_id': item.pk
}
)
}
})
return get_url
def get_rendered_config(self, item) -> dict:

View File

@ -50,28 +50,6 @@ class SoftwareCategoryModelSerializer(
_urls = serializers.SerializerMethodField('get_url')
def get_url(self, item) -> dict:
return {
'_self': item.get_url( request = self._context['view'].request ),
'history': 'ToDo',
'knowledge_base': reverse(
"v2:_api_v2_model_kb-list",
request=self._context['view'].request,
kwargs={
'model': self.Meta.model._meta.model_name,
'model_pk': item.pk
}
),
'notes': reverse(
"v2:_api_v2_software_category_note-list",
request=self._context['view'].request,
kwargs={
'model_id': item.pk
}
),
}
def get_rendered_config(self, item) -> dict:

View File

@ -52,37 +52,6 @@ class SoftwareVersionModelSerializer(
_urls = serializers.SerializerMethodField('get_url')
def get_url(self, item) -> dict:
return {
'_self': item.get_url( request = self._context['view'].request ),
'history': reverse(
"v2:_api_v2_model_history-list",
request=self._context['view'].request,
kwargs={
'model_class': self.Meta.model._meta.model_name,
'model_id': item.pk
}
),
'knowledge_base': reverse(
"v2:_api_v2_model_kb-list",
request=self._context['view'].request,
kwargs={
'model': self.Meta.model._meta.model_name,
'model_pk': item.pk
}
),
'notes': reverse(
"v2:_api_v2_software_version_note-list",
request=self._context['view'].request,
kwargs={
'software_id': item.software.pk,
'model_id': item.pk
}
),
'tickets': 'ToDo'
}
class Meta: