|
|
@@ -1,8 +1,11 @@
|
|
|
from dcim import filtersets, models
|
|
|
-from netbox.graphql.types import BaseObjectType, ObjectType, TaggedObjectType
|
|
|
+from extras.graphql.mixins import ChangelogMixin, CustomFieldsMixin, ImageAttachmentsMixin, TagsMixin
|
|
|
+from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin
|
|
|
+from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, PrimaryObjectType
|
|
|
|
|
|
__all__ = (
|
|
|
'CableType',
|
|
|
+ 'ComponentObjectType',
|
|
|
'ConsolePortType',
|
|
|
'ConsolePortTemplateType',
|
|
|
'ConsoleServerPortType',
|
|
|
@@ -38,7 +41,40 @@ __all__ = (
|
|
|
)
|
|
|
|
|
|
|
|
|
-class CableType(TaggedObjectType):
|
|
|
+#
|
|
|
+# Base types
|
|
|
+#
|
|
|
+
|
|
|
+
|
|
|
+class ComponentObjectType(
|
|
|
+ ChangelogMixin,
|
|
|
+ CustomFieldsMixin,
|
|
|
+ TagsMixin,
|
|
|
+ BaseObjectType
|
|
|
+):
|
|
|
+ """
|
|
|
+ Base type for device/VM components
|
|
|
+ """
|
|
|
+ class Meta:
|
|
|
+ abstract = True
|
|
|
+
|
|
|
+
|
|
|
+class ComponentTemplateObjectType(
|
|
|
+ ChangelogMixin,
|
|
|
+ BaseObjectType
|
|
|
+):
|
|
|
+ """
|
|
|
+ Base type for device/VM components
|
|
|
+ """
|
|
|
+ class Meta:
|
|
|
+ abstract = True
|
|
|
+
|
|
|
+
|
|
|
+#
|
|
|
+# Model types
|
|
|
+#
|
|
|
+
|
|
|
+class CableType(PrimaryObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.Cable
|
|
|
@@ -52,7 +88,7 @@ class CableType(TaggedObjectType):
|
|
|
return self.length_unit or None
|
|
|
|
|
|
|
|
|
-class ConsolePortType(TaggedObjectType):
|
|
|
+class ConsolePortType(ComponentObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.ConsolePort
|
|
|
@@ -63,7 +99,7 @@ class ConsolePortType(TaggedObjectType):
|
|
|
return self.type or None
|
|
|
|
|
|
|
|
|
-class ConsolePortTemplateType(BaseObjectType):
|
|
|
+class ConsolePortTemplateType(ComponentTemplateObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.ConsolePortTemplate
|
|
|
@@ -74,7 +110,7 @@ class ConsolePortTemplateType(BaseObjectType):
|
|
|
return self.type or None
|
|
|
|
|
|
|
|
|
-class ConsoleServerPortType(TaggedObjectType):
|
|
|
+class ConsoleServerPortType(ComponentObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.ConsoleServerPort
|
|
|
@@ -85,7 +121,7 @@ class ConsoleServerPortType(TaggedObjectType):
|
|
|
return self.type or None
|
|
|
|
|
|
|
|
|
-class ConsoleServerPortTemplateType(BaseObjectType):
|
|
|
+class ConsoleServerPortTemplateType(ComponentTemplateObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.ConsoleServerPortTemplate
|
|
|
@@ -96,7 +132,7 @@ class ConsoleServerPortTemplateType(BaseObjectType):
|
|
|
return self.type or None
|
|
|
|
|
|
|
|
|
-class DeviceType(TaggedObjectType):
|
|
|
+class DeviceType(ImageAttachmentsMixin, PrimaryObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.Device
|
|
|
@@ -107,7 +143,7 @@ class DeviceType(TaggedObjectType):
|
|
|
return self.face or None
|
|
|
|
|
|
|
|
|
-class DeviceBayType(TaggedObjectType):
|
|
|
+class DeviceBayType(ComponentObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.DeviceBay
|
|
|
@@ -115,7 +151,7 @@ class DeviceBayType(TaggedObjectType):
|
|
|
filterset_class = filtersets.DeviceBayFilterSet
|
|
|
|
|
|
|
|
|
-class DeviceBayTemplateType(BaseObjectType):
|
|
|
+class DeviceBayTemplateType(ComponentTemplateObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.DeviceBayTemplate
|
|
|
@@ -123,7 +159,7 @@ class DeviceBayTemplateType(BaseObjectType):
|
|
|
filterset_class = filtersets.DeviceBayTemplateFilterSet
|
|
|
|
|
|
|
|
|
-class DeviceRoleType(ObjectType):
|
|
|
+class DeviceRoleType(OrganizationalObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.DeviceRole
|
|
|
@@ -131,7 +167,7 @@ class DeviceRoleType(ObjectType):
|
|
|
filterset_class = filtersets.DeviceRoleFilterSet
|
|
|
|
|
|
|
|
|
-class DeviceTypeType(TaggedObjectType):
|
|
|
+class DeviceTypeType(PrimaryObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.DeviceType
|
|
|
@@ -142,7 +178,7 @@ class DeviceTypeType(TaggedObjectType):
|
|
|
return self.subdevice_role or None
|
|
|
|
|
|
|
|
|
-class FrontPortType(TaggedObjectType):
|
|
|
+class FrontPortType(ComponentObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.FrontPort
|
|
|
@@ -150,7 +186,7 @@ class FrontPortType(TaggedObjectType):
|
|
|
filterset_class = filtersets.FrontPortFilterSet
|
|
|
|
|
|
|
|
|
-class FrontPortTemplateType(BaseObjectType):
|
|
|
+class FrontPortTemplateType(ComponentTemplateObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.FrontPortTemplate
|
|
|
@@ -158,7 +194,7 @@ class FrontPortTemplateType(BaseObjectType):
|
|
|
filterset_class = filtersets.FrontPortTemplateFilterSet
|
|
|
|
|
|
|
|
|
-class InterfaceType(TaggedObjectType):
|
|
|
+class InterfaceType(IPAddressesMixin, ComponentObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.Interface
|
|
|
@@ -169,7 +205,7 @@ class InterfaceType(TaggedObjectType):
|
|
|
return self.mode or None
|
|
|
|
|
|
|
|
|
-class InterfaceTemplateType(BaseObjectType):
|
|
|
+class InterfaceTemplateType(ComponentTemplateObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.InterfaceTemplate
|
|
|
@@ -177,7 +213,7 @@ class InterfaceTemplateType(BaseObjectType):
|
|
|
filterset_class = filtersets.InterfaceTemplateFilterSet
|
|
|
|
|
|
|
|
|
-class InventoryItemType(TaggedObjectType):
|
|
|
+class InventoryItemType(ComponentObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.InventoryItem
|
|
|
@@ -185,7 +221,7 @@ class InventoryItemType(TaggedObjectType):
|
|
|
filterset_class = filtersets.InventoryItemFilterSet
|
|
|
|
|
|
|
|
|
-class LocationType(ObjectType):
|
|
|
+class LocationType(VLANGroupsMixin, ImageAttachmentsMixin, OrganizationalObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.Location
|
|
|
@@ -193,7 +229,7 @@ class LocationType(ObjectType):
|
|
|
filterset_class = filtersets.LocationFilterSet
|
|
|
|
|
|
|
|
|
-class ManufacturerType(ObjectType):
|
|
|
+class ManufacturerType(OrganizationalObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.Manufacturer
|
|
|
@@ -201,7 +237,7 @@ class ManufacturerType(ObjectType):
|
|
|
filterset_class = filtersets.ManufacturerFilterSet
|
|
|
|
|
|
|
|
|
-class PlatformType(ObjectType):
|
|
|
+class PlatformType(OrganizationalObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.Platform
|
|
|
@@ -209,7 +245,7 @@ class PlatformType(ObjectType):
|
|
|
filterset_class = filtersets.PlatformFilterSet
|
|
|
|
|
|
|
|
|
-class PowerFeedType(TaggedObjectType):
|
|
|
+class PowerFeedType(PrimaryObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.PowerFeed
|
|
|
@@ -217,7 +253,7 @@ class PowerFeedType(TaggedObjectType):
|
|
|
filterset_class = filtersets.PowerFeedFilterSet
|
|
|
|
|
|
|
|
|
-class PowerOutletType(TaggedObjectType):
|
|
|
+class PowerOutletType(ComponentObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.PowerOutlet
|
|
|
@@ -231,7 +267,7 @@ class PowerOutletType(TaggedObjectType):
|
|
|
return self.type or None
|
|
|
|
|
|
|
|
|
-class PowerOutletTemplateType(BaseObjectType):
|
|
|
+class PowerOutletTemplateType(ComponentTemplateObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.PowerOutletTemplate
|
|
|
@@ -245,7 +281,7 @@ class PowerOutletTemplateType(BaseObjectType):
|
|
|
return self.type or None
|
|
|
|
|
|
|
|
|
-class PowerPanelType(TaggedObjectType):
|
|
|
+class PowerPanelType(PrimaryObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.PowerPanel
|
|
|
@@ -253,7 +289,7 @@ class PowerPanelType(TaggedObjectType):
|
|
|
filterset_class = filtersets.PowerPanelFilterSet
|
|
|
|
|
|
|
|
|
-class PowerPortType(TaggedObjectType):
|
|
|
+class PowerPortType(ComponentObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.PowerPort
|
|
|
@@ -264,7 +300,7 @@ class PowerPortType(TaggedObjectType):
|
|
|
return self.type or None
|
|
|
|
|
|
|
|
|
-class PowerPortTemplateType(BaseObjectType):
|
|
|
+class PowerPortTemplateType(ComponentTemplateObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.PowerPortTemplate
|
|
|
@@ -275,7 +311,7 @@ class PowerPortTemplateType(BaseObjectType):
|
|
|
return self.type or None
|
|
|
|
|
|
|
|
|
-class RackType(TaggedObjectType):
|
|
|
+class RackType(VLANGroupsMixin, ImageAttachmentsMixin, PrimaryObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.Rack
|
|
|
@@ -289,7 +325,7 @@ class RackType(TaggedObjectType):
|
|
|
return self.outer_unit or None
|
|
|
|
|
|
|
|
|
-class RackReservationType(TaggedObjectType):
|
|
|
+class RackReservationType(PrimaryObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.RackReservation
|
|
|
@@ -297,7 +333,7 @@ class RackReservationType(TaggedObjectType):
|
|
|
filterset_class = filtersets.RackReservationFilterSet
|
|
|
|
|
|
|
|
|
-class RackRoleType(ObjectType):
|
|
|
+class RackRoleType(OrganizationalObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.RackRole
|
|
|
@@ -305,7 +341,7 @@ class RackRoleType(ObjectType):
|
|
|
filterset_class = filtersets.RackRoleFilterSet
|
|
|
|
|
|
|
|
|
-class RearPortType(TaggedObjectType):
|
|
|
+class RearPortType(ComponentObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.RearPort
|
|
|
@@ -313,7 +349,7 @@ class RearPortType(TaggedObjectType):
|
|
|
filterset_class = filtersets.RearPortFilterSet
|
|
|
|
|
|
|
|
|
-class RearPortTemplateType(BaseObjectType):
|
|
|
+class RearPortTemplateType(ComponentTemplateObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.RearPortTemplate
|
|
|
@@ -321,7 +357,7 @@ class RearPortTemplateType(BaseObjectType):
|
|
|
filterset_class = filtersets.RearPortTemplateFilterSet
|
|
|
|
|
|
|
|
|
-class RegionType(ObjectType):
|
|
|
+class RegionType(VLANGroupsMixin, OrganizationalObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.Region
|
|
|
@@ -329,7 +365,7 @@ class RegionType(ObjectType):
|
|
|
filterset_class = filtersets.RegionFilterSet
|
|
|
|
|
|
|
|
|
-class SiteType(TaggedObjectType):
|
|
|
+class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, PrimaryObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.Site
|
|
|
@@ -337,7 +373,7 @@ class SiteType(TaggedObjectType):
|
|
|
filterset_class = filtersets.SiteFilterSet
|
|
|
|
|
|
|
|
|
-class SiteGroupType(ObjectType):
|
|
|
+class SiteGroupType(VLANGroupsMixin, OrganizationalObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.SiteGroup
|
|
|
@@ -345,7 +381,7 @@ class SiteGroupType(ObjectType):
|
|
|
filterset_class = filtersets.SiteGroupFilterSet
|
|
|
|
|
|
|
|
|
-class VirtualChassisType(TaggedObjectType):
|
|
|
+class VirtualChassisType(PrimaryObjectType):
|
|
|
|
|
|
class Meta:
|
|
|
model = models.VirtualChassis
|