Skip to content

Commit 562cafc

Browse files
committed
Fixed str on abstract types. Improved repr
1 parent 415b71f commit 562cafc

File tree

3 files changed

+29
-9
lines changed

3 files changed

+29
-9
lines changed

graphene/types/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def __setattr__(self, name, value):
2121
raise Exception("Can't modify frozen Options {0}".format(self))
2222

2323
def __repr__(self):
24-
return "<{} type={}>".format(self.__class__.__name__, self.class_type.__name__)
24+
return "<{} name={}>".format(self.__class__.__name__, repr(self.name))
2525

2626

2727
class BaseType(SubclassWithMeta):

graphene/types/tests/test_objecttype.py

+19-6
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ class MyObjectType(ObjectType):
4444
assert MyObjectType._meta.description == "Documentation"
4545
assert MyObjectType._meta.interfaces == tuple()
4646
assert MyObjectType._meta.fields == {}
47+
assert repr(
48+
MyObjectType) == "<MyObjectType meta=<ObjectTypeOptions name='MyObjectType'>>"
4749

4850

4951
def test_generate_objecttype_with_meta():
@@ -65,7 +67,6 @@ class MyObjectType(ObjectType):
6567

6668
class InnerObjectType(ObjectType):
6769
field = Field(MyType)
68-
6970

7071
assert MyObjectType._meta.name == "MyObjectType"
7172
example_field = MyObjectType._meta.fields['example']
@@ -115,7 +116,8 @@ class MyObjectType(ObjectType, MyAbstractType):
115116
assert MyObjectType._meta.interfaces == ()
116117
assert MyObjectType._meta.name == "MyObjectType"
117118
assert list(MyObjectType._meta.fields.keys()) == ['field1', 'field2']
118-
assert list(map(type, MyObjectType._meta.fields.values())) == [Field, Field]
119+
assert list(map(type, MyObjectType._meta.fields.values())) == [
120+
Field, Field]
119121

120122

121123
def test_generate_objecttype_inherit_abstracttype_reversed():
@@ -129,7 +131,8 @@ class MyObjectType(MyAbstractType, ObjectType):
129131
assert MyObjectType._meta.interfaces == ()
130132
assert MyObjectType._meta.name == "MyObjectType"
131133
assert list(MyObjectType._meta.fields.keys()) == ['field1', 'field2']
132-
assert list(map(type, MyObjectType._meta.fields.values())) == [Field, Field]
134+
assert list(map(type, MyObjectType._meta.fields.values())) == [
135+
Field, Field]
133136

134137

135138
def test_generate_objecttype_unmountedtype():
@@ -145,7 +148,8 @@ def test_parent_container_get_fields():
145148

146149

147150
def test_parent_container_interface_get_fields():
148-
assert list(ContainerWithInterface._meta.fields.keys()) == ['ifield', 'field1', 'field2']
151+
assert list(ContainerWithInterface._meta.fields.keys()) == [
152+
'ifield', 'field1', 'field2']
149153

150154

151155
def test_objecttype_as_container_only_args():
@@ -182,7 +186,8 @@ def test_objecttype_as_container_invalid_kwargs():
182186
with pytest.raises(TypeError) as excinfo:
183187
Container(unexisting_field="3")
184188

185-
assert "'unexisting_field' is an invalid keyword argument for Container" == str(excinfo.value)
189+
assert "'unexisting_field' is an invalid keyword argument for Container" == str(
190+
excinfo.value)
186191

187192

188193
def test_objecttype_container_benchmark(benchmark):
@@ -238,7 +243,6 @@ class Query(ObjectType):
238243
def resolve_user(self, info):
239244
return User()
240245

241-
242246
schema = Schema(query=Query)
243247
result = schema.execute(''' query basequery {
244248
user {
@@ -252,3 +256,12 @@ def resolve_user(self, info):
252256
'name': None,
253257
}
254258
}
259+
260+
261+
def test_abstract_objecttype_can_str():
262+
class MyObjectType(ObjectType):
263+
class Meta:
264+
abstract = True
265+
field = MyScalar()
266+
267+
assert str(MyObjectType) == "MyObjectType"

graphene/utils/subclass_with_meta.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66

77

88
class SubclassWithMeta_Meta(InitSubclassMeta):
9+
_meta = None
10+
11+
def __str__(cls):
12+
if cls._meta:
13+
return cls._meta.name
14+
return cls.__name__
915

1016
def __repr__(cls):
11-
return cls._meta.name
17+
return "<{} meta={}>".format(cls.__name__, repr(cls._meta))
1218

1319

1420
class SubclassWithMeta(six.with_metaclass(SubclassWithMeta_Meta)):
@@ -24,7 +30,8 @@ def __init_subclass__(cls, **meta_options):
2430
elif isclass(_Meta):
2531
_meta_props = props(_Meta)
2632
else:
27-
raise Exception("Meta have to be either a class or a dict. Received {}".format(_Meta))
33+
raise Exception(
34+
"Meta have to be either a class or a dict. Received {}".format(_Meta))
2835
delattr(cls, "Meta")
2936
options = dict(meta_options, **_meta_props)
3037

0 commit comments

Comments
 (0)