Skip to content

Commit 48efec3

Browse files
committed
Improved Options merge attrs. Fixed #432
1 parent d5960a7 commit 48efec3

File tree

3 files changed

+16
-11
lines changed

3 files changed

+16
-11
lines changed

graphene/tests/issues/test_425.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ def __new__(cls, name, bases, attrs):
2020
other_attr='default',
2121
)
2222

23-
return ObjectTypeMeta.__new__(cls, name, bases, dict(attrs, _meta=options))
24-
23+
cls = ObjectTypeMeta.__new__(cls, name, bases, dict(attrs, _meta=options))
24+
assert cls._meta is options
2525
return cls
2626

2727

graphene/types/objecttype.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,21 @@ def __new__(cls, name, bases, attrs):
2020
return type.__new__(cls, name, bases, attrs)
2121

2222
_meta = attrs.pop('_meta', None)
23-
options = Options(
24-
attrs.pop('Meta', None),
23+
defaults = dict(
2524
name=name,
2625
description=trim_docstring(attrs.get('__doc__')),
2726
interfaces=(),
2827
default_resolver=None,
2928
local_fields=OrderedDict(),
3029
)
31-
options.extend_with_meta(_meta)
30+
if not _meta:
31+
options = Options(
32+
attrs.pop('Meta', None),
33+
**defaults
34+
)
35+
else:
36+
options = _meta.extend_with_defaults(defaults)
37+
3238
options.base_fields = get_base_fields(bases, _as=Field)
3339

3440
if not options.local_fields:

graphene/types/options.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,11 @@ def __init__(self, meta=None, **defaults):
3030
)
3131
)
3232

33-
def extend_with_meta(self, meta):
34-
if not meta:
35-
return
36-
meta_attrs = props(meta)
37-
for attr_name, value in meta_attrs.items():
38-
setattr(self, attr_name, value)
33+
def extend_with_defaults(self, defaults):
34+
for attr_name, value in defaults.items():
35+
if not hasattr(self, attr_name):
36+
setattr(self, attr_name, value)
37+
return self
3938

4039
def __repr__(self):
4140
options_props = props(self)

0 commit comments

Comments
 (0)