Coverage for netbox/choices.py: 100%
90 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
1from django.utils.translation import gettext_lazy as _
3from utilities.choices import Choice, ChoiceSet
4from utilities.constants import CSV_DELIMITERS
6__all__ = (
7 'ButtonColorChoices',
8 'CSVDelimiterChoices',
9 'ColorChoices',
10 'DiameterUnitChoices',
11 'DistanceUnitChoices',
12 'FlowRateUnitChoices',
13 'ImportFormatChoices',
14 'ImportMethodChoices',
15 'WeightUnitChoices',
16)
19#
20# Generic color choices
21#
23class ColorChoices(ChoiceSet):
24 COLOR_DARK_RED = 'aa1409'
25 COLOR_RED = 'f44336'
26 COLOR_PINK = 'e91e63'
27 COLOR_ROSE = 'ffe4e1'
28 COLOR_FUCHSIA = 'ff66ff'
29 COLOR_PURPLE = '9c27b0'
30 COLOR_DARK_PURPLE = '673ab7'
31 COLOR_INDIGO = '3f51b5'
32 COLOR_BLUE = '2196f3'
33 COLOR_LIGHT_BLUE = '03a9f4'
34 COLOR_CYAN = '00bcd4'
35 COLOR_TEAL = '009688'
36 COLOR_AQUA = '00ffff'
37 COLOR_DARK_GREEN = '2f6a31'
38 COLOR_GREEN = '4caf50'
39 COLOR_LIGHT_GREEN = '8bc34a'
40 COLOR_LIME = 'cddc39'
41 COLOR_YELLOW = 'ffeb3b'
42 COLOR_AMBER = 'ffc107'
43 COLOR_ORANGE = 'ff9800'
44 COLOR_DARK_ORANGE = 'ff5722'
45 COLOR_BROWN = '795548'
46 COLOR_LIGHT_GREY = 'c0c0c0'
47 COLOR_GREY = '9e9e9e'
48 COLOR_DARK_GREY = '607d8b'
49 COLOR_BLACK = '111111'
50 COLOR_WHITE = 'ffffff'
52 CHOICES = (
53 Choice(COLOR_DARK_RED, _('Dark Red')),
54 Choice(COLOR_RED, _('Red')),
55 Choice(COLOR_PINK, _('Pink')),
56 Choice(COLOR_ROSE, _('Rose')),
57 Choice(COLOR_FUCHSIA, _('Fuchsia')),
58 Choice(COLOR_PURPLE, _('Purple')),
59 Choice(COLOR_DARK_PURPLE, _('Dark Purple')),
60 Choice(COLOR_INDIGO, _('Indigo')),
61 Choice(COLOR_BLUE, _('Blue')),
62 Choice(COLOR_LIGHT_BLUE, _('Light Blue')),
63 Choice(COLOR_CYAN, _('Cyan')),
64 Choice(COLOR_TEAL, _('Teal')),
65 Choice(COLOR_AQUA, _('Aqua')),
66 Choice(COLOR_DARK_GREEN, _('Dark Green')),
67 Choice(COLOR_GREEN, _('Green')),
68 Choice(COLOR_LIGHT_GREEN, _('Light Green')),
69 Choice(COLOR_LIME, _('Lime')),
70 Choice(COLOR_YELLOW, _('Yellow')),
71 Choice(COLOR_AMBER, _('Amber')),
72 Choice(COLOR_ORANGE, _('Orange')),
73 Choice(COLOR_DARK_ORANGE, _('Dark Orange')),
74 Choice(COLOR_BROWN, _('Brown')),
75 Choice(COLOR_LIGHT_GREY, _('Light Grey')),
76 Choice(COLOR_GREY, _('Grey')),
77 Choice(COLOR_DARK_GREY, _('Dark Grey')),
78 Choice(COLOR_BLACK, _('Black')),
79 Choice(COLOR_WHITE, _('White')),
80 )
83#
84# Button color choices
85#
87class ButtonColorChoices(ChoiceSet):
88 DEFAULT = 'default'
89 BLUE = 'blue'
90 INDIGO = 'indigo'
91 PURPLE = 'purple'
92 PINK = 'pink'
93 RED = 'red'
94 ORANGE = 'orange'
95 YELLOW = 'yellow'
96 GREEN = 'green'
97 TEAL = 'teal'
98 CYAN = 'cyan'
99 GRAY = 'gray'
100 GREY = 'gray' # Backward compatability for <3.2
101 BLACK = 'black'
102 WHITE = 'white'
104 CHOICES = (
105 Choice(DEFAULT, _('Default')),
106 Choice(BLUE, _('Blue')),
107 Choice(INDIGO, _('Indigo')),
108 Choice(PURPLE, _('Purple')),
109 Choice(PINK, _('Pink')),
110 Choice(RED, _('Red')),
111 Choice(ORANGE, _('Orange')),
112 Choice(YELLOW, _('Yellow')),
113 Choice(GREEN, _('Green')),
114 Choice(TEAL, _('Teal')),
115 Choice(CYAN, _('Cyan')),
116 Choice(GRAY, _('Gray')),
117 Choice(BLACK, _('Black')),
118 Choice(WHITE, _('White')),
119 )
122#
123# Import Choices
124#
126class ImportMethodChoices(ChoiceSet):
127 DIRECT = 'direct'
128 UPLOAD = 'upload'
129 DATA_FILE = 'datafile'
131 CHOICES = [
132 Choice(DIRECT, _('Direct'), description=_('Enter data directly into a form field')),
133 Choice(UPLOAD, _('Upload'), description=_('Upload a file from the local filesystem')),
134 Choice(DATA_FILE, _('Data file'), description=_('Reference a file from a synced data source')),
135 ]
138class ImportFormatChoices(ChoiceSet):
139 AUTO = 'auto'
140 CSV = 'csv'
141 JSON = 'json'
142 YAML = 'yaml'
144 CHOICES = [
145 Choice(AUTO, _('Auto-detect')),
146 Choice(CSV, 'CSV'),
147 Choice(JSON, 'JSON'),
148 Choice(YAML, 'YAML'),
149 ]
152class CSVDelimiterChoices(ChoiceSet):
153 AUTO = 'auto'
154 COMMA = CSV_DELIMITERS['comma']
155 SEMICOLON = CSV_DELIMITERS['semicolon']
156 PIPE = CSV_DELIMITERS['pipe']
157 TAB = CSV_DELIMITERS['tab']
159 CHOICES = [
160 Choice(AUTO, _('Auto-detect')),
161 Choice(COMMA, _('Comma')),
162 Choice(SEMICOLON, _('Semicolon')),
163 Choice(PIPE, _('Pipe')),
164 Choice(TAB, _('Tab')),
165 ]
168class DistanceUnitChoices(ChoiceSet):
170 # Metric
171 UNIT_KILOMETER = 'km'
172 UNIT_METER = 'm'
174 # Imperial
175 UNIT_MILE = 'mi'
176 UNIT_FOOT = 'ft'
178 CHOICES = (
179 Choice(UNIT_KILOMETER, _('Kilometers')),
180 Choice(UNIT_METER, _('Meters')),
181 Choice(UNIT_MILE, _('Miles')),
182 Choice(UNIT_FOOT, _('Feet')),
183 )
186class WeightUnitChoices(ChoiceSet):
188 # Metric
189 UNIT_KILOGRAM = 'kg'
190 UNIT_GRAM = 'g'
192 # Imperial
193 UNIT_POUND = 'lb'
194 UNIT_OUNCE = 'oz'
196 CHOICES = (
197 Choice(UNIT_KILOGRAM, _('Kilograms')),
198 Choice(UNIT_GRAM, _('Grams')),
199 Choice(UNIT_POUND, _('Pounds')),
200 Choice(UNIT_OUNCE, _('Ounces')),
201 )
204class DiameterUnitChoices(ChoiceSet):
206 # Metric
207 UNIT_MILLIMETER = 'mm'
208 UNIT_CENTIMETER = 'cm'
210 # Imperial
211 UNIT_INCH = 'in'
213 CHOICES = (
214 Choice(UNIT_MILLIMETER, _('Millimeters')),
215 Choice(UNIT_CENTIMETER, _('Centimeters')),
216 Choice(UNIT_INCH, _('Inches')),
217 )
220class FlowRateUnitChoices(ChoiceSet):
222 # Metric
223 UNIT_LITERS_PER_MINUTE = 'lpm'
224 UNIT_CUBIC_METERS_PER_HOUR = 'm3ph'
226 # Imperial
227 UNIT_GALLONS_PER_MINUTE = 'gpm'
229 CHOICES = (
230 Choice(UNIT_LITERS_PER_MINUTE, _('Liters per minute (L/min)')),
231 Choice(UNIT_CUBIC_METERS_PER_HOUR, _('Cubic meters per hour (m³/h)')),
232 Choice(UNIT_GALLONS_PER_MINUTE, _('Gallons per minute (GPM)')),
233 )