Generate Strawberry filter enums from ChoiceSets (#18676)

* Add as_num() method to ChoiceSet

* Update circuits enums

* Update DCIM enums

* Update extras enums

* Update IPAM enums

* Add tenancy enums

* Update virtualization enums

* Update VPN enums

* Update wireless enums

* Update netbox enums

* Permit TenantType.group to be null
This commit is contained in:
Jeremy Stretch 2025-02-19 11:19:23 -05:00 committed by GitHub
parent f1d7ad82dc
commit 36dc8cd0d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 213 additions and 1754 deletions

View File

@ -1,86 +1,20 @@
from enum import Enum
import strawberry import strawberry
__all__ = [ from circuits.choices import *
__all__ = (
'CircuitStatusEnum', 'CircuitStatusEnum',
'CircuitCommitRateEnum', 'CircuitCommitRateEnum',
'CircuitTerminationSideEnum', 'CircuitTerminationSideEnum',
'CircuitTerminationPortSpeedEnum', 'CircuitTerminationPortSpeedEnum',
'CircuitPriorityEnum', 'CircuitPriorityEnum',
'VirtualCircuitTerminationRoleEnum', 'VirtualCircuitTerminationRoleEnum',
] )
#
# Circuits
#
@strawberry.enum CircuitCommitRateEnum = strawberry.enum(CircuitCommitRateChoices.as_enum())
class CircuitStatusEnum(Enum): CircuitPriorityEnum = strawberry.enum(CircuitPriorityChoices.as_enum())
STATUS_DEPROVISIONING = 'deprovisioning' CircuitStatusEnum = strawberry.enum(CircuitStatusChoices.as_enum())
STATUS_ACTIVE = 'active' CircuitTerminationSideEnum = strawberry.enum(CircuitTerminationSideChoices.as_enum())
STATUS_PLANNED = 'planned' CircuitTerminationPortSpeedEnum = strawberry.enum(CircuitTerminationPortSpeedChoices.as_enum())
STATUS_PROVISIONING = 'provisioning' VirtualCircuitTerminationRoleEnum = strawberry.enum(VirtualCircuitTerminationRoleChoices.as_enum())
STATUS_OFFLINE = 'offline'
STATUS_DECOMMISSIONED = 'decommissioned'
@strawberry.enum
class CircuitCommitRateEnum(Enum):
TEN_MBPS = 10000
HUNDRED_MBPS = 100000
ONE_GBPS = 1000000
TEN_GBPS = 10000000
TWENTY_FIVE_GBPS = 25000000
FORTY_GBPS = 40000000
HUNDRED_GBPS = 100000000
TWO_HUNDRED_GBPS = 200000000
FOUR_HUNDRED_GBPS = 400000000
T1 = 1544
E1 = 2048
#
# CircuitTerminations
#
@strawberry.enum
class CircuitTerminationSideEnum(Enum):
SIDE_A = 'A'
SIDE_Z = 'Z'
@strawberry.enum
class CircuitTerminationPortSpeedEnum(Enum):
TEN_MBPS = 10000
HUNDRED_MBPS = 100000
ONE_GBPS = 1000000
TEN_GBPS = 10000000
TWENTY_FIVE_GBPS = 25000000
FORTY_GBPS = 40000000
HUNDRED_GBPS = 100000000
TWO_HUNDRED_GBPS = 200000000
FOUR_HUNDRED_GBPS = 400000000
T1 = 1544
E1 = 2048
@strawberry.enum
class CircuitPriorityEnum(Enum):
PRIORITY_PRIMARY = 'primary'
PRIORITY_SECONDARY = 'secondary'
PRIORITY_TERTIARY = 'tertiary'
PRIORITY_INACTIVE = 'inactive'
#
# Virtual circuits
#
@strawberry.enum
class VirtualCircuitTerminationRoleEnum(Enum):
ROLE_PEER = 'peer'
ROLE_HUB = 'hub'
ROLE_SPOKE = 'spoke'

View File

@ -1,848 +1,77 @@
from enum import Enum
import strawberry import strawberry
from dcim.choices import *
#
# Sites __all__ = (
# 'CableEndEnum',
'CableLengthUnitEnum',
@strawberry.enum 'CableTypeEnum',
class SiteStatusEnum(Enum): 'ConsolePortSpeedEnum',
STATUS_PLANNED = 'planned' 'ConsolePortTypeEnum',
STATUS_STAGING = 'staging' 'DeviceAirflowEnum',
STATUS_ACTIVE = 'active' 'DeviceFaceEnum',
STATUS_DECOMMISSIONING = 'decommissioning' 'DeviceStatusEnum',
STATUS_RETIRED = 'retired' 'InterfaceDuplexEnum',
'InterfaceModeEnum',
'InterfacePoEModeEnum',
# 'InterfacePoETypeEnum',
# Locations 'InterfaceSpeedEnum',
# 'InterfaceTypeEnum',
'InventoryItemStatusEnum',
@strawberry.enum 'LinkStatusEnum',
class LocationStatusEnum(Enum): 'LocationStatusEnum',
STATUS_PLANNED = 'planned' 'ModuleAirflowEnum',
STATUS_STAGING = 'staging' 'ModuleStatusEnum',
STATUS_ACTIVE = 'active' 'PortTypeEnum',
STATUS_DECOMMISSIONING = 'decommissioning' 'PowerFeedPhaseEnum',
STATUS_RETIRED = 'retired' 'PowerFeedStatusEnum',
'PowerFeedSupplyEnum',
'PowerFeedTypeEnum',
# 'PowerOutletFeedLegEnum',
# Racks 'PowerOutletTypeEnum',
# 'PowerPortTypeEnum',
'RackAirflowEnum',
@strawberry.enum 'RackDimensionUnitEnum',
class RackFormFactorEnum(Enum): 'RackFormFactorEnum',
TYPE_2POST = '2-post-frame' 'RackStatusEnum',
TYPE_4POST = '4-post-frame' 'RackWidthEnum',
TYPE_CABINET = '4-post-cabinet' 'SiteStatusEnum',
TYPE_WALLFRAME = 'wall-frame' 'SubdeviceRoleEnum',
TYPE_WALLFRAME_VERTICAL = 'wall-frame-vertical' 'VirtualDeviceContextStatusEnum',
TYPE_WALLCABINET = 'wall-cabinet' )
TYPE_WALLCABINET_VERTICAL = 'wall-cabinet-vertical'
CableEndEnum = strawberry.enum(CableEndChoices.as_enum())
CableLengthUnitEnum = strawberry.enum(CableLengthUnitChoices.as_enum())
@strawberry.enum CableTypeEnum = strawberry.enum(CableTypeChoices.as_enum())
class RackWidthEnum(Enum): ConsolePortSpeedEnum = strawberry.enum(ConsolePortSpeedChoices.as_enum())
ConsolePortTypeEnum = strawberry.enum(ConsolePortTypeChoices.as_enum())
WIDTH_10IN = 10 DeviceAirflowEnum = strawberry.enum(DeviceAirflowChoices.as_enum())
WIDTH_19IN = 19 DeviceFaceEnum = strawberry.enum(DeviceFaceChoices.as_enum())
WIDTH_21IN = 21 DeviceStatusEnum = strawberry.enum(DeviceStatusChoices.as_enum())
WIDTH_23IN = 23 InterfaceDuplexEnum = strawberry.enum(InterfaceDuplexChoices.as_enum())
InterfaceModeEnum = strawberry.enum(InterfaceModeChoices.as_enum())
InterfacePoEModeEnum = strawberry.enum(InterfacePoEModeChoices.as_enum())
@strawberry.enum InterfacePoETypeEnum = strawberry.enum(InterfacePoETypeChoices.as_enum())
class RackStatusEnum(Enum): InterfaceSpeedEnum = strawberry.enum(InterfaceSpeedChoices.as_enum())
STATUS_RESERVED = 'reserved' InterfaceTypeEnum = strawberry.enum(InterfaceTypeChoices.as_enum())
STATUS_AVAILABLE = 'available' InventoryItemStatusEnum = strawberry.enum(InventoryItemStatusChoices.as_enum())
STATUS_PLANNED = 'planned' LinkStatusEnum = strawberry.enum(LinkStatusChoices.as_enum())
STATUS_ACTIVE = 'active' LocationStatusEnum = strawberry.enum(LocationStatusChoices.as_enum())
STATUS_DEPRECATED = 'deprecated' ModuleAirflowEnum = strawberry.enum(ModuleAirflowChoices.as_enum())
ModuleStatusEnum = strawberry.enum(ModuleStatusChoices.as_enum())
PortTypeEnum = strawberry.enum(PortTypeChoices.as_enum())
@strawberry.enum PowerFeedPhaseEnum = strawberry.enum(PowerFeedPhaseChoices.as_enum())
class RackDimensionUnitEnum(Enum): PowerFeedStatusEnum = strawberry.enum(PowerFeedStatusChoices.as_enum())
UNIT_MILLIMETER = 'mm' PowerFeedSupplyEnum = strawberry.enum(PowerFeedSupplyChoices.as_enum())
UNIT_INCH = 'in' PowerFeedTypeEnum = strawberry.enum(PowerFeedTypeChoices.as_enum())
PowerOutletFeedLegEnum = strawberry.enum(PowerOutletFeedLegChoices.as_enum())
PowerOutletTypeEnum = strawberry.enum(PowerOutletTypeChoices.as_enum())
@strawberry.enum PowerPortTypeEnum = strawberry.enum(PowerPortTypeChoices.as_enum())
class RackElevationDetailRenderEnum(Enum): RackAirflowEnum = strawberry.enum(RackAirflowChoices.as_enum())
RENDER_JSON = 'json' RackDimensionUnitEnum = strawberry.enum(RackDimensionUnitChoices.as_enum())
RENDER_SVG = 'svg' RackFormFactorEnum = strawberry.enum(RackFormFactorChoices.as_enum())
RackStatusEnum = strawberry.enum(RackStatusChoices.as_enum())
RackWidthEnum = strawberry.enum(RackWidthChoices.as_enum())
@strawberry.enum SiteStatusEnum = strawberry.enum(SiteStatusChoices.as_enum())
class RackAirflowEnum(Enum): SubdeviceRoleEnum = strawberry.enum(SubdeviceRoleChoices.as_enum())
FRONT_TO_REAR = 'front-to-rear' VirtualDeviceContextStatusEnum = strawberry.enum(VirtualDeviceContextStatusChoices.as_enum())
REAR_TO_FRONT = 'rear-to-front'
#
# DeviceTypes
#
@strawberry.enum
class SubdeviceRoleEnum(Enum):
ROLE_PARENT = 'parent'
ROLE_CHILD = 'child'
#
# Devices
#
@strawberry.enum
class DeviceFaceEnum(Enum):
FACE_FRONT = 'front'
FACE_REAR = 'rear'
@strawberry.enum
class DeviceStatusEnum(Enum):
STATUS_OFFLINE = 'offline'
STATUS_ACTIVE = 'active'
STATUS_PLANNED = 'planned'
STATUS_STAGED = 'staged'
STATUS_FAILED = 'failed'
STATUS_INVENTORY = 'inventory'
STATUS_DECOMMISSIONING = 'decommissioning'
@strawberry.enum
class DeviceAirflowEnum(Enum):
AIRFLOW_FRONT_TO_REAR = 'front-to-rear'
AIRFLOW_REAR_TO_FRONT = 'rear-to-front'
AIRFLOW_LEFT_TO_RIGHT = 'left-to-right'
AIRFLOW_RIGHT_TO_LEFT = 'right-to-left'
AIRFLOW_SIDE_TO_REAR = 'side-to-rear'
AIRFLOW_REAR_TO_SIDE = 'rear-to-side'
AIRFLOW_BOTTOM_TO_TOP = 'bottom-to-top'
AIRFLOW_TOP_TO_BOTTOM = 'top-to-bottom'
AIRFLOW_PASSIVE = 'passive'
AIRFLOW_MIXED = 'mixed'
#
# Modules
#
@strawberry.enum
class ModuleStatusEnum(Enum):
STATUS_OFFLINE = 'offline'
STATUS_ACTIVE = 'active'
STATUS_PLANNED = 'planned'
STATUS_STAGED = 'staged'
STATUS_FAILED = 'failed'
STATUS_DECOMMISSIONING = 'decommissioning'
@strawberry.enum
class ModuleAirflowEnum(Enum):
FRONT_TO_REAR = 'front-to-rear'
REAR_TO_FRONT = 'rear-to-front'
LEFT_TO_RIGHT = 'left-to-right'
RIGHT_TO_LEFT = 'right-to-left'
SIDE_TO_REAR = 'side-to-rear'
PASSIVE = 'passive'
#
# ConsolePorts
#
@strawberry.enum
class ConsolePortTypeEnum(Enum):
TYPE_DE9 = 'de-9'
TYPE_DB25 = 'db-25'
TYPE_RJ11 = 'rj-11'
TYPE_RJ12 = 'rj-12'
TYPE_RJ45 = 'rj-45'
TYPE_MINI_DIN_8 = 'mini-din-8'
TYPE_USB_A = 'usb-a'
TYPE_USB_B = 'usb-b'
TYPE_USB_C = 'usb-c'
TYPE_USB_MINI_A = 'usb-mini-a'
TYPE_USB_MINI_B = 'usb-mini-b'
TYPE_USB_MICRO_A = 'usb-micro-a'
TYPE_USB_MICRO_B = 'usb-micro-b'
TYPE_USB_MICRO_AB = 'usb-micro-ab'
TYPE_OTHER = 'other'
@strawberry.enum
class ConsolePortSpeedEnum(Enum):
SPEED_1200 = 1200
SPEED_2400 = 2400
SPEED_4800 = 4800
SPEED_9600 = 9600
SPEED_19200 = 19200
SPEED_38400 = 38400
SPEED_57600 = 57600
SPEED_115200 = 115200
#
# PowerPorts
#
@strawberry.enum
class PowerPortTypeEnum(Enum):
# IEC 60320
TYPE_IEC_C6 = 'iec-60320-c6'
TYPE_IEC_C8 = 'iec-60320-c8'
TYPE_IEC_C14 = 'iec-60320-c14'
TYPE_IEC_C16 = 'iec-60320-c16'
TYPE_IEC_C20 = 'iec-60320-c20'
TYPE_IEC_C22 = 'iec-60320-c22'
# IEC 60309
TYPE_IEC_PNE4H = 'iec-60309-p-n-e-4h'
TYPE_IEC_PNE6H = 'iec-60309-p-n-e-6h'
TYPE_IEC_PNE9H = 'iec-60309-p-n-e-9h'
TYPE_IEC_2PE4H = 'iec-60309-2p-e-4h'
TYPE_IEC_2PE6H = 'iec-60309-2p-e-6h'
TYPE_IEC_2PE9H = 'iec-60309-2p-e-9h'
TYPE_IEC_3PE4H = 'iec-60309-3p-e-4h'
TYPE_IEC_3PE6H = 'iec-60309-3p-e-6h'
TYPE_IEC_3PE9H = 'iec-60309-3p-e-9h'
TYPE_IEC_3PNE4H = 'iec-60309-3p-n-e-4h'
TYPE_IEC_3PNE6H = 'iec-60309-3p-n-e-6h'
TYPE_IEC_3PNE9H = 'iec-60309-3p-n-e-9h'
# IEC 60906-1
TYPE_IEC_60906_1 = 'iec-60906-1'
TYPE_NBR_14136_10A = 'nbr-14136-10a'
TYPE_NBR_14136_20A = 'nbr-14136-20a'
# NEMA non-locking
TYPE_NEMA_115P = 'nema-1-15p'
TYPE_NEMA_515P = 'nema-5-15p'
TYPE_NEMA_520P = 'nema-5-20p'
TYPE_NEMA_530P = 'nema-5-30p'
TYPE_NEMA_550P = 'nema-5-50p'
TYPE_NEMA_615P = 'nema-6-15p'
TYPE_NEMA_620P = 'nema-6-20p'
TYPE_NEMA_630P = 'nema-6-30p'
TYPE_NEMA_650P = 'nema-6-50p'
TYPE_NEMA_1030P = 'nema-10-30p'
TYPE_NEMA_1050P = 'nema-10-50p'
TYPE_NEMA_1420P = 'nema-14-20p'
TYPE_NEMA_1430P = 'nema-14-30p'
TYPE_NEMA_1450P = 'nema-14-50p'
TYPE_NEMA_1460P = 'nema-14-60p'
TYPE_NEMA_1515P = 'nema-15-15p'
TYPE_NEMA_1520P = 'nema-15-20p'
TYPE_NEMA_1530P = 'nema-15-30p'
TYPE_NEMA_1550P = 'nema-15-50p'
TYPE_NEMA_1560P = 'nema-15-60p'
# NEMA locking
TYPE_NEMA_L115P = 'nema-l1-15p'
TYPE_NEMA_L515P = 'nema-l5-15p'
TYPE_NEMA_L520P = 'nema-l5-20p'
TYPE_NEMA_L530P = 'nema-l5-30p'
TYPE_NEMA_L550P = 'nema-l5-50p'
TYPE_NEMA_L615P = 'nema-l6-15p'
TYPE_NEMA_L620P = 'nema-l6-20p'
TYPE_NEMA_L630P = 'nema-l6-30p'
TYPE_NEMA_L650P = 'nema-l6-50p'
TYPE_NEMA_L1030P = 'nema-l10-30p'
TYPE_NEMA_L1420P = 'nema-l14-20p'
TYPE_NEMA_L1430P = 'nema-l14-30p'
TYPE_NEMA_L1450P = 'nema-l14-50p'
TYPE_NEMA_L1460P = 'nema-l14-60p'
TYPE_NEMA_L1520P = 'nema-l15-20p'
TYPE_NEMA_L1530P = 'nema-l15-30p'
TYPE_NEMA_L1550P = 'nema-l15-50p'
TYPE_NEMA_L1560P = 'nema-l15-60p'
TYPE_NEMA_L2120P = 'nema-l21-20p'
TYPE_NEMA_L2130P = 'nema-l21-30p'
TYPE_NEMA_L2220P = 'nema-l22-20p'
TYPE_NEMA_L2230P = 'nema-l22-30p'
# California style
TYPE_CS6361C = 'cs6361c'
TYPE_CS6365C = 'cs6365c'
TYPE_CS8165C = 'cs8165c'
TYPE_CS8265C = 'cs8265c'
TYPE_CS8365C = 'cs8365c'
TYPE_CS8465C = 'cs8465c'
# ITA/international
TYPE_ITA_C = 'ita-c'
TYPE_ITA_E = 'ita-e'
TYPE_ITA_F = 'ita-f'
TYPE_ITA_EF = 'ita-ef'
TYPE_ITA_G = 'ita-g'
TYPE_ITA_H = 'ita-h'
TYPE_ITA_I = 'ita-i'
TYPE_ITA_J = 'ita-j'
TYPE_ITA_K = 'ita-k'
TYPE_ITA_L = 'ita-l'
TYPE_ITA_M = 'ita-m'
TYPE_ITA_N = 'ita-n'
TYPE_ITA_O = 'ita-o'
# USB
TYPE_USB_A = 'usb-a'
TYPE_USB_B = 'usb-b'
TYPE_USB_C = 'usb-c'
TYPE_USB_MINI_A = 'usb-mini-a'
TYPE_USB_MINI_B = 'usb-mini-b'
TYPE_USB_MICRO_A = 'usb-micro-a'
TYPE_USB_MICRO_B = 'usb-micro-b'
TYPE_USB_MICRO_AB = 'usb-micro-ab'
TYPE_USB_3_B = 'usb-3-b'
TYPE_USB_3_MICROB = 'usb-3-micro-b'
# Molex
TYPE_MOLEX_MICRO_FIT_1X2 = 'molex-micro-fit-1x2'
TYPE_MOLEX_MICRO_FIT_2X2 = 'molex-micro-fit-2x2'
TYPE_MOLEX_MICRO_FIT_2X4 = 'molex-micro-fit-2x4'
# Direct current (DC)
TYPE_DC = 'dc-terminal'
# Proprietary
TYPE_SAF_D_GRID = 'saf-d-grid'
TYPE_NEUTRIK_POWERCON_20A = 'neutrik-powercon-20'
TYPE_NEUTRIK_POWERCON_32A = 'neutrik-powercon-32'
TYPE_NEUTRIK_POWERCON_TRUE1 = 'neutrik-powercon-true1'
TYPE_NEUTRIK_POWERCON_TRUE1_TOP = 'neutrik-powercon-true1-top'
TYPE_UBIQUITI_SMARTPOWER = 'ubiquiti-smartpower'
# Other
TYPE_HARDWIRED = 'hardwired'
TYPE_OTHER = 'other'
#
# PowerOutlets
#
@strawberry.enum
class PowerOutletTypeEnum(Enum):
# IEC 60320
TYPE_IEC_C5 = 'iec-60320-c5'
TYPE_IEC_C7 = 'iec-60320-c7'
TYPE_IEC_C13 = 'iec-60320-c13'
TYPE_IEC_C15 = 'iec-60320-c15'
TYPE_IEC_C19 = 'iec-60320-c19'
TYPE_IEC_C21 = 'iec-60320-c21'
# IEC 60309
TYPE_IEC_PNE4H = 'iec-60309-p-n-e-4h'
TYPE_IEC_PNE6H = 'iec-60309-p-n-e-6h'
TYPE_IEC_PNE9H = 'iec-60309-p-n-e-9h'
TYPE_IEC_2PE4H = 'iec-60309-2p-e-4h'
TYPE_IEC_2PE6H = 'iec-60309-2p-e-6h'
TYPE_IEC_2PE9H = 'iec-60309-2p-e-9h'
TYPE_IEC_3PE4H = 'iec-60309-3p-e-4h'
TYPE_IEC_3PE6H = 'iec-60309-3p-e-6h'
TYPE_IEC_3PE9H = 'iec-60309-3p-e-9h'
TYPE_IEC_3PNE4H = 'iec-60309-3p-n-e-4h'
TYPE_IEC_3PNE6H = 'iec-60309-3p-n-e-6h'
TYPE_IEC_3PNE9H = 'iec-60309-3p-n-e-9h'
# IEC 60906-1
TYPE_IEC_60906_1 = 'iec-60906-1'
TYPE_NBR_14136_10A = 'nbr-14136-10a'
TYPE_NBR_14136_20A = 'nbr-14136-20a'
# NEMA non-locking
TYPE_NEMA_115R = 'nema-1-15r'
TYPE_NEMA_515R = 'nema-5-15r'
TYPE_NEMA_520R = 'nema-5-20r'
TYPE_NEMA_530R = 'nema-5-30r'
TYPE_NEMA_550R = 'nema-5-50r'
TYPE_NEMA_615R = 'nema-6-15r'
TYPE_NEMA_620R = 'nema-6-20r'
TYPE_NEMA_630R = 'nema-6-30r'
TYPE_NEMA_650R = 'nema-6-50r'
TYPE_NEMA_1030R = 'nema-10-30r'
TYPE_NEMA_1050R = 'nema-10-50r'
TYPE_NEMA_1420R = 'nema-14-20r'
TYPE_NEMA_1430R = 'nema-14-30r'
TYPE_NEMA_1450R = 'nema-14-50r'
TYPE_NEMA_1460R = 'nema-14-60r'
TYPE_NEMA_1515R = 'nema-15-15r'
TYPE_NEMA_1520R = 'nema-15-20r'
TYPE_NEMA_1530R = 'nema-15-30r'
TYPE_NEMA_1550R = 'nema-15-50r'
TYPE_NEMA_1560R = 'nema-15-60r'
# NEMA locking
TYPE_NEMA_L115R = 'nema-l1-15r'
TYPE_NEMA_L515R = 'nema-l5-15r'
TYPE_NEMA_L520R = 'nema-l5-20r'
TYPE_NEMA_L530R = 'nema-l5-30r'
TYPE_NEMA_L550R = 'nema-l5-50r'
TYPE_NEMA_L615R = 'nema-l6-15r'
TYPE_NEMA_L620R = 'nema-l6-20r'
TYPE_NEMA_L630R = 'nema-l6-30r'
TYPE_NEMA_L650R = 'nema-l6-50r'
TYPE_NEMA_L1030R = 'nema-l10-30r'
TYPE_NEMA_L1420R = 'nema-l14-20r'
TYPE_NEMA_L1430R = 'nema-l14-30r'
TYPE_NEMA_L1450R = 'nema-l14-50r'
TYPE_NEMA_L1460R = 'nema-l14-60r'
TYPE_NEMA_L1520R = 'nema-l15-20r'
TYPE_NEMA_L1530R = 'nema-l15-30r'
TYPE_NEMA_L1550R = 'nema-l15-50r'
TYPE_NEMA_L1560R = 'nema-l15-60r'
TYPE_NEMA_L2120R = 'nema-l21-20r'
TYPE_NEMA_L2130R = 'nema-l21-30r'
TYPE_NEMA_L2220R = 'nema-l22-20r'
TYPE_NEMA_L2230R = 'nema-l22-30r'
# California style
TYPE_CS6360C = 'CS6360C'
TYPE_CS6364C = 'CS6364C'
TYPE_CS8164C = 'CS8164C'
TYPE_CS8264C = 'CS8264C'
TYPE_CS8364C = 'CS8364C'
TYPE_CS8464C = 'CS8464C'
# ITA/international
TYPE_ITA_E = 'ita-e'
TYPE_ITA_F = 'ita-f'
TYPE_ITA_G = 'ita-g'
TYPE_ITA_H = 'ita-h'
TYPE_ITA_I = 'ita-i'
TYPE_ITA_J = 'ita-j'
TYPE_ITA_K = 'ita-k'
TYPE_ITA_L = 'ita-l'
TYPE_ITA_M = 'ita-m'
TYPE_ITA_N = 'ita-n'
TYPE_ITA_O = 'ita-o'
TYPE_ITA_MULTISTANDARD = 'ita-multistandard'
# USB
TYPE_USB_A = 'usb-a'
TYPE_USB_MICROB = 'usb-micro-b'
TYPE_USB_C = 'usb-c'
# Molex
TYPE_MOLEX_MICRO_FIT_1X2 = 'molex-micro-fit-1x2'
TYPE_MOLEX_MICRO_FIT_2X2 = 'molex-micro-fit-2x2'
TYPE_MOLEX_MICRO_FIT_2X4 = 'molex-micro-fit-2x4'
# Direct current (DC)
TYPE_DC = 'dc-terminal'
# Proprietary
TYPE_EATON_C39 = 'eaton-c39'
TYPE_HDOT_CX = 'hdot-cx'
TYPE_SAF_D_GRID = 'saf-d-grid'
TYPE_NEUTRIK_POWERCON_20A = 'neutrik-powercon-20a'
TYPE_NEUTRIK_POWERCON_32A = 'neutrik-powercon-32a'
TYPE_NEUTRIK_POWERCON_TRUE1 = 'neutrik-powercon-true1'
TYPE_NEUTRIK_POWERCON_TRUE1_TOP = 'neutrik-powercon-true1-top'
TYPE_UBIQUITI_SMARTPOWER = 'ubiquiti-smartpower'
# Other
TYPE_HARDWIRED = 'hardwired'
TYPE_OTHER = 'other'
@strawberry.enum
class PowerOutletFeedLegEnum(Enum):
FEED_LEG_A = 'A'
FEED_LEG_B = 'B'
FEED_LEG_C = 'C'
#
# Interfaces
#
@strawberry.enum
class InterfaceKindEnum(Enum):
KIND_PHYSICAL = 'physical'
KIND_VIRTUAL = 'virtual'
KIND_WIRELESS = 'wireless'
@strawberry.enum
class InterfaceTypeEnum(Enum):
# Virtual
TYPE_VIRTUAL = 'virtual'
TYPE_BRIDGE = 'bridge'
TYPE_LAG = 'lag'
# Ethernet
TYPE_100ME_FX = '100base-fx'
TYPE_100ME_LFX = '100base-lfx'
TYPE_100ME_FIXED = '100base-tx'
TYPE_100ME_T1 = '100base-t1'
TYPE_100ME_SFP = '100base-x-sfp'
TYPE_1GE_FIXED = '1000base-t'
TYPE_1GE_LX_FIXED = '1000base-lx'
TYPE_1GE_TX_FIXED = '1000base-tx'
TYPE_1GE_GBIC = '1000base-x-gbic'
TYPE_1GE_SFP = '1000base-x-sfp'
TYPE_2GE_FIXED = '2.5gbase-t'
TYPE_5GE_FIXED = '5gbase-t'
TYPE_10GE_FIXED = '10gbase-t'
TYPE_10GE_CX4 = '10gbase-cx4'
TYPE_10GE_SFP_PLUS = '10gbase-x-sfpp'
TYPE_10GE_XFP = '10gbase-x-xfp'
TYPE_10GE_XENPAK = '10gbase-x-xenpak'
TYPE_10GE_X2 = '10gbase-x-x2'
TYPE_25GE_SFP28 = '25gbase-x-sfp28'
TYPE_50GE_SFP56 = '50gbase-x-sfp56'
TYPE_40GE_QSFP_PLUS = '40gbase-x-qsfpp'
TYPE_50GE_QSFP28 = '50gbase-x-sfp28'
TYPE_100GE_CFP = '100gbase-x-cfp'
TYPE_100GE_CFP2 = '100gbase-x-cfp2'
TYPE_100GE_CFP4 = '100gbase-x-cfp4'
TYPE_100GE_CXP = '100gbase-x-cxp'
TYPE_100GE_CPAK = '100gbase-x-cpak'
TYPE_100GE_DSFP = '100gbase-x-dsfp'
TYPE_100GE_SFP_DD = '100gbase-x-sfpdd'
TYPE_100GE_QSFP28 = '100gbase-x-qsfp28'
TYPE_100GE_QSFP_DD = '100gbase-x-qsfpdd'
TYPE_200GE_CFP2 = '200gbase-x-cfp2'
TYPE_200GE_QSFP56 = '200gbase-x-qsfp56'
TYPE_200GE_QSFP_DD = '200gbase-x-qsfpdd'
TYPE_400GE_CFP2 = '400gbase-x-cfp2'
TYPE_400GE_QSFP112 = '400gbase-x-qsfp112'
TYPE_400GE_QSFP_DD = '400gbase-x-qsfpdd'
TYPE_400GE_OSFP = '400gbase-x-osfp'
TYPE_400GE_OSFP_RHS = '400gbase-x-osfp-rhs'
TYPE_400GE_CDFP = '400gbase-x-cdfp'
TYPE_400GE_CFP8 = '400gbase-x-cfp8'
TYPE_800GE_QSFP_DD = '800gbase-x-qsfpdd'
TYPE_800GE_OSFP = '800gbase-x-osfp'
# Ethernet Backplane
TYPE_1GE_KX = '1000base-kx'
TYPE_2GE_KX = '2.5gbase-kx'
TYPE_5GE_KR = '5gbase-kr'
TYPE_10GE_KR = '10gbase-kr'
TYPE_10GE_KX4 = '10gbase-kx4'
TYPE_25GE_KR = '25gbase-kr'
TYPE_40GE_KR4 = '40gbase-kr4'
TYPE_50GE_KR = '50gbase-kr'
TYPE_100GE_KP4 = '100gbase-kp4'
TYPE_100GE_KR2 = '100gbase-kr2'
TYPE_100GE_KR4 = '100gbase-kr4'
# Wireless
TYPE_80211A = 'ieee802.11a'
TYPE_80211G = 'ieee802.11g'
TYPE_80211N = 'ieee802.11n'
TYPE_80211AC = 'ieee802.11ac'
TYPE_80211AD = 'ieee802.11ad'
TYPE_80211AX = 'ieee802.11ax'
TYPE_80211AY = 'ieee802.11ay'
TYPE_80211BE = 'ieee802.11be'
TYPE_802151 = 'ieee802.15.1'
TYPE_802154 = 'ieee802.15.4'
TYPE_OTHER_WIRELESS = 'other-wireless'
# Cellular
TYPE_GSM = 'gsm'
TYPE_CDMA = 'cdma'
TYPE_LTE = 'lte'
TYPE_4G = '4g'
TYPE_5G = '5g'
# SONET
TYPE_SONET_OC3 = 'sonet-oc3'
TYPE_SONET_OC12 = 'sonet-oc12'
TYPE_SONET_OC48 = 'sonet-oc48'
TYPE_SONET_OC192 = 'sonet-oc192'
TYPE_SONET_OC768 = 'sonet-oc768'
TYPE_SONET_OC1920 = 'sonet-oc1920'
TYPE_SONET_OC3840 = 'sonet-oc3840'
# Fibrechannel
TYPE_1GFC_SFP = '1gfc-sfp'
TYPE_2GFC_SFP = '2gfc-sfp'
TYPE_4GFC_SFP = '4gfc-sfp'
TYPE_8GFC_SFP_PLUS = '8gfc-sfpp'
TYPE_16GFC_SFP_PLUS = '16gfc-sfpp'
TYPE_32GFC_SFP28 = '32gfc-sfp28'
TYPE_32GFC_SFP_PLUS = '32gfc-sfpp'
TYPE_64GFC_QSFP_PLUS = '64gfc-qsfpp'
TYPE_64GFC_SFP_DD = '64gfc-sfpdd'
TYPE_64GFC_SFP_PLUS = '64gfc-sfpp'
TYPE_128GFC_QSFP28 = '128gfc-qsfp28'
# InfiniBand
TYPE_INFINIBAND_SDR = 'infiniband-sdr'
TYPE_INFINIBAND_DDR = 'infiniband-ddr'
TYPE_INFINIBAND_QDR = 'infiniband-qdr'
TYPE_INFINIBAND_FDR10 = 'infiniband-fdr10'
TYPE_INFINIBAND_FDR = 'infiniband-fdr'
TYPE_INFINIBAND_EDR = 'infiniband-edr'
TYPE_INFINIBAND_HDR = 'infiniband-hdr'
TYPE_INFINIBAND_NDR = 'infiniband-ndr'
TYPE_INFINIBAND_XDR = 'infiniband-xdr'
# Serial
TYPE_T1 = 't1'
TYPE_E1 = 'e1'
TYPE_T3 = 't3'
TYPE_E3 = 'e3'
# ATM/DSL
TYPE_XDSL = 'xdsl'
# Coaxial
TYPE_DOCSIS = 'docsis'
# PON
TYPE_BPON = 'bpon'
TYPE_EPON = 'epon'
TYPE_10G_EPON = '10g-epon'
TYPE_GPON = 'gpon'
TYPE_XG_PON = 'xg-pon'
TYPE_XGS_PON = 'xgs-pon'
TYPE_NG_PON2 = 'ng-pon2'
TYPE_25G_PON = '25g-pon'
TYPE_50G_PON = '50g-pon'
# Stacking
TYPE_STACKWISE = 'cisco-stackwise'
TYPE_STACKWISE_PLUS = 'cisco-stackwise-plus'
TYPE_FLEXSTACK = 'cisco-flexstack'
TYPE_FLEXSTACK_PLUS = 'cisco-flexstack-plus'
TYPE_STACKWISE80 = 'cisco-stackwise-80'
TYPE_STACKWISE160 = 'cisco-stackwise-160'
TYPE_STACKWISE320 = 'cisco-stackwise-320'
TYPE_STACKWISE480 = 'cisco-stackwise-480'
TYPE_STACKWISE1T = 'cisco-stackwise-1t'
TYPE_JUNIPER_VCP = 'juniper-vcp'
TYPE_SUMMITSTACK = 'extreme-summitstack'
TYPE_SUMMITSTACK128 = 'extreme-summitstack-128'
TYPE_SUMMITSTACK256 = 'extreme-summitstack-256'
TYPE_SUMMITSTACK512 = 'extreme-summitstack-512'
# Other
TYPE_OTHER = 'other'
@strawberry.enum
class InterfaceSpeedEnum(Enum):
SPEED_10MBPS = 10000
SPEED_100MBPS = 100000
SPEED_1GBPS = 1000000
SPEED_10GBPS = 10000000
SPEED_25GBPS = 25000000
SPEED_40GBPS = 40000000
SPEED_100GBPS = 100000000
SPEED_200GBPS = 200000000
SPEED_400GBPS = 400000000
@strawberry.enum
class InterfaceDuplexEnum(Enum):
DUPLEX_HALF = 'half'
DUPLEX_FULL = 'full'
DUPLEX_AUTO = 'auto'
@strawberry.enum
class InterfaceModeEnum(Enum):
MODE_ACCESS = 'access'
MODE_TAGGED = 'tagged'
MODE_TAGGED_ALL = 'tagged-all'
MODE_Q_IN_Q = 'q-in-q'
@strawberry.enum
class InterfacePoEModeEnum(Enum):
MODE_PD = 'pd'
MODE_PSE = 'pse'
@strawberry.enum
class InterfacePoETypeEnum(Enum):
TYPE_1_8023AF = 'type1-ieee802.3af'
TYPE_2_8023AT = 'type2-ieee802.3at'
TYPE_3_8023BT = 'type3-ieee802.3bt'
TYPE_4_8023BT = 'type4-ieee802.3bt'
PASSIVE_24V_2PAIR = 'passive-24v-2pair'
PASSIVE_24V_4PAIR = 'passive-24v-4pair'
PASSIVE_48V_2PAIR = 'passive-48v-2pair'
PASSIVE_48V_4PAIR = 'passive-48v-4pair'
#
# FrontPorts/RearPorts
#
@strawberry.enum
class PortTypeEnum(Enum):
TYPE_8P8C = '8p8c'
TYPE_8P6C = '8p6c'
TYPE_8P4C = '8p4c'
TYPE_8P2C = '8p2c'
TYPE_6P6C = '6p6c'
TYPE_6P4C = '6p4c'
TYPE_6P2C = '6p2c'
TYPE_4P4C = '4p4c'
TYPE_4P2C = '4p2c'
TYPE_GG45 = 'gg45'
TYPE_TERA4P = 'tera-4p'
TYPE_TERA2P = 'tera-2p'
TYPE_TERA1P = 'tera-1p'
TYPE_110_PUNCH = '110-punch'
TYPE_BNC = 'bnc'
TYPE_F = 'f'
TYPE_N = 'n'
TYPE_MRJ21 = 'mrj21'
TYPE_ST = 'st'
TYPE_SC = 'sc'
TYPE_SC_PC = 'sc-pc'
TYPE_SC_UPC = 'sc-upc'
TYPE_SC_APC = 'sc-apc'
TYPE_FC = 'fc'
TYPE_LC = 'lc'
TYPE_LC_PC = 'lc-pc'
TYPE_LC_UPC = 'lc-upc'
TYPE_LC_APC = 'lc-apc'
TYPE_MTRJ = 'mtrj'
TYPE_MPO = 'mpo'
TYPE_LSH = 'lsh'
TYPE_LSH_PC = 'lsh-pc'
TYPE_LSH_UPC = 'lsh-upc'
TYPE_LSH_APC = 'lsh-apc'
TYPE_LX5 = 'lx5'
TYPE_LX5_PC = 'lx5-pc'
TYPE_LX5_UPC = 'lx5-upc'
TYPE_LX5_APC = 'lx5-apc'
TYPE_SPLICE = 'splice'
TYPE_CS = 'cs'
TYPE_SN = 'sn'
TYPE_SMA_905 = 'sma-905'
TYPE_SMA_906 = 'sma-906'
TYPE_URM_P2 = 'urm-p2'
TYPE_URM_P4 = 'urm-p4'
TYPE_URM_P8 = 'urm-p8'
TYPE_USB_A = 'usb-a'
TYPE_USB_B = 'usb-b'
TYPE_USB_C = 'usb-c'
TYPE_USB_MINI_A = 'usb-mini-a'
TYPE_USB_MINI_B = 'usb-mini-b'
TYPE_USB_MICRO_A = 'usb-micro-a'
TYPE_USB_MICRO_B = 'usb-micro-b'
TYPE_USB_MICRO_AB = 'usb-micro-ab'
TYPE_OTHER = 'other'
#
# Cables/links
#
@strawberry.enum
class CableTypeEnum(Enum):
TYPE_CAT3 = 'cat3'
TYPE_CAT5 = 'cat5'
TYPE_CAT5E = 'cat5e'
TYPE_CAT6 = 'cat6'
TYPE_CAT6A = 'cat6a'
TYPE_CAT7 = 'cat7'
TYPE_CAT7A = 'cat7a'
TYPE_CAT8 = 'cat8'
TYPE_DAC_ACTIVE = 'dac-active'
TYPE_DAC_PASSIVE = 'dac-passive'
TYPE_MRJ21_TRUNK = 'mrj21-trunk'
TYPE_COAXIAL = 'coaxial'
TYPE_MMF = 'mmf'
TYPE_MMF_OM1 = 'mmf-om1'
TYPE_MMF_OM2 = 'mmf-om2'
TYPE_MMF_OM3 = 'mmf-om3'
TYPE_MMF_OM4 = 'mmf-om4'
TYPE_MMF_OM5 = 'mmf-om5'
TYPE_SMF = 'smf'
TYPE_SMF_OS1 = 'smf-os1'
TYPE_SMF_OS2 = 'smf-os2'
TYPE_AOC = 'aoc'
TYPE_POWER = 'power'
TYPE_USB = 'usb'
@strawberry.enum
class LinkStatusEnum(Enum):
STATUS_CONNECTED = 'connected'
STATUS_PLANNED = 'planned'
STATUS_DECOMMISSIONING = 'decommissioning'
@strawberry.enum
class CableLengthUnitEnum(Enum):
# Metric
UNIT_KILOMETER = 'km'
UNIT_METER = 'm'
UNIT_CENTIMETER = 'cm'
# Imperial
UNIT_MILE = 'mi'
UNIT_FOOT = 'ft'
UNIT_INCH = 'in'
#
# CableTerminations
#
@strawberry.enum
class CableEndEnum(Enum):
SIDE_A = 'A'
SIDE_B = 'B'
#
# PowerFeeds
#
@strawberry.enum
class PowerFeedStatusEnum(Enum):
STATUS_OFFLINE = 'offline'
STATUS_ACTIVE = 'active'
STATUS_PLANNED = 'planned'
STATUS_FAILED = 'failed'
@strawberry.enum
class PowerFeedTypeEnum(Enum):
TYPE_PRIMARY = 'primary'
TYPE_REDUNDANT = 'redundant'
@strawberry.enum
class PowerFeedSupplyEnum(Enum):
SUPPLY_AC = 'ac'
SUPPLY_DC = 'dc'
@strawberry.enum
class PowerFeedPhaseEnum(Enum):
PHASE_SINGLE = 'single-phase'
PHASE_3PHASE = 'three-phase'
#
# VDC
#
@strawberry.enum
class VirtualDeviceContextStatusEnum(Enum):
STATUS_ACTIVE = 'active'
STATUS_PLANNED = 'planned'
STATUS_OFFLINE = 'offline'
#
# InventoryItem
#
@strawberry.enum
class InventoryItemStatusEnum(Enum):
STATUS_OFFLINE = 'offline'
STATUS_ACTIVE = 'active'
STATUS_PLANNED = 'planned'
STATUS_STAGED = 'staged'
STATUS_FAILED = 'failed'
STATUS_DECOMMISSIONING = 'decommissioning'

