1# SPDX-License-Identifier: Apache-2.0
2# Copyright (C) 2025 Marcin Zieba <marcinpsk@gmail.com>
3"""DRF serializers for the data-import plugin models."""
4
5from netbox.api.serializers import NetBoxModelSerializer
6from rest_framework import serializers
7
8from ..models import (
9 ImportProfile,
10 ColumnMapping,
11 ClassRoleMapping,
12 DeviceTypeMapping,
13 IgnoredDevice,
14 ColumnTransformRule,
15 SourceResolution,
16 ImportJob,
17)
18
19
20class ImportProfileSerializer(NetBoxModelSerializer):
21 """Full serializer for ImportProfile (NetBoxModel)."""
22
23 url = serializers.HyperlinkedIdentityField(
24 view_name="plugins-api:netbox_data_import-api:importprofile-detail",
25 )
26
27 class Meta:
28 model = ImportProfile
29 fields = [
30 "id",
31 "url",
32 "display",
33 "name",
34 "description",
35 "sheet_name",
36 "source_id_column",
37 "custom_field_name",
38 "update_existing",
39 "create_missing_device_types",
40 "preview_view_mode",
41 "tags",
42 "custom_fields",
43 "created",
44 "last_updated",
45 ]
46
47
48class ColumnMappingSerializer(serializers.ModelSerializer):
49 """Serializer for ColumnMapping (plain model)."""
50
51 class Meta:
52 model = ColumnMapping
53 fields = ["id", "profile", "source_column", "target_field"]
54
55
56class ClassRoleMappingSerializer(serializers.ModelSerializer):
57 """Serializer for ClassRoleMapping (plain model)."""
58
59 class Meta:
60 model = ClassRoleMapping
61 fields = ["id", "profile", "source_class", "creates_rack", "role_slug", "ignore"]
62
63
64class DeviceTypeMappingSerializer(serializers.ModelSerializer):
65 """Serializer for DeviceTypeMapping (plain model)."""
66
67 class Meta:
68 model = DeviceTypeMapping
69 fields = [
70 "id",
71 "profile",
72 "source_make",
73 "source_model",
74 "netbox_manufacturer_slug",
75 "netbox_device_type_slug",
76 ]
77
78
79class IgnoredDeviceSerializer(serializers.ModelSerializer):
80 """Serializer for IgnoredDevice (plain model)."""
81
82 class Meta:
83 model = IgnoredDevice
84 fields = ["id", "profile", "source_id", "device_name"]
85
86
87class ColumnTransformRuleSerializer(serializers.ModelSerializer):
88 """Serializer for ColumnTransformRule (plain model)."""
89
90 class Meta:
91 model = ColumnTransformRule
92 fields = [
93 "id",
94 "profile",
95 "source_column",
96 "pattern",
97 "group_1_target",
98 "group_2_target",
99 ]
100
101
102class SourceResolutionSerializer(serializers.ModelSerializer):
103 """Serializer for SourceResolution (rerere, plain model)."""
104
105 class Meta:
106 model = SourceResolution
107 fields = [
108 "id",
109 "profile",
110 "source_id",
111 "source_column",
112 "original_value",
113 "resolved_fields",
114 ]
115
116
117class ImportJobSerializer(serializers.ModelSerializer):
118 """Read-only serializer for ImportJob (plain model)."""
119
120 class Meta:
121 model = ImportJob
122 fields = [
123 "id",
124 "profile",
125 "created",
126 "input_filename",
127 "dry_run",
128 "site_name",
129 "result_counts",
130 ]
131 read_only_fields = fields