.. _changelog:

================
 Change history
================

.. _version-1.3.0:

1.3.0
=====
:release-date: 2017-12-04 01:17 P.M PST
:release-by: Ask Solem

- Now supports color output in logs when logging to a terminal.

- Now depends on :pypi:`colorlog`

- Added :class:`mode.Signal`: async. implementation of the observer
  pattern (think Django signals).

- DependencyGraph is now a generic type: ``DependencyGraph[int]``

- Node is now a generic type: ``Node[Service]``.

.. _version-1.2.1:

1.2.1
=====
:release-date: 2017-11-06 04:50 P.M PST
:release-by: Ask Solem

- Service: Subclasses can now override a Service.task method.

    Previously it would unexpectedly start two tasks:
    the task defined in the superclass and the task defined in
    the subclass.

.. _version-1.2.0:

1.2.0
=====
:release-date: 2017-11-02 03:17 P.M PDT
:release-by: Ask Solem

- Renames PoisonpillSupervisor to CrashingSupervisor.

- Child services now stopped even if not fully started.

    Previously ``child_service.stop()`` would not be called
    if `child_service.start()` never completed, but as a service
    might be in the process of starting other child services, we need
    to call stop even if not fully started.

.. _version-1.1.1:

1.1.1
=====
:release-date: 2017-10-25 04:34 P.M PDT
:release-by: Ask Solem

- Added alternative event loop implementations: eventlet, gevent, uvloop.

    E.g. to use gevent as the event loop, install mode using::

        $ pip install mode[gevent]

    and add this line to the top of your worker entrypoint module::

        import mode.loop
        mode.loop.use('gevent')

- Service: More fixes for the weird `__init_subclass__` behavior
  only seen in Python 3.6.3.

- ServiceThread: Now propagates errors raised in the thread
  to the main thread.

.. _version-1.1.0:

1.1.0
=====
:release-date: 2017-10-19 01:35 P.M PDT
:release-by: Ask Solem

- ServiceThread: Now inherits from Service, and uses
  ``loop.run_in_executor()`` to start the service as a thread.

- setup_logging: filename argument is now respected.

.. _version-1.0.2:

1.0.2
=====
:release-date: 2017-10-10 01:51 P.M PDT
:release-by: Ask Solem

- Adds support for Python 3.6.0

- Adds backports of typing improvements in CPython 3.6.1
  to ``mode.utils.compat``: ``AsyncContextManager``, ``ChainMap``,
  ``Counter``, and ``Deque``.

- ``Supervisor.add`` and ``.discard`` now takes an arbitrary number
  of services to add/discard as star arguments.

- Fixed typo in example: ``Service.task`` -> ``mode.Service.task``.

    Contributed by Xu Jing.

.. _version-1.0.1:

1.0.1
=====
:release-date: 2017-10-05 02:53 P.M PDT
:release-by: Ask Solem

- Fixes compatibility with Python 3.6.3.

    Python 3.6.3 badly broke ``__init_subclass__``, in such a way that
    any class attribute set is set for all subclasses.

.. _version-1.0.0:

1.0.0
=====
:release-date: 2017-10-04 01:29 P.M PDT
:release-by: Ask Solem

- Initial release
