Allow setting of private metadata.

This commit is contained in:
markus 2016-11-15 14:52:35 +00:00
parent 3c99302ed6
commit f728de311e
8 changed files with 73 additions and 11 deletions

View File

@ -8,8 +8,9 @@ from .dynamic import Dynamic
class Argument(OrderedType): class Argument(OrderedType):
def __init__(self, type, default_value=None, description=None, name=None, required=False, _creation_counter=None): def __init__(self, type, default_value=None, description=None, name=None, required=False,
super(Argument, self).__init__(_creation_counter=_creation_counter) _creation_counter=None, _metadata=None):
super(Argument, self).__init__(_creation_counter=_creation_counter, _metadata=_metadata)
if required: if required:
type = NonNull(type) type = NonNull(type)

View File

@ -23,8 +23,8 @@ class Field(OrderedType):
def __init__(self, type, args=None, resolver=None, source=None, def __init__(self, type, args=None, resolver=None, source=None,
deprecation_reason=None, name=None, description=None, deprecation_reason=None, name=None, description=None,
required=False, _creation_counter=None, default_value=None, required=False, _creation_counter=None, default_value=None,
**extra_args): _metadata=None, **extra_args):
super(Field, self).__init__(_creation_counter=_creation_counter) super(Field, self).__init__(_creation_counter=_creation_counter, _metadata=_metadata)
assert not args or isinstance(args, Mapping), ( assert not args or isinstance(args, Mapping), (
'Arguments in a field have to be a mapping, received "{}".' 'Arguments in a field have to be a mapping, received "{}".'
).format(args) ).format(args)

View File

@ -6,8 +6,8 @@ class InputField(OrderedType):
def __init__(self, type, name=None, default_value=None, def __init__(self, type, name=None, default_value=None,
deprecation_reason=None, description=None, deprecation_reason=None, description=None,
required=False, _creation_counter=None, **extra_args): required=False, _creation_counter=None, _metadata=None, **extra_args):
super(InputField, self).__init__(_creation_counter=_creation_counter) super(InputField, self).__init__(_creation_counter=_creation_counter, _metadata=_metadata)
self.name = name self.name = name
if required: if required:
type = NonNull(type) type = NonNull(type)

View File

@ -0,0 +1,44 @@
from ..unmountedtype import UnmountedType
class MyUnmountedType(UnmountedType):
@classmethod
def get_type(cls):
'''
This function is called when the unmounted type (Scalar instance)
is mounted (as a Field, InputField or Argument)
'''
return cls
def test_unmountedtype_allows_setting_of_metadata():
one = UnmountedType(_metadata='Test')
assert one.metadata == 'Test'
def test_unmountedtype_metadata_defaults_to_none():
one = UnmountedType()
assert one.metadata is None
def test_unmountedtype_passes_on_metadata_to_field():
one = MyUnmountedType(_metadata='Other Test')
one_field = one.Field()
assert one_field.metadata == 'Other Test'
def test_unmountedtype_passes_on_metadata_to_input_field():
one = MyUnmountedType(_metadata='Other Test')
one_input_field = one.InputField()
assert one_input_field.metadata == 'Other Test'
def test_unmountedtype_passes_on_metadata_to_argument():
one = MyUnmountedType(_metadata='Other Test')
one_argument = one.Argument()
assert one_argument.metadata == 'Other Test'

View File

@ -15,10 +15,11 @@ class UnmountedType(OrderedType):
>>> my_field = String(description='Description here') >>> my_field = String(description='Description here')
''' '''
def __init__(self, *args, **kwargs): def __init__(self, _metadata=None, *args, **kwargs):
super(UnmountedType, self).__init__() super(UnmountedType, self).__init__()
self.args = args self.args = args
self.kwargs = kwargs self.kwargs = kwargs
self.metadata = _metadata
def get_type(self): def get_type(self):
''' '''
@ -36,6 +37,7 @@ class UnmountedType(OrderedType):
self.get_type(), self.get_type(),
*self.args, *self.args,
_creation_counter=self.creation_counter, _creation_counter=self.creation_counter,
_metadata=self.metadata,
**self.kwargs **self.kwargs
) )
@ -48,6 +50,7 @@ class UnmountedType(OrderedType):
self.get_type(), self.get_type(),
*self.args, *self.args,
_creation_counter=self.creation_counter, _creation_counter=self.creation_counter,
_metadata=self.metadata,
**self.kwargs **self.kwargs
) )
@ -60,6 +63,7 @@ class UnmountedType(OrderedType):
self.get_type(), self.get_type(),
*self.args, *self.args,
_creation_counter=self.creation_counter, _creation_counter=self.creation_counter,
_metadata=self.metadata,
**self.kwargs **self.kwargs
) )

View File

@ -5,8 +5,9 @@ from functools import total_ordering
class OrderedType(object): class OrderedType(object):
creation_counter = 1 creation_counter = 1
def __init__(self, _creation_counter=None): def __init__(self, _creation_counter=None, _metadata=None):
self.creation_counter = _creation_counter or self.gen_counter() self.creation_counter = _creation_counter or self.gen_counter()
self.metadata = _metadata
@staticmethod @staticmethod
def gen_counter(): def gen_counter():

View File

@ -39,3 +39,15 @@ def test_orderedtype_non_orderabletypes():
assert one.__lt__(1) == NotImplemented assert one.__lt__(1) == NotImplemented
assert one.__gt__(1) == NotImplemented assert one.__gt__(1) == NotImplemented
assert not one == 1 assert not one == 1
def test_orderedtype_has_metadata():
one = OrderedType(_metadata='Test')
assert one.metadata == 'Test'
def test_orderedtype_metadata_defaults_to_none():
one = OrderedType()
assert one.metadata == None