View File

@ -1,188 +1,26 @@
from enum import Enum
import strawberry import strawberry
__all__ = [ from extras.choices import *
'CustomFieldTypeEnum',
'CustomFieldFilterLogicEnum', __all__ = (
'CustomFieldUIVisibleEnum',
'CustomFieldUIEditableEnum',
'CustomFieldChoiceSetBaseEnum', 'CustomFieldChoiceSetBaseEnum',
'CustomFieldFilterLogicEnum',
'CustomFieldTypeEnum',
'CustomFieldUIEditableEnum',
'CustomFieldUIVisibleEnum',
'CustomLinkButtonClassEnum', 'CustomLinkButtonClassEnum',
'BookmarkOrderingEnum',
'JournalEntryKindEnum',
'LogLevelEnum',
'DurationEnum',
'WebhookHttpMethodEnum',
'ChangeActionEnum',
'DashboardWidgetColorEnum',
'EventRuleActionEnum', 'EventRuleActionEnum',
] 'JournalEntryKindEnum',
'WebhookHttpMethodEnum',
# )
# CustomFields
#
@strawberry.enum CustomFieldChoiceSetBaseEnum = strawberry.enum(CustomFieldChoiceSetBaseChoices.as_enum())
class CustomFieldTypeEnum(Enum): CustomFieldFilterLogicEnum = strawberry.enum(CustomFieldFilterLogicChoices.as_enum())
TYPE_TEXT = 'text' CustomFieldTypeEnum = strawberry.enum(CustomFieldTypeChoices.as_enum())
TYPE_LONGTEXT = 'longtext' CustomFieldUIEditableEnum = strawberry.enum(CustomFieldUIEditableChoices.as_enum())
TYPE_INTEGER = 'integer' CustomFieldUIVisibleEnum = strawberry.enum(CustomFieldUIVisibleChoices.as_enum())
TYPE_DECIMAL = 'decimal' CustomLinkButtonClassEnum = strawberry.enum(CustomLinkButtonClassChoices.as_enum())
TYPE_BOOLEAN = 'boolean' EventRuleActionEnum = strawberry.enum(EventRuleActionChoices.as_enum())
TYPE_DATE = 'date' JournalEntryKindEnum = strawberry.enum(JournalEntryKindChoices.as_enum())
TYPE_DATETIME = 'datetime' WebhookHttpMethodEnum = strawberry.enum(WebhookHttpMethodChoices.as_enum())
TYPE_URL = 'url'
TYPE_JSON = 'json'
TYPE_SELECT = 'select'
TYPE_MULTISELECT = 'multiselect'
TYPE_OBJECT = 'object'
TYPE_MULTIOBJECT = 'multiobject'
@strawberry.enum
class CustomFieldFilterLogicEnum(Enum):
FILTER_DISABLED = 'disabled'
FILTER_LOOSE = 'loose'
FILTER_EXACT = 'exact'
@strawberry.enum
class CustomFieldUIVisibleEnum(Enum):
ALWAYS = 'always'
IF_SET = 'if-set'
HIDDEN = 'hidden'
@strawberry.enum
class CustomFieldUIEditableEnum(Enum):
YES = 'yes'
NO = 'no'
HIDDEN = 'hidden'
@strawberry.enum
class CustomFieldChoiceSetBaseEnum(Enum):
IATA = 'IATA'
ISO_3166 = 'ISO_3166'
UN_LOCODE = 'UN_LOCODE'
#
# CustomLinks
#
@strawberry.enum
class CustomLinkButtonClassEnum(Enum):
LINK = 'ghost-dark'
#
# Bookmarks
#
@strawberry.enum
class BookmarkOrderingEnum(Enum):
ORDERING_NEWEST = '-created'
ORDERING_OLDEST = 'created'
ORDERING_ALPHABETICAL_AZ = 'name'
ORDERING_ALPHABETICAL_ZA = '-name'
#
# Journal entries
#
@strawberry.enum
class JournalEntryKindEnum(Enum):
KIND_INFO = 'info'
KIND_SUCCESS = 'success'
KIND_WARNING = 'warning'
KIND_DANGER = 'danger'
#
# Reports and Scripts
#
@strawberry.enum
class LogLevelEnum(Enum):
LOG_DEBUG = 'debug'
LOG_DEFAULT = 'default'
LOG_INFO = 'info'
LOG_SUCCESS = 'success'
LOG_WARNING = 'warning'
LOG_FAILURE = 'failure'
@strawberry.enum
class DurationEnum(Enum):
HOURLY = 60
TWELVE_HOURS = 720
DAILY = 1440
WEEKLY = 10080
THIRTY_DAYS = 43200
#
# Webhooks
#
@strawberry.enum
class WebhookHttpMethodEnum(Enum):
METHOD_GET = 'GET'
METHOD_POST = 'POST'
METHOD_PUT = 'PUT'
METHOD_PATCH = 'PATCH'
METHOD_DELETE = 'DELETE'
#
# Staging
#
@strawberry.enum
class ChangeActionEnum(Enum):
ACTION_CREATE = 'create'
ACTION_UPDATE = 'update'
ACTION_DELETE = 'delete'
#
# Dashboard widgets
#
@strawberry.enum
class DashboardWidgetColorEnum(Enum):
BLUE = 'blue'
INDIGO = 'indigo'
PURPLE = 'purple'
PINK = 'pink'
RED = 'red'
ORANGE = 'orange'
YELLOW = 'yellow'
GREEN = 'green'
TEAL = 'teal'
CYAN = 'cyan'
GRAY = 'gray'
BLACK = 'black'
WHITE = 'white'
#
# Event Rules
#
@strawberry.enum
class EventRuleActionEnum(Enum):
WEBHOOK = 'webhook'
SCRIPT = 'script'
NOTIFICATION = 'notification'

View File

@ -184,7 +184,9 @@ class CustomLinkFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin):
strawberry_django.filter_field() strawberry_django.filter_field()
) )
group_name: FilterLookup[str] | None = strawberry_django.filter_field() group_name: FilterLookup[str] | None = strawberry_django.filter_field()
button_class: FilterLookup[str] | None = strawberry_django.filter_field() button_class: Annotated['CustomLinkButtonClassEnum', strawberry.lazy('extras.graphql.enums')] | None = (
strawberry_django.filter_field()
)
new_window: FilterLookup[bool] | None = strawberry_django.filter_field() new_window: FilterLookup[bool] | None = strawberry_django.filter_field()

