Commit 35973c45 authored by Denis Bilenko's avatar Denis Bilenko

reformat the changelog slightly

parent 4e659e89
...@@ -19,24 +19,20 @@ Version 0.11.0 ...@@ -19,24 +19,20 @@ Version 0.11.0
which what the standard :mod:`Queue` does too. which what the standard :mod:`Queue` does too.
* Fixed :class:`Event` to behave exactly like the standard :class:`threading.Event`: * Fixed :class:`Event` to behave exactly like the standard :class:`threading.Event`:
* :meth:`Event.set` does not accept a parameter anymore; it's now either set or not. - :meth:`Event.set` does not accept a parameter anymore; it's now either set or not.
* ``Event.get`` method is gone. - ``Event.get`` method is gone.
* ``Event.set(); Event.clear()`` used to be a no-op; now it properly wakes up all the waiters. - ``Event.set(); Event.clear()`` used to be a no-op; now it properly wakes up all the waiters.
- :class:`AsyncResult` behaves exactly like before, but it does not inherit from :class:`Event` anymore
:class:`AsyncResult` behaves exactly like before, but it does not inherit from :class:`Event` anymore and does miss ``clear()`` method.
and does miss ``clear()`` method.
* Renamed internal helpers :meth:`socket.wait_reader`/:meth:`socket.wait_writer` to :meth:`socket.wait_read`/:meth:`socket.wait_write`. * Renamed internal helpers :meth:`socket.wait_reader`/:meth:`socket.wait_writer` to :meth:`socket.wait_read`/:meth:`socket.wait_write`.
* Renamed :class:`gevent.socket.GreenSocket` to :class:`gevent.socket.socket`. ``GreenSocket`` is still available * Renamed :class:`gevent.socket.GreenSocket` to :class:`gevent.socket.socket`. ``GreenSocket`` is still available
as an alias but will be removed in the future. as an alias but will be removed in the future.
* :mod:`gevent.core` now includes wrappers for evbuffer, evdns, evhttp. * :mod:`gevent.core` now includes wrappers for evbuffer, evdns, evhttp.
* Renamed the old ``gevent.wsgi`` to :mod:`gevent.pywsgi`. * Renamed the old ``gevent.wsgi`` to :mod:`gevent.pywsgi`.
* Added a new HTTP server :mod:`gevent.http` module based on libevent-http wrappers. * Added a new HTTP server :mod:`gevent.http` module based on libevent-http wrappers.
* Added a new WSGI server :mod:`gevent.wsgi` module based on :mod:`gevent.http`. * Added a new WSGI server :mod:`gevent.wsgi` module based on :mod:`gevent.http`.
* Added evdns wrappers to :mod:`gevent.core` and DNS functions to :mod:`gevent.socket` module. Contributed by **Jason Toffaletti.**. * Added evdns wrappers to :mod:`gevent.core` and DNS functions to :mod:`gevent.socket` module. Contributed by **Jason Toffaletti.**.
* Added a few a few options to ``setup.py`` to select a libevent library to compile against. Check them out with ``setup.py -h``. * Added a few a few options to ``setup.py`` to select a libevent library to compile against. Check them out with ``setup.py -h``.
* Added ``__all__`` to many modules that missed it. * Added ``__all__`` to many modules that missed it.
* Converted the docstrings and the changelog to sphinx/rst markup. * Converted the docstrings and the changelog to sphinx/rst markup.
...@@ -51,10 +47,8 @@ Version 0.10.0 ...@@ -51,10 +47,8 @@ Version 0.10.0
:meth:`Timeout.start` must be called explicitly. :meth:`Timeout.start` must be called explicitly.
A shortcut - :meth:`Timeout.start_new` - is provided that creates and starts A shortcut - :meth:`Timeout.start_new` - is provided that creates and starts
a :class:`Timeout`. a :class:`Timeout`.
* Added :class:`gevent.Greenlet` class which is a subclass of greenlet that adds a few * Added :class:`gevent.Greenlet` class which is a subclass of greenlet that adds a few
useful methods :meth:`join <Greenlet.join>`/:meth:`get <Greenlet.get>`/:meth:`kill <Greenlet.kill>`/:meth:`link <Greenlet.link>`. useful methods :meth:`join <Greenlet.join>`/:meth:`get <Greenlet.get>`/:meth:`kill <Greenlet.kill>`/:meth:`link <Greenlet.link>`.
* :func:`spawn` now returns :class:`Greenlet` instance. The old ``spawn``, which returns ``py.magic.greenlet`` * :func:`spawn` now returns :class:`Greenlet` instance. The old ``spawn``, which returns ``py.magic.greenlet``
instance, can be still accessed as :meth:`spawn_raw`. instance, can be still accessed as :meth:`spawn_raw`.
...@@ -74,19 +68,14 @@ Version 0.10.0 ...@@ -74,19 +68,14 @@ Version 0.10.0
:meth:`apply <Pool.apply>`, :meth:`map <Pool.map>` and others. :meth:`apply <Pool.apply>`, :meth:`map <Pool.map>` and others.
It also has :meth:`spawn <Pool.spawn>` method which is always async and returns a It also has :meth:`spawn <Pool.spawn>` method which is always async and returns a
:class:`Greenlet` instance. :class:`Greenlet` instance.
* Added :mod:`gevent.event` module with 2 classes: :class:`Event` and :class:`AsyncResult`. * Added :mod:`gevent.event` module with 2 classes: :class:`Event` and :class:`AsyncResult`.
:class:`Event` is a drop-in replacement for :class:`threading.Event`, supporting :class:`Event` is a drop-in replacement for :class:`threading.Event`, supporting
:meth:`set <Event.set>`/:meth:`wait <Event.wait>`/``get`` methods. :class:`AsyncResult` :meth:`set <Event.set>`/:meth:`wait <Event.wait>`/``get`` methods. :class:`AsyncResult`
is an extension of :class:`Event` that supports exception passing via :meth:`set_exception <AsyncResult.set_exception>` method. is an extension of :class:`Event` that supports exception passing via :meth:`set_exception <AsyncResult.set_exception>` method.
* Added :class:`queue.JoinableQueue` class with :meth:`task_done <queue.JoinableQueue.task_done>` * Added :class:`queue.JoinableQueue` class with :meth:`task_done <queue.JoinableQueue.task_done>`
and :meth:`join <queue.JoinableQueue.join>` methods. and :meth:`join <queue.JoinableQueue.join>` methods.
* Renamed ``core.read`` and ``core.write`` classes to :class:`core.read_event` and :class:`core.write_event`. * Renamed ``core.read`` and ``core.write`` classes to :class:`core.read_event` and :class:`core.write_event`.
* :mod:`gevent.wsgi`: pulled **Mike Barton's** eventlet patches that fix double content-length issue. * :mod:`gevent.wsgi`: pulled **Mike Barton's** eventlet patches that fix double content-length issue.
* Fixed ``setup.py`` to search more places for system libevent installation. * Fixed ``setup.py`` to search more places for system libevent installation.
This fixes 64bit CentOS 5.3 installation issues, hopefully covers other platforms This fixes 64bit CentOS 5.3 installation issues, hopefully covers other platforms
as well. as well.
...@@ -129,30 +118,20 @@ Version 0.9.3 ...@@ -129,30 +118,20 @@ Version 0.9.3
------------- -------------
* Fixed all known bugs in the :mod:`gevent.queue` module made it 2.4-compatible. * Fixed all known bugs in the :mod:`gevent.queue` module made it 2.4-compatible.
:class:`LifoQueue` and :class:`PriorityQueue` :class:`LifoQueue` and :class:`PriorityQueue` are implemented as well.
are implemented as well.
:mod:`gevent.queue` will deprecate both ``coros.Queue`` and ``coros.Channel``. :mod:`gevent.queue` will deprecate both ``coros.Queue`` and ``coros.Channel``.
* Fixed to :class:`Timeout` to raise itself by default. ``TimeoutError`` is gone. * Fixed to :class:`Timeout` to raise itself by default. ``TimeoutError`` is gone.
Silent timeout is now created by passing ``False`` instead of ``None``. 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. * 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 * :func:`spawn` and :func:`spawn_later` now avoid creating a closure and this decreases spawning
time by 50%. time by 50%.
* ``kill``'s and ``killall``'s *wait* argument was renamed to *block*. The polling is now * ``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 implemented by ``greenlet.join`` and ``greenlet.joinall`` functions and it become more
responsive, with gradual increase of sleep time. responsive, with gradual increase of sleep time.
* Renamed ``proc.RunningProcSet`` to ``proc.ProcSet``. * Renamed ``proc.RunningProcSet`` to ``proc.ProcSet``.
* Added :func:`shutdown` function, which blocks until libevent has finished dispatching the events. * 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 * 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. and :exc:`IOError` is raised if they have failed.
* Fixed backdoor.py, accidentally broken in the previous release. * Fixed backdoor.py, accidentally broken in the previous release.
...@@ -162,41 +141,30 @@ Version 0.9.2 ...@@ -162,41 +141,30 @@ Version 0.9.2
* Simplified :mod:`gevent.socket`'s implementation and fixed SSL * Simplified :mod:`gevent.socket`'s implementation and fixed SSL
bug reported on eventletdev by **Cesar Alaniz** as well as failures bug reported on eventletdev by **Cesar Alaniz** as well as failures
in test_socket_ssl.py. in test_socket_ssl.py.
* Removed ``GreenSocket.makeGreenFile``; Use :meth:`socket.socket.makefile` that returns _fileobject * Removed ``GreenSocket.makeGreenFile``; Use :meth:`socket.socket.makefile` that returns _fileobject
and is available on both :class:`GreenSocket <gevent.socket.socket>` and :class:`GreenSSL <gevent.socket.GreenSSL>`. and is available on both :class:`GreenSocket <gevent.socket.socket>` and :class:`GreenSSL <gevent.socket.GreenSSL>`.
socket.py still a work in progress. socket.py still a work in progress.
* Added new :class:`core.active_event` class that takes advantage of libevent's event_active function. * Added new :class:`core.active_event` class that takes advantage of libevent's event_active function.
``core.active_event(func)`` schedules func to be run in this event loop iteration as opposed ``core.active_event(func)`` schedules func to be run in this event loop iteration as opposed
to ``core.timer(0, ...)`` which schedules an event to be run in the next iteration. to ``core.timer(0, ...)`` which schedules an event to be run in the next iteration.
:class:`active_event` is now used throughout the library wherever ``core.timer(0, ....)`` was previously used. :class:`active_event` is now used throughout the library wherever ``core.timer(0, ....)`` was previously used.
This results in :func:`spawn` being at least 20% faster compared to `Version 0.9.1`_ and twice as fast compared to This results in :func:`spawn` being at least 20% faster compared to `Version 0.9.1`_ and twice as fast compared to
eventlet. (The results are obtained with bench_spawn.py script in ``greentest/`` directory) eventlet. (The results are obtained with bench_spawn.py script in ``greentest/`` directory)
* Added boolean parameter *wait* to :func:`kill` and :func:`killall` functions. If set to ``True``, it makes the * Added boolean parameter *wait* to :func:`kill` and :func:`killall` functions. If set to ``True``, it makes the
function block until the greenlet(s) is actually dead. By default, :func:`kill` and :func:`killall` are asynchronous, function block until the greenlet(s) is actually dead. By default, :func:`kill` and :func:`killall` are asynchronous,
i.e. they don't unschedule the current greenlet. i.e. they don't unschedule the current greenlet.
* Added a few new properties to :class:`gevent.core.event`: :attr:`fd <event.fd>`, :attr:`events <event.events>`, * Added a few new properties to :class:`gevent.core.event`: :attr:`fd <event.fd>`, :attr:`events <event.events>`,
:attr:`events_str <event.events_str>` and :attr:`flags <event.flags>`. It also has :attr:`events_str <event.events_str>` and :attr:`flags <event.flags>`. It also has
:meth:`__enter__ <event.__enter__>` and :meth:`__exit__ <event.__exit__>` now, so it can be used as a context manager. :class:`event`'s :meth:`__enter__ <event.__enter__>` and :meth:`__exit__ <event.__exit__>` now, so it can be used as a context manager. :class:`event`'s :attr:`callback <event.callback>` signature has changed from ``(event, fd, evtype)`` to ``(event, evtype)``.
:attr:`callback <event.callback>` signature has changed from ``(event, fd, evtype)`` to ``(event, evtype)``.
* Fixed :class:`Hub`'s mainloop to never return successfully as this will screw up main greenlet's ``switch()`` call. * Fixed :class:`Hub`'s mainloop to never return successfully as this will screw up main greenlet's ``switch()`` call.
Instead of returning it raises :class:`DispatchExit`. Instead of returning it raises :class:`DispatchExit`.
* Added :func:`reinit` function - wrapper for libevent's ``event_reinit``. * Added :func:`reinit` function - wrapper for libevent's ``event_reinit``.
This function is a must have at least for daemons, as it fixes ``epoll`` and some others This function is a must have at least for daemons, as it fixes ``epoll`` and some others
eventloops to work after ``fork``. eventloops to work after ``fork``.
* Trying to use gevent in another thread will now raise an exception immediately, * Trying to use gevent in another thread will now raise an exception immediately,
since it's not implemented. since it's not implemented.
* Added a few more convenience methods ``spawn_link[exception/value]`` to ``proc.RunningProcSet``. * Added a few more convenience methods ``spawn_link[exception/value]`` to ``proc.RunningProcSet``.
* Fixed setup.py not to depend on setuptools. * Fixed setup.py not to depend on setuptools.
* Removed ``gevent.timeout`` (use :class:`gevent.Timeout`) * Removed ``gevent.timeout`` (use :class:`gevent.Timeout`)
...@@ -204,28 +172,19 @@ Version 0.9.1 ...@@ -204,28 +172,19 @@ Version 0.9.1
------------- -------------
* Fixed compilation with gevent libevent-1.3 (Thanks to **Litao Wei** for reporting the problem.) * Fixed compilation with gevent 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 * 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` 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. 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``. * 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. ``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. * Renamed ``gevent.timeout`` to :class:`gevent.Timeout`. The old name is available as an alias.
* Fixed a few bugs in :class:`queue.Queue`. * 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 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) 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). * :mod:`monkey` now patches ssl module when on 2.6 (very limited support).
* Improved compatibility with Python 2.6 and Python 2.4. * Improved compatibility with Python 2.6 and Python 2.4.
* Greenlet installed from PyPI (without py.magic prefix) is properly recognized now. * 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. * 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 * :class:`GreenSocket <socket.socket>` now wraps a ``socket`` object from ``_socket`` module rather
than from :mod:`socket`. than from :mod:`socket`.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment