Skip to content

Latest commit

 

History

History
508 lines (401 loc) · 28.9 KB

changelog.rst

File metadata and controls

508 lines (401 loc) · 28.9 KB

Changelog

.. currentmodule:: gevent

Release 0.13.1 (Sep 23, 2010)

Release highlights:

:mod:`gevent.socket` module:

:mod:`gevent.ssl` module:

  • Imported a number of patches from stdlib by Antoine Pitrou:
    • Calling :meth:`makefile` method on an SSL object would prevent the underlying socket from being closed until all objects get truely destroyed (Python issue #5238).
    • SSL handshake would ignore the socket timeout and block indefinitely if the other end didn't respond (Python issue #5103).
    • When calling :meth:`getpeername` in SSLSocket.__init__, only silence exceptions caused by the "socket not connected" condition.
  • Added support for ciphers argument.
  • Updated SSLSocket.send and SSLSocket.recv methods to match the behavior of stdlib :mod:`ssl` better.
  • Fixed :class:`ssl.SSLObject` to delete events used by other greenlets when closing the instance (issue #34).

Miscellaneous:

  • Made :class:`BaseServer` accept long values as pool argument in addition to int.
  • Made :attr:`http._requests` attribute public.
  • Updated webchat example to use file on disk rather than in-memory sqlite database to avoid :exc:`OperationalError`.
  • Fixed webproxy.py example to be runnable under external WSGI server.
  • Fixed bogus failure in test__exc_info.py.
  • Added new test to check PEP8 conformance: xtest_pep8.py.
  • Fixed :class:`BackdoorServer` close the connection on :exc:`SystemExit` and simplified the code.
  • Made :class:`Pool` raise :exc:`ValueError` when initialized with size=0.
  • Updated setup.py --libevent to configure and make libevent if it's not built already.
  • Updated setup.py to use setuptools if present and add dependency on greenlet.
  • Fixed doc/mysphinxext.py to work with Sphinx 1. Thanks by Örjan Persson.

Release 0.13.0 (Jul 14, 2010)

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.

Release 0.12.2 (Mar 2, 2010)

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

Release 0.12.1 (Feb 26, 2010)

  • 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:

Release 0.12.0 (Feb 5, 2010)

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:

Release 0.11.2 (Dec 10, 2009)

Release 0.11.1 (Nov 15, 2009)

  • 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.

Release 0.11.0 (Oct 9, 2009)

Release 0.10.0 (Aug 26, 2009)

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.

Release 0.9.3 (Aug 3, 2009)

  • 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.

Release 0.9.2 (Jul 20, 2009)

Release 0.9.1 (Jul 9, 2009)

  • 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`.

Release 0.9.0 (Jul 8, 2009)

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.