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 2023-09-20 13:30:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-txtorcon (Old)
and /work/SRC/openSUSE:Factory/.python-txtorcon.new.16627 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-txtorcon"
Wed Sep 20 13:30:24 2023 rev:14 rq:1112330 version:23.5.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-txtorcon/python-txtorcon.changes
2022-06-28 15:23:11.502015776 +0200
+++
/work/SRC/openSUSE:Factory/.python-txtorcon.new.16627/python-txtorcon.changes
2023-09-20 13:34:01.889053198 +0200
@@ -1,0 +2,9 @@
+Tue Sep 19 12:02:42 UTC 2023 - OndÅej Súkup <[email protected]>
+
+- update to 23.5.0
+ * Fix a bug with CONTROLLER_WAIT events
+ * drop python2 support
+ * Added support for Python 3.11.
+ * No more ipaddress dependency
+
+-------------------------------------------------------------------
Old:
----
txtorcon-22.0.0.tar.gz
New:
----
txtorcon-23.5.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-txtorcon.spec ++++++
--- /var/tmp/diff_new_pack.A9z9L0/_old 2023-09-20 13:34:03.001093038 +0200
+++ /var/tmp/diff_new_pack.A9z9L0/_new 2023-09-20 13:34:03.005093181 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-txtorcon
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,10 +16,8 @@
#
-%{?!python_module:%define python_module() python-%{**}
%{!?skip_python3:python3-%{**}}}
-%bcond_without python2
Name: python-txtorcon
-Version: 22.0.0
+Version: 23.5.0
Release: 0
Summary: Twisted-based asynchronous Tor control protocol implementation
License: MIT
@@ -30,21 +28,19 @@
BuildRequires: python-rpm-macros
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
# SECTION test requirements
BuildRequires: lsof
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}
-%if %{with python2}
-BuildRequires: python-ipaddress
-%endif
-# /SECTION
-%ifpython2
-Requires: python-ipaddress >= 1.0.16
-%endif
%python_subpackages
%description
@@ -76,5 +72,7 @@
%files %{python_files}
%license LICENSE docs/*.rst
-%{python_sitelib}/*
+%{python_sitelib}/txtorcon
+%{python_sitelib}/txtorcon-%{version}*-info
+%{python_sitelib}/twisted/plugins/*
++++++ txtorcon-22.0.0.tar.gz -> txtorcon-23.5.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/INSTALL new/txtorcon-23.5.0/INSTALL
--- old/txtorcon-22.0.0/INSTALL 2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-23.5.0/INSTALL 2023-02-16 06:50:25.000000000 +0100
@@ -24,13 +24,11 @@
use virtualenv:
apt-get install python-setuptools python-pip
- python setup.py build
mkdir tmp
- virtualenv --never-download
--extra-search-dir=/usr/lib/python2.7/dist-packages/ tmp/txtorcon_env
+ virtualenv tmp/txtorcon_env
cd tmp/txtorcon_env
source bin/activate
- pip install Twisted ipaddress pygeoip # this will download from
internets:
- export PYTHONPATH=../../build/lib.linux-x86_64-2.7/
+ pip install --editable . # this will download from internets:
(Or you can type "make virtualenv" which creates tmp/txtorcon_env, up
to the "activate" step above)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/Makefile new/txtorcon-23.5.0/Makefile
--- old/txtorcon-22.0.0/Makefile 2022-03-16 22:26:15.000000000 +0100
+++ new/txtorcon-23.5.0/Makefile 2023-05-19 03:13:45.000000000 +0200
@@ -1,6 +1,6 @@
.PHONY: test html counts coverage sdist clean install doc integration diagrams
default: test
-VERSION = 22.0.0
+VERSION = 23.5.0
test:
PYTHONPATH=. trial --reporter=text test
@@ -99,20 +99,20 @@
test-release: dist
./scripts/test-release.sh $(shell pwd) ${VERSION}
-dist: dist/txtorcon-${VERSION}-py2.py3-none-any.whl
dist/txtorcon-${VERSION}.tar.gz
+dist: dist/txtorcon-${VERSION}-py3-none-any.whl dist/txtorcon-${VERSION}.tar.gz
-dist-sigs: dist/txtorcon-${VERSION}-py2.py3-none-any.whl.asc
dist/txtorcon-${VERSION}.tar.gz.asc
+dist-sigs: dist/txtorcon-${VERSION}-py3-none-any.whl.asc
dist/txtorcon-${VERSION}.tar.gz.asc
sdist: setup.py
python setup.py check
python setup.py sdist
-dist/txtorcon-${VERSION}-py2.py3-none-any.whl:
+dist/txtorcon-${VERSION}-py3-none-any.whl:
python setup.py check
- python setup.py bdist_wheel --universal
+ python setup.py bdist_wheel
-dist/txtorcon-${VERSION}-py2.py3-none-any.whl.asc:
dist/txtorcon-${VERSION}-py2.py3-none-any.whl
- gpg --verify dist/txtorcon-${VERSION}-py2.py3-none-any.whl.asc || gpg
--pinentry loopback --no-version --detach-sign --armor --local-user
[email protected] dist/txtorcon-${VERSION}-py2.py3-none-any.whl
+dist/txtorcon-${VERSION}-py3-none-any.whl.asc:
dist/txtorcon-${VERSION}-py3-none-any.whl
+ gpg --verify dist/txtorcon-${VERSION}-py3-none-any.whl.asc || gpg
--pinentry loopback --no-version --detach-sign --armor --local-user
[email protected] dist/txtorcon-${VERSION}-py3-none-any.whl
dist/txtorcon-${VERSION}.tar.gz: sdist
dist/txtorcon-${VERSION}.tar.gz.asc: dist/txtorcon-${VERSION}.tar.gz
@@ -120,16 +120,14 @@
release:
twine upload -r pypi -c "txtorcon v${VERSION} tarball"
dist/txtorcon-${VERSION}.tar.gz dist/txtorcon-${VERSION}.tar.gz.asc
- twine upload -r pypi -c "txtorcon v${VERSION} wheel"
dist/txtorcon-${VERSION}-py2.py3-none-any.whl
dist/txtorcon-${VERSION}-py2.py3-none-any.whl.asc
+ twine upload -r pypi -c "txtorcon v${VERSION} wheel"
dist/txtorcon-${VERSION}-py3-none-any.whl
dist/txtorcon-${VERSION}-py3-none-any.whl.asc
venv:
- virtualenv --never-download
--extra-search-dir=/usr/lib/python2.7/dist-packages/ venv
+ virtualenv venv
+ ./venv/bin/pip install -r requirements.txt
+ ./venv/bin/pip install -r dev-requirements.txt
@echo "created venv"
- @echo "see INSTALL for more information; to use:"
- @echo ". ./venv/bin/activate"
- @echo "pip install -r requirements.txt"
- @echo "pip install -r dev-requirements.txt"
@echo "python examples/monitor.py"
html: docs/*.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/PKG-INFO new/txtorcon-23.5.0/PKG-INFO
--- old/txtorcon-22.0.0/PKG-INFO 2022-03-16 22:28:53.509965000 +0100
+++ new/txtorcon-23.5.0/PKG-INFO 2023-05-19 03:21:31.507377600 +0200
@@ -1,13 +1,12 @@
Metadata-Version: 2.1
Name: txtorcon
-Version: 22.0.0
+Version: 23.5.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: [email protected]
License: MIT
Keywords: python,twisted,tor,tor controller
-Platform: UNKNOWN
Classifier: Framework :: Twisted
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
@@ -16,14 +15,12 @@
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.6
-Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Internet :: Proxy Servers
Classifier: Topic :: Internet
Classifier: Topic :: Security
+Requires-Python: >=3.8
Provides-Extra: dev
License-File: LICENSE
@@ -48,8 +45,8 @@
: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
+.. image:: https://codecov.io/github/meejah/txtorcon/coverage.svg?branch=main
+ :target: https://codecov.io/github/meejah/txtorcon?branch=main
:alt: codecov
.. image:: https://readthedocs.org/projects/txtorcon/badge/?version=stable
@@ -60,10 +57,6 @@
: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
========
@@ -72,11 +65,10 @@
- **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+;
+- Python 3.8+, PyPy 7.3.7+;
- depends on
`Twisted`_,
- `Automat <https://github.com/glyph/automat>`_,
- (and the `ipaddress <https://pypi.python.org/pypi/ipaddress>`_ backport for
non Python 3)
+ `Automat <https://github.com/glyph/automat>`_
Ten Thousand Feet
@@ -100,7 +92,6 @@
---------------------------------------
`download <examples/readme.py>`_
-(also `python2 style <examples/readme2.py>`_)
.. code:: python
@@ -177,5 +168,3 @@
<https://txtorcon.readthedocs.org/en/latest/introduction.html>`_).
.. _Twisted: https://twistedmatrix.com/trac
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/README.rst
new/txtorcon-23.5.0/README.rst
--- old/txtorcon-22.0.0/README.rst 2022-03-16 21:58:15.000000000 +0100
+++ new/txtorcon-23.5.0/README.rst 2023-05-19 03:11:14.000000000 +0200
@@ -19,8 +19,8 @@
: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
+.. image:: https://codecov.io/github/meejah/txtorcon/coverage.svg?branch=main
+ :target: https://codecov.io/github/meejah/txtorcon?branch=main
:alt: codecov
.. image:: https://readthedocs.org/projects/txtorcon/badge/?version=stable
@@ -31,10 +31,6 @@
: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
========
@@ -43,11 +39,10 @@
- **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+;
+- Python 3.8+, PyPy 7.3.7+;
- depends on
`Twisted`_,
- `Automat <https://github.com/glyph/automat>`_,
- (and the `ipaddress <https://pypi.python.org/pypi/ipaddress>`_ backport for
non Python 3)
+ `Automat <https://github.com/glyph/automat>`_
Ten Thousand Feet
@@ -71,7 +66,6 @@
---------------------------------------
`download <examples/readme.py>`_
-(also `python2 style <examples/readme2.py>`_)
.. code:: python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/docs/conf.py
new/txtorcon-23.5.0/docs/conf.py
--- old/txtorcon-22.0.0/docs/conf.py 2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-23.5.0/docs/conf.py 2022-06-17 21:32:04.000000000 +0200
@@ -152,7 +152,7 @@
'github_button': 'false',
'github_user': 'meejah',
'github_repo': 'txtorcon',
- 'travis_button': 'true',
+ 'travis_button': 'false',
'coveralls_button': 'true',
'logo_name': 'true',
'description': 'Control Tor from Twisted',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/docs/index.rst
new/txtorcon-23.5.0/docs/index.rst
--- old/txtorcon-22.0.0/docs/index.rst 2020-06-10 00:35:15.000000000 +0200
+++ new/txtorcon-23.5.0/docs/index.rst 2022-06-17 21:32:04.000000000 +0200
@@ -6,19 +6,17 @@
- **docs**:
- v3 onion:
http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/
- - v2 onion: http://timaq4ygg2iegci7.onion
- 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=main
- :target: https://www.travis-ci.org/meejah/txtorcon
+- ``torsocks git clone
git://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon.git``
+
+- .. 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.svg
:target: https://coveralls.io/r/meejah/txtorcon
- .. 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
:alt: ReadTheDocs
@@ -27,10 +25,6 @@
: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
-
.. container:: first_time
If this is your first time exploring txtorcon, please **look at the**
@@ -49,8 +43,8 @@
+---------------+---------+---------+
Supported and tested platforms: Python 3.5+, PyPy 5.0.0+, Python 2.7+
(deprecated)
-using Twisted 15.5.0+, 16.3.0+, or 17.1.0+ (see `travis
-<https://travis-ci.org/meejah/txtorcon>`_).
+using Twisted 15.5.0+, 16.3.0+, or 17.1.0+ (see `GitHub Actions
+<https://github.com/meejah/txtorcon/actions>`_).
**Asycnio inter-operation** is now possible, see :ref:`interop_asyncio`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/docs/introduction.rst
new/txtorcon-23.5.0/docs/introduction.rst
--- old/txtorcon-22.0.0/docs/introduction.rst 2018-05-31 20:59:02.000000000
+0200
+++ new/txtorcon-23.5.0/docs/introduction.rst 2022-04-12 00:21:37.000000000
+0200
@@ -121,3 +121,4 @@
- `torperf2 <https://github.com/gsathya/torperf2>`_ new Tor node network
performance measurement service
- `torweb <https://github.com/coffeemakr/torweb>`_ web-based Tor
controller/monitor
- `potator <https://github.com/mixxorz/potator>`_ "A Tor-based Decentralized
Virtual Private Network Application"
+- `JoinMarket <https://github.com/JoinMarket-Org/joinmarket-clientserver>`_
Bitcoin CoinJoin (privacy technique) implementation with incentive structure to
convince people to take part
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/docs/release-checklist.rst
new/txtorcon-23.5.0/docs/release-checklist.rst
--- old/txtorcon-22.0.0/docs/release-checklist.rst 2022-03-16
22:27:56.000000000 +0100
+++ new/txtorcon-23.5.0/docs/release-checklist.rst 2023-05-19
03:20:48.000000000 +0200
@@ -21,6 +21,7 @@
* 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
@@ -28,23 +29,23 @@
* (if on signing machine) "make dist" and "make dist-sigs"
* creates:
dist/txtorcon-${VERSION}.tar.gz.asc
- dist/txtorcon-${VERSION}-py2.py3-none-any.whl.asc
+ dist/txtorcon-${VERSION}-py3-none-any.whl.asc
* add the signatures to "signatures/"
- cp dist/txtorcon-${VERSION}.tar.gz.asc
dist/txtorcon-${VERSION}-py2.py3-none-any.whl.asc signatures/
+ cp dist/txtorcon-${VERSION}.tar.gz.asc
dist/txtorcon-${VERSION}-py3-none-any.whl.asc signatures/
* add ALL FOUR files to dist/ (OR fix twine commands)
* (if not on signing machine) do "make dist"
- * scp dist/txtorcon-${VERSION}.tar.gz
dist/txtorcon-${VERSION}-py2-none-any.whl signingmachine:
+ * scp dist/txtorcon-${VERSION}.tar.gz
dist/txtorcon-${VERSION}-py3-none-any.whl signingmachine:
* sign both, with .asc detached signatures
- * gpg --no-version --detach-sign --armor --local-user [email protected]
txtorcon-${VERSION}-py2-none-any.whl
+ * gpg --no-version --detach-sign --armor --local-user [email protected]
txtorcon-${VERSION}-py3-none-any.whl
* gpg --no-version --detach-sign --armor --local-user [email protected]
txtorcon-${VERSION}.tar.gz
* copy signatures back to build machine, in dist/
* double-check that they validate::
- gpg --verify dist/txtorcon-${VERSION}-py2.py3-none-any.whl.asc
+ gpg --verify dist/txtorcon-${VERSION}-py3-none-any.whl.asc
gpg --verify dist/txtorcon-${VERSION}.tar.gz.asc
* generate sha256sum for each::
- sha256sum dist/txtorcon-${VERSION}.tar.gz
dist/txtorcon-${VERSION}-py2.py3-none-any.whl
+ sha256sum dist/txtorcon-${VERSION}.tar.gz
dist/txtorcon-${VERSION}-py3-none-any.whl
* copy signature files to <root of dist>/signatures and commit them
along with the above changes for versions, etc.
@@ -85,7 +86,7 @@
in a shell wherever you have the files downloaded:
cat <<EOF | sha256sum --check
- 910ff3216035de0a779cfc167c0545266ff1f26687b163fc4655f298aca52d74
txtorcon-0.10.0-py2-none-any.whl
+ 910ff3216035de0a779cfc167c0545266ff1f26687b163fc4655f298aca52d74
txtorcon-0.10.0-py3-none-any.whl
c93f3d0f21d53c6b4c1521fc8d9dc2c9aff4a9f60497becea207d1738fa78279
txtorcon-0.10.0.tar.gz
EOF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/docs/releases.rst
new/txtorcon-23.5.0/docs/releases.rst
--- old/txtorcon-22.0.0/docs/releases.rst 2022-03-16 22:28:27.000000000
+0100
+++ new/txtorcon-23.5.0/docs/releases.rst 2023-05-19 03:18:27.000000000
+0200
@@ -15,7 +15,31 @@
See also :ref:`api_stability`.
-`git main <https://github.com/meejah/txtorcon>`_ *will likely become v21.1.0*
+`git main <https://github.com/meejah/txtorcon>`_ *will likely become v23.6.0*
+
+
+
+v23.5.0
+-------
+
+May 18, 2023
+
+ * `txtorcon-23.5.0.tar.gz
<http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-23.5.0.tar.gz>`_
(`PyPI <https://pypi.python.org/pypi/txtorcon/23.5.0>`_ (:download:`local-sig
</../signatues/txtorcon-23.5.0.tar.gz.asc>` or `github-sig
<https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-23.5.0.tar.gz.asc?raw=true>`_)
(`source <https://github.com/meejah/txtorcon/archive/v23.5.0.tar.gz>`_)
+* ``twisted.web.client.Agent`` instances now use the same HTTPS policy by
default as ``twisted.web.client.Agent``.
+ It is possible to override this policy with the ``tls_context_factory``
argument, the equivalent to ``Agent``'s ``contextFactory=``.
+* Added support for Python 3.11.
+* No more ipaddress dependency
+
+
+v23.0.0
+-------
+
+February 15, 2023
+
+ * `txtorcon-23.0.0.tar.gz
<http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-23.0.0.tar.gz>`_
(`PyPI <https://pypi.python.org/pypi/txtorcon/23.0.0>`_ (:download:`local-sig
</../signatues/txtorcon-23.0.0.tar.gz.asc>` or `github-sig
<https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-23.0.0.tar.gz.asc?raw=true>`_)
(`source <https://github.com/meejah/txtorcon/archive/v23.0.0.tar.gz>`_)
+ * Drop python2 support
+ * Fix a bug with `CONTROLLER_WAIT` events
+
v22.0.0
-------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/requirements.txt
new/txtorcon-23.5.0/requirements.txt
--- old/txtorcon-22.0.0/requirements.txt 2020-04-20 04:58:02.000000000
+0200
+++ new/txtorcon-23.5.0/requirements.txt 2023-05-19 03:11:14.000000000
+0200
@@ -2,7 +2,6 @@
## hmm, travis-ci doesn't like this since we need a GeoIP-dev package
##GeoIP>=1.2.9
Twisted[tls]>=15.5.0
-ipaddress>=1.0.16 ; python_version<'3'
zope.interface>=3.6.1
incremental
automat
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/setup.py new/txtorcon-23.5.0/setup.py
--- old/txtorcon-22.0.0/setup.py 2022-03-16 21:55:58.000000000 +0100
+++ new/txtorcon-23.5.0/setup.py 2023-05-19 03:11:14.000000000 +0200
@@ -41,6 +41,7 @@
name='txtorcon',
version=__version__,
description=description,
+ python_requires=">=3.8",
## setup_requires="setuptools>=36.2",
long_description=open('README.rst', 'r').read(),
keywords=['python', 'twisted', 'tor', 'tor controller'],
@@ -58,9 +59,6 @@
'Operating System :: POSIX :: Linux',
'Operating System :: Unix',
'Programming Language :: Python',
- 'Programming Language :: Python :: 2',
- 'Programming Language :: Python :: 2.6',
- 'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Topic :: Software Development :: Libraries :: Python Modules',
'Topic :: Internet :: Proxy Servers',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/test/test_endpoints.py
new/txtorcon-23.5.0/test/test_endpoints.py
--- old/txtorcon-22.0.0/test/test_endpoints.py 2021-08-16 23:06:49.000000000
+0200
+++ new/txtorcon-23.5.0/test/test_endpoints.py 2023-02-16 06:25:43.000000000
+0100
@@ -542,7 +542,11 @@
args = (50, "blarg", "Doing that thing we talked about.")
# kind-of cheating, test-wise?
ep._tor_progress_update(*args)
- self.assertTrue(ding.called_with(*args))
+ ding.assert_called()
+ self.assertEqual(
+ ding.call_args[0][1:],
+ args[1:],
+ )
def test_progress_updates_error(self, ftb):
config = TorConfig()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/test/test_torstate.py
new/txtorcon-23.5.0/test/test_torstate.py
--- old/txtorcon-22.0.0/test/test_torstate.py 2020-04-20 05:04:40.000000000
+0200
+++ new/txtorcon-23.5.0/test/test_torstate.py 2023-02-16 06:25:43.000000000
+0100
@@ -648,7 +648,8 @@
for ignored in self.state.event_map.items():
self.send(b"250 OK")
- self.send(b"650 STREAM 1 NEW 0 ca.yahoo.com:80
SOURCE_ADDR=127.0.0.1:54327 PURPOSE=USER")
+ self.send(b"650 STREAM 1 NEW 0 links.duckduckgo.com:443
SOURCE_ADDR=127.0.0.1:54327 PURPOSE=USER")
+ self.send(b'650 STREAM 1 CONTROLLER_WAIT 0 links.duckduckgo.com:443
SOCKS_USERNAME="duckduckgo.com"
SOCKS_PASSWORD="4a2f6ef74fe3aa0bf8876b4e927a28f7" CLIENT_PROTOCOL=SOCKS5
NYM_EPOCH=0 SESSION_GROUP=-5
ISO_FIELDS=SOCKS_USERNAME,SOCKS_PASSWORD,CLIENTADDR,SESSION_GROUP,NYM_EPOCH')
self.send(b"650 STREAM 1 REMAP 0 87.248.112.181:80 SOURCE=CACHE")
self.assertEqual(len(attacher.streams), 1)
self.assertEqual(attacher.streams[0].id, 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/test/test_web.py
new/txtorcon-23.5.0/test/test_web.py
--- old/txtorcon-22.0.0/test/test_web.py 2021-08-16 22:24:40.000000000
+0200
+++ new/txtorcon-23.5.0/test/test_web.py 2023-05-19 03:11:14.000000000
+0200
@@ -1,6 +1,7 @@
from mock import Mock
+from twisted.web.client import BrowserLikePolicyForHTTPS
from twisted.trial import unittest
from twisted.internet import defer
@@ -14,6 +15,11 @@
from txtorcon.circuit import TorCircuitEndpoint
+class CustomTLSContextFactory(BrowserLikePolicyForHTTPS):
+ def creatorForNetloc(self, hostname, port):
+ return super().creatorForNetloc(b"custom.domain", port)
+
+
class WebAgentTests(unittest.TestCase):
if not _HAVE_WEB:
skip = "Missing web"
@@ -56,7 +62,12 @@
def getConnection(key, endpoint):
self.assertTrue(isinstance(endpoint, TorSocksEndpoint))
- self.assertTrue(endpoint._tls)
+ self.assertIsInstance(
+ endpoint._tls,
+ BrowserLikePolicyForHTTPS().creatorForNetloc(b"host",
443).__class__
+ )
+ # This uses a Twisted private interface...
+ self.assertEqual(endpoint._tls._hostname, "meejah.ca")
self.assertEqual(endpoint._host, u'meejah.ca')
self.assertEqual(endpoint._port, 443)
return defer.succeed(proto)
@@ -71,6 +82,38 @@
self.assertIs(res, gold)
@defer.inlineCallbacks
+ def test_socks_agent_custom_tls_context_factory(self):
+ reactor = Mock()
+ config = Mock()
+ config.SocksPort = []
+ proto = Mock()
+ gold = object()
+ proto.request = Mock(return_value=defer.succeed(gold))
+
+ def getConnection(key, endpoint):
+
+ self.assertIsInstance(
+ endpoint._tls,
+ BrowserLikePolicyForHTTPS().creatorForNetloc(b"host",
443).__class__
+ )
+ # This uses a Twisted private interface...
+ self.assertEqual(endpoint._tls._hostname, "custom.domain")
+ self.assertEqual(endpoint._host, 'meejah.ca')
+ return defer.succeed(proto)
+ pool = Mock()
+ pool.getConnection = getConnection
+
+ # do the test
+ agent = yield agent_for_socks_port(
+ reactor, config, '127.0.0.50:1234', pool=pool,
+ tls_context_factory=CustomTLSContextFactory()
+ )
+
+ # apart from the getConnection asserts...
+ res = yield agent.request(b'GET', b'https://meejah.ca')
+ self.assertIs(res, gold)
+
+ @defer.inlineCallbacks
def test_agent(self):
reactor = Mock()
socks_ep = Mock()
@@ -95,7 +138,12 @@
def getConnection(key, endpoint):
self.assertTrue(isinstance(endpoint, TorCircuitEndpoint))
target = endpoint._target_endpoint
- self.assertTrue(target._tls)
+ self.assertIsInstance(
+ target._tls,
+ BrowserLikePolicyForHTTPS().creatorForNetloc(b"host",
443).__class__
+ )
+ # This uses a Twisted private interface...
+ self.assertEqual(target._tls._hostname, "meejah.ca")
self.assertEqual(target._host, u'meejah.ca')
self.assertEqual(target._port, 443)
return defer.succeed(proto)
@@ -106,4 +154,35 @@
# apart from the getConnection asserts...
res = yield agent.request(b'GET', b'https://meejah.ca')
+ self.assertIs(res, gold)
+
+ @defer.inlineCallbacks
+ def test_agent_with_circuit_tls_context_factory(self):
+ reactor = Mock()
+ circuit = Mock()
+ socks_ep = Mock()
+ proto = Mock()
+ gold = object()
+ proto.request = Mock(return_value=defer.succeed(gold))
+
+ def getConnection(key, endpoint):
+ target = endpoint._target_endpoint
+ self.assertIsInstance(
+ target._tls,
+ BrowserLikePolicyForHTTPS().creatorForNetloc(b"host",
443).__class__
+ )
+ # This uses a Twisted private interface...
+ self.assertEqual(target._tls._hostname, "custom.domain")
+ self.assertEqual(target._host, 'meejah.ca')
+ return defer.succeed(proto)
+ pool = Mock()
+ pool.getConnection = getConnection
+
+ agent = yield tor_agent(
+ reactor, socks_ep, circuit=circuit, pool=pool,
+ tls_context_factory=CustomTLSContextFactory()
+ )
+
+ # apart from the getConnection asserts...
+ res = yield agent.request(b'GET', b'https://meejah.ca')
self.assertIs(res, gold)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/txtorcon/_metadata.py
new/txtorcon-23.5.0/txtorcon/_metadata.py
--- old/txtorcon-22.0.0/txtorcon/_metadata.py 2022-03-16 22:26:28.000000000
+0100
+++ new/txtorcon-23.5.0/txtorcon/_metadata.py 2023-05-19 03:13:53.000000000
+0200
@@ -1,6 +1,6 @@
-__version__ = '22.0.0'
+__version__ = '23.5.0'
__author__ = 'meejah'
__contact__ = '[email protected]'
__url__ = 'https://github.com/meejah/txtorcon'
__license__ = 'MIT'
-__copyright__ = 'Copyright 2012-2022'
+__copyright__ = 'Copyright 2012-2023'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/txtorcon/circuit.py
new/txtorcon-23.5.0/txtorcon/circuit.py
--- old/txtorcon-22.0.0/txtorcon/circuit.py 2019-06-18 01:29:41.000000000
+0200
+++ new/txtorcon-23.5.0/txtorcon/circuit.py 2023-05-19 03:11:14.000000000
+0200
@@ -264,13 +264,16 @@
return defer.succeed(self)
return self._when_closed.when_fired()
- def web_agent(self, reactor, socks_endpoint, pool=None):
+ def web_agent(self, reactor, socks_endpoint, pool=None,
tls_context_factory=None):
"""
:param socks_endpoint: create one with
:meth:`txtorcon.TorConfig.create_socks_endpoint`. Can be a
Deferred.
:param pool: passed on to the Agent (as ``pool=``)
+
+ :param tls_context_factory: A factory for TLS contexts. If ``None``,
+ ``BrowserLikePolicyForHTTPS`` is used.
"""
# local import because there isn't Agent stuff on some
# platforms we support, so this will only error if you try
@@ -281,6 +284,7 @@
socks_endpoint,
circuit=self,
pool=pool,
+ tls_context_factory=tls_context_factory,
)
# XXX should make this API match above web_agent (i.e. pass a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/txtorcon/controller.py
new/txtorcon-23.5.0/txtorcon/controller.py
--- old/txtorcon-22.0.0/txtorcon/controller.py 2020-04-20 04:58:02.000000000
+0200
+++ new/txtorcon-23.5.0/txtorcon/controller.py 2023-05-19 03:11:14.000000000
+0200
@@ -566,7 +566,7 @@
self._config = yield TorConfig.from_protocol(self._protocol)
returnValue(self._config)
- def web_agent(self, pool=None, socks_endpoint=None):
+ def web_agent(self, pool=None, socks_endpoint=None,
tls_context_factory=None):
"""
:param socks_endpoint: If ``None`` (the default), a suitable
SOCKS port is chosen from our config (or added). If supplied,
@@ -577,6 +577,9 @@
this.
:param pool: passed on to the Agent (as ``pool=``)
+
+ :param tls_context_factory: A factory for TLS contexts. If ``None``,
+ ``BrowserLikePolicyForHTTPS`` is used.
"""
if self._non_anonymous:
raise Exception(
@@ -597,6 +600,7 @@
self._reactor,
socks_endpoint,
pool=pool,
+ tls_context_factory=tls_context_factory
)
@inlineCallbacks
@@ -935,7 +939,7 @@
"status/circuit-established",
)
returnValue(
- not(
+ not (
int(info["dormant"]) or
not int(info["status/enough-dir-info"]) or
not int(info["status/circuit-established"])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/txtorcon/interface.py
new/txtorcon-23.5.0/txtorcon/interface.py
--- old/txtorcon-22.0.0/txtorcon/interface.py 2018-05-31 20:59:02.000000000
+0200
+++ new/txtorcon-23.5.0/txtorcon/interface.py 2023-05-19 03:11:14.000000000
+0200
@@ -41,9 +41,9 @@
:class:`txtorcon.TorState` instance.
"""
- def web_agent(self, pool=None, _socks_endpoint=None):
+ def web_agent(self, pool=None, socks_endpoint=None,
tls_context_factory=None):
"""
- :param _socks_endpoint: If ``None`` (the default), a suitable
+ :param socks_endpoint: If ``None`` (the default), a suitable
SOCKS port is chosen from our config (or added). If supplied,
should be a Deferred which fires an IStreamClientEndpoint
(e.g. the return-value from
@@ -52,6 +52,9 @@
this.
:param pool: passed on to the Agent (as ``pool=``)
+
+ :param tls_context_factory: A factory for TLS contexts. If ``None``,
+ ``BrowserLikePolicyForHTTPS`` is used.
"""
def dns_resolve(self, hostname):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/txtorcon/stream.py
new/txtorcon-23.5.0/txtorcon/stream.py
--- old/txtorcon-22.0.0/txtorcon/stream.py 2018-05-31 20:59:02.000000000
+0200
+++ new/txtorcon-23.5.0/txtorcon/stream.py 2023-02-16 06:25:43.000000000
+0100
@@ -244,6 +244,9 @@
elif self.state in ['NEWRESOLVE', 'SENTRESOLVE']:
pass # print self.state, self, args
+ elif self.state == 'CONTROLLER_WAIT':
+ pass # waiting for us to ATTACHSTREAM
+
else:
raise RuntimeError("Unknown state: %s" % self.state)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/txtorcon/web.py
new/txtorcon-23.5.0/txtorcon/web.py
--- old/txtorcon-22.0.0/txtorcon/web.py 2018-09-22 11:49:26.000000000 +0200
+++ new/txtorcon-23.5.0/txtorcon/web.py 2023-05-19 03:11:14.000000000 +0200
@@ -5,7 +5,7 @@
from __future__ import with_statement
from twisted.web.iweb import IAgentEndpointFactory
-from twisted.web.client import Agent
+from twisted.web.client import Agent, BrowserLikePolicyForHTTPS
from twisted.internet.defer import inlineCallbacks, returnValue, Deferred
from twisted.internet.endpoints import TCP4ClientEndpoint, UNIXClientEndpoint
@@ -18,7 +18,7 @@
@implementer(IAgentEndpointFactory)
class _AgentEndpointFactoryUsingTor(object):
- def __init__(self, reactor, tor_socks_endpoint):
+ def __init__(self, reactor, tor_socks_endpoint, tls_context_factory):
self._reactor = reactor
self._proxy_ep = SingleObserver()
# if _proxy_ep is Deferred, but we get called twice, we must
@@ -28,32 +28,47 @@
else:
self._proxy_ep.fire(tor_socks_endpoint)
+ if tls_context_factory is None:
+ tls_context_factory = BrowserLikePolicyForHTTPS()
+ self._tls_context_factory = tls_context_factory
+
def _set_proxy(self, p):
self._proxy_ep.fire(p)
return p
def endpointForURI(self, uri):
+ if uri.scheme == b'https':
+ tls = self._tls_context_factory.creatorForNetloc(uri.host,
uri.port)
+ else:
+ tls = False
return TorSocksEndpoint(
self._proxy_ep.when_fired(),
uri.host,
uri.port,
- tls=(uri.scheme == b'https'),
+ tls=tls,
)
@implementer(IAgentEndpointFactory)
class _AgentEndpointFactoryForCircuit(object):
- def __init__(self, reactor, tor_socks_endpoint, circ):
+ def __init__(self, reactor, tor_socks_endpoint, circ, tls_context_factory):
self._reactor = reactor
self._socks_ep = tor_socks_endpoint
self._circ = circ
+ if tls_context_factory is None:
+ tls_context_factory = BrowserLikePolicyForHTTPS()
+ self._tls_context_factory = tls_context_factory
def endpointForURI(self, uri):
"""IAgentEndpointFactory API"""
+ if uri.scheme == b'https':
+ tls = self._tls_context_factory.creatorForNetloc(uri.host,
uri.port)
+ else:
+ tls = False
torsocks = TorSocksEndpoint(
self._socks_ep,
uri.host, uri.port,
- tls=uri.scheme == b'https',
+ tls=tls,
)
from txtorcon.circuit import TorCircuitEndpoint
return TorCircuitEndpoint(
@@ -61,7 +76,7 @@
)
-def tor_agent(reactor, socks_endpoint, circuit=None, pool=None):
+def tor_agent(reactor, socks_endpoint, circuit=None, pool=None,
tls_context_factory=None):
"""
This is the low-level method used by
:meth:`txtorcon.Tor.web_agent` and
@@ -83,21 +98,29 @@
which points at a SOCKS5 port of our Tor
:param pool: passed on to the Agent (as ``pool=``)
- """
+ :param tls_context_factory: A factory for TLS contexts. If ``None``,
+ ``BrowserLikePolicyForHTTPS`` is used.
+ """
if socks_endpoint is None:
raise ValueError(
"Must provide socks_endpoint as Deferred or IStreamClientEndpoint"
)
if circuit is not None:
- factory = _AgentEndpointFactoryForCircuit(reactor, socks_endpoint,
circuit)
+ factory = _AgentEndpointFactoryForCircuit(
+ reactor, socks_endpoint, circuit, tls_context_factory
+ )
else:
- factory = _AgentEndpointFactoryUsingTor(reactor, socks_endpoint)
+ factory = _AgentEndpointFactoryUsingTor(
+ reactor, socks_endpoint, tls_context_factory
+ )
+
return Agent.usingEndpointFactory(reactor, factory, pool=pool)
@inlineCallbacks
-def agent_for_socks_port(reactor, torconfig, socks_config, pool=None):
+def agent_for_socks_port(reactor, torconfig, socks_config, pool=None,
+ tls_context_factory=None):
"""
This returns a Deferred that fires with an object that implements
:class:`twisted.web.iweb.IAgent` and is thus suitable for passing
@@ -116,13 +139,10 @@
containing ``socket``). If the given SOCKS option is not
already available in the underlying Tor instance, it is
re-configured to add the SOCKS option.
- """
- # :param tls: True (the default) will use Twisted's default options
- # with the hostname in the URI -- that is, TLS verification
- # similar to a Browser. Otherwise, you can pass whatever Twisted
- # returns for `optionsForClientTLS
- #
<https://twistedmatrix.com/documents/current/api/twisted.internet.ssl.optionsForClientTLS.html>`_
+ :param tls_context_factory: A factory for TLS contexts. If ``None``,
+ ``BrowserLikePolicyForHTTPS`` is used.
+ """
socks_config = str(socks_config) # sadly, all lists are lists-of-strings
to Tor :/
if socks_config not in torconfig.SocksPort:
txtorlog.msg("Adding SOCKS port '{}' to Tor".format(socks_config))
@@ -149,7 +169,9 @@
returnValue(
Agent.usingEndpointFactory(
reactor,
- _AgentEndpointFactoryUsingTor(reactor, socks_ep),
+ _AgentEndpointFactoryUsingTor(
+ reactor, socks_ep, tls_context_factory=tls_context_factory
+ ),
pool=pool,
)
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/txtorcon.egg-info/PKG-INFO
new/txtorcon-23.5.0/txtorcon.egg-info/PKG-INFO
--- old/txtorcon-22.0.0/txtorcon.egg-info/PKG-INFO 2022-03-16
22:28:53.000000000 +0100
+++ new/txtorcon-23.5.0/txtorcon.egg-info/PKG-INFO 2023-05-19
03:21:31.000000000 +0200
@@ -1,13 +1,12 @@
Metadata-Version: 2.1
Name: txtorcon
-Version: 22.0.0
+Version: 23.5.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: [email protected]
License: MIT
Keywords: python,twisted,tor,tor controller
-Platform: UNKNOWN
Classifier: Framework :: Twisted
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
@@ -16,14 +15,12 @@
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.6
-Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Internet :: Proxy Servers
Classifier: Topic :: Internet
Classifier: Topic :: Security
+Requires-Python: >=3.8
Provides-Extra: dev
License-File: LICENSE
@@ -48,8 +45,8 @@
: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
+.. image:: https://codecov.io/github/meejah/txtorcon/coverage.svg?branch=main
+ :target: https://codecov.io/github/meejah/txtorcon?branch=main
:alt: codecov
.. image:: https://readthedocs.org/projects/txtorcon/badge/?version=stable
@@ -60,10 +57,6 @@
: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
========
@@ -72,11 +65,10 @@
- **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+;
+- Python 3.8+, PyPy 7.3.7+;
- depends on
`Twisted`_,
- `Automat <https://github.com/glyph/automat>`_,
- (and the `ipaddress <https://pypi.python.org/pypi/ipaddress>`_ backport for
non Python 3)
+ `Automat <https://github.com/glyph/automat>`_
Ten Thousand Feet
@@ -100,7 +92,6 @@
---------------------------------------
`download <examples/readme.py>`_
-(also `python2 style <examples/readme2.py>`_)
.. code:: python
@@ -177,5 +168,3 @@
<https://txtorcon.readthedocs.org/en/latest/introduction.html>`_).
.. _Twisted: https://twistedmatrix.com/trac
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-22.0.0/txtorcon.egg-info/requires.txt
new/txtorcon-23.5.0/txtorcon.egg-info/requires.txt
--- old/txtorcon-22.0.0/txtorcon.egg-info/requires.txt 2022-03-16
22:28:53.000000000 +0100
+++ new/txtorcon-23.5.0/txtorcon.egg-info/requires.txt 2023-05-19
03:21:31.000000000 +0200
@@ -4,9 +4,6 @@
automat
cryptography
-[:python_version < "3"]
-ipaddress>=1.0.16
-
[dev]
tox
coverage<5.0