[pypy-commit] pypy py3.5: repr() for operator.attrgetter/itemgetter/methodcaller
arigo
pypy.commits at gmail.com
Tue Nov 1 05:58:04 EDT 2016
Author: Armin Rigo <arigo at tunes.org>
Branch: py3.5
Changeset: r88016:ba41422861e0
Date: 2016-11-01 10:57 +0100
http://bitbucket.org/pypy/pypy/changeset/ba41422861e0/
Log: repr() for operator.attrgetter/itemgetter/methodcaller
diff --git a/pypy/module/operator/app_operator.py b/pypy/module/operator/app_operator.py
--- a/pypy/module/operator/app_operator.py
+++ b/pypy/module/operator/app_operator.py
@@ -56,6 +56,17 @@
for attrs in self._multi_attrs
])
+ def __repr__(self):
+ try:
+ a = repr(self._simple_attr)
+ except AttributeError:
+ try:
+ a = repr('.'.join(self._single_attr))
+ except AttributeError:
+ lst = self._multi_attrs
+ a = ', '.join([repr('.'.join(a1)) for a1 in lst])
+ return 'operator.attrgetter(%s)' % (a,)
+
class itemgetter(object):
def __init__(self, item, *items):
@@ -71,6 +82,13 @@
else:
return tuple([obj[i] for i in self._idx])
+ def __repr__(self):
+ if self._single:
+ a = repr(self._idx)
+ else:
+ a = ', '.join([repr(i) for i in self._idx])
+ return 'operator.itemgetter(%s)' % (a,)
+
class methodcaller(object):
def __init__(self, method_name, *args, **kwargs):
@@ -80,3 +98,11 @@
def __call__(self, obj):
return getattr(obj, self._method_name)(*self._args, **self._kwargs)
+
+ def __repr__(self):
+ args = [repr(self._method_name)]
+ for a in self._args:
+ args.append(repr(a))
+ for key, value in self._kwargs.items():
+ args.append('%s=%r' % (key, value))
+ return 'operator.methodcaller(%s)' % (', '.join(args),)
diff --git a/pypy/module/operator/test/test_operator.py b/pypy/module/operator/test/test_operator.py
--- a/pypy/module/operator/test/test_operator.py
+++ b/pypy/module/operator/test/test_operator.py
@@ -326,3 +326,23 @@
def test_length_hint(self):
import _operator as operator
assert operator.length_hint([1, 2]) == 2
+
+ def test_repr_attrgetter(self):
+ import _operator as operator
+ assert repr(operator.attrgetter("foo")) == "operator.attrgetter('foo')"
+ assert repr(operator.attrgetter("foo", 'bar')) == (
+ "operator.attrgetter('foo', 'bar')")
+ assert repr(operator.attrgetter("foo.bar")) == (
+ "operator.attrgetter('foo.bar')")
+ assert repr(operator.attrgetter("foo", 'bar.baz')) == (
+ "operator.attrgetter('foo', 'bar.baz')")
+
+ def test_repr_itemgetter(self):
+ import _operator as operator
+ assert repr(operator.itemgetter(2)) == "operator.itemgetter(2)"
+ assert repr(operator.itemgetter(2, 3)) == "operator.itemgetter(2, 3)"
+
+ def test_repr_methodcaller(self):
+ import _operator as operator
+ assert repr(operator.methodcaller("foo", "bar", baz=42)) == (
+ "operator.methodcaller('foo', 'bar', baz=42)")
More information about the pypy-commit
mailing list