diff --git a/graphene/tests/issues/test_425.py b/graphene/tests/issues/test_425.py index 95a1d79d..08bdde8c 100644 --- a/graphene/tests/issues/test_425.py +++ b/graphene/tests/issues/test_425.py @@ -20,8 +20,8 @@ class SpecialObjectTypeMeta(ObjectTypeMeta): other_attr='default', ) - return ObjectTypeMeta.__new__(cls, name, bases, dict(attrs, _meta=options)) - + cls = ObjectTypeMeta.__new__(cls, name, bases, dict(attrs, _meta=options)) + assert cls._meta is options return cls diff --git a/graphene/types/objecttype.py b/graphene/types/objecttype.py index b92af9e5..bedc5e76 100644 --- a/graphene/types/objecttype.py +++ b/graphene/types/objecttype.py @@ -20,15 +20,21 @@ class ObjectTypeMeta(AbstractTypeMeta): return type.__new__(cls, name, bases, attrs) _meta = attrs.pop('_meta', None) - options = Options( - attrs.pop('Meta', None), + defaults = dict( name=name, description=trim_docstring(attrs.get('__doc__')), interfaces=(), default_resolver=None, local_fields=OrderedDict(), ) - options.extend_with_meta(_meta) + if not _meta: + options = Options( + attrs.pop('Meta', None), + **defaults + ) + else: + options = _meta.extend_with_defaults(defaults) + options.base_fields = get_base_fields(bases, _as=Field) if not options.local_fields: diff --git a/graphene/types/options.py b/graphene/types/options.py index 43f7154b..7cefbea0 100644 --- a/graphene/types/options.py +++ b/graphene/types/options.py @@ -30,12 +30,11 @@ class Options(object): ) ) - def extend_with_meta(self, meta): - if not meta: - return - meta_attrs = props(meta) - for attr_name, value in meta_attrs.items(): - setattr(self, attr_name, value) + def extend_with_defaults(self, defaults): + for attr_name, value in defaults.items(): + if not hasattr(self, attr_name): + setattr(self, attr_name, value) + return self def __repr__(self): options_props = props(self)