Coverage for core/api/serializers_/object_types.py: 89%
34 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1import inspect
3from django.urls import NoReverseMatch
4from drf_spectacular.types import OpenApiTypes
5from drf_spectacular.utils import extend_schema_field
6from rest_framework import serializers
8from core.models import ObjectType
9from netbox.api.serializers import BaseModelSerializer
10from utilities.views import get_action_url
12__all__ = (
13 'ObjectTypeSerializer',
14)
17class ObjectTypeSerializer(BaseModelSerializer):
18 url = serializers.HyperlinkedIdentityField(view_name='core-api:objecttype-detail')
19 app_name = serializers.CharField(source='app_verbose_name', read_only=True)
20 model_name = serializers.CharField(source='model_verbose_name', read_only=True)
21 model_name_plural = serializers.CharField(source='model_verbose_name_plural', read_only=True)
22 is_plugin_model = serializers.BooleanField(read_only=True)
23 rest_api_endpoint = serializers.SerializerMethodField()
24 description = serializers.SerializerMethodField()
26 class Meta:
27 model = ObjectType
28 fields = [
29 'id', 'url', 'display', 'app_label', 'app_name', 'model', 'model_name', 'model_name_plural', 'public',
30 'features', 'is_plugin_model', 'rest_api_endpoint', 'description',
31 ]
32 read_only_fields = ['public', 'features']
34 @extend_schema_field(OpenApiTypes.STR)
35 def get_rest_api_endpoint(self, obj):
36 if not (model := obj.model_class()): 36 ↛ 37line 36 didn't jump to line 37 because the condition on line 36 was never true
37 return None
38 try:
39 return get_action_url(model, action='list', rest_api=True)
40 except NoReverseMatch:
41 return None
43 @extend_schema_field(OpenApiTypes.STR)
44 def get_description(self, obj):
45 if not (model := obj.model_class()): 45 ↛ 46line 45 didn't jump to line 46 because the condition on line 45 was never true
46 return None
47 return inspect.getdoc(model)