diff --git a/six.py b/six.py index d0aece89f..e48bf0415 100644 --- a/six.py +++ b/six.py @@ -609,11 +609,21 @@ def iteritems(d, **kw): def iterlists(d, **kw): return d.iterlists(**kw) - viewkeys = operator.methodcaller("viewkeys") + def viewkeys(d): + if isinstance(d, types.DictProxyType): + d = dict(d) + return d.viewkeys() - viewvalues = operator.methodcaller("viewvalues") + def viewvalues(d): + if isinstance(d, types.DictProxyType): + d = dict(d) + return d.viewvalues() + + def viewitems(d): + if isinstance(d, types.DictProxyType): + d = dict(d) + return d.viewitems() - viewitems = operator.methodcaller("viewitems") _add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") _add_doc(itervalues, "Return an iterator over the values of a dictionary.")