Refactor base Graphene object types

This commit is contained in:
jeremystretch 2021-08-03 13:49:12 -04:00
parent 8c7ef2a95e
commit c7ef34fb90
2 changed files with 23 additions and 16 deletions

View File

@ -1,12 +1,29 @@
import graphene import graphene
from graphene.types.generic import GenericScalar
__all__ = ( __all__ = (
'CustomFieldsMixin',
'ImageAttachmentsMixin', 'ImageAttachmentsMixin',
'TagsMixin',
) )
class CustomFieldsMixin:
custom_fields = GenericScalar()
def resolve_custom_fields(self, info):
return self.custom_field_data
class ImageAttachmentsMixin: class ImageAttachmentsMixin:
image_attachments = graphene.List('extras.graphql.types.ImageAttachmentType') image_attachments = graphene.List('extras.graphql.types.ImageAttachmentType')
def resolve_image_attachments(self, info): def resolve_image_attachments(self, info):
return self.images.restrict(info.context.user, 'view') return self.images.restrict(info.context.user, 'view')
class TagsMixin:
tags = graphene.List(graphene.String)
def resolve_tags(self, info):
return self.tags.all()

View File

@ -1,8 +1,8 @@
import graphene
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from graphene.types.generic import GenericScalar
from graphene_django import DjangoObjectType from graphene_django import DjangoObjectType
from extras.graphql.mixins import CustomFieldsMixin, TagsMixin
__all__ = ( __all__ = (
'BaseObjectType', 'BaseObjectType',
'ObjectType', 'ObjectType',
@ -27,31 +27,21 @@ class BaseObjectType(DjangoObjectType):
return queryset.restrict(info.context.user, 'view') return queryset.restrict(info.context.user, 'view')
class ObjectType(BaseObjectType): class ObjectType(CustomFieldsMixin, BaseObjectType):
""" """
Extends BaseObjectType with support for custom field data. Extends BaseObjectType with support for custom fields.
""" """
custom_fields = GenericScalar()
class Meta: class Meta:
abstract = True abstract = True
def resolve_custom_fields(self, info):
return self.custom_field_data
class TaggedObjectType(CustomFieldsMixin, TagsMixin, BaseObjectType):
class TaggedObjectType(ObjectType):
""" """
Extends ObjectType with support for Tags Extends BaseObjectType with support for custom fields and tags
""" """
tags = graphene.List(graphene.String)
class Meta: class Meta:
abstract = True abstract = True
def resolve_tags(self, info):
return self.tags.all()
# #
# Miscellaneous types # Miscellaneous types