<commit_before>.. _releases:

Releases
========

There isn't a "release schedule" in any sense. If there is something
in master your project depends upon, let me know and I'll do a
release.

Starting after v0.20.x versions will follow `calendar versioning
<http://calver.org/>`_ with the major version being the 2-digit
year. The second digit will be "non-trivial" releases and the third
will be for bugfix releases.

unreleased
----------

`git master <https://github.com/meejah/txtorcon>`_ *will likely become v18.0.0*

 * :meth:`txtorcon.TorControlProtocol.add_event_listener` and
   :meth:`txtorcon.TorControlProtocol.remove_event_listener` are now
   async methods returning Deferred -- they always should have been; new
   code can now be assured that the event-listener change is known to Tor
   by awaiting this Deferred.
 * :meth:`txtorcon.TorControlProtocol.get_conf_on` method added, which
   gets and returns (asynchronously) a single GETCONF key (instead of a dict)
 * if Tor disconnects while a command is in-progress or pending, the
   `.errback()` for the corresponding Deferred is now correctly fired
   (with a :class:`txtorcon.TorDisconnectError`

 * tired: `get_global_tor()` (now deprecated)
   wired: :meth:`txtorcon.get_global_tor_instance`

 * Adds a comprehensive set of Onion Services APIs (for all six
   variations). For non-authenticated services, instances of
   :class:`txtorcon.IOnionService` represent services; for
   authenticated services, instances of
   :class:`txtorcon.IAuthenticatedOnionClients` encapsulated named
   lists of clients (each client is an instance implementing
   `IOnionService`).
 * Version 3 ("Proposition 279") Onion service support (same APIs) as
   released in latest Tor
 * Four new methods to handle creating endpoints for Onion services
   (either ephemeral or not and authenticated or not):
   ** :method:`txtorcon.Tor.create_authenticated_onion_endpoint`
   ** :method:`txtorcon.Tor.create_authenticated_filesystem_onion_endpoint`
   ** :method:`txtorcon.Tor.create_onion_endpoint`
   ** :method:`txtorcon.Tor.create_filesystem_onion_endpoint`
 * see :ref:`create_onion` for information on how to choose an
   appropriate type of Onion Service.

 * :method:`txtorcon.Tor.create_onion_service` to add a new ephemeral
   Onion service to Tor. This uses the `ADD_ONION` command under the
   hood and can be version 2 or version 3. Note that there is an
   endpoint-style API as well so you don't have to worry about mapping
   ports yourself (see below).
 * :method:`txtorcon.Tor.create_filesystem_onion_service` to add a new
   Onion service to Tor with configuration (private keys) stored in a
   provided directory. These can be version 2 or version 3
   services. Note that there is an endpoint-style API as well so you
   don't have to worry about mapping ports yourself (see below).

 * Additional APIs to make visiting authenticated Onion services as a
   client easier:

 * :method:`txtorcon.Tor.add_onion_authentication` will add a
   client-side Onion service authentication token. If you add a token
   for a service which already has a token, it is an error if they
   don't match. This corresponds to `HidServAuth` lines in torrc.
 * :method:`txtorcon.Tor.remove_onion_authentication` will remove a
   previously added client-side Onion service authentication
   token. Fires with True if such a token existed and was removed or
   False if no existing token was found.
 * :method:`txtorcon.Tor.onion_authentication` (Python3 only) an async
   context-manager that adds and removes an Onion authentication token
   (i.e. adds in on `__aenter__` and removes it on `__aexit__`).
 * onion services support listening on Unix paths.


v0.20.0
-------

February 22, 2018

 * `txtorcon-0.20.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.20.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.20.0>`_ (:download:`local-sig </../signatues/txtorcon-0.20.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/master/signatues/txtorcon-0.20.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.20.0.tar.gz>`_)

 * doc fixes from `hotelzululima <https://twitter.com/hotelzululima>`_
 * fix endpoints so `.connect` on them works properly more than once
   from `<NAME> <https://github.com/warner>`_
 * allow a `CertificateOptions` to be passed as `tls=` to endpoints
 * add method :func:`txtorcon.Tor.is_ready`
 * add method :func:`txtorcon.Tor.become_ready`
 * fix handling of certain defaults (`*PortLines` and friends)
 * fix last router (usually) missing with (new) `MicroDescriptorParser`
 * use OnionOO via Onion service `tgel7v4rpcllsrk2.onion` for :func:`txtorcon.Router.get_onionoo_details`
 * fix parsing of Router started-times
 * `Issue 255 <https://github.com/meejah/txtorcon/issues/255>`_ removed routers now deleted following NEWCONSENSUS
 * `Issue 279 <https://github.com/meejah/txtorcon/issues/279>`_ remember proxy endpoint


v0.19.3
-------

May 24, 2017

 * `txtorcon-0.19.3.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.19.3.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.3>`_ (:download:`local-sig </../signatues/txtorcon-0.19.3.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/master/signatues/txtorcon-0.19.3.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.3.tar.gz>`_)<commit_msg>release note<commit_after>.. _releases:

Releases
========

There isn't a "release schedule" in any sense. If there is something
in master your project depends upon, let me know and I'll do a
release.

Starting after v0.20.x versions will follow `calendar versioning
<http://calver.org/>`_ with the major version being the 2-digit
year. The second digit will be "non-trivial" releases and the third
will be for bugfix releases.

unreleased
----------

`git master <https://github.com/meejah/txtorcon>`_ *will likely become v18.0.0*

 * :meth:`txtorcon.TorControlProtocol.add_event_listener` and
   :meth:`txtorcon.TorControlProtocol.remove_event_listener` are now
   async methods returning Deferred -- they always should have been; new
   code can now be assured that the event-listener change is known to Tor
   by awaiting this Deferred.
 * :meth:`txtorcon.TorControlProtocol.get_conf_on` method added, which
   gets and returns (asynchronously) a single GETCONF key (instead of a dict)
 * if Tor disconnects while a command is in-progress or pending, the
   `.errback()` for the corresponding Deferred is now correctly fired
   (with a :class:`txtorcon.TorDisconnectError`

 * tired: `get_global_tor()` (now deprecated)
   wired: :meth:`txtorcon.get_global_tor_instance`

 * Adds a comprehensive set of Onion Services APIs (for all six
   variations). For non-authenticated services, instances of
   :class:`txtorcon.IOnionService` represent services; for
   authenticated services, instances of
   :class:`txtorcon.IAuthenticatedOnionClients` encapsulated named
   lists of clients (each client is an instance implementing
   `IOnionService`).
 * Version 3 ("Proposition 279") Onion service support (same APIs) as
   released in latest Tor
 * Four new methods to handle creating endpoints for Onion services
   (either ephemeral or not and authenticated or not):
   ** :method:`txtorcon.Tor.create_authenticated_onion_endpoint`
   ** :method:`txtorcon.Tor.create_authenticated_filesystem_onion_endpoint`
   ** :method:`txtorcon.Tor.create_onion_endpoint`
   ** :method:`txtorcon.Tor.create_filesystem_onion_endpoint`
 * see :ref:`create_onion` for information on how to choose an
   appropriate type of Onion Service.

 * :method:`txtorcon.Tor.create_onion_service` to add a new ephemeral
   Onion service to Tor. This uses the `ADD_ONION` command under the
   hood and can be version 2 or version 3. Note that there is an
   endpoint-style API as well so you don't have to worry about mapping
   ports yourself (see below).
 * :method:`txtorcon.Tor.create_filesystem_onion_service` to add a new
   Onion service to Tor with configuration (private keys) stored in a
   provided directory. These can be version 2 or version 3
   services. Note that there is an endpoint-style API as well so you
   don't have to worry about mapping ports yourself (see below).

 * Additional APIs to make visiting authenticated Onion services as a
   client easier:

 * :method:`txtorcon.Tor.add_onion_authentication` will add a
   client-side Onion service authentication token. If you add a token
   for a service which already has a token, it is an error if they
   don't match. This corresponds to `HidServAuth` lines in torrc.
 * :method:`txtorcon.Tor.remove_onion_authentication` will remove a
   previously added client-side Onion service authentication
   token. Fires with True if such a token existed and was removed or
   False if no existing token was found.
 * :method:`txtorcon.Tor.onion_authentication` (Python3 only) an async
   context-manager that adds and removes an Onion authentication token
   (i.e. adds in on `__aenter__` and removes it on `__aexit__`).
 * onion services support listening on Unix paths.
 * make sure README renders on Warehouse/PyPI


v0.20.0
-------

February 22, 2018

 * `txtorcon-0.20.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.20.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.20.0>`_ (:download:`local-sig </../signatues/txtorcon-0.20.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/master/signatues/txtorcon-0.20.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.20.0.tar.gz>`_)

 * doc fixes from `hotelzululima <https://twitter.com/hotelzululima>`_
 * fix endpoints so `.connect` on them works properly more than once
   from `<NAME> <https://github.com/warner>`_
 * allow a `CertificateOptions` to be passed as `tls=` to endpoints
 * add method :func:`txtorcon.Tor.is_ready`
 * add method :func:`txtorcon.Tor.become_ready`
 * fix handling of certain defaults (`*PortLines` and friends)
 * fix last router (usually) missing with (new) `MicroDescriptorParser`
 * use OnionOO via Onion service `tgel7v4rpcllsrk2.onion` for :func:`txtorcon.Router.get_onionoo_details`
 * fix parsing of Router started-times
 * `Issue 255 <https://github.com/meejah/txtorcon/issues/255>`_ removed routers now deleted following NEWCONSENSUS
 * `Issue 279 <https://github.com/meejah/txtorcon/issues/279>`_ remember proxy endpoint


v0.19.3
-------

May 24, 2017

 * `txtorcon-0.19.3.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.19.3.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.3>`_ (:download:`local-sig </../signatues/txtorcon-0.19.3.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/master/signatues/txtorcon-0.19.3.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.3.tar.gz>`_)
{'fraction_non_alphanumeric': 0.10716591349257586, 'fraction_numerical': 0.01955178456146823, 'mean_word_length': 4.333989178553861, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 37, 'https://': 22, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3051171', 'n_tokens_mistral': 3673, 'n_tokens_neox': 3396, 'n_words': 1102}