mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
(Merge 3.4) Issue #21155: asyncio.EventLoop.create_unix_server() now raises a
ValueError if path and sock are specified at the same time. asyncio: Document Task.cancel() properly.
This commit is contained in:
commit
7b2262fe78
4 changed files with 37 additions and 0 deletions
|
@ -250,6 +250,25 @@ class Task(futures.Future):
|
||||||
print(line, file=file, end='')
|
print(line, file=file, end='')
|
||||||
|
|
||||||
def cancel(self):
|
def cancel(self):
|
||||||
|
"""Request that a task to cancel itself.
|
||||||
|
|
||||||
|
This arranges for a CancellationError to be thrown into the
|
||||||
|
wrapped coroutine on the next cycle through the event loop.
|
||||||
|
The coroutine then has a chance to clean up or even deny
|
||||||
|
the request using try/except/finally.
|
||||||
|
|
||||||
|
Contrary to Future.cancel(), this does not guarantee that the
|
||||||
|
task will be cancelled: the exception might be caught and
|
||||||
|
acted upon, delaying cancellation of the task or preventing it
|
||||||
|
completely. The task may also return a value or raise a
|
||||||
|
different exception.
|
||||||
|
|
||||||
|
Immediately after this method is called, Task.cancelled() will
|
||||||
|
not return True (unless the task was already cancelled). A
|
||||||
|
task will be marked as cancelled when the wrapped coroutine
|
||||||
|
terminates with a CancelledError exception (even if cancel()
|
||||||
|
was not called).
|
||||||
|
"""
|
||||||
if self.done():
|
if self.done():
|
||||||
return False
|
return False
|
||||||
if self._fut_waiter is not None:
|
if self._fut_waiter is not None:
|
||||||
|
|
|
@ -206,6 +206,10 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
|
||||||
raise TypeError('ssl argument must be an SSLContext or None')
|
raise TypeError('ssl argument must be an SSLContext or None')
|
||||||
|
|
||||||
if path is not None:
|
if path is not None:
|
||||||
|
if sock is not None:
|
||||||
|
raise ValueError(
|
||||||
|
'path and sock can not be specified at the same time')
|
||||||
|
|
||||||
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -703,6 +703,17 @@ class EventLoopTestsMixin:
|
||||||
# close server
|
# close server
|
||||||
server.close()
|
server.close()
|
||||||
|
|
||||||
|
@unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets')
|
||||||
|
def test_create_unix_server_path_socket_error(self):
|
||||||
|
proto = MyProto(loop=self.loop)
|
||||||
|
sock = socket.socket()
|
||||||
|
with sock:
|
||||||
|
f = self.loop.create_unix_server(lambda: proto, '/test', sock=sock)
|
||||||
|
with self.assertRaisesRegex(ValueError,
|
||||||
|
'path and sock can not be specified '
|
||||||
|
'at the same time'):
|
||||||
|
server = self.loop.run_until_complete(f)
|
||||||
|
|
||||||
def _create_ssl_context(self, certfile, keyfile=None):
|
def _create_ssl_context(self, certfile, keyfile=None):
|
||||||
sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
|
sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
|
||||||
sslcontext.options |= ssl.OP_NO_SSLv2
|
sslcontext.options |= ssl.OP_NO_SSLv2
|
||||||
|
|
|
@ -29,6 +29,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #21155: asyncio.EventLoop.create_unix_server() now raises a ValueError
|
||||||
|
if path and sock are specified at the same time.
|
||||||
|
|
||||||
- Issue #21136: Avoid unnecessary normalization of Fractions resulting from
|
- Issue #21136: Avoid unnecessary normalization of Fractions resulting from
|
||||||
power and other operations. Patch by Raymond Hettinger.
|
power and other operations. Patch by Raymond Hettinger.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue