Improved abstract type

This commit is contained in:
Syrus Akbary 2017-07-23 19:13:33 -07:00
parent 8bac3dc9e5
commit 85d3145862
2 changed files with 48 additions and 5 deletions

View File

@ -1,9 +1,12 @@
from ..pyutils.init_subclass import InitSubclassMeta from ..utils.subclass_with_meta import SubclassWithMeta
from ..utils.deprecated import warn_deprecation
class AbstractType(object): class AbstractType(SubclassWithMeta):
__metaclass__ = InitSubclassMeta
def __init_subclass__(cls, *args, **kwargs): def __init_subclass__(cls, *args, **kwargs):
print("Abstract type is deprecated") warn_deprecation(
# super(AbstractType, cls).__init_subclass__(*args, **kwargs) "Abstract type is deprecated, please use normal object inheritance instead.\n"
"See more: https://github.com/graphql-python/graphene/blob/2.0/UPGRADE-v2.0.md#deprecations"
)
super(AbstractType, cls).__init_subclass__(*args, **kwargs)

View File

@ -0,0 +1,40 @@
import pytest
from ..objecttype import ObjectType
from ..unmountedtype import UnmountedType
from ..abstracttype import AbstractType
from ..field import Field
from ...utils import deprecated
class MyType(ObjectType):
pass
class MyScalar(UnmountedType):
def get_type(self):
return MyType
def test_abstract_objecttype_warn_deprecation(mocker):
mocker.patch.object(deprecated, 'warn_deprecation')
class MyAbstractType(AbstractType):
field1 = MyScalar()
deprecated.warn_deprecation.assert_called_once()
def test_generate_objecttype_inherit_abstracttype():
class MyAbstractType(AbstractType):
field1 = MyScalar()
class MyObjectType(ObjectType, MyAbstractType):
field2 = MyScalar()
assert MyObjectType._meta.description is None
assert MyObjectType._meta.interfaces == ()
assert MyObjectType._meta.name == "MyObjectType"
assert list(MyObjectType._meta.fields.keys()) == ['field1', 'field2']
assert list(map(type, MyObjectType._meta.fields.values())) == [Field, Field]