Add changelog GraphQL relation for changelogged models

This commit is contained in:
jeremystretch 2021-08-03 14:51:56 -04:00
parent 1518a460d5
commit 88d2441ab3
6 changed files with 49 additions and 12 deletions

View File

@ -1,5 +1,5 @@
from circuits import filtersets, models from circuits import filtersets, models
from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, PrimaryObjectType from netbox.graphql.types import ObjectType, OrganizationalObjectType, PrimaryObjectType
__all__ = ( __all__ = (
'CircuitTerminationType', 'CircuitTerminationType',
@ -10,7 +10,7 @@ __all__ = (
) )
class CircuitTerminationType(BaseObjectType): class CircuitTerminationType(ObjectType):
class Meta: class Meta:
model = models.CircuitTermination model = models.CircuitTermination

View File

@ -1,5 +1,5 @@
from dcim import filtersets, models from dcim import filtersets, models
from extras.graphql.mixins import CustomFieldsMixin, ImageAttachmentsMixin, TagsMixin from extras.graphql.mixins import ChangelogMixin, CustomFieldsMixin, ImageAttachmentsMixin, TagsMixin
from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin
from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, PrimaryObjectType from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, PrimaryObjectType
@ -47,6 +47,7 @@ __all__ = (
class ComponentObjectType( class ComponentObjectType(
ChangelogMixin,
CustomFieldsMixin, CustomFieldsMixin,
TagsMixin, TagsMixin,
BaseObjectType BaseObjectType
@ -59,6 +60,7 @@ class ComponentObjectType(
class ComponentTemplateObjectType( class ComponentTemplateObjectType(
ChangelogMixin,
BaseObjectType BaseObjectType
): ):
""" """

View File

@ -2,6 +2,7 @@ import graphene
from graphene.types.generic import GenericScalar from graphene.types.generic import GenericScalar
__all__ = ( __all__ = (
'ChangelogMixin',
'CustomFieldsMixin', 'CustomFieldsMixin',
'ImageAttachmentsMixin', 'ImageAttachmentsMixin',
'JournalEntriesMixin', 'JournalEntriesMixin',
@ -9,6 +10,13 @@ __all__ = (
) )
class ChangelogMixin:
changelog = graphene.List('extras.graphql.types.ObjectChangeType')
def resolve_changelog(self, info):
return self.object_changes.restrict(info.context.user, 'view')
class CustomFieldsMixin: class CustomFieldsMixin:
custom_fields = GenericScalar() custom_fields = GenericScalar()

View File

@ -1,5 +1,5 @@
from extras import filtersets, models from extras import filtersets, models
from netbox.graphql.types import BaseObjectType from netbox.graphql.types import BaseObjectType, ObjectType
__all__ = ( __all__ = (
'ConfigContextType', 'ConfigContextType',
@ -8,12 +8,13 @@ __all__ = (
'ExportTemplateType', 'ExportTemplateType',
'ImageAttachmentType', 'ImageAttachmentType',
'JournalEntryType', 'JournalEntryType',
'ObjectChangeType',
'TagType', 'TagType',
'WebhookType', 'WebhookType',
) )
class ConfigContextType(BaseObjectType): class ConfigContextType(ObjectType):
class Meta: class Meta:
model = models.ConfigContext model = models.ConfigContext
@ -21,7 +22,7 @@ class ConfigContextType(BaseObjectType):
filterset_class = filtersets.ConfigContextFilterSet filterset_class = filtersets.ConfigContextFilterSet
class CustomFieldType(BaseObjectType): class CustomFieldType(ObjectType):
class Meta: class Meta:
model = models.CustomField model = models.CustomField
@ -29,7 +30,7 @@ class CustomFieldType(BaseObjectType):
filterset_class = filtersets.CustomFieldFilterSet filterset_class = filtersets.CustomFieldFilterSet
class CustomLinkType(BaseObjectType): class CustomLinkType(ObjectType):
class Meta: class Meta:
model = models.CustomLink model = models.CustomLink
@ -37,7 +38,7 @@ class CustomLinkType(BaseObjectType):
filterset_class = filtersets.CustomLinkFilterSet filterset_class = filtersets.CustomLinkFilterSet
class ExportTemplateType(BaseObjectType): class ExportTemplateType(ObjectType):
class Meta: class Meta:
model = models.ExportTemplate model = models.ExportTemplate
@ -53,7 +54,7 @@ class ImageAttachmentType(BaseObjectType):
filterset_class = filtersets.ImageAttachmentFilterSet filterset_class = filtersets.ImageAttachmentFilterSet
class JournalEntryType(BaseObjectType): class JournalEntryType(ObjectType):
class Meta: class Meta:
model = models.JournalEntry model = models.JournalEntry
@ -61,7 +62,15 @@ class JournalEntryType(BaseObjectType):
filterset_class = filtersets.JournalEntryFilterSet filterset_class = filtersets.JournalEntryFilterSet
class TagType(BaseObjectType): class ObjectChangeType(BaseObjectType):
class Meta:
model = models.ObjectChange
fields = '__all__'
filterset_class = filtersets.ObjectChangeFilterSet
class TagType(ObjectType):
class Meta: class Meta:
model = models.Tag model = models.Tag
@ -69,7 +78,7 @@ class TagType(BaseObjectType):
filterset_class = filtersets.TagFilterSet filterset_class = filtersets.TagFilterSet
class WebhookType(BaseObjectType): class WebhookType(ObjectType):
class Meta: class Meta:
model = models.Webhook model = models.Webhook

View File

@ -1,7 +1,7 @@
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from graphene_django import DjangoObjectType from graphene_django import DjangoObjectType
from extras.graphql.mixins import CustomFieldsMixin, JournalEntriesMixin, TagsMixin from extras.graphql.mixins import ChangelogMixin, CustomFieldsMixin, JournalEntriesMixin, TagsMixin
__all__ = ( __all__ = (
'BaseObjectType', 'BaseObjectType',
@ -27,7 +27,19 @@ class BaseObjectType(DjangoObjectType):
return queryset.restrict(info.context.user, 'view') return queryset.restrict(info.context.user, 'view')
class ObjectType(
ChangelogMixin,
BaseObjectType
):
"""
Base GraphQL object type for unclassified models which support change logging
"""
class Meta:
abstract = True
class OrganizationalObjectType( class OrganizationalObjectType(
ChangelogMixin,
CustomFieldsMixin, CustomFieldsMixin,
BaseObjectType BaseObjectType
): ):
@ -39,6 +51,7 @@ class OrganizationalObjectType(
class PrimaryObjectType( class PrimaryObjectType(
ChangelogMixin,
CustomFieldsMixin, CustomFieldsMixin,
JournalEntriesMixin, JournalEntriesMixin,
TagsMixin, TagsMixin,

View File

@ -40,6 +40,11 @@ class ChangeLoggingMixin(models.Model):
blank=True, blank=True,
null=True null=True
) )
object_changes = GenericRelation(
to='extras.ObjectChange',
content_type_field='changed_object_type',
object_id_field='changed_object_id'
)
class Meta: class Meta:
abstract = True abstract = True