Source

gevent / changelog.rst

Changelog

Version 0.13.1

Version 0.13.0

Release highlights:

Backward-incompatible changes:

:mod:`gevent.socket` module:

  • Fixed issues #26 and #34: closing the socket while reading/writing/connecting is now safe. Thanks to Cyril Bay.
  • Imported :func:`getfqdn` from :mod:`socket` module.
  • The module now uses sys.platform to detect Windows rather than :mod:`platform` module.
  • Fixed issue #27: :func:`getaddrinfo` used to handle the case when socktype or proto were equal to 0. Thanks to Randall Leeds.

:mod:`gevent.coros` module:

:mod:`gevent.event` module:

:mod:`gevent.wsgi` module:

:mod:`gevent.pywsgi` module:

:mod:`gevent.core` module:

:mod:`gevent.http` and :mod:`gevent.wsgi` modules:

Miscellaneous:

Examples:

Thanks to Ralf Schmitt for :mod:`pywsgi`, a number of fixes for :mod:`wsgi`, help with :mod:`baseserver` and :mod:`server` modules, improving setup.py and various other patches and suggestions.

Thanks to Uriel Katz for :mod:`pywsgi` patches.

Version 0.12.2

  • Fixed http server to put the listening socket into a non-blocking mode. Contributed by Ralf Schmitt.

Version 0.12.1

  • Removed a symlink from the distribution (that causes pip to fail). Thanks to Brad Clements for reporting it.
  • setup.py: automatically create symlink from build/lib.../gevent/core.so to gevent/core.so.
  • :mod:`gevent.socket`: Improved compatibility with stdlib's socket:

Version 0.12.0

Release highlights:

:mod:`gevent.wsgi` module:

  • Made env["REMOTE_PORT"] into a string.
  • Fixed the server to close the iterator returned by the application.
  • Made wsgi.input object iterable.

:mod:`gevent.core` module:

  • Made DNS functions no longer accept/return IP addresses in dots-and-numbers format. They work with packed IPs now.
  • Made DNS functions no longer accept additional arguments to pass to the callback.
  • Fixed DNS functions to check the return value of the libevent functions and raise :exc:`IOError` if they failed.
  • Added :func:`core.dns_err_to_string`
  • Made core.event.cancel not to raise if event_del reports an error. instead, the return code is passed to the caller.
  • Fixed minor issue in string representation of the events.

:mod:`gevent.socket` module:

Miscellaneous:

Version 0.11.2

Version 0.11.1

  • Fixed bug in :func:`select.select` function. Passing non-empty list of write descriptors used to cause this function to fail.
  • Changed setup.py to go ahead with the compilation even if the actual version of libevent cannot be determined (version 1.x.x is assumed in that case).

Contributed by Ludvig Ericson:

  • Fixed :mod:`wsgi`'s start_response to recognize exc_info argument.
  • Fixed setup.py to look for libevent.dylib rather than .so on Darwin platforms.

Version 0.11.0

Version 0.10.0

The following items were added to the gevent top level package:

The following items were marked as deprecated:

Internally, gevent.greenlet was split into a number of modules:

Thanks to Jason Toffaletti for reporting the installation issue and providing a test case for WSGI double content-length header bug.

Version 0.9.3

  • Fixed all known bugs in the :mod:`gevent.queue` module and made it 2.4-compatible. :class:`LifoQueue` and :class:`PriorityQueue` are implemented as well. :mod:`gevent.queue` will deprecate both coros.Queue and coros.Channel.
  • Fixed :class:`Timeout` to raise itself by default. TimeoutError is gone. Silent timeout is now created by passing False instead of None.
  • Fixed bug in :func:`gevent.select.select` where it could silent the wrong timeout.
  • :func:`spawn` and :func:`spawn_later` now avoid creating a closure and this decreases spawning time by 50%.
  • kill's and killall's wait argument was renamed to block. The polling is now implemented by greenlet.join and greenlet.joinall functions and it become more responsive, with gradual increase of sleep time.
  • Renamed proc.RunningProcSet to proc.ProcSet.
  • Added :func:`shutdown` function, which blocks until libevent has finished dispatching the events.
  • The return value of event_add and event_del in core.pyx are now checked properly and :exc:`IOError` is raised if they have failed.
  • Fixed backdoor.py, accidentally broken in the previous release.

Version 0.9.2

Version 0.9.1

  • Fixed compilation with libevent-1.3 (Thanks to Litao Wei for reporting the problem.)
  • Fixed :class:`Hub` to recover silently after event_dispatch() failures (I've seen this happen after fork even though event_reinit() is called as necessary). The end result is that :func:`fork` now works more reliably, as detected by test_socketserver.py - it used to fail occasionally, now it does not.
  • Reorganized the package, most of the stuff from gevent/__init__.py was moved to gevent/greenlet.py. gevent/__init__.py imports some of it back but not everything.
  • Renamed gevent.timeout to :class:`gevent.Timeout`. The old name is available as an alias.
  • Fixed a few bugs in :class:`queue.Queue`. Added test_queue.py from standard tests to check how good is :class:`queue.Queue` a replacement for a standard :mod:`Queue` (not good at all, timeouts in :meth:`queue.Queue.put` don't work yet)
  • :mod:`monkey` now patches ssl module when on 2.6 (very limited support).
  • Improved compatibility with Python 2.6 and Python 2.4.
  • Greenlet installed from PyPI (without py.magic prefix) is properly recognized now.
  • core.pyx was accidentally left out of the source package, it's included now.
  • :class:`GreenSocket <socket.socket>` now wraps a socket object from _socket module rather than from :mod:`socket`.

Version 0.9.0

Started as eventlet 0.8.11 fork, with the intention to support only libevent as a backend. Compared to eventlet, this version has a much simpler API and implementation and a few severe bugs fixed, namely

There's a test in my repo of eventlet that reproduces both of them: http://bitbucket.org/denis/eventlet/src/tip/greentest/test__socket.py

Besides having less bugs and less code to care about the goals of the fork are:

  • piggy-back on libevent as much as possible (use its http and dns code)
  • use the interfaces and conventions from the standard Python library where possible