mirror of
https://github.com/graphql-python/graphene.git
synced 2025-07-27 08:19:45 +03:00
Allow custom mounted classes
This commit is contained in:
parent
27cd00b9f9
commit
4c72942b95
|
@ -4,6 +4,8 @@ from .unmountedtype import UnmountedType
|
|||
|
||||
class MountedType(OrderedType):
|
||||
|
||||
_mount_cls_override = None
|
||||
|
||||
@classmethod
|
||||
def mount(cls, unmounted): # noqa: N802
|
||||
'''
|
||||
|
@ -13,7 +15,9 @@ class MountedType(OrderedType):
|
|||
'{} can\'t mount {}'
|
||||
).format(cls.__name__, repr(unmounted))
|
||||
|
||||
return cls(
|
||||
mount_cls = cls._mount_cls_override or cls
|
||||
|
||||
return mount_cls(
|
||||
unmounted.get_type(),
|
||||
*unmounted.args,
|
||||
_creation_counter=unmounted.creation_counter,
|
||||
|
|
60
graphene/types/tests/test_mountedtype.py
Normal file
60
graphene/types/tests/test_mountedtype.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
import pytest
|
||||
|
||||
from ..mountedtype import MountedType
|
||||
from ..field import Field
|
||||
from ..objecttype import ObjectType
|
||||
from ..scalars import String
|
||||
|
||||
|
||||
class CustomField(Field):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.metadata = kwargs.pop('metadata', None)
|
||||
super(CustomField, self).__init__(*args, **kwargs)
|
||||
|
||||
|
||||
def test_mounted_type():
|
||||
unmounted = String()
|
||||
mounted = Field.mount(unmounted)
|
||||
assert isinstance(mounted, Field)
|
||||
assert mounted.type == String
|
||||
|
||||
|
||||
def test_mounted_type_custom():
|
||||
unmounted = String(metadata={'hey': 'yo!'})
|
||||
mounted = CustomField.mount(unmounted)
|
||||
assert isinstance(mounted, CustomField)
|
||||
assert mounted.type == String
|
||||
assert mounted.metadata == {'hey': 'yo!'}
|
||||
|
||||
|
||||
@pytest.yield_fixture
|
||||
def custom_field():
|
||||
# We set the override
|
||||
Field._mount_cls_override = CustomField
|
||||
|
||||
# Run the test
|
||||
yield CustomField
|
||||
|
||||
# Remove the class override (back to the original state)
|
||||
Field._mount_cls_override = None
|
||||
|
||||
|
||||
def test_mounted_type_overrided(custom_field):
|
||||
# This function is using the custom_field yield fixture
|
||||
|
||||
unmounted = String(metadata={'hey': 'yo!'})
|
||||
mounted = Field.mount(unmounted)
|
||||
assert isinstance(mounted, CustomField)
|
||||
assert mounted.type == String
|
||||
assert mounted.metadata == {'hey': 'yo!'}
|
||||
|
||||
|
||||
def test_mounted_type_overrided(custom_field):
|
||||
# This function is using the custom_field yield fixture
|
||||
|
||||
class Query(ObjectType):
|
||||
test = String(metadata={'other': 'thing'})
|
||||
|
||||
test_field = Query._meta.fields['test']
|
||||
assert isinstance(test_field, CustomField)
|
||||
assert test_field.metadata == {'other': 'thing'}
|
Loading…
Reference in New Issue
Block a user