View File

@ -1,123 +1,27 @@
from enum import Enum
import strawberry import strawberry
__all__ = [ from ipam.choices import *
'IPAddressFamilyEnum',
'PrefixStatusEnum', __all__ = (
'IPRangeStatusEnum',
'IPAddressStatusEnum',
'IPAddressRoleEnum',
'FHRPGroupProtocolEnum',
'FHRPGroupAuthTypeEnum', 'FHRPGroupAuthTypeEnum',
'FHRPGroupProtocolEnum',
'IPAddressFamilyEnum',
'IPAddressRoleEnum',
'IPAddressStatusEnum',
'IPRangeStatusEnum',
'PrefixStatusEnum',
'ServiceProtocolEnum',
'VLANStatusEnum', 'VLANStatusEnum',
'VLANQinQRoleEnum', 'VLANQinQRoleEnum',
'ServiceProtocolEnum', )
]
FHRPGroupAuthTypeEnum = strawberry.enum(FHRPGroupAuthTypeChoices.as_enum())
@strawberry.enum FHRPGroupProtocolEnum = strawberry.enum(FHRPGroupProtocolChoices.as_enum())
class IPAddressFamilyEnum(Enum): IPAddressFamilyEnum = strawberry.enum(IPAddressFamilyChoices.as_enum())
FAMILY_4 = 4 IPAddressRoleEnum = strawberry.enum(IPAddressRoleChoices.as_enum())
FAMILY_6 = 6 IPAddressStatusEnum = strawberry.enum(IPAddressStatusChoices.as_enum())
IPRangeStatusEnum = strawberry.enum(IPRangeStatusChoices.as_enum())
PrefixStatusEnum = strawberry.enum(PrefixStatusChoices.as_enum())
# ServiceProtocolEnum = strawberry.enum(ServiceProtocolChoices.as_enum())
# Prefixes VLANStatusEnum = strawberry.enum(VLANStatusChoices.as_enum())
# VLANQinQRoleEnum = strawberry.enum(VLANQinQRoleChoices.as_enum())
@strawberry.enum
class PrefixStatusEnum(Enum):
STATUS_CONTAINER = 'container'
STATUS_ACTIVE = 'active'
STATUS_RESERVED = 'reserved'
STATUS_DEPRECATED = 'deprecated'
#
# IP Ranges
#
@strawberry.enum
class IPRangeStatusEnum(Enum):
STATUS_ACTIVE = 'active'
STATUS_RESERVED = 'reserved'
STATUS_DEPRECATED = 'deprecated'
#
# IP Addresses
#
@strawberry.enum
class IPAddressStatusEnum(Enum):
STATUS_ACTIVE = 'active'
STATUS_RESERVED = 'reserved'
STATUS_DEPRECATED = 'deprecated'
STATUS_DHCP = 'dhcp'
STATUS_SLAAC = 'slaac'
@strawberry.enum
class IPAddressRoleEnum(Enum):
ROLE_LOOPBACK = 'loopback'
ROLE_SECONDARY = 'secondary'
ROLE_ANYCAST = 'anycast'
ROLE_VIP = 'vip'
ROLE_VRRP = 'vrrp'
ROLE_HSRP = 'hsrp'
ROLE_GLBP = 'glbp'
ROLE_CARP = 'carp'
#
# FHRP
#
@strawberry.enum
class FHRPGroupProtocolEnum(Enum):
PROTOCOL_VRRP2 = 'vrrp2'
PROTOCOL_VRRP3 = 'vrrp3'
PROTOCOL_HSRP = 'hsrp'
PROTOCOL_GLBP = 'glbp'
PROTOCOL_CARP = 'carp'
PROTOCOL_CLUSTERXL = 'clusterxl'
PROTOCOL_OTHER = 'other'
@strawberry.enum
class FHRPGroupAuthTypeEnum(Enum):
AUTHENTICATION_PLAINTEXT = 'plaintext'
AUTHENTICATION_MD5 = 'md5'
#
# VLANs
#
@strawberry.enum
class VLANStatusEnum(Enum):
STATUS_ACTIVE = 'active'
STATUS_RESERVED = 'reserved'
STATUS_DEPRECATED = 'deprecated'
@strawberry.enum
class VLANQinQRoleEnum(Enum):
ROLE_SERVICE = 'svlan'
ROLE_CUSTOMER = 'cvlan'
#
# Services
#
@strawberry.enum
class ServiceProtocolEnum(Enum):
PROTOCOL_TCP = 'tcp'
PROTOCOL_UDP = 'udp'
PROTOCOL_SCTP = 'sctp'

