Skip to content

Commit 1634fc2

Browse files
srinivasreddyasvetlov
authored andcommitted
bpo-32418: Add get_loop() method on Server, AbstractServer classes (#4997)
* 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
1 parent fc35932 commit 1634fc2

File tree

5 files changed

+27
-0
lines changed

5 files changed

+27
-0
lines changed

Doc/library/asyncio-eventloop.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,6 +913,12 @@ Server
913913
The server is closed asynchronously, use the :meth:`wait_closed`
914914
coroutine to wait until the server is closed.
915915

916+
.. method:: get_loop()
917+
918+
Gives the event loop associated with the server object.
919+
920+
.. versionadded:: 3.7
921+
916922
.. coroutinemethod:: wait_closed()
917923

918924
Wait until the :meth:`close` method completes.

Lib/asyncio/base_events.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,9 @@ def close(self):
185185
if self._active_count == 0:
186186
self._wakeup()
187187

188+
def get_loop(self):
189+
return self._loop
190+
188191
def _wakeup(self):
189192
waiters = self._waiters
190193
self._waiters = None

Lib/asyncio/events.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,10 @@ async def wait_closed(self):
155155
"""Coroutine to wait until service is closed."""
156156
return NotImplemented
157157

158+
def get_loop(self):
159+
""" Get the event loop the Server object is attached to."""
160+
return NotImplemented
161+
158162

159163
class AbstractEventLoop:
160164
"""Abstract event loop."""

Lib/test/test_asyncio/test_events.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2826,6 +2826,19 @@ class TestCGetEventLoop(GetEventLoopTestsMixin, unittest.TestCase):
28262826
get_running_loop_impl = events._c_get_running_loop
28272827
get_event_loop_impl = events._c_get_event_loop
28282828

2829+
class TestServer(unittest.TestCase):
2830+
2831+
def test_get_loop(self):
2832+
loop = asyncio.new_event_loop()
2833+
proto = MyProto(loop)
2834+
server = loop.run_until_complete(loop.create_server(lambda: proto, '0.0.0.0', 0))
2835+
self.assertEqual(server.get_loop(), loop)
2836+
loop.close()
2837+
2838+
class TestAbstractServer(unittest.TestCase):
2839+
2840+
def test_get_loop(self):
2841+
self.assertEqual(events.AbstractServer().get_loop(), NotImplemented)
28292842

28302843
if __name__ == '__main__':
28312844
unittest.main()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add get_loop() method to Server and AbstractServer classes.

0 commit comments

Comments
 (0)