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):
|
class MountedType(OrderedType):
|
||||||
|
|
||||||
|
_mount_cls_override = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def mount(cls, unmounted): # noqa: N802
|
def mount(cls, unmounted): # noqa: N802
|
||||||
'''
|
'''
|
||||||
|
@ -13,7 +15,9 @@ class MountedType(OrderedType):
|
||||||
'{} can\'t mount {}'
|
'{} can\'t mount {}'
|
||||||
).format(cls.__name__, repr(unmounted))
|
).format(cls.__name__, repr(unmounted))
|
||||||
|
|
||||||
return cls(
|
mount_cls = cls._mount_cls_override or cls
|
||||||
|
|
||||||
|
return mount_cls(
|
||||||
unmounted.get_type(),
|
unmounted.get_type(),
|
||||||
*unmounted.args,
|
*unmounted.args,
|
||||||
_creation_counter=unmounted.creation_counter,
|
_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