From 02427fb41e822693b20ccfddfe808400cc0d694a Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 29 Jun 2021 12:55:17 -0400 Subject: [PATCH] Clean up GraphQL object types & tests --- netbox/dcim/graphql/types.py | 55 +++++++++++++++++++++++++- netbox/dcim/tests/test_api.py | 30 +++++++++++--- netbox/extras/graphql/types.py | 2 +- netbox/ipam/graphql/types.py | 3 ++ netbox/tenancy/graphql/types.py | 4 +- netbox/virtualization/graphql/types.py | 5 ++- 6 files changed, 88 insertions(+), 11 deletions(-) diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index a11f2334a..12342ff4b 100644 --- a/netbox/dcim/graphql/types.py +++ b/netbox/dcim/graphql/types.py @@ -45,6 +45,12 @@ class CableType(TaggedObjectType): fields = '__all__' filterset_class = filtersets.CableFilterSet + def resolve_type(self, info): + return self.type or None + + def resolve_length_unit(self, info): + return self.length_unit or None + class ConsolePortType(TaggedObjectType): @@ -53,6 +59,9 @@ class ConsolePortType(TaggedObjectType): fields = '__all__' filterset_class = filtersets.ConsolePortFilterSet + def resolve_type(self, info): + return self.type or None + class ConsolePortTemplateType(BaseObjectType): @@ -61,6 +70,9 @@ class ConsolePortTemplateType(BaseObjectType): fields = '__all__' filterset_class = filtersets.ConsolePortTemplateFilterSet + def resolve_type(self, info): + return self.type or None + class ConsoleServerPortType(TaggedObjectType): @@ -69,6 +81,9 @@ class ConsoleServerPortType(TaggedObjectType): fields = '__all__' filterset_class = filtersets.ConsoleServerPortFilterSet + def resolve_type(self, info): + return self.type or None + class ConsoleServerPortTemplateType(BaseObjectType): @@ -77,6 +92,9 @@ class ConsoleServerPortTemplateType(BaseObjectType): fields = '__all__' filterset_class = filtersets.ConsoleServerPortTemplateFilterSet + def resolve_type(self, info): + return self.type or None + class DeviceType(TaggedObjectType): @@ -85,6 +103,9 @@ class DeviceType(TaggedObjectType): fields = '__all__' filterset_class = filtersets.DeviceFilterSet + def resolve_face(self, info): + return self.face or None + class DeviceBayType(TaggedObjectType): @@ -117,6 +138,9 @@ class DeviceTypeType(TaggedObjectType): fields = '__all__' filterset_class = filtersets.DeviceTypeFilterSet + def resolve_subdevice_role(self, info): + return self.subdevice_role or None + class FrontPortType(TaggedObjectType): @@ -141,6 +165,9 @@ class InterfaceType(TaggedObjectType): fields = '__all__' filterset_class = filtersets.InterfaceFilterSet + def resolve_mode(self, info): + return self.mode or None + class InterfaceTemplateType(BaseObjectType): @@ -150,7 +177,7 @@ class InterfaceTemplateType(BaseObjectType): filterset_class = filtersets.InterfaceTemplateFilterSet -class InventoryItemType(ObjectType): +class InventoryItemType(TaggedObjectType): class Meta: model = models.InventoryItem @@ -158,7 +185,7 @@ class InventoryItemType(ObjectType): filterset_class = filtersets.InventoryItemFilterSet -class LocationType(TaggedObjectType): +class LocationType(ObjectType): class Meta: model = models.Location @@ -197,6 +224,12 @@ class PowerOutletType(TaggedObjectType): fields = '__all__' filterset_class = filtersets.PowerOutletFilterSet + def resolve_feed_leg(self, info): + return self.feed_leg or None + + def resolve_type(self, info): + return self.type or None + class PowerOutletTemplateType(BaseObjectType): @@ -205,6 +238,12 @@ class PowerOutletTemplateType(BaseObjectType): fields = '__all__' filterset_class = filtersets.PowerOutletTemplateFilterSet + def resolve_feed_leg(self, info): + return self.feed_leg or None + + def resolve_type(self, info): + return self.type or None + class PowerPanelType(TaggedObjectType): @@ -221,6 +260,9 @@ class PowerPortType(TaggedObjectType): fields = '__all__' filterset_class = filtersets.PowerPortFilterSet + def resolve_type(self, info): + return self.type or None + class PowerPortTemplateType(BaseObjectType): @@ -229,6 +271,9 @@ class PowerPortTemplateType(BaseObjectType): fields = '__all__' filterset_class = filtersets.PowerPortTemplateFilterSet + def resolve_type(self, info): + return self.type or None + class RackType(TaggedObjectType): @@ -237,6 +282,12 @@ class RackType(TaggedObjectType): fields = '__all__' filterset_class = filtersets.RackFilterSet + def resolve_type(self, info): + return self.type or None + + def resolve_outer_unit(self, info): + return self.outer_unit or None + class RackReservationType(TaggedObjectType): diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index 7e9687ed8..9d238395e 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -1005,7 +1005,11 @@ class DeviceTest(APIViewTestCases.GraphQLTestCase, APIViewTestCases.APIViewTestC self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST) -class ConsolePortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase): +class ConsolePortTest( + Mixins.ComponentTraceMixin, + APIViewTestCases.GraphQLTestCase, + APIViewTestCases.APIViewTestCase +): model = ConsolePort brief_fields = ['_occupied', 'cable', 'device', 'display', 'id', 'name', 'url'] bulk_update_data = { @@ -1044,7 +1048,11 @@ class ConsolePortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCa ] -class ConsoleServerPortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase): +class ConsoleServerPortTest( + Mixins.ComponentTraceMixin, + APIViewTestCases.GraphQLTestCase, + APIViewTestCases.APIViewTestCase +): model = ConsoleServerPort brief_fields = ['_occupied', 'cable', 'device', 'display', 'id', 'name', 'url'] bulk_update_data = { @@ -1083,7 +1091,11 @@ class ConsoleServerPortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIView ] -class PowerPortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase): +class PowerPortTest( + Mixins.ComponentTraceMixin, + APIViewTestCases.GraphQLTestCase, + APIViewTestCases.APIViewTestCase +): model = PowerPort brief_fields = ['_occupied', 'cable', 'device', 'display', 'id', 'name', 'url'] bulk_update_data = { @@ -1122,7 +1134,11 @@ class PowerPortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase ] -class PowerOutletTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase): +class PowerOutletTest( + Mixins.ComponentTraceMixin, + APIViewTestCases.GraphQLTestCase, + APIViewTestCases.APIViewTestCase +): model = PowerOutlet brief_fields = ['_occupied', 'cable', 'device', 'display', 'id', 'name', 'url'] bulk_update_data = { @@ -1161,7 +1177,11 @@ class PowerOutletTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCa ] -class InterfaceTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase): +class InterfaceTest( + Mixins.ComponentTraceMixin, + APIViewTestCases.GraphQLTestCase, + APIViewTestCases.APIViewTestCase +): model = Interface brief_fields = ['_occupied', 'cable', 'device', 'display', 'id', 'name', 'url'] bulk_update_data = { diff --git a/netbox/extras/graphql/types.py b/netbox/extras/graphql/types.py index abaed4de7..96651351d 100644 --- a/netbox/extras/graphql/types.py +++ b/netbox/extras/graphql/types.py @@ -65,7 +65,7 @@ class TagType(BaseObjectType): class Meta: model = models.Tag - fields = '__all__' + exclude = ('extras_taggeditem_items',) filterset_class = filtersets.TagFilterSet diff --git a/netbox/ipam/graphql/types.py b/netbox/ipam/graphql/types.py index 2fa10529e..be85150fa 100644 --- a/netbox/ipam/graphql/types.py +++ b/netbox/ipam/graphql/types.py @@ -30,6 +30,9 @@ class IPAddressType(TaggedObjectType): fields = '__all__' filterset_class = filtersets.IPAddressFilterSet + def resolve_role(self, info): + return self.role or None + class PrefixType(TaggedObjectType): diff --git a/netbox/tenancy/graphql/types.py b/netbox/tenancy/graphql/types.py index ca8e839d8..8f9469c10 100644 --- a/netbox/tenancy/graphql/types.py +++ b/netbox/tenancy/graphql/types.py @@ -7,7 +7,7 @@ __all__ = ( ) -class TenantType(ObjectType): +class TenantType(TaggedObjectType): class Meta: model = models.Tenant @@ -15,7 +15,7 @@ class TenantType(ObjectType): filterset_class = filtersets.TenantFilterSet -class TenantGroupType(TaggedObjectType): +class TenantGroupType(ObjectType): class Meta: model = models.TenantGroup diff --git a/netbox/virtualization/graphql/types.py b/netbox/virtualization/graphql/types.py index d7b6d344b..f4e757ecf 100644 --- a/netbox/virtualization/graphql/types.py +++ b/netbox/virtualization/graphql/types.py @@ -42,9 +42,12 @@ class VirtualMachineType(TaggedObjectType): filterset_class = filtersets.VirtualMachineFilterSet -class VMInterfaceType(ObjectType): +class VMInterfaceType(TaggedObjectType): class Meta: model = models.VMInterface fields = '__all__' filterset_class = filtersets.VMInterfaceFilterSet + + def resolve_mode(self, info): + return self.mode or None