11from  django .contrib .contenttypes .models  import  ContentType 
2- from  django .db .models  import  Model , QuerySet 
2+ from  extras .choices  import  CustomFieldTypeChoices 
3+ from  netbox .api .serializers  import  NetBoxModelSerializer 
34from  rest_framework  import  serializers 
45from  rest_framework .exceptions  import  ValidationError 
56from  rest_framework .reverse  import  reverse 
67
7- from  extras .choices  import  CustomFieldTypeChoices 
8- from  extras .graphql .types  import  CustomFieldType 
9- from  netbox .api .serializers  import  NetBoxModelSerializer 
10- # from netbox_service_mappings.choices import MappingFieldTypeChoices 
11- from  netbox_custom_objects .models  import  CustomObject , CustomObjectType , CustomObjectTypeField 
12- from  utilities .api  import  get_serializer_for_model 
8+ from  netbox_custom_objects .models  import  (CustomObject , CustomObjectType ,
9+                                           CustomObjectTypeField )
1310
1411__all__  =  (
15-     ' CustomObjectTypeSerializer' 
16-     ' CustomObjectSerializer' 
12+     " CustomObjectTypeSerializer" 
13+     " CustomObjectSerializer" 
1714)
1815
1916
2017class  ContentTypeSerializer (NetBoxModelSerializer ):
2118    class  Meta :
2219        model  =  ContentType 
23-         fields  =  ('id' , 'app_label' , 'model' ,)
20+         fields  =  (
21+             "id" ,
22+             "app_label" ,
23+             "model" ,
24+         )
2425
2526
2627class  CustomObjectTypeFieldSerializer (NetBoxModelSerializer ):
2728    url  =  serializers .HyperlinkedIdentityField (
28-         view_name = ' plugins-api:netbox_custom_objects-api:customobjecttypefield-detail' 
29+         view_name = " plugins-api:netbox_custom_objects-api:customobjecttypefield-detail" 
2930    )
30-     # content_type = serializers.SerializerMethodField() 
3131    app_label  =  serializers .CharField (required = False )
3232    model  =  serializers .CharField (required = False )
3333
3434    class  Meta :
3535        model  =  CustomObjectTypeField 
3636        fields  =  (
3737            # 'id', 'url', 'name', 'label', 'custom_object_type', 'field_type', 'content_type', 'many', 'options', 
38-             'id' , 'name' , 'label' , 'custom_object_type' , 'type' , 'primary' , 'default' , 'choice_set' ,
39-             'validation_regex' , 'validation_minimum' , 'validation_maximum' ,
40-             'related_object_type' , 'app_label' , 'model' ,
38+             "id" ,
39+             "name" ,
40+             "label" ,
41+             "custom_object_type" ,
42+             "type" ,
43+             "primary" ,
44+             "default" ,
45+             "choice_set" ,
46+             "validation_regex" ,
47+             "validation_minimum" ,
48+             "validation_maximum" ,
49+             "related_object_type" ,
50+             "app_label" ,
51+             "model" ,
4152        )
4253
4354    def  validate (self , attrs ):
44-         app_label  =  attrs .pop ('app_label' , None )
45-         model  =  attrs .pop ('model' , None )
46-         if  attrs ['type' ] in  [CustomFieldTypeChoices .TYPE_OBJECT , CustomFieldTypeChoices .TYPE_MULTIOBJECT ]:
55+         app_label  =  attrs .pop ("app_label" , None )
56+         model  =  attrs .pop ("model" , None )
57+         if  attrs ["type" ] in  [
58+             CustomFieldTypeChoices .TYPE_OBJECT ,
59+             CustomFieldTypeChoices .TYPE_MULTIOBJECT ,
60+         ]:
4761            try :
48-                 attrs ['related_object_type' ] =  ContentType .objects .get (app_label = app_label , model = model )
62+                 attrs ["related_object_type" ] =  ContentType .objects .get (
63+                     app_label = app_label , model = model 
64+                 )
4965            except  ContentType .DoesNotExist :
50-                 raise  ValidationError ('Must provide valid app_label and model for object field type.' )
51-         if  attrs ['type' ] in  [CustomFieldTypeChoices .TYPE_SELECT , CustomFieldTypeChoices .TYPE_MULTISELECT ]:
52-             if  not  attrs .get ('choice_set' , None ):
53-                 raise  ValidationError ('Must provide choice_set with valid PK for select field type.' )
66+                 raise  ValidationError (
67+                     "Must provide valid app_label and model for object field type." 
68+                 )
69+         if  attrs ["type" ] in  [
70+             CustomFieldTypeChoices .TYPE_SELECT ,
71+             CustomFieldTypeChoices .TYPE_MULTISELECT ,
72+         ]:
73+             if  not  attrs .get ("choice_set" , None ):
74+                 raise  ValidationError (
75+                     "Must provide choice_set with valid PK for select field type." 
76+                 )
5477        return  super ().validate (attrs )
5578
5679    def  create (self , validated_data ):
@@ -70,7 +93,7 @@ def get_related_object_type(self, obj):
7093
7194class  CustomObjectTypeSerializer (NetBoxModelSerializer ):
7295    url  =  serializers .HyperlinkedIdentityField (
73-         view_name = ' plugins-api:netbox_custom_objects-api:customobjecttype-detail' 
96+         view_name = " plugins-api:netbox_custom_objects-api:customobjecttype-detail" 
7497    )
7598    fields  =  CustomObjectTypeFieldSerializer (
7699        nested = True ,
@@ -81,9 +104,16 @@ class CustomObjectTypeSerializer(NetBoxModelSerializer):
81104    class  Meta :
82105        model  =  CustomObjectType 
83106        fields  =  [
84-             'id' , 'url' , 'name' , 'description' , 'tags' , 'created' , 'last_updated' , 'fields' ,
107+             "id" ,
108+             "url" ,
109+             "name" ,
110+             "description" ,
111+             "tags" ,
112+             "created" ,
113+             "last_updated" ,
114+             "fields" ,
85115        ]
86-         brief_fields  =  ('id' ,  ' url' ,  ' name' ,  ' description' 
116+         brief_fields  =  ("id" ,  " url" ,  " name" ,  " description" 
87117
88118    def  create (self , validated_data ):
89119        return  super ().create (validated_data )
@@ -92,39 +122,43 @@ def create(self, validated_data):
92122class  CustomObjectSerializer (NetBoxModelSerializer ):
93123    relation_fields  =  None 
94124
95-     # url = serializers.HyperlinkedIdentityField( 
96-     #     view_name='plugins-api:netbox_custom_objects-api:custom-object-detail', kwargs={'custom_object_type': 1} 
97-     # ) 
98125    url  =  serializers .SerializerMethodField ()
99126    field_data  =  serializers .SerializerMethodField ()
100127    custom_object_type  =  CustomObjectTypeSerializer (nested = True )
101128
102129    class  Meta :
103130        model  =  CustomObject 
104131        fields  =  [
105-             'id' , 'url' , 'name' , 'display' , 'custom_object_type' , 'tags' , 'created' , 'last_updated' , 'data' , 'field_data' ,
132+             "id" ,
133+             "url" ,
134+             "name" ,
135+             "display" ,
136+             "custom_object_type" ,
137+             "tags" ,
138+             "created" ,
139+             "last_updated" ,
140+             "data" ,
141+             "field_data" ,
106142        ]
107-         brief_fields  =  ('id' , 'url' , 'name' , 'custom_object_type' ,)
143+         brief_fields  =  (
144+             "id" ,
145+             "url" ,
146+             "name" ,
147+             "custom_object_type" ,
148+         )
108149
109150    def  get_display (self , obj ):
110-         return  f' { obj .custom_object_type } { obj .name } '  
151+         return  f" { obj .custom_object_type } { obj .name } "  
111152
112153    def  validate (self , attrs ):
113-         # self.relation_fields = {} 
114-         # object_field_types = [CustomFieldTypeChoices.TYPE_OBJECT, CustomFieldTypeChoices.TYPE_MULTIOBJECT] 
115-         # for field in attrs['custom_object_type'].fields.filter(type__in=object_field_types): 
116-         #     self.relation_fields[field.name] = attrs['data'].pop(field.name, None) 
117154        return  super ().validate (attrs )
118155
119156    def  update_relation_fields (self , instance ):
120157        # TODO: Implement this 
121158        pass 
122159
123160    def  create (self , validated_data ):
124-         # instance = super().create(validated_data) 
125-         # self.update_relation_fields(instance) 
126- 
127-         model  =  validated_data ['custom_object_type' ].get_model ()
161+         model  =  validated_data ["custom_object_type" ].get_model ()
128162        instance  =  model .objects .create (** validated_data )
129163
130164        return  instance 
@@ -142,31 +176,21 @@ def get_url(self, obj):
142176        attributes are not configured to correctly match the URL conf. 
143177        """ 
144178        # Unsaved objects will not yet have a valid URL. 
145-         if  hasattr (obj , 'pk' ) and  obj .pk  in  (None , '' ):
179+         if  hasattr (obj , "pk" ) and  obj .pk  in  (None , "" ):
146180            return  None 
147181
148-         view_name  =  'plugins-api:netbox_custom_objects-api:custom-object-detail' 
149-         lookup_value  =  getattr (obj , 'pk' )
150-         kwargs  =  {'pk' : lookup_value , 'custom_object_type' : obj .custom_object_type .name .lower ()}
151-         request  =  self .context ['request' ]
152-         format  =  self .context .get ('format' )
182+         view_name  =  "plugins-api:netbox_custom_objects-api:custom-object-detail" 
183+         lookup_value  =  getattr (obj , "pk" )
184+         kwargs  =  {
185+             "pk" : lookup_value ,
186+             "custom_object_type" : obj .custom_object_type .name .lower (),
187+         }
188+         request  =  self .context ["request" ]
189+         format  =  self .context .get ("format" )
153190        return  reverse (view_name , kwargs = kwargs , request = request , format = format )
154191
155192    def  get_field_data (self , obj ):
156193        result  =  {}
157-         # for field_name, value in obj.fields.items(): 
158-         #     if isinstance(value, Model) or isinstance(value, QuerySet): 
159-         #         # serializer = get_serializer_for_model(field.model_class) 
160-         #         if isinstance(value, QuerySet): 
161-         #             serializer = get_serializer_for_model(value.model) 
162-         #             many = True 
163-         #         else: 
164-         #             serializer = get_serializer_for_model(value._meta.model) 
165-         #             many = False 
166-         #         context = {'request': self.context['request']} 
167-         #         result[field_name] = serializer(value, nested=True, context=context, many=many).data 
168-         #         continue 
169-         #     result[field_name] = obj.data.get(field_name) 
170194        return  result 
171195
172196
@@ -187,9 +211,7 @@ def get_serializer_class(model):
187211
188212    serializer  =  type (
189213        f"{ model ._meta .object_name }  ,
190-         (
191-             serializers .ModelSerializer ,
192-         ),
214+         (serializers .ModelSerializer ,),
193215        attrs ,
194216    )
195217
0 commit comments