View File

@ -1,112 +1,13 @@
from enum import Enum
import strawberry import strawberry
__all__ = [ from netbox.choices import *
__all__ = (
'ColorEnum', 'ColorEnum',
'ButtonColorEnum',
'ImportMethodEnumEnum',
'ImportFormatEnum',
'DistanceUnitEnum', 'DistanceUnitEnum',
'WeightUnitEnum', 'WeightUnitEnum',
] )
# ColorEnum = strawberry.enum(ColorChoices.as_enum())
# Generic color choices DistanceUnitEnum = strawberry.enum(DistanceUnitChoices.as_enum())
# WeightUnitEnum = strawberry.enum(WeightUnitChoices.as_enum())
@strawberry.enum
class ColorEnum(Enum):
COLOR_DARK_RED = 'aa1409'
COLOR_RED = 'f44336'
COLOR_PINK = 'e91e63'
COLOR_ROSE = 'ffe4e1'
COLOR_FUCHSIA = 'ff66ff'
COLOR_PURPLE = '9c27b0'
COLOR_DARK_PURPLE = '673ab7'
COLOR_INDIGO = '3f51b5'
COLOR_BLUE = '2196f3'
COLOR_LIGHT_BLUE = '03a9f4'
COLOR_CYAN = '00bcd4'
COLOR_TEAL = '009688'
COLOR_AQUA = '00ffff'
COLOR_DARK_GREEN = '2f6a31'
COLOR_GREEN = '4caf50'
COLOR_LIGHT_GREEN = '8bc34a'
COLOR_LIME = 'cddc39'
COLOR_YELLOW = 'ffeb3b'
COLOR_AMBER = 'ffc107'
COLOR_ORANGE = 'ff9800'
COLOR_DARK_ORANGE = 'ff5722'
COLOR_BROWN = '795548'
COLOR_LIGHT_GREY = 'c0c0c0'
COLOR_GREY = '9e9e9e'
COLOR_DARK_GREY = '607d8b'
COLOR_BLACK = '111111'
COLOR_WHITE = 'ffffff'
#
# Button color choices
#
@strawberry.enum
class ButtonColorEnum(Enum):
DEFAULT = 'default'
BLUE = 'blue'
INDIGO = 'indigo'
PURPLE = 'purple'
PINK = 'pink'
RED = 'red'
ORANGE = 'orange'
YELLOW = 'yellow'
GREEN = 'green'
TEAL = 'teal'
CYAN = 'cyan'
GRAY = 'gray'
GREY = 'gray' # Backward compatability for <3.2
BLACK = 'black'
WHITE = 'white'
#
# Import
#
@strawberry.enum
class ImportMethodEnumEnum(Enum):
DIRECT = 'direct'
UPLOAD = 'upload'
DATA_FILE = 'datafile'
@strawberry.enum
class ImportFormatEnum(Enum):
AUTO = 'auto'
CSV = 'csv'
JSON = 'json'
YAML = 'yaml'
@strawberry.enum
class DistanceUnitEnum(Enum):
# Metric
UNIT_KILOMETER = 'km'
UNIT_METER = 'm'
# Imperial
UNIT_MILE = 'mi'
UNIT_FOOT = 'ft'
@strawberry.enum
class WeightUnitEnum(Enum):
# Metric
UNIT_KILOGRAM = 'kg'
UNIT_GRAM = 'g'
# Imperial
UNIT_POUND = 'lb'
UNIT_OUNCE = 'oz'

