| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602 |
- from typing import Annotated, List, Union
- import strawberry
- import strawberry_django
- from dcim import models
- from extras.graphql.mixins import (
- ChangelogMixin,
- ConfigContextMixin,
- ContactsMixin,
- CustomFieldsMixin,
- ImageAttachmentsMixin,
- TagsMixin,
- )
- from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin
- from netbox.graphql.scalars import BigInt
- from netbox.graphql.types import (
- BaseObjectType,
- NetBoxObjectType,
- OrganizationalObjectType,
- )
- from .filters import *
- from .mixins import CabledObjectMixin, PathEndpointMixin
- __all__ = (
- 'CableType',
- 'ComponentObjectType',
- 'ConsolePortType',
- 'ConsolePortTemplateType',
- 'ConsoleServerPortType',
- 'ConsoleServerPortTemplateType',
- 'DeviceType',
- 'DeviceBayType',
- 'DeviceBayTemplateType',
- 'DeviceRoleType',
- 'DeviceTypeType',
- 'FrontPortType',
- 'FrontPortTemplateType',
- 'InterfaceType',
- 'InterfaceTemplateType',
- 'InventoryItemType',
- 'InventoryItemRoleType',
- 'InventoryItemTemplateType',
- 'LocationType',
- 'ManufacturerType',
- 'ModuleType',
- 'ModuleBayType',
- 'ModuleBayTemplateType',
- 'ModuleTypeType',
- 'PlatformType',
- 'PowerFeedType',
- 'PowerOutletType',
- 'PowerOutletTemplateType',
- 'PowerPanelType',
- 'PowerPortType',
- 'PowerPortTemplateType',
- 'RackType',
- 'RackReservationType',
- 'RackRoleType',
- 'RearPortType',
- 'RearPortTemplateType',
- 'RegionType',
- 'SiteType',
- 'SiteGroupType',
- 'VirtualChassisType',
- 'VirtualDeviceContextType',
- )
- #
- # Base types
- #
- @strawberry.type
- class ComponentObjectType(
- ChangelogMixin,
- CustomFieldsMixin,
- TagsMixin,
- BaseObjectType
- ):
- """
- Base type for device/VM components
- """
- _name: str
- class ComponentTemplateObjectType(
- ChangelogMixin,
- BaseObjectType
- ):
- """
- Base type for device/VM components
- """
- _name: str
- #
- # Model types
- #
- @strawberry_django.type(
- models.CableTermination,
- exclude=('termination_type', 'termination_id'),
- filters=CableTerminationFilter
- )
- class CableTerminationType(NetBoxObjectType):
- @strawberry_django.field
- def termination(self) -> List[Annotated[Union[
- Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')],
- Annotated["ConsolePortType", strawberry.lazy('dcim.graphql.types')],
- Annotated["ConsoleServerPortType", strawberry.lazy('dcim.graphql.types')],
- Annotated["FrontPortType", strawberry.lazy('dcim.graphql.types')],
- Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')],
- Annotated["PowerFeedType", strawberry.lazy('dcim.graphql.types')],
- Annotated["PowerOutletType", strawberry.lazy('dcim.graphql.types')],
- Annotated["PowerPortType", strawberry.lazy('dcim.graphql.types')],
- Annotated["RearPortType", strawberry.lazy('dcim.graphql.types')],
- ], strawberry.union("CableTerminationTerminationType")]]:
- return self.termination
- @strawberry_django.type(
- models.Cable,
- fields='__all__',
- filters=CableFilter
- )
- class CableType(NetBoxObjectType):
- color: str
- @strawberry_django.field
- def terminations(self) -> List[CableTerminationType]:
- return self.terminations
- @strawberry_django.field
- def a_terminations(self) -> List[CableTerminationType]:
- return self.a_terminations
- @strawberry_django.field
- def b_terminations(self) -> List[CableTerminationType]:
- return self.b_terminations
- @strawberry_django.type(
- models.ConsolePort,
- # exclude=('_path',),
- exclude=('_path',), # bug - temp
- filters=ConsolePortFilter
- )
- class ConsolePortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
- def resolve_type(self, info):
- return self.type or None
- @strawberry_django.type(
- models.ConsolePortTemplate,
- fields='__all__',
- filters=ConsolePortTemplateFilter
- )
- class ConsolePortTemplateType(ComponentTemplateObjectType):
- _name: str
- def resolve_type(self, info):
- return self.type or None
- @strawberry_django.type(
- models.ConsoleServerPort,
- # exclude=('_path',),
- exclude=('_path',), # bug - temp
- filters=ConsoleServerPortFilter
- )
- class ConsoleServerPortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
- def resolve_type(self, info):
- return self.type or None
- @strawberry_django.type(
- models.ConsoleServerPortTemplate,
- fields='__all__',
- filters=ConsoleServerPortTemplateFilter
- )
- class ConsoleServerPortTemplateType(ComponentTemplateObjectType):
- def resolve_type(self, info):
- return self.type or None
- @strawberry_django.type(
- models.Device,
- fields='__all__',
- filters=DeviceFilter
- )
- class DeviceType(ConfigContextMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType):
- _name: str
- console_port_count: BigInt
- console_server_port_count: BigInt
- power_port_count: BigInt
- power_outlet_count: BigInt
- interface_count: BigInt
- front_port_count: BigInt
- rear_port_count: BigInt
- device_bay_count: BigInt
- module_bay_count: BigInt
- inventory_item_count: BigInt
- def resolve_face(self, info):
- return self.face or None
- def resolve_airflow(self, info):
- return self.airflow or None
- @strawberry_django.type(
- models.DeviceBay,
- fields='__all__',
- filters=DeviceBayFilter
- )
- class DeviceBayType(ComponentObjectType):
- pass
- @strawberry_django.type(
- models.DeviceBayTemplate,
- fields='__all__',
- filters=DeviceBayTemplateFilter
- )
- class DeviceBayTemplateType(ComponentTemplateObjectType):
- pass
- @strawberry_django.type(
- models.InventoryItemTemplate,
- exclude=('component_type', 'component_id', 'parent'),
- filters=InventoryItemTemplateFilter
- )
- class InventoryItemTemplateType(ComponentTemplateObjectType):
- # component = graphene.Field('dcim.graphql.gfk_mixins.InventoryItemTemplateComponentType')
- pass
- @strawberry_django.type(
- models.DeviceRole,
- # fields='__all__',
- exclude=('color',), # bug - temp
- filters=DeviceRoleFilter
- )
- class DeviceRoleType(OrganizationalObjectType):
- pass
- @strawberry_django.type(
- models.DeviceType,
- fields='__all__',
- filters=DeviceTypeFilter
- )
- class DeviceTypeType(NetBoxObjectType):
- console_port_template_count: BigInt
- console_server_port_template_count: BigInt
- power_port_template_count: BigInt
- power_outlet_template_count: BigInt
- interface_template_count: BigInt
- front_port_template_count: BigInt
- rear_port_template_count: BigInt
- device_bay_template_count: BigInt
- module_bay_template_count: BigInt
- inventory_item_template_count: BigInt
- def resolve_subdevice_role(self, info):
- return self.subdevice_role or None
- def resolve_airflow(self, info):
- return self.airflow or None
- def resolve_weight_unit(self, info):
- return self.weight_unit or None
- @strawberry_django.type(
- models.FrontPort,
- # fields='__all__',
- exclude=('color',), # bug - temp
- filters=FrontPortFilter
- )
- class FrontPortType(ComponentObjectType, CabledObjectMixin):
- pass
- @strawberry_django.type(
- models.FrontPortTemplate,
- # fields='__all__',
- exclude=('color',), # bug - temp
- filters=FrontPortTemplateFilter
- )
- class FrontPortTemplateType(ComponentTemplateObjectType):
- pass
- @strawberry_django.type(
- models.Interface,
- # fields='__all__',
- exclude=('mac_address', 'wwn'), # bug - temp
- filters=InterfaceFilter
- )
- class InterfaceType(IPAddressesMixin, ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
- def resolve_poe_mode(self, info):
- return self.poe_mode or None
- def resolve_poe_type(self, info):
- return self.poe_type or None
- def resolve_mode(self, info):
- return self.mode or None
- def resolve_rf_role(self, info):
- return self.rf_role or None
- def resolve_rf_channel(self, info):
- return self.rf_channel or None
- @strawberry_django.type(
- models.InterfaceTemplate,
- fields='__all__',
- filters=InterfaceTemplateFilter
- )
- class InterfaceTemplateType(ComponentTemplateObjectType):
- def resolve_poe_mode(self, info):
- return self.poe_mode or None
- def resolve_poe_type(self, info):
- return self.poe_type or None
- def resolve_rf_role(self, info):
- return self.rf_role or None
- @strawberry_django.type(
- models.InventoryItem,
- exclude=('component_type', 'component_id', 'parent'),
- filters=InventoryItemFilter
- )
- class InventoryItemType(ComponentObjectType):
- # component = graphene.Field('dcim.graphql.gfk_mixins.InventoryItemComponentType')
- pass
- @strawberry_django.type(
- models.InventoryItemRole,
- # fields='__all__',
- exclude=('color',), # bug - temp
- filters=InventoryItemRoleFilter
- )
- class InventoryItemRoleType(OrganizationalObjectType):
- pass
- @strawberry_django.type(
- models.Location,
- # fields='__all__',
- exclude=('parent',), # bug - temp
- filters=LocationFilter
- )
- class LocationType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, OrganizationalObjectType):
- pass
- @strawberry_django.type(
- models.Manufacturer,
- fields='__all__',
- filters=ManufacturerFilter
- )
- class ManufacturerType(OrganizationalObjectType, ContactsMixin):
- pass
- @strawberry_django.type(
- models.Module,
- fields='__all__',
- filters=ModuleFilter
- )
- class ModuleType(ComponentObjectType):
- pass
- @strawberry_django.type(
- models.ModuleBay,
- fields='__all__',
- filters=ModuleBayFilter
- )
- class ModuleBayType(ComponentObjectType):
- pass
- @strawberry_django.type(
- models.ModuleBayTemplate,
- fields='__all__',
- filters=ModuleBayTemplateFilter
- )
- class ModuleBayTemplateType(ComponentTemplateObjectType):
- pass
- @strawberry_django.type(
- models.ModuleType,
- fields='__all__',
- filters=ModuleTypeFilter
- )
- class ModuleTypeType(NetBoxObjectType):
- def resolve_weight_unit(self, info):
- return self.weight_unit or None
- @strawberry_django.type(
- models.Platform,
- fields='__all__',
- filters=PlatformFilter
- )
- class PlatformType(OrganizationalObjectType):
- pass
- @strawberry_django.type(
- models.PowerFeed,
- exclude=('_path',),
- filters=PowerFeedFilter
- )
- class PowerFeedType(NetBoxObjectType, CabledObjectMixin, PathEndpointMixin):
- pass
- @strawberry_django.type(
- models.PowerOutlet,
- fields='__all__',
- filters=PowerOutletFilter
- )
- class PowerOutletType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
- def resolve_feed_leg(self, info):
- return self.feed_leg or None
- def resolve_type(self, info):
- return self.type or None
- @strawberry_django.type(
- models.PowerOutletTemplate,
- fields='__all__',
- filters=PowerOutletTemplateFilter
- )
- class PowerOutletTemplateType(ComponentTemplateObjectType):
- def resolve_feed_leg(self, info):
- return self.feed_leg or None
- def resolve_type(self, info):
- return self.type or None
- @strawberry_django.type(
- models.PowerPanel,
- fields='__all__',
- filters=PowerPanelFilter
- )
- class PowerPanelType(NetBoxObjectType, ContactsMixin):
- pass
- @strawberry_django.type(
- models.PowerPort,
- exclude=('_path',),
- filters=PowerPortFilter
- )
- class PowerPortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
- def resolve_type(self, info):
- return self.type or None
- @strawberry_django.type(
- models.PowerPortTemplate,
- fields='__all__',
- filters=PowerPortTemplateFilter
- )
- class PowerPortTemplateType(ComponentTemplateObjectType):
- def resolve_type(self, info):
- return self.type or None
- @strawberry_django.type(
- models.Rack,
- fields='__all__',
- filters=RackFilter
- )
- class RackType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType):
- _name: str
- def resolve_type(self, info):
- return self.type or None
- def resolve_outer_unit(self, info):
- return self.outer_unit or None
- def resolve_weight_unit(self, info):
- return self.weight_unit or None
- @strawberry_django.type(
- models.RackReservation,
- # fields='__all__',
- exclude=('units',), # bug - temp
- filters=RackReservationFilter
- )
- class RackReservationType(NetBoxObjectType):
- pass
- @strawberry_django.type(
- models.RackRole,
- # fields='__all__',
- exclude=('color',), # bug - temp
- filters=RackRoleFilter
- )
- class RackRoleType(OrganizationalObjectType):
- pass
- @strawberry_django.type(
- models.RearPort,
- # fields='__all__',
- exclude=('color', ), # bug - temp
- filters=RearPortFilter
- )
- class RearPortType(ComponentObjectType, CabledObjectMixin):
- pass
- @strawberry_django.type(
- models.RearPortTemplate,
- # fields='__all__',
- exclude=('color', ), # bug - temp
- filters=RearPortTemplateFilter
- )
- class RearPortTemplateType(ComponentTemplateObjectType):
- pass
- @strawberry_django.type(
- models.Region,
- # fields='__all__',
- exclude=('parent',), # bug - temp
- filters=RegionFilter
- )
- class RegionType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType):
- pass
- @strawberry_django.type(
- models.Site,
- # fields='__all__',
- exclude=('time_zone',), # bug - temp
- filters=SiteFilter
- )
- class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType):
- _name: str
- asn: BigInt
- @strawberry_django.type(
- models.SiteGroup,
- # fields='__all__',
- exclude=('parent',), # bug - temp
- filters=SiteGroupFilter
- )
- class SiteGroupType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType):
- pass
- @strawberry_django.type(
- models.VirtualChassis,
- fields='__all__',
- filters=VirtualChassisFilter
- )
- class VirtualChassisType(NetBoxObjectType):
- member_count: BigInt
- @strawberry_django.type(
- models.VirtualDeviceContext,
- fields='__all__',
- filters=VirtualDeviceContextFilter
- )
- class VirtualDeviceContextType(NetBoxObjectType):
- pass
|