Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-txtorcon for openSUSE:Factory checked in at 2024-01-03 12:23:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-txtorcon (Old) and /work/SRC/openSUSE:Factory/.python-txtorcon.new.28375 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-txtorcon" Wed Jan 3 12:23:32 2024 rev:15 rq:1135604 version:23.11.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-txtorcon/python-txtorcon.changes 2023-09-20 13:34:01.889053198 +0200 +++ /work/SRC/openSUSE:Factory/.python-txtorcon.new.28375/python-txtorcon.changes 2024-01-03 12:23:34.792390100 +0100 @@ -1,0 +2,10 @@ +Fri Dec 29 09:02:35 UTC 2023 - Dirk Müller <dmueller@suse.com> + +- update to 23.11.0: + * Fix test-failures on Python 3.12 + * Particular GETINFO hanging + (ultra-long lines over 16KiB caused problems in the protocol) + * Use built-in `mock` only + * Remove `incremental` + +------------------------------------------------------------------- Old: ---- txtorcon-23.5.0.tar.gz New: ---- txtorcon-23.11.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-txtorcon.spec ++++++ --- /var/tmp/diff_new_pack.rnRzrE/_old 2024-01-03 12:23:35.600419632 +0100 +++ /var/tmp/diff_new_pack.rnRzrE/_new 2024-01-03 12:23:35.600419632 +0100 @@ -17,7 +17,7 @@ Name: python-txtorcon -Version: 23.5.0 +Version: 23.11.0 Release: 0 Summary: Twisted-based asynchronous Tor control protocol implementation License: MIT @@ -29,7 +29,6 @@ Requires: python-Automat Requires: python-Twisted-tls >= 15.5.0 Requires: python-cryptography -Requires: python-incremental Requires: python-six Requires: python-zope.interface >= 3.6.1 BuildArch: noarch @@ -38,7 +37,6 @@ BuildRequires: %{python_module Automat} BuildRequires: %{python_module Twisted-tls >= 15.5.0} BuildRequires: %{python_module cryptography} -BuildRequires: %{python_module incremental} BuildRequires: %{python_module six} BuildRequires: %{python_module zope.interface >= 3.6.1} %python_subpackages @@ -62,8 +60,6 @@ %python_expand %fdupes %{buildroot}%{$python_sitelib} %check -# https://github.com/meejah/txtorcon/issues/368 -sed -i 's:from mock:from unittest.mock:' test/*.py # looks more like integration tests # Async tests don't work with pytest gh#crossbario/autobahn-python#1235 %{python_expand export PYTHONPATH=%{buildroot}%{$python_sitelib} ++++++ txtorcon-23.5.0.tar.gz -> txtorcon-23.11.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/Makefile new/txtorcon-23.11.0/Makefile --- old/txtorcon-23.5.0/Makefile 2023-05-19 03:13:45.000000000 +0200 +++ new/txtorcon-23.11.0/Makefile 2023-11-20 08:48:37.000000000 +0100 @@ -1,6 +1,6 @@ .PHONY: test html counts coverage sdist clean install doc integration diagrams default: test -VERSION = 23.5.0 +VERSION = 23.11.0 test: PYTHONPATH=. trial --reporter=text test @@ -124,7 +124,7 @@ venv: - virtualenv venv + python -m venv venv ./venv/bin/pip install -r requirements.txt ./venv/bin/pip install -r dev-requirements.txt @echo "created venv" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/PKG-INFO new/txtorcon-23.11.0/PKG-INFO --- old/txtorcon-23.5.0/PKG-INFO 2023-05-19 03:21:31.507377600 +0200 +++ new/txtorcon-23.11.0/PKG-INFO 2023-11-20 08:48:41.153334100 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: txtorcon -Version: 23.5.0 +Version: 23.11.0 Summary: Twisted-based Tor controller client, with state-tracking and configuration abstractions. https://txtorcon.readthedocs.org https://github.com/meejah/txtorcon Home-page: https://github.com/meejah/txtorcon Author: meejah diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/dev-requirements.txt new/txtorcon-23.11.0/dev-requirements.txt --- old/txtorcon-23.5.0/dev-requirements.txt 2020-04-20 04:58:02.000000000 +0200 +++ new/txtorcon-23.11.0/dev-requirements.txt 2023-11-20 07:11:22.000000000 +0100 @@ -10,7 +10,6 @@ twine pyflakes pycodestyle -mock ipaddress>=1.0.16 geoip readme_renderer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/conf.py new/txtorcon-23.11.0/docs/conf.py --- old/txtorcon-23.5.0/docs/conf.py 2022-06-17 21:32:04.000000000 +0200 +++ new/txtorcon-23.11.0/docs/conf.py 2023-08-11 09:41:38.000000000 +0200 @@ -165,7 +165,7 @@ # The name for this set of Sphinx documents. If None, it defaults to # "<project> v<release> documentation". -html_title = 'timaq4ygg2iegci7.onion: txtorcon documentation' +html_title = 'fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion: txtorcon documentation' # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = 'txtorcon docs' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/guide.rst new/txtorcon-23.11.0/docs/guide.rst --- old/txtorcon-23.5.0/docs/guide.rst 2020-04-20 04:58:02.000000000 +0200 +++ new/txtorcon-23.11.0/docs/guide.rst 2023-08-11 09:41:38.000000000 +0200 @@ -361,7 +361,7 @@ registers a ``tor:`` plugin. This also implies that any Twisted-using program that supports configuring endpoint strings gets Tor support "for free". For example, passing a string like -``tor:timaq4ygg2iegci7.onion:80`` to `clientFromString`_ will return +``tor:fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:80`` to `clientFromString`_ will return an endpoint that will connect to txtorcon's onion-service website. Note that these endpoints will use the "global to txtorcon" Tor instance (available from :meth:`.get_global_tor`). Thus, @@ -428,7 +428,7 @@ part); - these keys can be on disk (in the "hidden service directory"); - or, they can be "ephemeral" (only in memory); -- the "host name" is a hash of the public-key (e.g. ``timaq4ygg2iegci7.onion``); +- the "host name" is a hash of the public-key (e.g. ``fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion``); - a "Descriptor" (which tells clients how to connect) must be published (to a "Hidden Service Directory", or HSDir); - a service has a list of port-mappings (public -> local): @@ -534,7 +534,7 @@ Factors to consider when deciding whether to use "authenticated" service or not: - - if you want anyone with e.g. the URL http://timaq4ygg2iegci7.onion + - if you want anyone with e.g. the URL http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion to be able to put it in `Tor Browser Bundle <https://www.torproject.org/download/download.html.en>`_ and see a Web site, you **do not want** authentication; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/installing.rst new/txtorcon-23.11.0/docs/installing.rst --- old/txtorcon-23.5.0/docs/installing.rst 2018-05-31 20:59:02.000000000 +0200 +++ new/txtorcon-23.11.0/docs/installing.rst 2023-08-11 09:41:38.000000000 +0200 @@ -89,11 +89,11 @@ ----------- Most people will use the code from https://github.com/meejah/txtorcon -The canonical URI is http://timaq4ygg2iegci7.onion +The canonical URI is http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion I sign tags with my public key (:download:`meejah.asc <../meejah.asc>`) - ``git clone https://github.com/meejah/txtorcon.git`` -- ``torsocks git clone git://timaq4ygg2iegci7.onion/meejah/txtorcon.git`` +- ``torsocks git clone git://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/meejah/txtorcon.git`` Rendered documentation for the latest release is at `txtorcon.readthedocs.org <https://txtorcon.readthedocs.org/en/latest/>`_. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/introduction.rst new/txtorcon-23.11.0/docs/introduction.rst --- old/txtorcon-23.5.0/docs/introduction.rst 2022-04-12 00:21:37.000000000 +0200 +++ new/txtorcon-23.11.0/docs/introduction.rst 2023-08-11 09:41:38.000000000 +0200 @@ -99,6 +99,14 @@ .. literalinclude:: ../examples/readme.py +.. _testimonials: + +Testimonials +------------ + +- `@thegrugq <https://twitter.com/thegrugq/status/359495805025001472>`_: "Holy fucking shit, the awesomeness of this project cannot be denied!" (July 2013) + + .. _known_users: Known Users @@ -112,7 +120,7 @@ - `foolscap <https://github.com/warner/foolscap/>`_ RPC system inspired by Twisted's built-in "Perspective Broker" package. - `bwscanner <https://github.com/TheTorProject/bwscanner>`_ next-gen bandwidth scanner for Tor network - `unmessage <https://github.com/AnemoneLabs/unmessage>`_ Privacy enhanced instant messenger -- `APAF <https://github.com/globaleaks/APAF>`_ anonymous Python application framework +- `GlobaLeaks <https://github.com/globaleaks/GlobaLeaks>`_ Free and open source software enabling anyone to easily set up and maintain a secure whistleblowing platform - `OONI <https://ooni.torproject.org/>`_ the Open Observatory of Network Interference - `exitaddr <https://github.com/arlolra/exitaddr>`_ scan Tor exit addresses - `txtorhttpproxy <https://github.com/david415/txtorhttpproxy>`_ simple HTTP proxy in Twisted diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/release-checklist.rst new/txtorcon-23.11.0/docs/release-checklist.rst --- old/txtorcon-23.5.0/docs/release-checklist.rst 2023-05-19 03:20:48.000000000 +0200 +++ new/txtorcon-23.11.0/docs/release-checklist.rst 2023-08-11 09:41:38.000000000 +0200 @@ -21,7 +21,6 @@ * update docs/releases.rst to reflect upcoming reality * blindly make links to the signatures * update heading, date - * commit it all * on both signing-machine and build-machine shells: * export VERSION=22.0.0 @@ -74,8 +73,8 @@ Releases are also available from the hidden service: - http://timaq4ygg2iegci7.onion/txtorcon-0.12.0.tar.gz - http://timaq4ygg2iegci7.onion/txtorcon-0.12.0.tar.gz.asc + http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorc... + http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorc... Or via a "version 3" service: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/releases.rst new/txtorcon-23.11.0/docs/releases.rst --- old/txtorcon-23.5.0/docs/releases.rst 2023-05-19 03:18:27.000000000 +0200 +++ new/txtorcon-23.11.0/docs/releases.rst 2023-11-20 08:34:46.000000000 +0100 @@ -15,8 +15,18 @@ See also :ref:`api_stability`. -`git main <https://github.com/meejah/txtorcon>`_ *will likely become v23.6.0* +`git main <https://github.com/meejah/txtorcon>`_ *will likely become v24.1.0* +v23.11.0 +-------- + +November 20, 2023 + + * Fix test-failures on Python 3.12 + * Particular GETINFO hanging (`#389 <https://github.com/meejah/txtorcon/issues/389>`_) + (ultra-long lines over 16KiB caused problems in the protocol) + * Use built-in `mock` only (from `jelly <https://github.com/jelly>`_) + * Remove `incremental` (from `gdrosos <https://github.com/gdrosos>`_) v23.5.0 @@ -88,7 +98,7 @@ September 10, 2019 - * `txtorcon-19.1.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-19.1.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/19.1.0>`_ (:download:`local-sig </../signatues/txtorcon-19.1.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-19.1.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v19.1.0.tar.gz>`_) + * `txtorcon-19.1.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-19.1.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/19.1.0>`_ (:download:`local-sig </../signatues/txtorcon-19.1.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-19.1.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v19.1.0.tar.gz>`_) * `TorControlProtocol.on_disconnect` is deprecated in favour of :func:`TorControlProtocol.when_disconnected` @@ -107,7 +117,7 @@ January 15, 2019 - * `txtorcon-19.0.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-19.0.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/19.0.0>`_ (:download:`local-sig </../signatues/txtorcon-19.0.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-19.0.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v19.0.0.tar.gz>`_) + * `txtorcon-19.0.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-19.0.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/19.0.0>`_ (:download:`local-sig </../signatues/txtorcon-19.0.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-19.0.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v19.0.0.tar.gz>`_) * add :func:`TorControlProtocol.when_disconnected` (will replace `.on_disconnect`) * add `detach=` kwarg to :func:`Tor.create_onion_service` * add `purpose=` kwarg to :func:`TorState.build_circuit` @@ -116,14 +126,14 @@ v18.3.0 ------- - * `txtorcon-18.3.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.3.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.3.0>`_ (:download:`local-sig </../signatues/txtorcon-18.3.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.3.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.3.0.tar.gz>`_) + * `txtorcon-18.3.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-18.3.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.3.0>`_ (:download:`local-sig </../signatues/txtorcon-18.3.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.3.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.3.0.tar.gz>`_) * add `singleHop={true,false}` for endpoint-strings as well v18.2.0 ------- - * `txtorcon-18.2.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.2.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.2.0>`_ (:download:`local-sig </../signatues/txtorcon-18.2.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.2.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.2.0.tar.gz>`_) + * `txtorcon-18.2.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-18.2.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.2.0>`_ (:download:`local-sig </../signatues/txtorcon-18.2.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.2.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.2.0.tar.gz>`_) * add `privateKeyFile=` option to endpoint parser (ticket 313) * use `privateKey=` option properly in endpoint parser * support `NonAnonymous` mode for `ADD_ONION` via `single_hop=` kwarg @@ -134,7 +144,7 @@ September 26, 2018 - * `txtorcon-18.1.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.1.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.1.0>`_ (:download:`local-sig </../signatues/txtorcon-18.1.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.1.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.1.0.tar.gz>`_) + * `txtorcon-18.1.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-18.1.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.1.0>`_ (:download:`local-sig </../signatues/txtorcon-18.1.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.1.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.1.0.tar.gz>`_) * better error-reporting (include REASON and REMOTE_REASON if available) when circuit-builds fail (thanks `David Stainton <https://github.com/david415>`_) @@ -153,7 +163,7 @@ July 2, 2018 - * `txtorcon-18.0.2.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.0.2.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.2>`_ (:download:`local-sig </../signatues/txtorcon-18.0.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.2.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.2.tar.gz>`_) + * `txtorcon-18.0.2.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-18.0.2.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.2>`_ (:download:`local-sig </../signatues/txtorcon-18.0.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.2.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.2.tar.gz>`_) * Python3.4 doesn't support async-def or await @@ -162,7 +172,7 @@ June 30, 2018 - * `txtorcon-18.0.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.0.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.1>`_ (:download:`local-sig </../signatues/txtorcon-18.0.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.1.tar.gz>`_) + * `txtorcon-18.0.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-18.0.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.1>`_ (:download:`local-sig </../signatues/txtorcon-18.0.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.1.tar.gz>`_) * fix a Python2/3 regression when parsing onion services @@ -171,7 +181,7 @@ June 21, 2018 - * `txtorcon-18.0.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.0.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.0>`_ (:download:`local-sig </../signatues/txtorcon-18.0.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.0.tar.gz>`_) + * `txtorcon-18.0.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-18.0.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.0>`_ (:download:`local-sig </../signatues/txtorcon-18.0.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.0.tar.gz>`_) * `await_all_uploads` options when creating Onions * properly re-map progress percentages (including descriptor uploads) @@ -245,7 +255,7 @@ 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/main/signatues/txtorcon-0.20.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.20.0.tar.gz>`_) + * `txtorcon-0.20.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.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/main/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 @@ -266,7 +276,7 @@ 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/main/signatues/txtorcon-0.19.3.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.3.tar.gz>`_) + * `txtorcon-0.19.3.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.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/main/signatues/txtorcon-0.19.3.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.3.tar.gz>`_) * Incorrect parsing of SocksPort options (see `Issue 237 <https://github.com/meejah/txtorcon/issues/237>`_) @@ -276,7 +286,7 @@ May 11, 2017 - * `txtorcon-0.19.2.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.19.2.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.2>`_ (:download:`local-sig </../signatues/txtorcon-0.19.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.2.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.2.tar.gz>`_) + * `txtorcon-0.19.2.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.19.2.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.2>`_ (:download:`local-sig </../signatues/txtorcon-0.19.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.2.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.2.tar.gz>`_) * Work around a bug in `incremental` (see `Issue 233 <https://github.com/meejah/txtorcon/issues/233>`_) * Fix for `Issue 190 <https://github.com/meejah/txtorcon/issues/190>`_ from Felipe Dau. @@ -288,7 +298,7 @@ April 26, 2017 - * `txtorcon-0.19.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.19.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.1>`_ (:download:`local-sig </../signatues/txtorcon-0.19.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.1.tar.gz>`_) + * `txtorcon-0.19.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.19.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.1>`_ (:download:`local-sig </../signatues/txtorcon-0.19.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.1.tar.gz>`_) * Fix a regression in ``launch_tor``, see `Issue 227 <https://github.com/meejah/txtorcon/issues/227>`_ @@ -298,7 +308,7 @@ April 20, 2017 - * `txtorcon-0.19.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.19.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.0>`_ (:download:`local-sig </../signatues/txtorcon-0.19.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.0.tar.gz>`_) + * `txtorcon-0.19.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.19.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.0>`_ (:download:`local-sig </../signatues/txtorcon-0.19.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.0.tar.gz>`_) * Full Python3 support * Drop `txsocksx` and use a custom implementation (this also @@ -342,7 +352,7 @@ January 11, 2017 - * `txtorcon-0.18.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.18.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.18.0>`_ (:download:`local-sig </../signatues/txtorcon-0.18.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.18.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.18.0.tar.gz>`_) + * `txtorcon-0.18.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.18.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.18.0>`_ (:download:`local-sig </../signatues/txtorcon-0.18.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.18.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.18.0.tar.gz>`_) * `issue 200 <https://github.com/meejah/txtorcon/issues/200>`_: better feedback if the cookie data can't be read @@ -351,7 +361,7 @@ *October 4, 2016* - * `txtorcon-0.17.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.17.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.17.0>`_ (:download:`local-sig </../signatues/txtorcon-0.17.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.17.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.17.0.tar.gz>`_) + * `txtorcon-0.17.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.17.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.17.0>`_ (:download:`local-sig </../signatues/txtorcon-0.17.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.17.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.17.0.tar.gz>`_) * `issue 187 <https://github.com/meejah/txtorcon/issues/187>`_: fix unix-socket control endpoints * sometimes mapping streams to hostnames wasn't working properly * backwards-compatibility API for `socks_hostname` was incorrectly named @@ -362,7 +372,7 @@ *August 31, 2016* - * `txtorcon-0.16.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.16.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.16.1>`_ (:download:`local-sig </../signatues/txtorcon-0.16.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.16.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.16.1.tar.gz>`_) + * `txtorcon-0.16.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.16.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.16.1>`_ (:download:`local-sig </../signatues/txtorcon-0.16.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.16.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.16.1.tar.gz>`_) * `issue 172 <https://github.com/meejah/txtorcon/issues/172>`_: give `TorProcessProtocol` a `.quit` method * `issue 181 <https://github.com/meejah/txtorcon/issues/181>`_: enable SOCKS5-over-unix-sockets for TorClientEndpoint (thanks to `david415 <https://github.com/david415>`_ @@ -376,7 +386,7 @@ v0.15.1 ------- - * `txtorcon-0.15.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.15.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.15.1>`_ (:download:`local-sig </../signatues/txtorcon-0.15.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.15.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.15.1.tar.gz>`_) + * `txtorcon-0.15.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.15.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.15.1>`_ (:download:`local-sig </../signatues/txtorcon-0.15.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.15.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.15.1.tar.gz>`_) * fix `issue 179 <https://github.com/meejah/txtorcon/issues/179>`_ with `Circuit.age`. @@ -385,7 +395,7 @@ *July 26, 2016* - * `txtorcon-0.15.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.15.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.15.0>`_ (:download:`local-sig </../signatues/txtorcon-0.15.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.15.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.15.0.tar.gz>`_) + * `txtorcon-0.15.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.15.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.15.0>`_ (:download:`local-sig </../signatues/txtorcon-0.15.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.15.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.15.0.tar.gz>`_) * added support for NULL control-port-authentication which is often appropriate when used with a UNIX domain socket * switched to `ipaddress @@ -422,7 +432,7 @@ *December 2, 2015* - * `txtorcon-0.14.2.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.14.2.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.14.2>`_ (:download:`local-sig </../signatues/txtorcon-0.14.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.14.2.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.14.2.tar.gz>`_) + * `txtorcon-0.14.2.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.14.2.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.14.2>`_ (:download:`local-sig </../signatues/txtorcon-0.14.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.14.2.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.14.2.tar.gz>`_) * compatibility for Twisted 15.5.0 (released on 0.14.x for `OONI <http://ooni.io/>`_) @@ -440,14 +450,14 @@ *September 26, 2015* - * `txtorcon-0.14.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.14.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.14.0>`_ (:download:`local-sig </../signatues/txtorcon-0.14.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.14.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.14.0.tar.gz>`_) + * `txtorcon-0.14.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.14.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.14.0>`_ (:download:`local-sig </../signatues/txtorcon-0.14.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.14.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.14.0.tar.gz>`_) * :class:`txtorcon.interface.IStreamAttacher` handling was missing ``None`` and ``DO_NOT_ATTACH`` cases if a Deferred was returned. * add ``.is_built`` Deferred to :class:`txtorcon.Circuit` that gets `callback()`d when the circuit becomes BUILT * `david415 <https://github.com/david415>`_ ported his ``tor:`` endpoint parser so now both client and server endpoints are supported. This means **any** Twisted program using endpoints can use Tor as a client. For example, to connect to txtorcon's Web site: - ``ep = clientFromString("tor:timaq4ygg2iegci7.onion:80")``. + ``ep = clientFromString("tor:fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:80")``. (In the future, I'd like to automatically launch Tor if required, too). * Python3 fixes from `isis <https://github.com/isislovecruft>`_ (note: needs Twisted 15.4.0+) @@ -457,7 +467,7 @@ *May 10, 2015* - * `txtorcon-0.13.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.13.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.13.0>`_ (:download:`local-sig </../signatues/txtorcon-0.13.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.13.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.13.0.tar.gz>`_) + * `txtorcon-0.13.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.13.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.13.0>`_ (:download:`local-sig </../signatues/txtorcon-0.13.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.13.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.13.0.tar.gz>`_) * support ``basic`` and ``stealth`` hidden service authorization, and parse ``client_keys`` files. * 2x speedup for TorState parsing (mostly by lazy-parsing timestamps) * can now parse ~75000 microdescriptors/second per core of 3.4GHz Xeon E3 @@ -474,7 +484,7 @@ *February 3, 2015* - * `txtorcon-0.12.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.12.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.12.0>`_ (:download:`local-sig </../signatues/txtorcon-0.12.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.12.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.12.0.tar.gz>`_) + * `txtorcon-0.12.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.12.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.12.0>`_ (:download:`local-sig </../signatues/txtorcon-0.12.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.12.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.12.0.tar.gz>`_) * doc, code and import cleanups from `Kali Kaneko <https://github.com/kalikaneko>`_ * HiddenServiceDirGroupReadable support * Issue #80: honour ``ControlPort 0`` in incoming TorConfig @@ -501,9 +511,9 @@ *August 16, 2014* - * September 6, 2015. bugfix release: `txtorcon-0.11.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.11.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.11.1>`_ (:download:`local-sig </../signatues/txtorcon-0.11.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.11.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.11.1.tar.gz>`_) + * September 6, 2015. bugfix release: `txtorcon-0.11.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.11.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.11.1>`_ (:download:`local-sig </../signatues/txtorcon-0.11.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.11.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.11.1.tar.gz>`_) * fixed Debian bug `797261 <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=797261>`_ causing 3 tests to fail - * `txtorcon-0.11.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.11.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.11.0>`_ (:download:`local-sig </../signatues/txtorcon-0.11.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.11.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.11.0.tar.gz>`_) + * `txtorcon-0.11.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.11.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.11.0>`_ (:download:`local-sig </../signatues/txtorcon-0.11.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.11.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.11.0.tar.gz>`_) * More control for ``launch_tor``: access stdout, stderr in real-time and control whether we kill Tor on and stderr output. See issue #79. * Warning about ``build_circuit`` being called without a guard first @@ -518,7 +528,7 @@ *July 20, 2014* - * `txtorcon-0.10.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.10.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.10.1>`_ (:download:`local-sig </../signatues/txtorcon-0.10.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.10.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.10.1.tar.gz>`_) + * `txtorcon-0.10.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.10.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.10.1>`_ (:download:`local-sig </../signatues/txtorcon-0.10.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.10.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.10.1.tar.gz>`_) * fix bug incorrectly issuing RuntimeError in brief window of time on event-listeners * issue #78: Add tox tests and fix for Twisted 12.0.0 (and prior), as this is what Debian squeeze ships * issue #77: properly expand relative and tilde paths for ``hiddenServiceDir`` via endpoints @@ -529,7 +539,7 @@ *June 15, 2014* - * `txtorcon-0.10.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.10.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.10.0>`_ (:download:`local-sig </../signatues/txtorcon-0.10.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.10.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.10.0.tar.gz>`_) + * `txtorcon-0.10.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.10.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.10.0>`_ (:download:`local-sig </../signatues/txtorcon-0.10.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.10.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.10.0.tar.gz>`_) * In collaboration with `David Stainton <https://github.com/david415>`_ after a pull-request, we have endpoint parser plugins for Twisted! This means code like ``serverFromString("onion:80").listen(...)`` is enough to start a @@ -544,7 +554,7 @@ *April 23, 2014* - * `txtorcon-0.9.2.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.9.2.tar.gz>`_ (:download:`local-sig </../signatues/txtorcon-0.9.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.9.2.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.9.2.tar.gz>`_) + * `txtorcon-0.9.2.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.9.2.tar.gz>`_ (:download:`local-sig </../signatues/txtorcon-0.9.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.9.2.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.9.2.tar.gz>`_) * add ``on_disconnect`` callback for TorControlProtocol (no more monkey-patching Protocol API) * add ``age()`` method to Circuit * add ``time_created`` property to Circuit @@ -567,7 +577,7 @@ *January 20, 2014* - * `txtorcon-0.9.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.9.1.tar.gz>`_ (:download:`local-sig </../signatues/txtorcon-0.9.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.9.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.9.1.tar.gz>`_) + * `txtorcon-0.9.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.9.1.tar.gz>`_ (:download:`local-sig </../signatues/txtorcon-0.9.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.9.1.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.9.1.tar.gz>`_) * put test/ directory at the top level * using "`coverage <http://nedbatchelder.com/code/coverage/>`_" tool instead of custom script * using `coveralls.io <https://coveralls.io/r/meejah/txtorcon>`_ and `travis-ci <https://travis-ci.org/meejah/txtorcon>`_ for test coverage and continuous integration @@ -591,7 +601,7 @@ *November 22, 2013* - * `txtorcon-0.8.2.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.8.2.tar.gz>`_ (:download:`local-sig </../signatues/txtorcon-0.8.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.8.2.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.8.2.tar.gz>`_) + * `txtorcon-0.8.2.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.8.2.tar.gz>`_ (:download:`local-sig </../signatues/txtorcon-0.8.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.8.2.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.8.2.tar.gz>`_) * ensure hidden service server-side endpoints listen only on 127.0.0.1 @@ -600,7 +610,7 @@ *May 13, 2013* - * `txtorcon-0.8.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.8.1.tar.gz>`_ (:download:`local-sign </../signatues/txtorcon-0.8.1.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.8.1.tar.gz.sig?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.8.1.tar.gz>`_) + * `txtorcon-0.8.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.8.1.tar.gz>`_ (:download:`local-sign </../signatues/txtorcon-0.8.1.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.8.1.tar.gz.sig?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.8.1.tar.gz>`_) * fixed improper import in setup.py preventing 0.8.0 from installing * signatures with proper subkey this time * Proper file-flushing in tests and PyPy fixes from Lukas Lueg @@ -631,7 +641,7 @@ *November 21, 2012* - * `txtorcon-0.7.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.7.tar.gz>`_ (:download:`local-sig <../signatues/txtorcon-0.7.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.7.tar.gz.sig?raw=true>`_) (`source <https://github.com/meejah/txtorcon/tarball/v0.7>`_) + * `txtorcon-0.7.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.7.tar.gz>`_ (:download:`local-sig <../signatues/txtorcon-0.7.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.7.tar.gz.sig?raw=true>`_) (`source <https://github.com/meejah/txtorcon/tarball/v0.7>`_) * `issue #20 <https://github.com/meejah/txtorcon/issues/20>`_ config object now hooked up correctly after launch_tor(); * `patch <https://github.com/meejah/txtorcon/pull/22>`_ from hellais for properly handling data_dir given to TCPHiddenServiceEndpoint; * `.tac example <https://github.com/meejah/txtorcon/pull/19>`_ from mmaker; @@ -642,7 +652,7 @@ *October 10, 2012* - * `txtorcon-0.6.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.6.tar.gz>`_ (:download:`local-sig <../signatues/txtorcon-0.6.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.6.tar.gz.sig?raw=true>`_) (`source <https://github.com/meejah/txtorcon/tarball/v0.6>`_) + * `txtorcon-0.6.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-0.6.tar.gz>`_ (:download:`local-sig <../signatues/txtorcon-0.6.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.6.tar.gz.sig?raw=true>`_) (`source <https://github.com/meejah/txtorcon/tarball/v0.6>`_) * debian packaging (mmaker); * psutil fully gone; * *changed API* for launch_tor() to use TorConfig instead of args; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/examples/launch_onion.py new/txtorcon-23.11.0/examples/launch_onion.py --- old/txtorcon-23.5.0/examples/launch_onion.py 1970-01-01 01:00:00.000000000 +0100 +++ new/txtorcon-23.11.0/examples/launch_onion.py 2023-08-10 21:30:17.000000000 +0200 @@ -0,0 +1,48 @@ +#!/usr/bin/env python + +from twisted.internet import defer, task, endpoints, error +from twisted.web import server, resource + +import txtorcon +import sys + +class Simple(resource.Resource): + """ + A really simple Web site. + """ + isLeaf = True + + def render_GET(self, request): + return b"<html>Hello, world! I'm a hidden service!</html>" + + +async def main(reactor): + print("main", reactor) + tor = await txtorcon.launch( + reactor, + stdout=sys.stdout, + stderr=sys.stderr, + progress_updates=print, + control_port="unix:/tmp/testing/torcontrolfoo", + data_directory="/tmp/tordatatmp", + ) + print(tor) + + # create ephemeral service listening on "80" publically, and a + # random local port. + for _ in range(2): + onion_service = await tor.create_onion_service([80], progress=print) # , await_all_uploads=True, + print(f"service: http://{onion_service.hostname}") + for port in onion_service.ports: + print(" ", port) + ep = endpoints.serverFromString(reactor, "tcp:{}".format(port.split()[1].split(":")[1])) + port = await ep.listen(server.Site(Simple())) + print(port) + + await defer.Deferred() # wait forever + + +if __name__ == "__main__": + def run(reactor): + return defer.ensureDeferred(main(reactor)) + task.react(run) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/examples/web_client.py new/txtorcon-23.11.0/examples/web_client.py --- old/txtorcon-23.5.0/examples/web_client.py 2018-05-31 20:59:02.000000000 +0200 +++ new/txtorcon-23.11.0/examples/web_client.py 2023-08-11 09:41:38.000000000 +0200 @@ -32,7 +32,7 @@ agent = tor.web_agent() uri = b'http://surely-this-has-not-been-registered-and-is-invalid.com' uri = b'https://www.torproject.org' - uri = b'http://timaq4ygg2iegci7.onion/' # txtorcon documentation + uri = b'http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/' # txtorcon documentation print("Downloading {}".format(uri)) resp = yield agent.request(b'GET', uri) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/requirements.txt new/txtorcon-23.11.0/requirements.txt --- old/txtorcon-23.5.0/requirements.txt 2023-05-19 03:11:14.000000000 +0200 +++ new/txtorcon-23.11.0/requirements.txt 2023-08-29 17:13:24.000000000 +0200 @@ -3,6 +3,5 @@ ##GeoIP>=1.2.9 Twisted[tls]>=15.5.0 zope.interface>=3.6.1 -incremental automat cryptography diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/py3_test_controller.py new/txtorcon-23.11.0/test/py3_test_controller.py --- old/txtorcon-23.5.0/test/py3_test_controller.py 2018-05-31 20:59:02.000000000 +0200 +++ new/txtorcon-23.11.0/test/py3_test_controller.py 2023-11-20 07:11:22.000000000 +0100 @@ -1,4 +1,4 @@ -from mock import Mock +from unittest.mock import Mock from twisted.trial import unittest from twisted.internet.defer import ensureDeferred diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_attacher.py new/txtorcon-23.11.0/test/test_attacher.py --- old/txtorcon-23.5.0/test/test_attacher.py 2018-05-31 20:59:02.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_attacher.py 2023-11-20 07:11:22.000000000 +0100 @@ -1,4 +1,4 @@ -from mock import Mock +from unittest.mock import Mock from zope.interface import directlyProvides from twisted.trial import unittest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_circuit.py new/txtorcon-23.11.0/test/test_circuit.py --- old/txtorcon-23.5.0/test/test_circuit.py 2018-05-31 20:59:02.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_circuit.py 2023-11-20 07:11:22.000000000 +0100 @@ -1,6 +1,6 @@ import datetime import ipaddress -from mock import patch +from unittest.mock import patch from twisted.trial import unittest from twisted.internet import defer @@ -21,7 +21,7 @@ from txtorcon.interface import CircuitListenerMixin from txtorcon.interface import ITorControlProtocol -from mock import Mock +from unittest.mock import Mock @implementer(IRouterContainer) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_controller.py new/txtorcon-23.11.0/test/test_controller.py --- old/txtorcon-23.5.0/test/test_controller.py 2020-04-20 04:58:02.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_controller.py 2023-11-20 07:11:22.000000000 +0100 @@ -2,7 +2,7 @@ import six import functools from os.path import join -from mock import Mock, patch +from unittest.mock import Mock, patch from io import BytesIO from twisted.internet.interfaces import IReactorCore diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_endpoints.py new/txtorcon-23.11.0/test/test_endpoints.py --- old/txtorcon-23.5.0/test/test_endpoints.py 2023-02-16 06:25:43.000000000 +0100 +++ new/txtorcon-23.11.0/test/test_endpoints.py 2023-11-20 07:11:22.000000000 +0100 @@ -2,8 +2,8 @@ import os import sys -from mock import patch -from mock import Mock, MagicMock +from unittest.mock import patch +from unittest.mock import Mock, MagicMock from unittest import skipIf from binascii import b2a_base64 @@ -1593,9 +1593,9 @@ ) def test_parser_basic(self): - ep = clientFromString(None, 'tor:host=timaq4ygg2iegci7.onion:port=80:socksPort=9050') + ep = clientFromString(None, 'tor:host=fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:port=80:socksPort=9050') - self.assertEqual(ep.host, 'timaq4ygg2iegci7.onion') + self.assertEqual(ep.host, 'fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion') self.assertEqual(ep.port, 80) # XXX what's "the Twisted way" to get the port out here? self.assertEqual(ep._socks_endpoint._port, 9050) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_onion.py new/txtorcon-23.11.0/test/test_onion.py --- old/txtorcon-23.5.0/test/test_onion.py 2019-05-19 14:35:02.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_onion.py 2023-11-20 07:11:22.000000000 +0100 @@ -2,7 +2,7 @@ import os import sys -from mock import Mock +from unittest.mock import Mock from os.path import join from unittest import skipIf diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_router.py new/txtorcon-23.11.0/test/test_router.py --- old/txtorcon-23.5.0/test/test_router.py 2018-05-31 20:59:02.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_router.py 2023-11-20 07:11:22.000000000 +0100 @@ -1,6 +1,6 @@ import json from datetime import datetime -from mock import Mock +from unittest.mock import Mock from twisted.trial import unittest from twisted.internet import defer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_socks.py new/txtorcon-23.11.0/test/test_socks.py --- old/txtorcon-23.5.0/test/test_socks.py 2018-05-31 20:59:02.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_socks.py 2023-11-20 07:11:22.000000000 +0100 @@ -1,5 +1,5 @@ from six import BytesIO, text_type -from mock import Mock, patch +from unittest.mock import Mock, patch from twisted.trial import unittest from twisted.internet import defer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_stream.py new/txtorcon-23.11.0/test/test_stream.py --- old/txtorcon-23.5.0/test/test_stream.py 2018-05-31 20:59:02.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_stream.py 2023-08-11 09:41:38.000000000 +0200 @@ -365,7 +365,7 @@ for address in [ '1.2.3.4:80', '1.2.3.4.315D5684D5343580D409F16119F78D776A58AEFB.exit:80', - 'timaq4ygg2iegci7.onion:80']: + 'fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:80']: line = "316 %s 1 %s REASON=FOO" for state in ['NEW', 'SUCCEEDED', 'REMAP', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_torconfig.py new/txtorcon-23.11.0/test/test_torconfig.py --- old/txtorcon-23.5.0/test/test_torconfig.py 2019-05-19 14:35:02.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_torconfig.py 2023-11-20 07:11:22.000000000 +0100 @@ -6,7 +6,7 @@ import functools import warnings from six import StringIO -from mock import Mock, patch +from unittest.mock import Mock, patch from os.path import join from zope.interface import implementer, directlyProvides diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_torcontrolprotocol.py new/txtorcon-23.11.0/test/test_torcontrolprotocol.py --- old/txtorcon-23.5.0/test/test_torcontrolprotocol.py 2019-05-19 14:35:02.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_torcontrolprotocol.py 2023-10-04 21:25:18.000000000 +0200 @@ -74,7 +74,7 @@ self.transport = proto_helpers.StringTransport() def send(self, line): - assert type(line) == bytes + assert isinstance(line, bytes) self.protocol.dataReceived(line.strip() + b"\r\n") def test_authenticate_cookie(self): @@ -226,7 +226,7 @@ it_was_called.yes = False d = self.protocol.when_disconnected() - d.addCallback(it_was_called) + d.addBoth(it_was_called) f = failure.Failure(error.ConnectionDone("It's all over")) self.protocol.connectionLost(f) self.assertTrue(it_was_called.yes) @@ -284,6 +284,31 @@ self.protocol.connectionLost(f) self.assertEqual(it_was_called.count, 2) + def test_disconnect_subsequent_commands(self): + """ + commands issued after disconnect should errback + """ + + def it_was_called(f): + str(f) + it_was_called.count += 1 + return None + it_was_called.count = 0 + + # one outstanding command + d0 = self.protocol.queue_command("some command0") + d0.addErrback(it_was_called) + self.protocol.on_disconnect.addErrback(lambda _: None) + + f = failure.Failure(RuntimeError("The thing didn't do the stuff.")) + self.protocol.connectionLost(f) + + # one command issued _after_ we've disconnected + d1 = self.protocol.queue_command("some command1") + d1.addErrback(it_was_called) + + self.assertEqual(it_was_called.count, 2) + class ProtocolTests(unittest.TestCase): @@ -297,7 +322,7 @@ self.protocol = None def send(self, line): - assert type(line) == bytes + assert isinstance(line, bytes) self.protocol.dataReceived(line.strip() + b"\r\n") def test_statemachine_broadcast_no_code(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_torstate.py new/txtorcon-23.11.0/test/test_torstate.py --- old/txtorcon-23.5.0/test/test_torstate.py 2023-02-16 06:25:43.000000000 +0100 +++ new/txtorcon-23.11.0/test/test_torstate.py 2023-11-20 07:11:22.000000000 +0100 @@ -12,7 +12,7 @@ from ipaddress import IPv4Address -from mock import patch, Mock +from unittest.mock import patch, Mock from txtorcon import TorControlProtocol from txtorcon import TorProtocolError @@ -1293,7 +1293,14 @@ self.assertEqual(self.transport.value(), b'EXTENDCIRCUIT 0 0000000000000000000000000000000000000000,0000000000000000000000000000000000000001,0000000000000000000000000000000000000002\r\n') # should have gotten a warning about this not being an entry # guard - self.assertEqual(len(self.flushWarnings()), 1) + self.assertEqual( + 1, + len([ + warn + for warn in self.flushWarnings() + if "Circuit doesn't start with a guard" in warn["message"] + ]) + ) def test_build_circuit_no_routers(self): self.state.build_circuit() @@ -1329,7 +1336,14 @@ self.send(b"250 EXTENDED 1234") # should have gotten a warning about this not being an entry # guard - self.assertEqual(len(self.flushWarnings()), 1) + self.assertEqual( + 1, + len([ + warn + for warn in self.flushWarnings() + if "Circuit doesn't start with a guard" in warn["message"] + ]) + ) return d def test_build_circuit_error(self): @@ -1477,7 +1491,14 @@ self.state.circuits[1234].update(['1234', 'BUILT']) # should have gotten a warning about this not being an entry # guard - self.assertEqual(len(self.flushWarnings()), 1) + self.assertEqual( + 1, + len([ + warn + for warn in self.flushWarnings() + if "Circuit doesn't start with a guard" in warn["message"] + ]) + ) return d def test_build_circuit_failure(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_util.py new/txtorcon-23.11.0/test/test_util.py --- old/txtorcon-23.5.0/test/test_util.py 2021-08-16 22:24:40.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_util.py 2023-11-20 07:11:22.000000000 +0100 @@ -1,7 +1,7 @@ import os import tempfile import ipaddress -from mock import patch +from unittest.mock import patch from unittest import skip as _skip from os.path import exists diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_web.py new/txtorcon-23.11.0/test/test_web.py --- old/txtorcon-23.5.0/test/test_web.py 2023-05-19 03:11:14.000000000 +0200 +++ new/txtorcon-23.11.0/test/test_web.py 2023-11-20 07:11:22.000000000 +0100 @@ -1,5 +1,5 @@ -from mock import Mock +from unittest.mock import Mock from twisted.web.client import BrowserLikePolicyForHTTPS from twisted.trial import unittest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/_metadata.py new/txtorcon-23.11.0/txtorcon/_metadata.py --- old/txtorcon-23.5.0/txtorcon/_metadata.py 2023-05-19 03:13:53.000000000 +0200 +++ new/txtorcon-23.11.0/txtorcon/_metadata.py 2023-11-20 07:12:18.000000000 +0100 @@ -1,4 +1,4 @@ -__version__ = '23.5.0' +__version__ = '23.11.0' __author__ = 'meejah' __contact__ = 'meejah@meejah.ca' __url__ = 'https://github.com/meejah/txtorcon' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/controller.py new/txtorcon-23.11.0/txtorcon/controller.py --- old/txtorcon-23.5.0/txtorcon/controller.py 2023-05-19 03:11:14.000000000 +0200 +++ new/txtorcon-23.11.0/txtorcon/controller.py 2023-08-30 01:34:05.000000000 +0200 @@ -692,9 +692,9 @@ add and remove onion authentication. For example, inside an `async def` method that's had `ensureDeferred` called on it:: - async with tor.onion_authentication("timaq4ygg2iegci7.onion", "seekrit token"): + async with tor.onion_authentication("fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion", "seekrit token"): agent = tor.web_agent() - resp = await agent.request(b'GET', "http://timaq4ygg2iegci7.onion/") + resp = await agent.request(b'GET', "http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/") body = await readBody(resp) # after the "async with" the token will be removed from Tor's configuration @@ -1032,6 +1032,8 @@ control-connection goes away (this means the service will appear in `GETINFO onions/detached` to all other controllers) + + :returns EphemeralOnionService: """ if version not in (2, 3): raise ValueError( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/endpoints.py new/txtorcon-23.11.0/txtorcon/endpoints.py --- old/txtorcon-23.5.0/txtorcon/endpoints.py 2021-08-16 22:24:37.000000000 +0200 +++ new/txtorcon-23.11.0/txtorcon/endpoints.py 2023-08-11 09:41:38.000000000 +0200 @@ -203,7 +203,7 @@ :class:`txtorcon.IAuthenticatedOnionClients` instance (and from which you can recover private keys, the hostname, etc) - :ivar onion_uri: the public key, like ``timaq4ygg2iegci7.onion`` + :ivar onion_uri: the public key, like ``fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion`` which came from the hidden_service_dir's ``hostname`` file :ivar onion_private_key: the contents of ``hidden_service_dir/private_key`` @@ -1193,11 +1193,11 @@ :api:`twisted.internet.endpoints.clientFromString <clientFromString>` with a string argument like: - ``tor:host=timaq4ygg2iegci7.onion:port=80:socksPort=9050`` + ``tor:host=fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:port=80:socksPort=9050`` ...or simply: - ``tor:host=timaq4ygg2iegci7.onion:port=80`` + ``tor:host=fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:port=80`` You may also include a username + password. By default, Tor will not put two streams that provided different authentication on the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/torcontrolprotocol.py new/txtorcon-23.11.0/txtorcon/torcontrolprotocol.py --- old/txtorcon-23.5.0/txtorcon/torcontrolprotocol.py 2019-05-19 14:35:02.000000000 +0200 +++ new/txtorcon-23.11.0/txtorcon/torcontrolprotocol.py 2023-10-04 21:25:18.000000000 +0200 @@ -232,6 +232,12 @@ :class:`txtorcon.TorState`, which is also the place to go if you wish to add your own stream or circuit listeners. """ + # override Twisted's LineOnlyReceiver maximum line-length. At + # least "GETINFO md/id/X" for some Xse exceeds 16384 (2**14, the + # default) and thus causes the control connection to + # fail. control.c defines MAX_COMMAND_LINE_LENGTH as 1024*1024 so + # we use that + MAX_LENGTH = 2 ** 20 def __init__(self, password_function=None): """ @@ -276,11 +282,6 @@ self._when_disconnected = SingleObserver() """ - Internal use. A :class:`SingleObserver` for when_disconnected() - """ - - self._when_disconnected = SingleObserver() - """ Private. See :func:`.when_disconnected` """ @@ -356,7 +357,7 @@ self.stop_debug() def start_debug(self): - self.debuglog = open('txtorcon-debug.log', 'w') + self.debuglog = open('txtorcon-debug.log', 'wb') def stop_debug(self): def noop(*args, **kw): @@ -692,10 +693,14 @@ def connectionLost(self, reason): "Protocol API" txtorlog.msg('connection terminated: ' + str(reason)) - if reason.check(ConnectionDone): - self._when_disconnected.fire(self) - else: - self._when_disconnected.fire(reason) + self._when_disconnected.fire( + Failure( + TorDisconnectError( + text="Tor connection terminated", + error=reason, + ) + ) + ) # ...and this is why we don't do on_disconnect = Deferred() :( # and instead should have had on_disconnect() method that @@ -712,8 +717,10 @@ else: self.on_disconnect.errback(reason) self.on_disconnect = None - self._when_disconnected.fire(self) + outstanding = [self.command] + self.commands if self.command else self.commands + self.command = None + self.defer = None for d, cmd, cmd_arg in outstanding: if not d.called: d.errback( @@ -754,6 +761,10 @@ if len(self.commands): self.command = self.commands.pop(0) (d, cmd, cmd_arg) = self.command + + if self._when_disconnected.already_fired(d): + return + self.defer = d self.debuglog.write(cmd + b'\n') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/torstate.py new/txtorcon-23.11.0/txtorcon/torstate.py --- old/txtorcon-23.5.0/txtorcon/torstate.py 2020-04-20 04:58:02.000000000 +0200 +++ new/txtorcon-23.11.0/txtorcon/torstate.py 2023-08-11 09:41:38.000000000 +0200 @@ -477,7 +477,7 @@ (e.g. "SomeFlag=True"). Currently there are none that Tor accepts. """ - if type(stream) != int: + if not isinstance(stream, int): # assume it's a Stream instance stream = stream.id try: @@ -513,7 +513,7 @@ :meth:`Circuit.close <txtorcon.circuit.Circuit.close>` """ - if type(circid) != int: + if not isinstance(circid, int): # assume it's a Circuit instance circid = circid.id flags = flags_from_dict(kwargs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/util.py new/txtorcon-23.11.0/txtorcon/util.py --- old/txtorcon-23.5.0/txtorcon/util.py 2019-05-19 14:35:02.000000000 +0200 +++ new/txtorcon-23.11.0/txtorcon/util.py 2023-10-04 21:25:18.000000000 +0200 @@ -473,6 +473,19 @@ self._observers = [] self._fired = self._NotFired + def has_fired(self): + return self._fired is not self._NotFired + + def already_fired(self, d): + """ + If we have already fired, callback `d` with our result. + :returns bool: True if we already fired, False otherwise + """ + if self.has_fired(): + d.callback(self._fired) + return True + return False + def when_fired(self): d = defer.Deferred() if self._fired is not self._NotFired: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon.egg-info/PKG-INFO new/txtorcon-23.11.0/txtorcon.egg-info/PKG-INFO --- old/txtorcon-23.5.0/txtorcon.egg-info/PKG-INFO 2023-05-19 03:21:31.000000000 +0200 +++ new/txtorcon-23.11.0/txtorcon.egg-info/PKG-INFO 2023-11-20 08:48:41.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: txtorcon -Version: 23.5.0 +Version: 23.11.0 Summary: Twisted-based Tor controller client, with state-tracking and configuration abstractions. https://txtorcon.readthedocs.org https://github.com/meejah/txtorcon Home-page: https://github.com/meejah/txtorcon Author: meejah diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon.egg-info/SOURCES.txt new/txtorcon-23.11.0/txtorcon.egg-info/SOURCES.txt --- old/txtorcon-23.5.0/txtorcon.egg-info/SOURCES.txt 2023-05-19 03:21:31.000000000 +0200 +++ new/txtorcon-23.11.0/txtorcon.egg-info/SOURCES.txt 2023-11-20 08:48:41.000000000 +0100 @@ -50,6 +50,7 @@ examples/disallow_streams_by_port.py examples/dns_lookups.py examples/hidden_echo.py +examples/launch_onion.py examples/launch_tor.py examples/launch_tor2web.py examples/launch_tor_endpoint.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon.egg-info/requires.txt new/txtorcon-23.11.0/txtorcon.egg-info/requires.txt --- old/txtorcon-23.5.0/txtorcon.egg-info/requires.txt 2023-05-19 03:21:31.000000000 +0200 +++ new/txtorcon-23.11.0/txtorcon.egg-info/requires.txt 2023-11-20 08:48:41.000000000 +0100 @@ -1,6 +1,5 @@ Twisted[tls]>=15.5.0 zope.interface>=3.6.1 -incremental automat cryptography @@ -17,7 +16,6 @@ twine pyflakes pycodestyle -mock ipaddress>=1.0.16 geoip readme_renderer