[pypy-commit] pypy py3.5: epoll() objects now support the `with` statement

amauryfa pypy.commits at gmail.com
Sun Nov 6 12:10:50 EST 2016


Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: py3.5
Changeset: r88152:332f1e3f75da
Date: 2016-11-06 17:09 +0100
http://bitbucket.org/pypy/pypy/changeset/332f1e3f75da/

Log:	epoll() objects now support the `with` statement

diff --git a/pypy/module/select/interp_epoll.py b/pypy/module/select/interp_epoll.py
--- a/pypy/module/select/interp_epoll.py
+++ b/pypy/module/select/interp_epoll.py
@@ -177,6 +177,13 @@
                 )
             return space.newlist(elist_w)
 
+    def descr_enter(self, space):
+        self.check_closed(space)
+        return self
+
+    def descr_exit(self, space, __args__):
+        self.close()
+
 
 W_Epoll.typedef = TypeDef("select.epoll",
     __new__ = interp2app(W_Epoll.descr__new__.im_func),
@@ -189,5 +196,7 @@
     unregister = interp2app(W_Epoll.descr_unregister),
     modify = interp2app(W_Epoll.descr_modify),
     poll = interp2app(W_Epoll.descr_poll),
+    __enter__ = interp2app(W_Epoll.descr_enter),
+    __exit__ = interp2app(W_Epoll.descr_exit),
 )
 W_Epoll.typedef.acceptable_as_base_class = False
diff --git a/pypy/module/select/test/test_epoll.py b/pypy/module/select/test/test_epoll.py
--- a/pypy/module/select/test/test_epoll.py
+++ b/pypy/module/select/test/test_epoll.py
@@ -57,6 +57,16 @@
         assert ep.closed
         raises(ValueError, ep.fileno)
 
+    def test_with(self):
+        import select
+
+        ep = select.epoll(16)
+        assert ep.fileno() > 0
+        with ep:
+            assert not ep.closed
+        assert ep.closed
+        raises(ValueError, ep.__enter__)
+
     def test_badcreate(self):
         import select
 


More information about the pypy-commit mailing list