diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..25017e7 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,157 @@ +Tulip 3.4.2 +=========== + +New shiny methods like create_task(), better documentation, much better debug +mode, better tests. + +asyncio API +----------- + +* Add BaseEventLoop.create_task() method: schedule a coroutine object. + It allows other asyncio implementations to use their own Task class to + change its behaviour. + +* New BaseEventLoop methods: + + - create_task(): schedule a coroutine + - get_debug() + - is_closed() + - set_debug() + +* Add _FlowControlMixin.get_write_buffer_limits() method + +* sock_recv(), sock_sendall(), sock_connect(), sock_accept() methods of + SelectorEventLoop now raise an exception if the socket is blocking mode + +* Include unix_events/windows_events symbols in asyncio.__all__. + Examples: SelectorEventLoop, ProactorEventLoop, DefaultEventLoopPolicy. + +* attach(), detach(), loop, active_count and waiters attributes of the Server + class are now private + +* BaseEventLoop: run_forever(), run_until_complete() now raises an exception if + the event loop was closed + +* close() now raises an exception if the event loop is running, because pending + callbacks would be lost + +* Queue now accepts a float for the maximum size. + +* Process.communicate() now ignores BrokenPipeError and ConnectionResetError + exceptions, as Popen.communicate() of the subprocess module + + +Performances +------------ + +* Optimize handling of cancelled timers + + +Debug +----- + +* Future (and Task), CoroWrapper and Handle now remembers where they were + created (new _source_traceback object), traceback displayed when errors are + logged. + +* On Python 3.4 and newer, Task destrutor now logs a warning if the task was + destroyed while it was still pending. It occurs if the last reference + to the task was removed, while the coroutine didn't finish yet. + +* Much more useful events are logged: + + - Event loop closed + - Network connection + - Creation of a subprocess + - Pipe lost + - Log many errors previously silently ignored + - SSL handshake failure + - etc. + +* BaseEventLoop._debug is now True if the envrionement variable + PYTHONASYNCIODEBUG is set + +* Log the duration of DNS resolution and SSL handshake + +* Log a warning if a callback blocks the event loop longer than 100 ms + (configurable duration) + +* repr(CoroWrapper) and repr(Task) now contains the current status of the + coroutine (running, done), current filename and line number, and filename and + line number where the object was created + +* Enhance representation (repr) of transports: add the file descriptor, status + (idle, polling, writing, etc.), size of the write buffer, ... + +* Add repr(BaseEventLoop) + +* run_until_complete() doesn't log a warning anymore when called with a + coroutine object which raises an exception. + + +Bugfixes +-------- + +* windows_utils.socketpair() now ensures that sockets are closed in case + of error. + +* Rewrite bricks of the IocpProactor() to make it more reliable + +* IocpProactor destructor now closes it. + +* _OverlappedFuture.set_exception() now cancels the overlapped operation. + +* Rewrite _WaitHandleFuture: + + - cancel() is now able to signal the cancellation to the overlapped object + - _unregister_wait() now catchs and logs exceptions + +* PipeServer.close() (class used on Windows) now cancels the accept pipe + future. + +* Rewrite signal handling in the UNIX implementation of SelectorEventLoop: + use the self-pipe to store pending signals instead of registering a + signal handler calling directly _handle_signal(). The change fixes a + race condition. + +* create_unix_server(): close the socket on error. + +* Fix wait_for() + +* Rewrite gather() + +* drain() is now a classic coroutine, no more special return value (empty + tuple) + +* Rewrite SelectorEventLoop.sock_connect() to handle correctly timeout + +* Process data of the self-pipe faster to accept more pending events, + especially signals written by signal handlers: the callback reads all pending + data, not only a single byte + +* Don't try to set the result of a Future anymore if it was cancelled + (explicitly or by a timeout) + +* CoroWrapper now works around CPython issue #21209: yield from & custom + generator classes don't work together, issue with the send() method. It only + affected asyncio in debug mode on Python older than 3.4.2 + + +Misc changes +------------ + +* windows_utils.socketpair() now supports IPv6. + +* Better documentation (online & docstrings): fill remaining XXX, more examples + +* new asyncio.coroutines submodule, to ease maintenance with the trollius + project: @coroutine, _DEBUG, iscoroutine() and iscoroutinefunction() have + been moved from asyncio.tasks to asyncio.coroutines + +* Cleanup code, ex: remove unused attribute (ex: _rawsock) + +* Reuse os.set_blocking() of Python 3.5. + +* Close explicitly the event loop in Tulip examples. + +* runtests.py now mention if tests are running in release or debug mode.