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

1import inspect 

2 

3from django.urls import NoReverseMatch 

4from drf_spectacular.types import OpenApiTypes 

5from drf_spectacular.utils import extend_schema_field 

6from rest_framework import serializers 

7 

8from core.models import ObjectType 

9from netbox.api.serializers import BaseModelSerializer 

10from utilities.views import get_action_url 

11 

12__all__ = ( 

13 'ObjectTypeSerializer', 

14) 

15 

16 

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

25 

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

33 

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 

42 

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)