1from rest_framework import serializers
2
3from extras import choices, models
4from netbox.api import ChoiceField, WritableNestedSerializer
5from netbox.api.serializers import NestedTagSerializer
6from users.api.nested_serializers import NestedUserSerializer
7
8__all__ = [
9    'NestedConfigContextSerializer',
10    'NestedCustomFieldSerializer',
11    'NestedCustomLinkSerializer',
12    'NestedExportTemplateSerializer',
13    'NestedImageAttachmentSerializer',
14    'NestedJobResultSerializer',
15    'NestedJournalEntrySerializer',
16    'NestedTagSerializer',  # Defined in netbox.api.serializers
17    'NestedWebhookSerializer',
18]
19
20
21class NestedWebhookSerializer(WritableNestedSerializer):
22    url = serializers.HyperlinkedIdentityField(view_name='extras-api:webhook-detail')
23
24    class Meta:
25        model = models.Webhook
26        fields = ['id', 'url', 'display', 'name']
27
28
29class NestedCustomFieldSerializer(WritableNestedSerializer):
30    url = serializers.HyperlinkedIdentityField(view_name='extras-api:customfield-detail')
31
32    class Meta:
33        model = models.CustomField
34        fields = ['id', 'url', 'display', 'name']
35
36
37class NestedCustomLinkSerializer(WritableNestedSerializer):
38    url = serializers.HyperlinkedIdentityField(view_name='extras-api:customlink-detail')
39
40    class Meta:
41        model = models.CustomLink
42        fields = ['id', 'url', 'display', 'name']
43
44
45class NestedConfigContextSerializer(WritableNestedSerializer):
46    url = serializers.HyperlinkedIdentityField(view_name='extras-api:configcontext-detail')
47
48    class Meta:
49        model = models.ConfigContext
50        fields = ['id', 'url', 'display', 'name']
51
52
53class NestedExportTemplateSerializer(WritableNestedSerializer):
54    url = serializers.HyperlinkedIdentityField(view_name='extras-api:exporttemplate-detail')
55
56    class Meta:
57        model = models.ExportTemplate
58        fields = ['id', 'url', 'display', 'name']
59
60
61class NestedImageAttachmentSerializer(WritableNestedSerializer):
62    url = serializers.HyperlinkedIdentityField(view_name='extras-api:imageattachment-detail')
63
64    class Meta:
65        model = models.ImageAttachment
66        fields = ['id', 'url', 'display', 'name', 'image']
67
68
69class NestedJournalEntrySerializer(WritableNestedSerializer):
70    url = serializers.HyperlinkedIdentityField(view_name='extras-api:journalentry-detail')
71
72    class Meta:
73        model = models.JournalEntry
74        fields = ['id', 'url', 'display', 'created']
75
76
77class NestedJobResultSerializer(serializers.ModelSerializer):
78    url = serializers.HyperlinkedIdentityField(view_name='extras-api:jobresult-detail')
79    status = ChoiceField(choices=choices.JobResultStatusChoices)
80    user = NestedUserSerializer(
81        read_only=True
82    )
83
84    class Meta:
85        model = models.JobResult
86        fields = ['url', 'created', 'completed', 'user', 'status']
87