[pypy-commit] pypy mappingproxy: Implement comparison methods for mappingproxy

rlamy pypy.commits at gmail.com
Wed Aug 3 13:47:32 EDT 2016


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: mappingproxy
Changeset: r86006:361a24241f59
Date: 2016-08-03 18:47 +0100
http://bitbucket.org/pypy/pypy/changeset/361a24241f59/

Log:	Implement comparison methods for mappingproxy

diff --git a/pypy/objspace/std/dictproxyobject.py b/pypy/objspace/std/dictproxyobject.py
--- a/pypy/objspace/std/dictproxyobject.py
+++ b/pypy/objspace/std/dictproxyobject.py
@@ -59,6 +59,19 @@
     def copy_w(self, space):
         return space.call_method(self.w_mapping, "copy")
 
+cmp_methods = {}
+def make_cmp_method(op):
+    def descr_op(self, space, w_other):
+        return getattr(space, op)(self.w_mapping, w_other)
+    descr_name = 'descr_' + op
+    descr_op.__name__ = descr_name
+    setattr(W_DictProxyObject, descr_name, descr_op)
+    cmp_methods['__%s__' % op] = interp2app(getattr(W_DictProxyObject, descr_name))
+
+for op in ['eq', 'ne', 'gt', 'ge', 'lt', 'le']:
+    make_cmp_method(op)
+
+
 W_DictProxyObject.typedef = TypeDef(
     'mappingproxy',
     __new__=interp2app(W_DictProxyObject.descr_new),
@@ -73,5 +86,6 @@
     keys=interp2app(W_DictProxyObject.keys_w),
     values=interp2app(W_DictProxyObject.values_w),
     items=interp2app(W_DictProxyObject.items_w),
-    copy=interp2app(W_DictProxyObject.copy_w)
+    copy=interp2app(W_DictProxyObject.copy_w),
+    **cmp_methods
 )


More information about the pypy-commit mailing list