[Pkg-privacy-commits] [Git][pkg-privacy-team/txtorcon][upstream] New upstream version 22.0.0
Antoine Beaupré (@anarcat)
anarcat at debian.org
Mon Mar 21 16:29:41 GMT 2022
Antoine Beaupré pushed to branch upstream at Privacy Maintainers / txtorcon
Commits:
87dd8179 by Antoine Beaupré at 2022-03-21T11:46:01-04:00
New upstream version 22.0.0
- - - - -
25 changed files:
- Makefile
- PKG-INFO
- README.rst
- docs/index.rst
- docs/release-checklist.rst
- docs/releases.rst
- examples/launch_tor_unix_sockets.py
- examples/launch_tor_with_simplehttpd.py
- examples/readme.py
- examples/readme2.py
- examples/stream_circuit_logger.py
- examples/web_client_custom_circuit.py
- examples/web_onion_service_aiohttp.py
- examples/web_onion_service_ephemeral_auth.py
- examples/web_onion_service_ephemeral_nonanon.py
- examples/web_onion_service_ephemeral_unix.py
- examples/web_onion_service_prop224.py
- setup.py
- test/test_endpoints.py
- test/test_util.py
- test/test_web.py
- txtorcon.egg-info/PKG-INFO
- txtorcon/_metadata.py
- txtorcon/socks.py
- txtorcon/torinfo.py
Changes:
=====================================
Makefile
=====================================
@@ -1,6 +1,6 @@
.PHONY: test html counts coverage sdist clean install doc integration diagrams
default: test
-VERSION = 20.0.0
+VERSION = 22.0.0
test:
PYTHONPATH=. trial --reporter=text test
=====================================
PKG-INFO
=====================================
@@ -1,162 +1,11 @@
Metadata-Version: 2.1
Name: txtorcon
-Version: 20.0.0
+Version: 22.0.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
Author-email: meejah at meejah.ca
License: MIT
-Description:
-
-
-
-
- .. _NOTE: see docs/index.rst for the starting-point
- .. _ALSO: https://txtorcon.readthedocs.org for rendered docs
-
-
-
-
-
-
- .. image:: https://travis-ci.org/meejah/txtorcon.png?branch=master
- :target: https://www.travis-ci.org/meejah/txtorcon
- :alt: travis
-
- .. image:: https://coveralls.io/repos/meejah/txtorcon/badge.png
- :target: https://coveralls.io/r/meejah/txtorcon
- :alt: coveralls
-
- .. image:: http://codecov.io/github/meejah/txtorcon/coverage.svg?branch=master
- :target: http://codecov.io/github/meejah/txtorcon?branch=master
- :alt: codecov
-
- .. image:: https://readthedocs.org/projects/txtorcon/badge/?version=stable
- :target: https://txtorcon.readthedocs.io/en/stable
- :alt: ReadTheDocs
-
- .. image:: https://readthedocs.org/projects/txtorcon/badge/?version=latest
- :target: https://txtorcon.readthedocs.io/en/latest
- :alt: ReadTheDocs
-
- .. image:: https://landscape.io/github/meejah/txtorcon/master/landscape.svg?style=flat
- :target: https://landscape.io/github/meejah/txtorcon/master
- :alt: Code Health
-
-
- txtorcon
- ========
-
- - **docs**: https://txtorcon.readthedocs.org or http://timaq4ygg2iegci7.onion
- - **code**: https://github.com/meejah/txtorcon
- - ``torsocks git clone git://timaq4ygg2iegci7.onion/txtorcon.git``
- - MIT-licensed;
- - Python 2.7, PyPy 5.0.0+, Python 3.5+;
- - depends on
- `Twisted`_,
- `Automat <https://github.com/glyph/automat>`_,
- (and the `ipaddress <https://pypi.python.org/pypi/ipaddress>`_ backport for non Python 3)
-
-
- Ten Thousand Feet
- -----------------
-
- txtorcon is an implementation of the `control-spec
- <https://gitweb.torproject.org/torspec.git/blob/HEAD:/control-spec.txt>`_
- for `Tor <https://www.torproject.org/>`_ using the `Twisted`_
- networking library for `Python <http://python.org/>`_.
-
- This is useful for writing utilities to control or make use of Tor in
- event-based Python programs. If your Twisted program supports
- endpoints (like ``twistd`` does) your server or client can make use of
- Tor immediately, with no code changes. Start your own Tor or connect
- to one and get live stream, circuit, relay updates; read and change
- config; monitor events; build circuits; create onion services;
- etcetera (`ReadTheDocs <https://txtorcon.readthedocs.org>`_).
-
-
- Some Possibly Motivational Example Code
- ---------------------------------------
-
- `download <examples/readme.py>`_
- (also `python2 style <examples/readme2.py>`_)
-
- .. code:: python
-
- from twisted.internet.task import react
- from twisted.internet.defer import inlineCallbacks, ensureDeferred
- from twisted.internet.endpoints import UNIXClientEndpoint
-
- import treq
- import txtorcon
-
-
- async def main(reactor):
- tor = await txtorcon.connect(
- reactor,
- UNIXClientEndpoint(reactor, "/var/run/tor/control")
- )
-
- print("Connected to Tor version {}".format(tor.version))
-
- url = u'https://www.torproject.org:443'
- print(u"Downloading {}".format(repr(url)))
- resp = await treq.get(url, agent=tor.web_agent())
-
- print(u" {} bytes".format(resp.length))
- data = await resp.text()
- print(u"Got {} bytes:\n{}\n[...]{}".format(
- len(data),
- data[:120],
- data[-120:],
- ))
-
- print(u"Creating a circuit")
- state = await tor.create_state()
- circ = await state.build_circuit()
- await circ.when_built()
- print(u" path: {}".format(" -> ".join([r.ip for r in circ.path])))
-
- print(u"Downloading meejah's public key via above circuit...")
- config = await tor.get_config()
- resp = await treq.get(
- u'https://meejah.ca/meejah.asc',
- agent=circ.web_agent(reactor, config.socks_endpoint(reactor)),
- )
- data = await resp.text()
- print(data)
-
-
- @react
- def _main(reactor):
- return ensureDeferred(main(reactor))
-
-
-
- Try It Now On Debian/Ubuntu
- ---------------------------
-
- For example, serve some files via an onion service (*aka* hidden
- service):
-
- .. code-block:: shell-session
-
- $ sudo apt-get install --install-suggests python3-txtorcon
- $ twistd -n web --port "onion:80" --path ~/public_html
-
-
- Read More
- ---------
-
- All the documentation starts `in docs/index.rst
- <docs/index.rst>`_. Also hosted at `txtorcon.rtfd.org
- <https://txtorcon.readthedocs.io/en/latest/>`_.
-
- You'll want to start with `the introductions <docs/introduction.rst>`_ (`hosted at RTD
- <https://txtorcon.readthedocs.org/en/latest/introduction.html>`_).
-
- .. _Twisted: https://twistedmatrix.com/trac
-
Keywords: python,twisted,tor,tor controller
Platform: UNKNOWN
Classifier: Framework :: Twisted
@@ -176,3 +25,157 @@ Classifier: Topic :: Internet :: Proxy Servers
Classifier: Topic :: Internet
Classifier: Topic :: Security
Provides-Extra: dev
+License-File: LICENSE
+
+
+
+
+
+
+.. _NOTE: see docs/index.rst for the starting-point
+.. _ALSO: https://txtorcon.readthedocs.org for rendered docs
+
+
+
+
+
+
+.. image:: https://github.com/meejah/txtorcon/actions/workflows/python3.yaml/badge.svg
+ :target: https://github.com/meejah/txtorcon/actions
+ :alt: github-actions
+
+.. image:: https://coveralls.io/repos/meejah/txtorcon/badge.png?branch=main
+ :target: https://coveralls.io/github/meejah/txtorcon?branch=main
+ :alt: coveralls
+
+.. image:: http://codecov.io/github/meejah/txtorcon/coverage.svg?branch=main
+ :target: http://codecov.io/github/meejah/txtorcon?branch=main
+ :alt: codecov
+
+.. image:: https://readthedocs.org/projects/txtorcon/badge/?version=stable
+ :target: https://txtorcon.readthedocs.io/en/stable
+ :alt: ReadTheDocs
+
+.. image:: https://readthedocs.org/projects/txtorcon/badge/?version=latest
+ :target: https://txtorcon.readthedocs.io/en/latest
+ :alt: ReadTheDocs
+
+.. image:: https://landscape.io/github/meejah/txtorcon/main/landscape.svg?style=flat
+ :target: https://landscape.io/github/meejah/txtorcon/main
+ :alt: Code Health
+
+
+txtorcon
+========
+
+- **docs**: https://txtorcon.readthedocs.org or http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/
+- **code**: https://github.com/meejah/txtorcon
+- ``torsocks git clone git://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon.git``
+- MIT-licensed;
+- Python 2.7, PyPy 5.0.0+, Python 3.5+;
+- depends on
+ `Twisted`_,
+ `Automat <https://github.com/glyph/automat>`_,
+ (and the `ipaddress <https://pypi.python.org/pypi/ipaddress>`_ backport for non Python 3)
+
+
+Ten Thousand Feet
+-----------------
+
+txtorcon is an implementation of the `control-spec
+<https://gitweb.torproject.org/torspec.git/blob/HEAD:/control-spec.txt>`_
+for `Tor <https://www.torproject.org/>`_ using the `Twisted`_
+networking library for `Python <http://python.org/>`_.
+
+This is useful for writing utilities to control or make use of Tor in
+event-based Python programs. If your Twisted program supports
+endpoints (like ``twistd`` does) your server or client can make use of
+Tor immediately, with no code changes. Start your own Tor or connect
+to one and get live stream, circuit, relay updates; read and change
+config; monitor events; build circuits; create onion services;
+etcetera (`ReadTheDocs <https://txtorcon.readthedocs.org>`_).
+
+
+Some Possibly Motivational Example Code
+---------------------------------------
+
+`download <examples/readme.py>`_
+(also `python2 style <examples/readme2.py>`_)
+
+.. code:: python
+
+ from twisted.internet.task import react
+ from twisted.internet.defer import inlineCallbacks, ensureDeferred
+ from twisted.internet.endpoints import UNIXClientEndpoint
+
+ import treq
+ import txtorcon
+
+
+ async def main(reactor):
+ tor = await txtorcon.connect(
+ reactor,
+ UNIXClientEndpoint(reactor, "/var/run/tor/control")
+ )
+
+ print("Connected to Tor version {}".format(tor.version))
+
+ url = u'https://www.torproject.org:443'
+ print(u"Downloading {}".format(repr(url)))
+ resp = await treq.get(url, agent=tor.web_agent())
+
+ print(u" {} bytes".format(resp.length))
+ data = await resp.text()
+ print(u"Got {} bytes:\n{}\n[...]{}".format(
+ len(data),
+ data[:120],
+ data[-120:],
+ ))
+
+ print(u"Creating a circuit")
+ state = await tor.create_state()
+ circ = await state.build_circuit()
+ await circ.when_built()
+ print(u" path: {}".format(" -> ".join([r.ip for r in circ.path])))
+
+ print(u"Downloading meejah's public key via above circuit...")
+ config = await tor.get_config()
+ resp = await treq.get(
+ u'https://meejah.ca/meejah.asc',
+ agent=circ.web_agent(reactor, config.socks_endpoint(reactor)),
+ )
+ data = await resp.text()
+ print(data)
+
+
+ @react
+ def _main(reactor):
+ return ensureDeferred(main(reactor))
+
+
+
+Try It Now On Debian/Ubuntu
+---------------------------
+
+For example, serve some files via an onion service (*aka* hidden
+service):
+
+.. code-block:: shell-session
+
+ $ sudo apt-get install --install-suggests python3-txtorcon
+ $ twistd -n web --port "onion:80" --path ~/public_html
+
+
+Read More
+---------
+
+All the documentation starts `in docs/index.rst
+<docs/index.rst>`_. Also hosted at `txtorcon.rtfd.org
+<https://txtorcon.readthedocs.io/en/latest/>`_.
+
+You'll want to start with `the introductions <docs/introduction.rst>`_ (`hosted at RTD
+<https://txtorcon.readthedocs.org/en/latest/introduction.html>`_).
+
+.. _Twisted: https://twistedmatrix.com/trac
+
+
=====================================
README.rst
=====================================
@@ -11,16 +11,16 @@
-.. image:: https://travis-ci.org/meejah/txtorcon.png?branch=master
- :target: https://www.travis-ci.org/meejah/txtorcon
- :alt: travis
+.. image:: https://github.com/meejah/txtorcon/actions/workflows/python3.yaml/badge.svg
+ :target: https://github.com/meejah/txtorcon/actions
+ :alt: github-actions
-.. image:: https://coveralls.io/repos/meejah/txtorcon/badge.png
- :target: https://coveralls.io/r/meejah/txtorcon
+.. image:: https://coveralls.io/repos/meejah/txtorcon/badge.png?branch=main
+ :target: https://coveralls.io/github/meejah/txtorcon?branch=main
:alt: coveralls
-.. image:: http://codecov.io/github/meejah/txtorcon/coverage.svg?branch=master
- :target: http://codecov.io/github/meejah/txtorcon?branch=master
+.. image:: http://codecov.io/github/meejah/txtorcon/coverage.svg?branch=main
+ :target: http://codecov.io/github/meejah/txtorcon?branch=main
:alt: codecov
.. image:: https://readthedocs.org/projects/txtorcon/badge/?version=stable
@@ -31,17 +31,17 @@
:target: https://txtorcon.readthedocs.io/en/latest
:alt: ReadTheDocs
-.. image:: https://landscape.io/github/meejah/txtorcon/master/landscape.svg?style=flat
- :target: https://landscape.io/github/meejah/txtorcon/master
+.. image:: https://landscape.io/github/meejah/txtorcon/main/landscape.svg?style=flat
+ :target: https://landscape.io/github/meejah/txtorcon/main
:alt: Code Health
txtorcon
========
-- **docs**: https://txtorcon.readthedocs.org or http://timaq4ygg2iegci7.onion
+- **docs**: https://txtorcon.readthedocs.org or http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/
- **code**: https://github.com/meejah/txtorcon
-- ``torsocks git clone git://timaq4ygg2iegci7.onion/txtorcon.git``
+- ``torsocks git clone git://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon.git``
- MIT-licensed;
- Python 2.7, PyPy 5.0.0+, Python 3.5+;
- depends on
=====================================
docs/index.rst
=====================================
@@ -10,14 +10,14 @@ txtorcon
- clearnet: https://txtorcon.readthedocs.org
- **code**: https://github.com/meejah/txtorcon
- ``torsocks git clone git://timaq4ygg2iegci7.onion/txtorcon.git``
-- .. image:: https://travis-ci.org/meejah/txtorcon.png?branch=master
+- .. image:: https://travis-ci.org/meejah/txtorcon.png?branch=main
:target: https://www.travis-ci.org/meejah/txtorcon
.. image:: https://coveralls.io/repos/meejah/txtorcon/badge.svg
:target: https://coveralls.io/r/meejah/txtorcon
- .. image:: https://codecov.io/gh/meejah/txtorcon/branch/master/graphs/badge.svg?branch=master
- :target: https://codecov.io/github/meejah/txtorcon?branch=master
+ .. image:: https://codecov.io/gh/meejah/txtorcon/branch/main/graphs/badge.svg?branch=main
+ :target: https://codecov.io/github/meejah/txtorcon?branch=main
.. image:: https://readthedocs.org/projects/txtorcon/badge/?version=stable
:target: https://txtorcon.readthedocs.io/en/stable
@@ -27,8 +27,8 @@ txtorcon
:target: https://txtorcon.readthedocs.io/en/latest
:alt: ReadTheDocs
- .. image:: https://landscape.io/github/meejah/txtorcon/master/landscape.svg?style=flat
- :target: https://landscape.io/github/meejah/txtorcon/master
+ .. image:: https://landscape.io/github/meejah/txtorcon/main/landscape.svg?style=flat
+ :target: https://landscape.io/github/meejah/txtorcon/main
:alt: Code Health
.. container:: first_time
=====================================
docs/release-checklist.rst
=====================================
@@ -1,8 +1,8 @@
Release Checklist
=================
-* ensure local copy is on master, up-to-date:
- * git checkout master
+* ensure local copy is on main, up-to-date:
+ * git checkout main
* git pull
* double-check version updated, sadly in a few places:
@@ -23,7 +23,7 @@ Release Checklist
* update heading, date
* on both signing-machine and build-machine shells:
- * export VERSION=20.0.0
+ * export VERSION=22.0.0
* (if on signing machine) "make dist" and "make dist-sigs"
* creates:
@@ -94,7 +94,7 @@ Release Checklist
* copy release announcement to signing machine, update code
* (from dev machine: "git push pangea")
- * git checkout master
+ * git checkout main
* git pull
* create signed tag
@@ -117,7 +117,7 @@ Release Checklist
* make sure BOTH the .tar.gz and .tar.gz.asc (ditto for .whl) are in the dist/ directory first!!)
* ls dist/txtorcon-${VERSION}*
* note this depends on a ~/.pypirc file with [server-login] section containing "username:" and "password:"
- * git push origin master
+ * git push origin main
* git push origin v${VERSION}
* to github: use web-upload interface to upload the 4 files (both dists, both signature)
=====================================
docs/releases.rst
=====================================
@@ -4,7 +4,7 @@ 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
+in main your project depends upon, let me know and I'll do a
release.
txtorcon follows `calendar versioning <http://calver.org/>`_ with the
@@ -15,7 +15,36 @@ that will be "19.2.1".
See also :ref:`api_stability`.
-`git master <https://github.com/meejah/txtorcon>`_ *will likely become v20.1.0*
+`git main <https://github.com/meejah/txtorcon>`_ *will likely become v21.1.0*
+
+v22.0.0
+-------
+
+March 16, 2022
+
+ * `txtorcon-22.0.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-22.0.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/22.0.0>`_ (:download:`local-sig </../signatues/txtorcon-22.0.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-22.0.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v22.0.0.tar.gz>`_)
+ * Use GitHub Action for CI (instead of Travis)
+ * fix coveralls uploading of coverage
+
+
+v21.1.0
+-------
+
+August 16, 2021
+
+ * `txtorcon-21.1.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-21.1.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/21.1.0>`_ (:download:`local-sig </../signatues/txtorcon-21.1.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-21.1.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v21.1.0.tar.gz>`_)
+ * Fix some incorrect unit-test skipping logic (thanks `@exarkun <https://github.com/exarkun>`, `#354 <https://github.com/meejah/txtorcon/issues/354>`_ and `#352 <https://github.com/meejah/txtorcon/issues/352>`_)
+ * Fix broken tests revealed by previous fixes (thanks `@exarkun <https://github.com/exarkun>`, `#356 <https://github.com/meejah/txtorcon/issues/356>`_
+
+
+v21.0.0
+-------
+
+August 7, 2021
+
+ * `txtorcon-21.0.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-21.0.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/21.0.0>`_ (:download:`local-sig </../signatues/txtorcon-21.0.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-21.0.0.tar.gz.asc?raw=true>`_) (`source <https://github.com/meejah/txtorcon/archive/v21.0.0.tar.gz>`_)
+ * Use GitHub Actions instead of Travis for CI
+ * fix Python 3.x+ bug with `TorInfo` and `__class__` access (`#350 <https://github.com/meejah/txtorcon/issues/350>`_)
v20.0.0
@@ -35,7 +64,7 @@ v19.1.0
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/master/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://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>`_)
* `TorControlProtocol.on_disconnect` is deprecated in favour of
:func:`TorControlProtocol.when_disconnected`
@@ -54,7 +83,7 @@ v19.0.0
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/master/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://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>`_)
* 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`
@@ -63,14 +92,14 @@ January 15, 2019
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/master/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://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>`_)
* 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/master/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://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>`_)
* 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
@@ -81,7 +110,7 @@ v18.1.0
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/master/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://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>`_)
* better error-reporting (include REASON and REMOTE_REASON if
available) when circuit-builds fail (thanks `David Stainton
<https://github.com/david415>`_)
@@ -100,7 +129,7 @@ v18.0.2
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/master/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://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>`_)
* Python3.4 doesn't support async-def or await
@@ -109,7 +138,7 @@ v18.0.1
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/master/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://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>`_)
* fix a Python2/3 regression when parsing onion services
@@ -118,7 +147,7 @@ v18.0.0
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/master/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://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>`_)
* `await_all_uploads` options when creating Onions
* properly re-map progress percentages (including descriptor uploads)
@@ -192,7 +221,7 @@ 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>`_)
+ * `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>`_)
* doc fixes from `hotelzululima <https://twitter.com/hotelzululima>`_
* fix endpoints so `.connect` on them works properly more than once
@@ -213,7 +242,7 @@ 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>`_)
+ * `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>`_)
* Incorrect parsing of SocksPort options (see `Issue 237 <https://github.com/meejah/txtorcon/issues/237>`_)
@@ -223,7 +252,7 @@ v0.19.2
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/master/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://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>`_)
* 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.
@@ -235,7 +264,7 @@ v0.19.1
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/master/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://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>`_)
* Fix a regression in ``launch_tor``, see `Issue 227 <https://github.com/meejah/txtorcon/issues/227>`_
@@ -245,7 +274,7 @@ v0.19.0
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/master/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://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>`_)
* Full Python3 support
* Drop `txsocksx` and use a custom implementation (this also
@@ -289,7 +318,7 @@ v0.18.0
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/master/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://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>`_)
* `issue 200 <https://github.com/meejah/txtorcon/issues/200>`_: better feedback if the cookie data can't be read
@@ -298,7 +327,7 @@ v0.17.0
*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/master/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://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>`_)
* `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
@@ -309,7 +338,7 @@ v0.16.1
*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/master/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://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>`_)
* `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>`_
@@ -323,7 +352,7 @@ v0.16.0
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/master/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://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>`_)
* fix `issue 179 <https://github.com/meejah/txtorcon/issues/179>`_ with `Circuit.age`.
@@ -332,7 +361,7 @@ v0.15.0
*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/master/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://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>`_)
* added support for NULL control-port-authentication which is often
appropriate when used with a UNIX domain socket
* switched to `ipaddress
@@ -369,7 +398,7 @@ v0.14.2
*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/master/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://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>`_)
* compatibility for Twisted 15.5.0 (released on 0.14.x for `OONI <http://ooni.io/>`_)
@@ -387,7 +416,7 @@ v0.14.0
*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/master/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://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>`_)
* :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:``
@@ -404,7 +433,7 @@ v0.13.0
*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/master/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://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>`_)
* 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
@@ -421,7 +450,7 @@ v0.12.0
*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/master/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://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>`_)
* doc, code and import cleanups from `Kali Kaneko <https://github.com/kalikaneko>`_
* HiddenServiceDirGroupReadable support
* Issue #80: honour ``ControlPort 0`` in incoming TorConfig
@@ -448,9 +477,9 @@ v0.11.0
*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/master/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://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>`_)
* 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/master/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://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>`_)
* 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
@@ -465,7 +494,7 @@ v0.10.1
*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/master/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://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>`_)
* 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
@@ -476,7 +505,7 @@ v0.10.0
*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/master/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://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>`_)
* 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
@@ -491,7 +520,7 @@ v0.9.2
*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/master/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://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>`_)
* add ``on_disconnect`` callback for TorControlProtocol (no more monkey-patching Protocol API)
* add ``age()`` method to Circuit
* add ``time_created`` property to Circuit
@@ -514,7 +543,7 @@ v0.9.1
*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/master/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://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>`_)
* 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
@@ -538,7 +567,7 @@ v0.8.2
*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/master/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://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>`_)
* ensure hidden service server-side endpoints listen only on 127.0.0.1
@@ -547,7 +576,7 @@ v0.8.1
*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/master/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://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>`_)
* 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
@@ -578,7 +607,7 @@ v0.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/master/signatues/txtorcon-0.7.tar.gz.sig?raw=true>`_) (`source <https://github.com/meejah/txtorcon/tarball/v0.7>`_)
+ * `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>`_)
* `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;
@@ -589,7 +618,7 @@ v0.6
*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/master/signatues/txtorcon-0.6.tar.gz.sig?raw=true>`_) (`source <https://github.com/meejah/txtorcon/tarball/v0.6>`_)
+ * `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>`_)
* debian packaging (mmaker);
* psutil fully gone;
* *changed API* for launch_tor() to use TorConfig instead of args;
=====================================
examples/launch_tor_unix_sockets.py
=====================================
@@ -10,7 +10,6 @@ import sys
import txtorcon
import tempfile
import shutil
-from os import mkdir, chmod
from os.path import join
from twisted.web.client import readBody
from twisted.internet.task import react
=====================================
examples/launch_tor_with_simplehttpd.py
=====================================
@@ -94,8 +94,9 @@ def main():
# Sanitize path and set working directory there (for SimpleHTTPServer)
serve_directory = os.path.abspath(serve_directory)
if not os.path.exists(serve_directory):
- print('Path "%s" does not exists, can\'t serve from there...' % \
- (serve_directory, ))
+ print(
+ 'Path "{}" does not exist, can\'t serve from there...'.format(serve_directory)
+ )
return 1
os.chdir(serve_directory)
=====================================
examples/readme.py
=====================================
@@ -1,5 +1,5 @@
from twisted.internet.task import react
-from twisted.internet.defer import inlineCallbacks, ensureDeferred
+from twisted.internet.defer import ensureDeferred
from twisted.internet.endpoints import UNIXClientEndpoint
import treq
=====================================
examples/readme2.py
=====================================
@@ -5,6 +5,7 @@ from twisted.internet.endpoints import UNIXClientEndpoint
import treq
import txtorcon
+
@react
@inlineCallbacks
def main(reactor):
=====================================
examples/stream_circuit_logger.py
=====================================
@@ -7,7 +7,6 @@ from __future__ import print_function
import sys
from twisted.python import log
-from twisted.internet import reactor
from twisted.internet.task import react
from twisted.internet.defer import inlineCallbacks, Deferred
import txtorcon
=====================================
examples/web_client_custom_circuit.py
=====================================
@@ -78,7 +78,7 @@ def main(reactor):
print("disconnected: {}".format(reason.value))
d.callback(None)
- proto = yield ep.connect(Factory.forProtocol(ToyWebRequestProtocol))
+ yield ep.connect(Factory.forProtocol(ToyWebRequestProtocol)) # returns "proto"
yield d
print("All done, closing the circuit")
yield circ.close()
=====================================
examples/web_onion_service_aiohttp.py
=====================================
@@ -11,7 +11,6 @@
# note: if run in Python2, there are SyntaxErrors before we can tell
# the user nicely
-import os
import asyncio
from twisted.internet import asyncioreactor
@@ -25,9 +24,7 @@ from twisted.internet.endpoints import UNIXClientEndpoint
import txtorcon
try:
- import aiohttp
from aiohttp import web
- from aiosocks.connector import ProxyConnector, ProxyClientRequest
except ImportError:
raise Exception(
"You need aiohttp to run this example:\n pip install aiohttp"
@@ -61,10 +58,10 @@ async def _main(reactor):
print("launching tor")
tor = await txtorcon.launch(reactor, progress_updates=print)
else:
- tor = await txtorcon.connect(reactor,
- UNIXClientEndpoint(reactor, "/var/run/tor/control")
+ tor = await txtorcon.connect(
+ reactor,
+ UNIXClientEndpoint(reactor, "/var/run/tor/control"),
)
- config = await tor.get_config()
print("Connected to tor {}".format(tor.version))
# here, we've just chosen 1234 as the port. We have three other
@@ -105,5 +102,6 @@ def main():
)
)
+
if __name__ == '__main__':
main()
=====================================
examples/web_onion_service_ephemeral_auth.py
=====================================
@@ -16,7 +16,6 @@ from twisted.internet import defer, task, endpoints
from twisted.web import server, resource
import txtorcon
-from txtorcon.util import default_control_port
from txtorcon.onion import AuthBasic
=====================================
examples/web_onion_service_ephemeral_nonanon.py
=====================================
@@ -11,8 +11,6 @@ from twisted.internet import defer, task, endpoints
from twisted.web import server, resource
import txtorcon
-from txtorcon.util import default_control_port
-from txtorcon.onion import AuthBasic
class Simple(resource.Resource):
=====================================
examples/web_onion_service_ephemeral_unix.py
=====================================
@@ -18,8 +18,6 @@ from twisted.internet import defer, task, endpoints
from twisted.web import server, resource
import txtorcon
-from txtorcon.util import default_control_port
-from txtorcon.onion import AuthBasic
class Simple(resource.Resource):
@@ -41,7 +39,7 @@ def main(reactor):
unix_p = abspath('./web_socket')
ep = endpoints.UNIXServerEndpoint(reactor, unix_p)
- port = yield ep.listen(server.Site(Simple()))
+ yield ep.listen(server.Site(Simple())) # ignoring "port" return value
def on_progress(percent, tag, msg):
print('%03d: %s' % (percent, msg))
=====================================
examples/web_onion_service_prop224.py
=====================================
@@ -16,7 +16,6 @@ from twisted.internet import defer, task, endpoints
from twisted.web import server, resource
import txtorcon
-from txtorcon.util import default_control_port
class Simple(resource.Resource):
@@ -45,7 +44,7 @@ def main(reactor):
print(dir(hs))
ep = endpoints.TCP4ServerEndpoint(reactor, 8787, interface="localhost")
- port = yield ep.listen(server.Site(Simple()))
+ yield ep.listen(server.Site(Simple())) # returns 'port'
print("Site listening: {}".format(hs.hostname))
print("Private key:\n{}".format(hs.private_key))
yield defer.Deferred() # wait forever
=====================================
setup.py
=====================================
@@ -41,7 +41,7 @@ setup(
name='txtorcon',
version=__version__,
description=description,
- setup_requires="setuptools>=36.2",
+## setup_requires="setuptools>=36.2",
long_description=open('README.rst', 'r').read(),
keywords=['python', 'twisted', 'tor', 'tor controller'],
install_requires=open('requirements.txt').readlines(),
=====================================
test/test_endpoints.py
=====================================
@@ -64,6 +64,37 @@ class MockReactor(Mock):
pass
+def fake_tor_launcher(config):
+ # exactly match the signature of txtorcon.controller.launch
+ def launch(reactor,
+ progress_updates=None,
+ control_port=None,
+ data_directory=None,
+ socks_port=None,
+ non_anonymous_mode=None,
+ stdout=None,
+ stderr=None,
+ timeout=None,
+ tor_binary=None,
+ user=None,
+ connection_creator=None,
+ kill_on_stderr=True,
+ _tor_config=None,
+ ):
+ return defer.succeed(Tor(reactor, None, config, None, non_anonymous_mode))
+
+ return launch
+
+
+def valid_enough_torconfig():
+ config = TorConfig()
+ # The implementation will probably ask the configuration about the control
+ # port to make sure it agrees with the control port of the global Tor
+ # instance it believes will be used. Give it an answer.
+ config.ControlPort = 12345
+ return config
+
+
@patch('txtorcon.controller.find_tor_binary', return_value='/bin/echo')
class EndpointTests(unittest.TestCase):
@@ -72,6 +103,7 @@ class EndpointTests(unittest.TestCase):
endpoints._global_tor_config = None
del endpoints._global_tor_lock
endpoints._global_tor_lock = defer.DeferredLock()
+ endpoints._global_tor = None
self.reactor = FakeReactorTcp(self)
self.protocol = FakeControlProtocol([])
self.protocol.event_happened('INFO', 'something craaaaaaazy')
@@ -103,17 +135,18 @@ class EndpointTests(unittest.TestCase):
def tearDown(self):
from txtorcon import endpoints
endpoints._global_tor_config = None
+ endpoints._global_tor = None
+ assert not endpoints._global_tor_lock.locked, "Should not be locked a teardown"
del endpoints._global_tor_lock
endpoints._global_tor_lock = defer.DeferredLock()
+ endpoints._global_tor = None
self.patcher.stop()
@defer.inlineCallbacks
def test_global_tor(self, ftb):
- fake_tor = Mock()
- fake_tor.get_config = Mock(return_value=self.config)
config = yield get_global_tor(
Mock(),
- _tor_launcher=lambda x, progress_updates=None: fake_tor
+ _tor_launcher=fake_tor_launcher(self.config),
)
# XXX this was asserting SOCKSPort == 0 before; why?
self.assertEqual(['9050'], config.SOCKSPort)
@@ -122,7 +155,7 @@ class EndpointTests(unittest.TestCase):
def test_global_tor_error(self, ftb):
yield get_global_tor(
reactor=FakeReactorTcp(self),
- _tor_launcher=lambda x, y, progress_updates=None: True
+ _tor_launcher=fake_tor_launcher(self.config),
)
# now if we specify a control_port it should be an error since
# the above should have launched one.
@@ -130,7 +163,7 @@ class EndpointTests(unittest.TestCase):
yield get_global_tor(
reactor=FakeReactorTcp(self),
control_port=111,
- _tor_launcher=lambda x, y, progress_updates=None: True
+ _tor_launcher=fake_tor_launcher(self.config),
)
self.fail()
except RuntimeError:
@@ -545,7 +578,7 @@ class EndpointTests(unittest.TestCase):
control_ep.connect = Mock(return_value=defer.succeed(None))
directlyProvides(control_ep, IStreamClientEndpoint)
ep = TCPHiddenServiceEndpoint.system_tor(self.reactor, control_ep, 1234)
- ep._tor_progress_update(40, "FOO", "foo to bar")
+ ep._tor_progress_update(40, "FOO", "foo to the bar")
return ep
def test_single_hop_non_ephemeral(self, ftb):
@@ -701,13 +734,9 @@ class EndpointTests(unittest.TestCase):
def test_parse_via_plugin(self, ftb):
# make sure we have a valid thing from get_global_tor without
# actually launching tor
- config = TorConfig()
- config.post_bootstrap = defer.succeed(config)
- from txtorcon import torconfig
- torconfig._global_tor_config = None
get_global_tor(
self.reactor,
- _tor_launcher=lambda react, config, progress_updates=None: defer.succeed(config)
+ _tor_launcher=fake_tor_launcher(self.config),
)
ep = serverFromString(
self.reactor,
@@ -725,13 +754,9 @@ class EndpointTests(unittest.TestCase):
# make sure we have a valid thing from get_global_tor without
# actually launching tor
- config = TorConfig()
- config.post_bootstrap = defer.succeed(config)
- from txtorcon import torconfig
- torconfig._global_tor_config = None
get_global_tor(
self.reactor,
- _tor_launcher=lambda react, config, progress_updates=None: defer.succeed(config)
+ _tor_launcher=fake_tor_launcher(self.config),
)
ep = serverFromString(
self.reactor,
@@ -749,13 +774,9 @@ class EndpointTests(unittest.TestCase):
# make sure we have a valid thing from get_global_tor without
# actually launching tor
- config = TorConfig()
- config.post_bootstrap = defer.succeed(config)
- from txtorcon import torconfig
- torconfig._global_tor_config = None
get_global_tor(
self.reactor,
- _tor_launcher=lambda react, config, progress_updates=None: defer.succeed(config)
+ _tor_launcher=fake_tor_launcher(self.config),
)
ep = serverFromString(
self.reactor,
@@ -777,13 +798,9 @@ class EndpointTests(unittest.TestCase):
# make sure we have a valid thing from get_global_tor without
# actually launching tor
- config = TorConfig()
- config.post_bootstrap = defer.succeed(config)
- from txtorcon import torconfig
- torconfig._global_tor_config = None
get_global_tor(
self.reactor,
- _tor_launcher=lambda react, config, progress_updates=None: defer.succeed(config)
+ _tor_launcher=fake_tor_launcher(self.config),
)
ep = serverFromString(
self.reactor,
@@ -804,13 +821,9 @@ class EndpointTests(unittest.TestCase):
# make sure we have a valid thing from get_global_tor without
# actually launching tor
- config = TorConfig()
- config.post_bootstrap = defer.succeed(config)
- from txtorcon import torconfig
- torconfig._global_tor_config = None
get_global_tor(
self.reactor,
- _tor_launcher=lambda react, config, progress_updates=None: defer.succeed(config)
+ _tor_launcher=fake_tor_launcher(self.config),
)
with self.assertRaises(ValueError):
@@ -827,13 +840,9 @@ class EndpointTests(unittest.TestCase):
# make sure we have a valid thing from get_global_tor without
# actually launching tor
- config = TorConfig()
- config.post_bootstrap = defer.succeed(config)
- from txtorcon import torconfig
- torconfig._global_tor_config = None
get_global_tor(
self.reactor,
- _tor_launcher=lambda react, config, progress_updates=None: defer.succeed(config)
+ _tor_launcher=fake_tor_launcher(self.config),
)
ep = serverFromString(
self.reactor,
@@ -852,13 +861,9 @@ class EndpointTests(unittest.TestCase):
# make sure we have a valid thing from get_global_tor without
# actually launching tor
- config = TorConfig()
- config.post_bootstrap = defer.succeed(config)
- from txtorcon import torconfig
- torconfig._global_tor_config = None
get_global_tor(
self.reactor,
- _tor_launcher=lambda react, config, progress_updates=None: defer.succeed(config)
+ _tor_launcher=fake_tor_launcher(self.config),
)
ep = serverFromString(
self.reactor,
@@ -913,11 +918,12 @@ class EndpointTests(unittest.TestCase):
)
def test_parse_version_3(self, ftb):
- ep = serverFromString(
- self.reactor,
- 'onion:88:version=3:localPort=1234:hiddenServiceDir=~/blam/blarg'
- )
- self.assertFalse(ep.ephemeral)
+ with patch('txtorcon.endpoints.get_global_tor_instance'):
+ ep = serverFromString(
+ self.reactor,
+ 'onion:88:version=3:localPort=1234:hiddenServiceDir=~/blam/blarg'
+ )
+ self.assertFalse(ep.ephemeral)
def test_parse_user_path(self, ftb):
# this makes sure we expand users and symlinks in
@@ -925,13 +931,9 @@ class EndpointTests(unittest.TestCase):
# make sure we have a valid thing from get_global_tor without
# actually launching tor
- config = TorConfig()
- config.post_bootstrap = defer.succeed(config)
- from txtorcon import torconfig
- torconfig._global_tor_config = None
get_global_tor(
self.reactor,
- _tor_launcher=lambda react, config, progress_updates=None: defer.succeed(config)
+ _tor_launcher=fake_tor_launcher(self.config),
)
ep = serverFromString(
self.reactor,
@@ -951,13 +953,9 @@ class EndpointTests(unittest.TestCase):
# make sure we have a valid thing from get_global_tor without
# actually launching tor
- config = TorConfig()
- config.post_bootstrap = defer.succeed(config)
- from txtorcon import torconfig
- torconfig._global_tor_config = None
get_global_tor(
self.reactor,
- _tor_launcher=lambda react, config, progress_updates=None: defer.succeed(config)
+ _tor_launcher=fake_tor_launcher(self.config),
)
orig = os.path.realpath('.')
@@ -988,7 +986,7 @@ class EndpointTests(unittest.TestCase):
with self.assertRaises(ValueError) as ctx:
TCPHiddenServiceEndpoint(
reactor, config, 80,
- stealth_auth=['alice', 'bob'],
+ auth=AuthStealth(['alice', 'bob']),
ephemeral=True,
)
self.assertIn(
=====================================
test/test_util.py
=====================================
@@ -1,9 +1,8 @@
import os
-import sys
import tempfile
import ipaddress
from mock import patch
-from unittest import skipIf
+from unittest import skip as _skip
from os.path import exists
from twisted.trial import unittest
@@ -62,7 +61,7 @@ class TestGeoIpDatabaseLoading(unittest.TestCase):
util.GeoIP = _GeoIP
self.assertEqual(ret_val, None)
- @skipIf('pypy' in sys.version.lower(), "No GeoIP in PyPy")
+ @_skip("No GeoIP in github-actions")
def test_return_geoip_object(self):
# requires a valid GeoIP database to work, so hopefully we're
# on Debian or similar...
=====================================
test/test_web.py
=====================================
@@ -15,7 +15,8 @@ from txtorcon.circuit import TorCircuitEndpoint
class WebAgentTests(unittest.TestCase):
- skip = not _HAVE_WEB
+ if not _HAVE_WEB:
+ skip = "Missing web"
def test_socks_agent_tcp_port(self):
reactor = Mock()
=====================================
txtorcon.egg-info/PKG-INFO
=====================================
@@ -1,162 +1,11 @@
Metadata-Version: 2.1
Name: txtorcon
-Version: 20.0.0
+Version: 22.0.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
Author-email: meejah at meejah.ca
License: MIT
-Description:
-
-
-
-
- .. _NOTE: see docs/index.rst for the starting-point
- .. _ALSO: https://txtorcon.readthedocs.org for rendered docs
-
-
-
-
-
-
- .. image:: https://travis-ci.org/meejah/txtorcon.png?branch=master
- :target: https://www.travis-ci.org/meejah/txtorcon
- :alt: travis
-
- .. image:: https://coveralls.io/repos/meejah/txtorcon/badge.png
- :target: https://coveralls.io/r/meejah/txtorcon
- :alt: coveralls
-
- .. image:: http://codecov.io/github/meejah/txtorcon/coverage.svg?branch=master
- :target: http://codecov.io/github/meejah/txtorcon?branch=master
- :alt: codecov
-
- .. image:: https://readthedocs.org/projects/txtorcon/badge/?version=stable
- :target: https://txtorcon.readthedocs.io/en/stable
- :alt: ReadTheDocs
-
- .. image:: https://readthedocs.org/projects/txtorcon/badge/?version=latest
- :target: https://txtorcon.readthedocs.io/en/latest
- :alt: ReadTheDocs
-
- .. image:: https://landscape.io/github/meejah/txtorcon/master/landscape.svg?style=flat
- :target: https://landscape.io/github/meejah/txtorcon/master
- :alt: Code Health
-
-
- txtorcon
- ========
-
- - **docs**: https://txtorcon.readthedocs.org or http://timaq4ygg2iegci7.onion
- - **code**: https://github.com/meejah/txtorcon
- - ``torsocks git clone git://timaq4ygg2iegci7.onion/txtorcon.git``
- - MIT-licensed;
- - Python 2.7, PyPy 5.0.0+, Python 3.5+;
- - depends on
- `Twisted`_,
- `Automat <https://github.com/glyph/automat>`_,
- (and the `ipaddress <https://pypi.python.org/pypi/ipaddress>`_ backport for non Python 3)
-
-
- Ten Thousand Feet
- -----------------
-
- txtorcon is an implementation of the `control-spec
- <https://gitweb.torproject.org/torspec.git/blob/HEAD:/control-spec.txt>`_
- for `Tor <https://www.torproject.org/>`_ using the `Twisted`_
- networking library for `Python <http://python.org/>`_.
-
- This is useful for writing utilities to control or make use of Tor in
- event-based Python programs. If your Twisted program supports
- endpoints (like ``twistd`` does) your server or client can make use of
- Tor immediately, with no code changes. Start your own Tor or connect
- to one and get live stream, circuit, relay updates; read and change
- config; monitor events; build circuits; create onion services;
- etcetera (`ReadTheDocs <https://txtorcon.readthedocs.org>`_).
-
-
- Some Possibly Motivational Example Code
- ---------------------------------------
-
- `download <examples/readme.py>`_
- (also `python2 style <examples/readme2.py>`_)
-
- .. code:: python
-
- from twisted.internet.task import react
- from twisted.internet.defer import inlineCallbacks, ensureDeferred
- from twisted.internet.endpoints import UNIXClientEndpoint
-
- import treq
- import txtorcon
-
-
- async def main(reactor):
- tor = await txtorcon.connect(
- reactor,
- UNIXClientEndpoint(reactor, "/var/run/tor/control")
- )
-
- print("Connected to Tor version {}".format(tor.version))
-
- url = u'https://www.torproject.org:443'
- print(u"Downloading {}".format(repr(url)))
- resp = await treq.get(url, agent=tor.web_agent())
-
- print(u" {} bytes".format(resp.length))
- data = await resp.text()
- print(u"Got {} bytes:\n{}\n[...]{}".format(
- len(data),
- data[:120],
- data[-120:],
- ))
-
- print(u"Creating a circuit")
- state = await tor.create_state()
- circ = await state.build_circuit()
- await circ.when_built()
- print(u" path: {}".format(" -> ".join([r.ip for r in circ.path])))
-
- print(u"Downloading meejah's public key via above circuit...")
- config = await tor.get_config()
- resp = await treq.get(
- u'https://meejah.ca/meejah.asc',
- agent=circ.web_agent(reactor, config.socks_endpoint(reactor)),
- )
- data = await resp.text()
- print(data)
-
-
- @react
- def _main(reactor):
- return ensureDeferred(main(reactor))
-
-
-
- Try It Now On Debian/Ubuntu
- ---------------------------
-
- For example, serve some files via an onion service (*aka* hidden
- service):
-
- .. code-block:: shell-session
-
- $ sudo apt-get install --install-suggests python3-txtorcon
- $ twistd -n web --port "onion:80" --path ~/public_html
-
-
- Read More
- ---------
-
- All the documentation starts `in docs/index.rst
- <docs/index.rst>`_. Also hosted at `txtorcon.rtfd.org
- <https://txtorcon.readthedocs.io/en/latest/>`_.
-
- You'll want to start with `the introductions <docs/introduction.rst>`_ (`hosted at RTD
- <https://txtorcon.readthedocs.org/en/latest/introduction.html>`_).
-
- .. _Twisted: https://twistedmatrix.com/trac
-
Keywords: python,twisted,tor,tor controller
Platform: UNKNOWN
Classifier: Framework :: Twisted
@@ -176,3 +25,157 @@ Classifier: Topic :: Internet :: Proxy Servers
Classifier: Topic :: Internet
Classifier: Topic :: Security
Provides-Extra: dev
+License-File: LICENSE
+
+
+
+
+
+
+.. _NOTE: see docs/index.rst for the starting-point
+.. _ALSO: https://txtorcon.readthedocs.org for rendered docs
+
+
+
+
+
+
+.. image:: https://github.com/meejah/txtorcon/actions/workflows/python3.yaml/badge.svg
+ :target: https://github.com/meejah/txtorcon/actions
+ :alt: github-actions
+
+.. image:: https://coveralls.io/repos/meejah/txtorcon/badge.png?branch=main
+ :target: https://coveralls.io/github/meejah/txtorcon?branch=main
+ :alt: coveralls
+
+.. image:: http://codecov.io/github/meejah/txtorcon/coverage.svg?branch=main
+ :target: http://codecov.io/github/meejah/txtorcon?branch=main
+ :alt: codecov
+
+.. image:: https://readthedocs.org/projects/txtorcon/badge/?version=stable
+ :target: https://txtorcon.readthedocs.io/en/stable
+ :alt: ReadTheDocs
+
+.. image:: https://readthedocs.org/projects/txtorcon/badge/?version=latest
+ :target: https://txtorcon.readthedocs.io/en/latest
+ :alt: ReadTheDocs
+
+.. image:: https://landscape.io/github/meejah/txtorcon/main/landscape.svg?style=flat
+ :target: https://landscape.io/github/meejah/txtorcon/main
+ :alt: Code Health
+
+
+txtorcon
+========
+
+- **docs**: https://txtorcon.readthedocs.org or http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/
+- **code**: https://github.com/meejah/txtorcon
+- ``torsocks git clone git://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon.git``
+- MIT-licensed;
+- Python 2.7, PyPy 5.0.0+, Python 3.5+;
+- depends on
+ `Twisted`_,
+ `Automat <https://github.com/glyph/automat>`_,
+ (and the `ipaddress <https://pypi.python.org/pypi/ipaddress>`_ backport for non Python 3)
+
+
+Ten Thousand Feet
+-----------------
+
+txtorcon is an implementation of the `control-spec
+<https://gitweb.torproject.org/torspec.git/blob/HEAD:/control-spec.txt>`_
+for `Tor <https://www.torproject.org/>`_ using the `Twisted`_
+networking library for `Python <http://python.org/>`_.
+
+This is useful for writing utilities to control or make use of Tor in
+event-based Python programs. If your Twisted program supports
+endpoints (like ``twistd`` does) your server or client can make use of
+Tor immediately, with no code changes. Start your own Tor or connect
+to one and get live stream, circuit, relay updates; read and change
+config; monitor events; build circuits; create onion services;
+etcetera (`ReadTheDocs <https://txtorcon.readthedocs.org>`_).
+
+
+Some Possibly Motivational Example Code
+---------------------------------------
+
+`download <examples/readme.py>`_
+(also `python2 style <examples/readme2.py>`_)
+
+.. code:: python
+
+ from twisted.internet.task import react
+ from twisted.internet.defer import inlineCallbacks, ensureDeferred
+ from twisted.internet.endpoints import UNIXClientEndpoint
+
+ import treq
+ import txtorcon
+
+
+ async def main(reactor):
+ tor = await txtorcon.connect(
+ reactor,
+ UNIXClientEndpoint(reactor, "/var/run/tor/control")
+ )
+
+ print("Connected to Tor version {}".format(tor.version))
+
+ url = u'https://www.torproject.org:443'
+ print(u"Downloading {}".format(repr(url)))
+ resp = await treq.get(url, agent=tor.web_agent())
+
+ print(u" {} bytes".format(resp.length))
+ data = await resp.text()
+ print(u"Got {} bytes:\n{}\n[...]{}".format(
+ len(data),
+ data[:120],
+ data[-120:],
+ ))
+
+ print(u"Creating a circuit")
+ state = await tor.create_state()
+ circ = await state.build_circuit()
+ await circ.when_built()
+ print(u" path: {}".format(" -> ".join([r.ip for r in circ.path])))
+
+ print(u"Downloading meejah's public key via above circuit...")
+ config = await tor.get_config()
+ resp = await treq.get(
+ u'https://meejah.ca/meejah.asc',
+ agent=circ.web_agent(reactor, config.socks_endpoint(reactor)),
+ )
+ data = await resp.text()
+ print(data)
+
+
+ @react
+ def _main(reactor):
+ return ensureDeferred(main(reactor))
+
+
+
+Try It Now On Debian/Ubuntu
+---------------------------
+
+For example, serve some files via an onion service (*aka* hidden
+service):
+
+.. code-block:: shell-session
+
+ $ sudo apt-get install --install-suggests python3-txtorcon
+ $ twistd -n web --port "onion:80" --path ~/public_html
+
+
+Read More
+---------
+
+All the documentation starts `in docs/index.rst
+<docs/index.rst>`_. Also hosted at `txtorcon.rtfd.org
+<https://txtorcon.readthedocs.io/en/latest/>`_.
+
+You'll want to start with `the introductions <docs/introduction.rst>`_ (`hosted at RTD
+<https://txtorcon.readthedocs.org/en/latest/introduction.html>`_).
+
+.. _Twisted: https://twistedmatrix.com/trac
+
+
=====================================
txtorcon/_metadata.py
=====================================
@@ -1,6 +1,6 @@
-__version__ = '20.0.0'
+__version__ = '22.0.0'
__author__ = 'meejah'
__contact__ = 'meejah at meejah.ca'
__url__ = 'https://github.com/meejah/txtorcon'
__license__ = 'MIT'
-__copyright__ = 'Copyright 2012-2019'
+__copyright__ = 'Copyright 2012-2022'
=====================================
txtorcon/socks.py
=====================================
@@ -89,7 +89,7 @@ class _SocksMachine(object):
)
if not isinstance(host, (bytes, str, six.text_type)):
raise ValueError(
- "'host' must be text".format(type(host))
+ "'host' must be text (not {})".format(type(host))
)
# XXX what if addr is None?
self._req_type = req_type
=====================================
txtorcon/torinfo.py
=====================================
@@ -199,8 +199,11 @@ class TorInfo(object):
return sup.__getattribute__(name)
attrs = sup.__getattribute__('attrs')
+ # are there other "special" attributes we need to consider..?
if name == '__members__':
return list(attrs.keys())
+ if name == '__class__':
+ return sup.__class__
else:
try:
View it on GitLab: https://salsa.debian.org/pkg-privacy-team/txtorcon/-/commit/87dd8179e0d27b591df6c7867d58d56729e0eea4
--
View it on GitLab: https://salsa.debian.org/pkg-privacy-team/txtorcon/-/commit/87dd8179e0d27b591df6c7867d58d56729e0eea4
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-privacy-commits/attachments/20220321/019b5d32/attachment-0001.htm>
More information about the Pkg-privacy-commits
mailing list