]> granicus.if.org Git - python/commitdiff
bpo-32418: Add get_loop() method on Server, AbstractServer classes (#4997)
authorSrinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి) <srinivasreddy@users.noreply.github.com>
Sat, 30 Dec 2017 15:09:32 +0000 (20:39 +0530)
committerAndrew Svetlov <andrew.svetlov@gmail.com>
Sat, 30 Dec 2017 15:09:32 +0000 (17:09 +0200)
* Add abstract get_loop() method to Server, AbstractServer classes.
* Add test cases for get_loop() method in Server, AbstractServer classes
* Add documentation for get_loop() method

Doc/library/asyncio-eventloop.rst
Lib/asyncio/base_events.py
Lib/asyncio/events.py
Lib/test/test_asyncio/test_events.py
Misc/NEWS.d/next/Documentation/2017-12-24-17-29-37.bpo-32418.eZe-ID.rst [new file with mode: 0644]

index 33b86d6f033c09b460dad79ecfb80606291e86e6..4fbbcd86cf41e9331fd5253afa8211c89a2fb3e8 100644 (file)
@@ -913,6 +913,12 @@ Server
       The server is closed asynchronously, use the :meth:`wait_closed`
       coroutine to wait until the server is closed.
 
+   .. method:: get_loop()
+
+      Gives the event loop associated with the server object.
+
+      .. versionadded:: 3.7
+
    .. coroutinemethod:: wait_closed()
 
       Wait until the :meth:`close` method completes.
index 00831b398532140c17feb3e01f82fcfe2beb3d06..ab002319c18edc0db3ee1bb34ace6391fe317ed0 100644 (file)
@@ -185,6 +185,9 @@ class Server(events.AbstractServer):
         if self._active_count == 0:
             self._wakeup()
 
+    def get_loop(self):
+        return self._loop
+
     def _wakeup(self):
         waiters = self._waiters
         self._waiters = None
index 9496d5c765fafc0a4ae90cb8c2a9a51bd567f77f..731a0c5e802b1ba59dd10fb48b84b7c33d7b92da 100644 (file)
@@ -155,6 +155,10 @@ class AbstractServer:
         """Coroutine to wait until service is closed."""
         return NotImplemented
 
+    def get_loop(self):
+        """ Get the event loop the Server object is attached to."""
+        return NotImplemented
+
 
 class AbstractEventLoop:
     """Abstract event loop."""
index da2e036648b0504f708e263f241881c85d212f42..e8320564c7457bf51ae34e20a544b9c2023f5e13 100644 (file)
@@ -2826,6 +2826,19 @@ else:
         get_running_loop_impl = events._c_get_running_loop
         get_event_loop_impl = events._c_get_event_loop
 
+class TestServer(unittest.TestCase):
+
+    def test_get_loop(self):
+        loop = asyncio.new_event_loop()
+        proto = MyProto(loop)
+        server = loop.run_until_complete(loop.create_server(lambda: proto, '0.0.0.0', 0))
+        self.assertEqual(server.get_loop(), loop)
+        loop.close()
+
+class TestAbstractServer(unittest.TestCase):
+
+    def test_get_loop(self):
+        self.assertEqual(events.AbstractServer().get_loop(), NotImplemented)
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Misc/NEWS.d/next/Documentation/2017-12-24-17-29-37.bpo-32418.eZe-ID.rst b/Misc/NEWS.d/next/Documentation/2017-12-24-17-29-37.bpo-32418.eZe-ID.rst
new file mode 100644 (file)
index 0000000..9441b74
--- /dev/null
@@ -0,0 +1 @@
+Add get_loop() method to Server and AbstractServer classes.