mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-16 19:40:39 +03:00
Added support for old behavior of get_node
This commit is contained in:
parent
f69665dcd8
commit
d6a5269f0b
|
@ -36,7 +36,7 @@ def test_django_interface():
|
|||
|
||||
@patch('graphene.contrib.django.tests.models.Article.objects.get', return_value=Article(id=1))
|
||||
def test_django_get_node(get):
|
||||
human = Human.get_node(1)
|
||||
human = Human.get_node(1, None)
|
||||
get.assert_called_with(id=1)
|
||||
assert human.id == 1
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ class DjangoNode(BaseNode, DjangoInterface):
|
|||
id = GlobalIDField()
|
||||
|
||||
@classmethod
|
||||
def get_node(cls, id):
|
||||
def get_node(cls, id, info=None):
|
||||
try:
|
||||
instance = cls._meta.model.objects.get(id=id)
|
||||
return cls(instance)
|
||||
|
|
|
@ -11,10 +11,32 @@ class OtherNode(relay.Node):
|
|||
name = graphene.String()
|
||||
|
||||
@classmethod
|
||||
def get_node(cls, id):
|
||||
def get_node(cls, id, info):
|
||||
pass
|
||||
|
||||
|
||||
def test_works_old_get_node():
|
||||
class Part(relay.Node):
|
||||
x = graphene.String()
|
||||
|
||||
@classmethod
|
||||
def get_node(cls, id):
|
||||
return id
|
||||
|
||||
assert Part.get_node(1) == 1
|
||||
|
||||
|
||||
def test_works_old_static_get_node():
|
||||
class Part(relay.Node):
|
||||
x = graphene.String()
|
||||
|
||||
@staticmethod
|
||||
def get_node(id):
|
||||
return id
|
||||
|
||||
assert Part.get_node(1) == 1
|
||||
|
||||
|
||||
def test_field_no_contributed_raises_error():
|
||||
with raises(Exception) as excinfo:
|
||||
class Part(relay.Node):
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import warnings
|
||||
from functools import wraps
|
||||
from graphql_relay.node.node import to_global_id
|
||||
|
||||
from ..core.types import (Boolean, Field, InputObjectType, Interface, List,
|
||||
|
@ -73,8 +75,26 @@ class BaseNode(object):
|
|||
def _prepare_class(cls):
|
||||
from graphene.relay.utils import is_node
|
||||
if is_node(cls):
|
||||
assert hasattr(
|
||||
cls, 'get_node'), 'get_node classmethod not found in %s Node' % cls
|
||||
get_node = getattr(cls, 'get_node')
|
||||
assert get_node, 'get_node classmethod not found in %s Node' % cls
|
||||
assert callable(get_node), 'get_node have to be callable'
|
||||
args = 3
|
||||
if isinstance(get_node, staticmethod):
|
||||
args -= 1
|
||||
|
||||
if get_node.func_code.co_argcount < args:
|
||||
warnings.warn("get_node will receive also the info arg"
|
||||
" in future versions of graphene".format(cls.__name__),
|
||||
FutureWarning)
|
||||
|
||||
@staticmethod
|
||||
@wraps(get_node)
|
||||
def wrapped_node(*node_args):
|
||||
if len(node_args) < args:
|
||||
node_args += (None, )
|
||||
return get_node(*node_args[:-1])
|
||||
|
||||
setattr(cls, 'get_node', wrapped_node)
|
||||
|
||||
def to_global_id(self):
|
||||
type_name = self._meta.type_name
|
||||
|
|
Loading…
Reference in New Issue
Block a user