View File

@ -0,0 +1,9 @@
import strawberry
from tenancy.choices import *
__all__ = (
'ContactPriorityEnum',
)
ContactPriorityEnum = strawberry.enum(ContactPriorityChoices.as_enum())

View File

@ -16,6 +16,7 @@ from tenancy import models
from .filter_mixins import ContactFilterMixin from .filter_mixins import ContactFilterMixin
if TYPE_CHECKING: if TYPE_CHECKING:
from .enums import *
from netbox.graphql.filter_lookups import TreeNodeFilter from netbox.graphql.filter_lookups import TreeNodeFilter
from circuits.graphql.filters import * from circuits.graphql.filters import *
from dcim.graphql.filters import * from dcim.graphql.filters import *
@ -158,4 +159,6 @@ class ContactAssignmentFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLo
strawberry_django.filter_field() strawberry_django.filter_field()
) )
role_id: ID | None = strawberry_django.filter_field() role_id: ID | None = strawberry_django.filter_field()
priority: FilterLookup[str] | None = strawberry_django.filter_field() priority: Annotated['ContactPriorityEnum', strawberry.lazy('tenancy.graphql.enums')] | None = (
strawberry_django.filter_field()
)

View File

@ -34,7 +34,7 @@ __all__ = (
@strawberry_django.type(models.Tenant, fields='__all__', filters=TenantFilter) @strawberry_django.type(models.Tenant, fields='__all__', filters=TenantFilter)
class TenantType(NetBoxObjectType): class TenantType(NetBoxObjectType):
group: Annotated['TenantGroupType', strawberry.lazy('tenancy.graphql.types')] group: Annotated['TenantGroupType', strawberry.lazy('tenancy.graphql.types')] | None
contacts: List[Annotated['ContactType', strawberry.lazy('tenancy.graphql.types')]] contacts: List[Annotated['ContactType', strawberry.lazy('tenancy.graphql.types')]]
asns: List[Annotated['ASNType', strawberry.lazy('ipam.graphql.types')]] asns: List[Annotated['ASNType', strawberry.lazy('ipam.graphql.types')]]
circuits: List[Annotated['CircuitType', strawberry.lazy('circuits.graphql.types')]] circuits: List[Annotated['CircuitType', strawberry.lazy('circuits.graphql.types')]]

View File

@ -1,3 +1,5 @@
import enum
from django.conf import settings from django.conf import settings
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -65,6 +67,23 @@ class ChoiceSet(metaclass=ChoiceSetMeta):
def values(cls): def values(cls):
return [c[0] for c in unpack_grouped_choices(cls._choices)] return [c[0] for c in unpack_grouped_choices(cls._choices)]
@classmethod
def as_enum(cls, name=None):
"""
Return the ChoiceSet as an Enum. If no name is provided, "Choices" will be stripped from the class name (if
present) and "Enum" will be appended. For example, "CircuitStatusChoices" will become "CircuitStatusEnum".
"""
name = name or f"{cls.__name__.split('Choices')[0]}Enum"
data = {}
choices = cls.values()
for attr in dir(cls):
value = getattr(cls, attr)
if attr.isupper() and value in choices:
data[attr] = value
return enum.Enum(name, data)
def unpack_grouped_choices(choices): def unpack_grouped_choices(choices):
""" """

View File

@ -1,33 +1,11 @@
from enum import Enum
import strawberry import strawberry
__all__ = ['ClusterStatusEnum', 'VirtualMachineStatusEnum'] from virtualization.choices import *
__all__ = (
'ClusterStatusEnum',
'VirtualMachineStatusEnum',
)
# ClusterStatusEnum = strawberry.enum(ClusterStatusChoices.as_enum())
# Clusters VirtualMachineStatusEnum = strawberry.enum(VirtualMachineStatusChoices.as_enum())
#
@strawberry.enum
class ClusterStatusEnum(Enum):
STATUS_PLANNED = 'planned'
STATUS_STAGING = 'staging'
STATUS_ACTIVE = 'active'
STATUS_DECOMMISSIONING = 'decommissioning'
STATUS_OFFLINE = 'offline'
#
# VirtualMachines
#
@strawberry.enum
class VirtualMachineStatusEnum(Enum):
STATUS_OFFLINE = 'offline'
STATUS_ACTIVE = 'active'
STATUS_PLANNED = 'planned'
STATUS_STAGED = 'staged'
STATUS_FAILED = 'failed'
STATUS_DECOMMISSIONING = 'decommissioning'

View File

@ -1,159 +1,31 @@
from enum import Enum
import strawberry import strawberry
__all__ = [ from vpn.choices import *
'TunnelStatusEnum',
'TunnelEncapsulationEnum', __all__ = (
'TunnelTerminationTypeEnum',
'TunnelTerminationRoleEnum',
'IKEVersionEnum',
'IKEModeEnum',
'AuthenticationMethodEnum',
'IPSecModeEnum',
'EncryptionAlgorithmEnum',
'AuthenticationAlgorithmEnum', 'AuthenticationAlgorithmEnum',
'AuthenticationMethodEnum',
'DHGroupEnum', 'DHGroupEnum',
'EncryptionAlgorithmEnum',
'IKEModeEnum',
'IKEVersionEnum',
'IPSecModeEnum',
'L2VPNTypeEnum', 'L2VPNTypeEnum',
] 'TunnelEncapsulationEnum',
'TunnelStatusEnum',
'TunnelTerminationRoleEnum',
'TunnelTerminationTypeEnum',
)
# AuthenticationAlgorithmEnum = strawberry.enum(AuthenticationAlgorithmChoices.as_enum())
# Tunnels AuthenticationMethodEnum = strawberry.enum(AuthenticationMethodChoices.as_enum())
# DHGroupEnum = strawberry.enum(DHGroupChoices.as_enum())
EncryptionAlgorithmEnum = strawberry.enum(EncryptionAlgorithmChoices.as_enum())
IKEModeEnum = strawberry.enum(IKEModeChoices.as_enum())
@strawberry.enum IKEVersionEnum = strawberry.enum(IKEVersionChoices.as_enum())
class TunnelStatusEnum(Enum): IPSecModeEnum = strawberry.enum(IPSecModeChoices.as_enum())
STATUS_PLANNED = 'planned' L2VPNTypeEnum = strawberry.enum(L2VPNTypeChoices.as_enum())
STATUS_ACTIVE = 'active' TunnelEncapsulationEnum = strawberry.enum(TunnelEncapsulationChoices.as_enum())
STATUS_DISABLED = 'disabled' TunnelStatusEnum = strawberry.enum(TunnelStatusChoices.as_enum())
TunnelTerminationRoleEnum = strawberry.enum(TunnelTerminationRoleChoices.as_enum())
TunnelTerminationTypeEnum = strawberry.enum(TunnelTerminationTypeChoices.as_enum())
@strawberry.enum
class TunnelEncapsulationEnum(Enum):
ENCAP_GRE = 'gre'
ENCAP_IPSEC_TRANSPORT = 'ipsec-transport'
ENCAP_IPSEC_TUNNEL = 'ipsec-tunnel'
ENCAP_IP_IP = 'ip-ip'
ENCAP_L2TP = 'l2tp'
ENCAP_OPENVPN = 'openvpn'
ENCAP_PPTP = 'pptp'
ENCAP_WIREGUARD = 'wireguard'
@strawberry.enum
class TunnelTerminationTypeEnum(Enum):
# For TunnelCreateForm
TYPE_DEVICE = 'dcim.device'
TYPE_VIRTUALMACHINE = 'virtualization.virtualmachine'
@strawberry.enum
class TunnelTerminationRoleEnum(Enum):
ROLE_PEER = 'peer'
ROLE_HUB = 'hub'
ROLE_SPOKE = 'spoke'
#
# Crypto
#
@strawberry.enum
class IKEVersionEnum(Enum):
VERSION_1 = 1
VERSION_2 = 2
@strawberry.enum
class IKEModeEnum(Enum):
AGGRESSIVE = 'aggressive'
MAIN = 'main'
@strawberry.enum
class AuthenticationMethodEnum(Enum):
PRESHARED_KEYS = 'preshared-keys'
CERTIFICATES = 'certificates'
RSA_SIGNATURES = 'rsa-signatures'
DSA_SIGNATURES = 'dsa-signatures'
@strawberry.enum
class IPSecModeEnum(Enum):
ESP = 'esp'
AH = 'ah'
@strawberry.enum
class EncryptionAlgorithmEnum(Enum):
ENCRYPTION_AES128_CBC = 'aes-128-cbc'
ENCRYPTION_AES128_GCM = 'aes-128-gcm'
ENCRYPTION_AES192_CBC = 'aes-192-cbc'
ENCRYPTION_AES192_GCM = 'aes-192-gcm'
ENCRYPTION_AES256_CBC = 'aes-256-cbc'
ENCRYPTION_AES256_GCM = 'aes-256-gcm'
ENCRYPTION_3DES = '3des-cbc'
ENCRYPTION_DES = 'des-cbc'
@strawberry.enum
class AuthenticationAlgorithmEnum(Enum):
AUTH_HMAC_SHA1 = 'hmac-sha1'
AUTH_HMAC_SHA256 = 'hmac-sha256'
AUTH_HMAC_SHA384 = 'hmac-sha384'
AUTH_HMAC_SHA512 = 'hmac-sha512'
AUTH_HMAC_MD5 = 'hmac-md5'
@strawberry.enum
class DHGroupEnum(Enum):
# https://www.iana.org/assignments/ikev2-parameters/ikev2-parameters.xhtml#ikev2-parameters-8
GROUP_1 = 1 # 768-bit MODP
GROUP_2 = 2 # 1024-but MODP
# Groups 3-4 reserved
GROUP_5 = 5 # 1536-bit MODP
# Groups 6-13 unassigned
GROUP_14 = 14 # 2048-bit MODP
GROUP_15 = 15 # 3072-bit MODP
GROUP_16 = 16 # 4096-bit MODP
GROUP_17 = 17 # 6144-bit MODP
GROUP_18 = 18 # 8192-bit MODP
GROUP_19 = 19 # 256-bit random ECP
GROUP_20 = 20 # 384-bit random ECP
GROUP_21 = 21 # 521-bit random ECP (521 is not a typo)
GROUP_22 = 22 # 1024-bit MODP w/160-bit prime
GROUP_23 = 23 # 2048-bit MODP w/224-bit prime
GROUP_24 = 24 # 2048-bit MODP w/256-bit prime
GROUP_25 = 25 # 192-bit ECP
GROUP_26 = 26 # 224-bit ECP
GROUP_27 = 27 # brainpoolP224r1
GROUP_28 = 28 # brainpoolP256r1
GROUP_29 = 29 # brainpoolP384r1
GROUP_30 = 30 # brainpoolP512r1
GROUP_31 = 31 # Curve25519
GROUP_32 = 32 # Curve448
GROUP_33 = 33 # GOST3410_2012_256
GROUP_34 = 34 # GOST3410_2012_512
#
# L2VPN
#
@strawberry.enum
class L2VPNTypeEnum(Enum):
TYPE_VPLS = 'vpls'
TYPE_VPWS = 'vpws'
TYPE_EPL = 'epl'
TYPE_EVPL = 'evpl'
TYPE_EPLAN = 'ep-lan'
TYPE_EVPLAN = 'evp-lan'
TYPE_EPTREE = 'ep-tree'
TYPE_EVPTREE = 'evp-tree'
TYPE_VXLAN = 'vxlan'
TYPE_VXLAN_EVPN = 'vxlan-evpn'
TYPE_MPLS_EVPN = 'mpls-evpn'
TYPE_PBB_EVPN = 'pbb-evpn'
TYPE_EVPN_VPWS = 'evpn-vpws'

View File

@ -1,247 +1,17 @@
from enum import Enum
import strawberry import strawberry
__all__ = [ from wireless.choices import *
'WirelessRoleEnum',
'WirelessLANStatusEnum', __all__ = (
'WirelessChannelEnum',
'WirelessAuthTypeEnum',
'WirelessAuthCipherEnum', 'WirelessAuthCipherEnum',
] 'WirelessAuthTypeEnum',
'WirelessChannelEnum',
'WirelessLANStatusEnum',
'WirelessRoleEnum',
)
WirelessAuthCipherEnum = strawberry.enum(WirelessAuthCipherChoices.as_enum())
@strawberry.enum WirelessAuthTypeEnum = strawberry.enum(WirelessAuthTypeChoices.as_enum())
class WirelessRoleEnum(Enum): WirelessChannelEnum = strawberry.enum(WirelessChannelChoices.as_enum())
ROLE_AP = 'ap' WirelessLANStatusEnum = strawberry.enum(WirelessLANStatusChoices.as_enum())
ROLE_STATION = 'station' WirelessRoleEnum = strawberry.enum(WirelessRoleChoices.as_enum())
@strawberry.enum
class WirelessLANStatusEnum(Enum):
STATUS_ACTIVE = 'active'
STATUS_RESERVED = 'reserved'
STATUS_DISABLED = 'disabled'
STATUS_DEPRECATED = 'deprecated'
@strawberry.enum
class WirelessChannelEnum(Enum):
# 2.4 GHz
CHANNEL_24G_1 = '2.4g-1-2412-22'
CHANNEL_24G_2 = '2.4g-2-2417-22'
CHANNEL_24G_3 = '2.4g-3-2422-22'
CHANNEL_24G_4 = '2.4g-4-2427-22'
CHANNEL_24G_5 = '2.4g-5-2432-22'
CHANNEL_24G_6 = '2.4g-6-2437-22'
CHANNEL_24G_7 = '2.4g-7-2442-22'
CHANNEL_24G_8 = '2.4g-8-2447-22'
CHANNEL_24G_9 = '2.4g-9-2452-22'
CHANNEL_24G_10 = '2.4g-10-2457-22'
CHANNEL_24G_11 = '2.4g-11-2462-22'
CHANNEL_24G_12 = '2.4g-12-2467-22'
CHANNEL_24G_13 = '2.4g-13-2472-22'
# 5 GHz
CHANNEL_5G_32 = '5g-32-5160-20'
CHANNEL_5G_34 = '5g-34-5170-40'
CHANNEL_5G_36 = '5g-36-5180-20'
CHANNEL_5G_38 = '5g-38-5190-40'
CHANNEL_5G_40 = '5g-40-5200-20'
CHANNEL_5G_42 = '5g-42-5210-80'
CHANNEL_5G_44 = '5g-44-5220-20'
CHANNEL_5G_46 = '5g-46-5230-40'
CHANNEL_5G_48 = '5g-48-5240-20'
CHANNEL_5G_50 = '5g-50-5250-160'
CHANNEL_5G_52 = '5g-52-5260-20'
CHANNEL_5G_54 = '5g-54-5270-40'
CHANNEL_5G_56 = '5g-56-5280-20'
CHANNEL_5G_58 = '5g-58-5290-80'
CHANNEL_5G_60 = '5g-60-5300-20'
CHANNEL_5G_62 = '5g-62-5310-40'
CHANNEL_5G_64 = '5g-64-5320-20'
CHANNEL_5G_100 = '5g-100-5500-20'
CHANNEL_5G_102 = '5g-102-5510-40'
CHANNEL_5G_104 = '5g-104-5520-20'
CHANNEL_5G_106 = '5g-106-5530-80'
CHANNEL_5G_108 = '5g-108-5540-20'
CHANNEL_5G_110 = '5g-110-5550-40'
CHANNEL_5G_112 = '5g-112-5560-20'
CHANNEL_5G_114 = '5g-114-5570-160'
CHANNEL_5G_116 = '5g-116-5580-20'
CHANNEL_5G_118 = '5g-118-5590-40'
CHANNEL_5G_120 = '5g-120-5600-20'
CHANNEL_5G_122 = '5g-122-5610-80'
CHANNEL_5G_124 = '5g-124-5620-20'
CHANNEL_5G_126 = '5g-126-5630-40'
CHANNEL_5G_128 = '5g-128-5640-20'
CHANNEL_5G_132 = '5g-132-5660-20'
CHANNEL_5G_134 = '5g-134-5670-40'
CHANNEL_5G_136 = '5g-136-5680-20'
CHANNEL_5G_138 = '5g-138-5690-80'
CHANNEL_5G_140 = '5g-140-5700-20'
CHANNEL_5G_142 = '5g-142-5710-40'
CHANNEL_5G_144 = '5g-144-5720-20'
CHANNEL_5G_149 = '5g-149-5745-20'
CHANNEL_5G_151 = '5g-151-5755-40'
CHANNEL_5G_153 = '5g-153-5765-20'
CHANNEL_5G_155 = '5g-155-5775-80'
CHANNEL_5G_157 = '5g-157-5785-20'
CHANNEL_5G_159 = '5g-159-5795-40'
CHANNEL_5G_161 = '5g-161-5805-20'
CHANNEL_5G_163 = '5g-163-5815-160'
CHANNEL_5G_165 = '5g-165-5825-20'
CHANNEL_5G_167 = '5g-167-5835-40'
CHANNEL_5G_169 = '5g-169-5845-20'
CHANNEL_5G_171 = '5g-171-5855-80'
CHANNEL_5G_173 = '5g-173-5865-20'
CHANNEL_5G_175 = '5g-175-5875-40'
CHANNEL_5G_177 = '5g-177-5885-20'
# 6 GHz
CHANNEL_6G_1 = '6g-1-5955-20'
CHANNEL_6G_3 = '6g-3-5965-40'
CHANNEL_6G_5 = '6g-5-5975-20'
CHANNEL_6G_7 = '6g-7-5985-80'
CHANNEL_6G_9 = '6g-9-5995-20'
CHANNEL_6G_11 = '6g-11-6005-40'
CHANNEL_6G_13 = '6g-13-6015-20'
CHANNEL_6G_15 = '6g-15-6025-160'
CHANNEL_6G_17 = '6g-17-6035-20'
CHANNEL_6G_19 = '6g-19-6045-40'
CHANNEL_6G_21 = '6g-21-6055-20'
CHANNEL_6G_23 = '6g-23-6065-80'
CHANNEL_6G_25 = '6g-25-6075-20'
CHANNEL_6G_27 = '6g-27-6085-40'
CHANNEL_6G_29 = '6g-29-6095-20'
CHANNEL_6G_31 = '6g-31-6105-320'
CHANNEL_6G_33 = '6g-33-6115-20'
CHANNEL_6G_35 = '6g-35-6125-40'
CHANNEL_6G_37 = '6g-37-6135-20'
CHANNEL_6G_39 = '6g-39-6145-80'
CHANNEL_6G_41 = '6g-41-6155-20'
CHANNEL_6G_43 = '6g-43-6165-40'
CHANNEL_6G_45 = '6g-45-6175-20'
CHANNEL_6G_47 = '6g-47-6185-160'
CHANNEL_6G_49 = '6g-49-6195-20'
CHANNEL_6G_51 = '6g-51-6205-40'
CHANNEL_6G_53 = '6g-53-6215-20'
CHANNEL_6G_55 = '6g-55-6225-80'
CHANNEL_6G_57 = '6g-57-6235-20'
CHANNEL_6G_59 = '6g-59-6245-40'
CHANNEL_6G_61 = '6g-61-6255-20'
CHANNEL_6G_65 = '6g-65-6275-20'
CHANNEL_6G_67 = '6g-67-6285-40'
CHANNEL_6G_69 = '6g-69-6295-20'
CHANNEL_6G_71 = '6g-71-6305-80'
CHANNEL_6G_73 = '6g-73-6315-20'
CHANNEL_6G_75 = '6g-75-6325-40'
CHANNEL_6G_77 = '6g-77-6335-20'
CHANNEL_6G_79 = '6g-79-6345-160'
CHANNEL_6G_81 = '6g-81-6355-20'
CHANNEL_6G_83 = '6g-83-6365-40'
CHANNEL_6G_85 = '6g-85-6375-20'
CHANNEL_6G_87 = '6g-87-6385-80'
CHANNEL_6G_89 = '6g-89-6395-20'
CHANNEL_6G_91 = '6g-91-6405-40'
CHANNEL_6G_93 = '6g-93-6415-20'
CHANNEL_6G_95 = '6g-95-6425-320'
CHANNEL_6G_97 = '6g-97-6435-20'
CHANNEL_6G_99 = '6g-99-6445-40'
CHANNEL_6G_101 = '6g-101-6455-20'
CHANNEL_6G_103 = '6g-103-6465-80'
CHANNEL_6G_105 = '6g-105-6475-20'
CHANNEL_6G_107 = '6g-107-6485-40'
CHANNEL_6G_109 = '6g-109-6495-20'
CHANNEL_6G_111 = '6g-111-6505-160'
CHANNEL_6G_113 = '6g-113-6515-20'
CHANNEL_6G_115 = '6g-115-6525-40'
CHANNEL_6G_117 = '6g-117-6535-20'
CHANNEL_6G_119 = '6g-119-6545-80'
CHANNEL_6G_121 = '6g-121-6555-20'
CHANNEL_6G_123 = '6g-123-6565-40'
CHANNEL_6G_125 = '6g-125-6575-20'
CHANNEL_6G_129 = '6g-129-6595-20'
CHANNEL_6G_131 = '6g-131-6605-40'
CHANNEL_6G_133 = '6g-133-6615-20'
CHANNEL_6G_135 = '6g-135-6625-80'
CHANNEL_6G_137 = '6g-137-6635-20'
CHANNEL_6G_139 = '6g-139-6645-40'
CHANNEL_6G_141 = '6g-141-6655-20'
CHANNEL_6G_143 = '6g-143-6665-160'
CHANNEL_6G_145 = '6g-145-6675-20'
CHANNEL_6G_147 = '6g-147-6685-40'
CHANNEL_6G_149 = '6g-149-6695-20'
CHANNEL_6G_151 = '6g-151-6705-80'
CHANNEL_6G_153 = '6g-153-6715-20'
CHANNEL_6G_155 = '6g-155-6725-40'
CHANNEL_6G_157 = '6g-157-6735-20'
CHANNEL_6G_159 = '6g-159-6745-320'
CHANNEL_6G_161 = '6g-161-6755-20'
CHANNEL_6G_163 = '6g-163-6765-40'
CHANNEL_6G_165 = '6g-165-6775-20'
CHANNEL_6G_167 = '6g-167-6785-80'
CHANNEL_6G_169 = '6g-169-6795-20'
CHANNEL_6G_171 = '6g-171-6805-40'
CHANNEL_6G_173 = '6g-173-6815-20'
CHANNEL_6G_175 = '6g-175-6825-160'
CHANNEL_6G_177 = '6g-177-6835-20'
CHANNEL_6G_179 = '6g-179-6845-40'
CHANNEL_6G_181 = '6g-181-6855-20'
CHANNEL_6G_183 = '6g-183-6865-80'
CHANNEL_6G_185 = '6g-185-6875-20'
CHANNEL_6G_187 = '6g-187-6885-40'
CHANNEL_6G_189 = '6g-189-6895-20'
CHANNEL_6G_193 = '6g-193-6915-20'
CHANNEL_6G_195 = '6g-195-6925-40'
CHANNEL_6G_197 = '6g-197-6935-20'
CHANNEL_6G_199 = '6g-199-6945-80'
CHANNEL_6G_201 = '6g-201-6955-20'
CHANNEL_6G_203 = '6g-203-6965-40'
CHANNEL_6G_205 = '6g-205-6975-20'
CHANNEL_6G_207 = '6g-207-6985-160'
CHANNEL_6G_209 = '6g-209-6995-20'
CHANNEL_6G_211 = '6g-211-7005-40'
CHANNEL_6G_213 = '6g-213-7015-20'
CHANNEL_6G_215 = '6g-215-7025-80'
CHANNEL_6G_217 = '6g-217-7035-20'
CHANNEL_6G_219 = '6g-219-7045-40'
CHANNEL_6G_221 = '6g-221-7055-20'
CHANNEL_6G_225 = '6g-225-7075-20'
CHANNEL_6G_227 = '6g-227-7085-40'
CHANNEL_6G_229 = '6g-229-7095-20'
CHANNEL_6G_233 = '6g-233-7115-20'
# 60 GHz
CHANNEL_60G_1 = '60g-1-58320-2160'
CHANNEL_60G_2 = '60g-2-60480-2160'
CHANNEL_60G_3 = '60g-3-62640-2160'
CHANNEL_60G_4 = '60g-4-64800-2160'
CHANNEL_60G_5 = '60g-5-66960-2160'
CHANNEL_60G_6 = '60g-6-69120-2160'
CHANNEL_60G_9 = '60g-9-59400-4320'
CHANNEL_60G_10 = '60g-10-61560-4320'
CHANNEL_60G_11 = '60g-11-63720-4320'
CHANNEL_60G_12 = '60g-12-65880-4320'
CHANNEL_60G_13 = '60g-13-68040-4320'
CHANNEL_60G_17 = '60g-17-60480-6480'
CHANNEL_60G_18 = '60g-18-62640-6480'
CHANNEL_60G_19 = '60g-19-64800-6480'
CHANNEL_60G_20 = '60g-20-66960-6480'
CHANNEL_60G_25 = '60g-25-61560-6480'
CHANNEL_60G_26 = '60g-26-63720-6480'
CHANNEL_60G_27 = '60g-27-65880-6480'
@strawberry.enum
class WirelessAuthTypeEnum(Enum):
TYPE_OPEN = 'open'
TYPE_WEP = 'wep'
TYPE_WPA_PERSONAL = 'wpa-personal'
TYPE_WPA_ENTERPRISE = 'wpa-enterprise'
@strawberry.enum
class WirelessAuthCipherEnum(Enum):
CIPHER_AUTO = 'auto'
CIPHER_TKIP = 'tkip'
CIPHER_AES = 'aes'