From ea86321da80a7e1df8846c1f552abbe9f9a219de Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 3 Aug 2021 13:58:08 -0400 Subject: [PATCH] Add journal_entries to Graphene object types for all primary models --- netbox/circuits/graphql/types.py | 8 ++++---- netbox/dcim/graphql/types.py | 20 ++++++++++---------- netbox/extras/graphql/mixins.py | 8 ++++++++ netbox/ipam/graphql/types.py | 18 +++++++++--------- netbox/netbox/graphql/types.py | 10 +++++++++- netbox/tenancy/graphql/types.py | 4 ++-- netbox/virtualization/graphql/types.py | 6 +++--- 7 files changed, 45 insertions(+), 29 deletions(-) diff --git a/netbox/circuits/graphql/types.py b/netbox/circuits/graphql/types.py index bde25a09f..ede59f855 100644 --- a/netbox/circuits/graphql/types.py +++ b/netbox/circuits/graphql/types.py @@ -1,5 +1,5 @@ from circuits import filtersets, models -from netbox.graphql.types import BaseObjectType, ObjectType, TaggedObjectType +from netbox.graphql.types import BaseObjectType, ObjectType, PrimaryObjectType __all__ = ( 'CircuitTerminationType', @@ -18,7 +18,7 @@ class CircuitTerminationType(BaseObjectType): filterset_class = filtersets.CircuitTerminationFilterSet -class CircuitType(TaggedObjectType): +class CircuitType(PrimaryObjectType): class Meta: model = models.Circuit @@ -34,7 +34,7 @@ class CircuitTypeType(ObjectType): filterset_class = filtersets.CircuitTypeFilterSet -class ProviderType(TaggedObjectType): +class ProviderType(PrimaryObjectType): class Meta: model = models.Provider @@ -42,7 +42,7 @@ class ProviderType(TaggedObjectType): filterset_class = filtersets.ProviderFilterSet -class ProviderNetworkType(TaggedObjectType): +class ProviderNetworkType(PrimaryObjectType): class Meta: model = models.ProviderNetwork diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index 1e19a1b36..be2de1621 100644 --- a/netbox/dcim/graphql/types.py +++ b/netbox/dcim/graphql/types.py @@ -1,7 +1,7 @@ from dcim import filtersets, models from extras.graphql.mixins import ImageAttachmentsMixin from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin -from netbox.graphql.types import BaseObjectType, ObjectType, TaggedObjectType +from netbox.graphql.types import BaseObjectType, ObjectType, PrimaryObjectType, TaggedObjectType __all__ = ( 'CableType', @@ -40,7 +40,7 @@ __all__ = ( ) -class CableType(TaggedObjectType): +class CableType(PrimaryObjectType): class Meta: model = models.Cable @@ -98,7 +98,7 @@ class ConsoleServerPortTemplateType(BaseObjectType): return self.type or None -class DeviceType(ImageAttachmentsMixin, TaggedObjectType): +class DeviceType(ImageAttachmentsMixin, PrimaryObjectType): class Meta: model = models.Device @@ -133,7 +133,7 @@ class DeviceRoleType(ObjectType): filterset_class = filtersets.DeviceRoleFilterSet -class DeviceTypeType(TaggedObjectType): +class DeviceTypeType(PrimaryObjectType): class Meta: model = models.DeviceType @@ -211,7 +211,7 @@ class PlatformType(ObjectType): filterset_class = filtersets.PlatformFilterSet -class PowerFeedType(TaggedObjectType): +class PowerFeedType(PrimaryObjectType): class Meta: model = models.PowerFeed @@ -247,7 +247,7 @@ class PowerOutletTemplateType(BaseObjectType): return self.type or None -class PowerPanelType(TaggedObjectType): +class PowerPanelType(PrimaryObjectType): class Meta: model = models.PowerPanel @@ -277,7 +277,7 @@ class PowerPortTemplateType(BaseObjectType): return self.type or None -class RackType(VLANGroupsMixin, ImageAttachmentsMixin, TaggedObjectType): +class RackType(VLANGroupsMixin, ImageAttachmentsMixin, PrimaryObjectType): class Meta: model = models.Rack @@ -291,7 +291,7 @@ class RackType(VLANGroupsMixin, ImageAttachmentsMixin, TaggedObjectType): return self.outer_unit or None -class RackReservationType(TaggedObjectType): +class RackReservationType(PrimaryObjectType): class Meta: model = models.RackReservation @@ -331,7 +331,7 @@ class RegionType(VLANGroupsMixin, ObjectType): filterset_class = filtersets.RegionFilterSet -class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, TaggedObjectType): +class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, PrimaryObjectType): class Meta: model = models.Site @@ -347,7 +347,7 @@ class SiteGroupType(VLANGroupsMixin, ObjectType): filterset_class = filtersets.SiteGroupFilterSet -class VirtualChassisType(TaggedObjectType): +class VirtualChassisType(PrimaryObjectType): class Meta: model = models.VirtualChassis diff --git a/netbox/extras/graphql/mixins.py b/netbox/extras/graphql/mixins.py index 5004ab841..0a6792025 100644 --- a/netbox/extras/graphql/mixins.py +++ b/netbox/extras/graphql/mixins.py @@ -4,6 +4,7 @@ from graphene.types.generic import GenericScalar __all__ = ( 'CustomFieldsMixin', 'ImageAttachmentsMixin', + 'JournalEntriesMixin', 'TagsMixin', ) @@ -22,6 +23,13 @@ class ImageAttachmentsMixin: return self.images.restrict(info.context.user, 'view') +class JournalEntriesMixin: + journal_entries = graphene.List('extras.graphql.types.JournalEntryType') + + def resolve_journal_entries(self, info): + return self.journal_entries.restrict(info.context.user, 'view') + + class TagsMixin: tags = graphene.List(graphene.String) diff --git a/netbox/ipam/graphql/types.py b/netbox/ipam/graphql/types.py index 2172d63fa..03f9e2d1f 100644 --- a/netbox/ipam/graphql/types.py +++ b/netbox/ipam/graphql/types.py @@ -1,5 +1,5 @@ from ipam import filtersets, models -from netbox.graphql.types import ObjectType, TaggedObjectType +from netbox.graphql.types import ObjectType, PrimaryObjectType __all__ = ( 'AggregateType', @@ -16,7 +16,7 @@ __all__ = ( ) -class AggregateType(TaggedObjectType): +class AggregateType(PrimaryObjectType): class Meta: model = models.Aggregate @@ -24,7 +24,7 @@ class AggregateType(TaggedObjectType): filterset_class = filtersets.AggregateFilterSet -class IPAddressType(TaggedObjectType): +class IPAddressType(PrimaryObjectType): class Meta: model = models.IPAddress @@ -35,7 +35,7 @@ class IPAddressType(TaggedObjectType): return self.role or None -class IPRangeType(TaggedObjectType): +class IPRangeType(PrimaryObjectType): class Meta: model = models.IPRange @@ -46,7 +46,7 @@ class IPRangeType(TaggedObjectType): return self.role or None -class PrefixType(TaggedObjectType): +class PrefixType(PrimaryObjectType): class Meta: model = models.Prefix @@ -70,7 +70,7 @@ class RoleType(ObjectType): filterset_class = filtersets.RoleFilterSet -class RouteTargetType(TaggedObjectType): +class RouteTargetType(PrimaryObjectType): class Meta: model = models.RouteTarget @@ -78,7 +78,7 @@ class RouteTargetType(TaggedObjectType): filterset_class = filtersets.RouteTargetFilterSet -class ServiceType(TaggedObjectType): +class ServiceType(PrimaryObjectType): class Meta: model = models.Service @@ -86,7 +86,7 @@ class ServiceType(TaggedObjectType): filterset_class = filtersets.ServiceFilterSet -class VLANType(TaggedObjectType): +class VLANType(PrimaryObjectType): class Meta: model = models.VLAN @@ -102,7 +102,7 @@ class VLANGroupType(ObjectType): filterset_class = filtersets.VLANGroupFilterSet -class VRFType(TaggedObjectType): +class VRFType(PrimaryObjectType): class Meta: model = models.VRF diff --git a/netbox/netbox/graphql/types.py b/netbox/netbox/graphql/types.py index 5e9d53338..a7eb0e669 100644 --- a/netbox/netbox/graphql/types.py +++ b/netbox/netbox/graphql/types.py @@ -1,7 +1,7 @@ from django.contrib.contenttypes.models import ContentType from graphene_django import DjangoObjectType -from extras.graphql.mixins import CustomFieldsMixin, TagsMixin +from extras.graphql.mixins import CustomFieldsMixin, JournalEntriesMixin, TagsMixin __all__ = ( 'BaseObjectType', @@ -43,6 +43,14 @@ class TaggedObjectType(CustomFieldsMixin, TagsMixin, BaseObjectType): abstract = True +class PrimaryObjectType(CustomFieldsMixin, JournalEntriesMixin, TagsMixin, BaseObjectType): + """ + Extends BaseObjectType with support for custom fields, tags, and journal entries. + """ + class Meta: + abstract = True + + # # Miscellaneous types # diff --git a/netbox/tenancy/graphql/types.py b/netbox/tenancy/graphql/types.py index 8f9469c10..2d6b388ae 100644 --- a/netbox/tenancy/graphql/types.py +++ b/netbox/tenancy/graphql/types.py @@ -1,5 +1,5 @@ from tenancy import filtersets, models -from netbox.graphql.types import ObjectType, TaggedObjectType +from netbox.graphql.types import ObjectType, PrimaryObjectType __all__ = ( 'TenantType', @@ -7,7 +7,7 @@ __all__ = ( ) -class TenantType(TaggedObjectType): +class TenantType(PrimaryObjectType): class Meta: model = models.Tenant diff --git a/netbox/virtualization/graphql/types.py b/netbox/virtualization/graphql/types.py index 83e5fbc73..676f8d82c 100644 --- a/netbox/virtualization/graphql/types.py +++ b/netbox/virtualization/graphql/types.py @@ -1,6 +1,6 @@ from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin from virtualization import filtersets, models -from netbox.graphql.types import ObjectType, TaggedObjectType +from netbox.graphql.types import ObjectType, PrimaryObjectType, TaggedObjectType __all__ = ( 'ClusterType', @@ -11,7 +11,7 @@ __all__ = ( ) -class ClusterType(VLANGroupsMixin, TaggedObjectType): +class ClusterType(VLANGroupsMixin, PrimaryObjectType): class Meta: model = models.Cluster @@ -35,7 +35,7 @@ class ClusterTypeType(ObjectType): filterset_class = filtersets.ClusterTypeFilterSet -class VirtualMachineType(TaggedObjectType): +class VirtualMachineType(PrimaryObjectType): class Meta: model = models.VirtualMachine