Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-txtorcon for openSUSE:Factory 
checked in at 2024-09-23 15:23:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-txtorcon (Old)
 and      /work/SRC/openSUSE:Factory/.python-txtorcon.new.29891 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-txtorcon"

Mon Sep 23 15:23:47 2024 rev:16 rq:1202567 version:24.8.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-txtorcon/python-txtorcon.changes  
2024-01-03 12:23:34.792390100 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-txtorcon.new.29891/python-txtorcon.changes   
    2024-09-23 15:24:42.651630171 +0200
@@ -1,0 +2,7 @@
+Mon Sep 23 08:49:42 UTC 2024 - Dirk Müller <dmuel...@suse.com>
+
+- update to 24.8.0:
+  * Fix (test) issues with Twisted 24.7.0
+  * Remove usage of "six"
+
+-------------------------------------------------------------------

Old:
----
  txtorcon-23.11.0.tar.gz

New:
----
  txtorcon-24.8.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-txtorcon.spec ++++++
--- /var/tmp/diff_new_pack.4L69ai/_old  2024-09-23 15:24:43.087648197 +0200
+++ /var/tmp/diff_new_pack.4L69ai/_new  2024-09-23 15:24:43.091648363 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-txtorcon
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,19 +17,20 @@
 
 
 Name:           python-txtorcon
-Version:        23.11.0
+Version:        24.8.0
 Release:        0
 Summary:        Twisted-based asynchronous Tor control protocol implementation
 License:        MIT
 URL:            https://txtorcon.readthedocs.org
 Source:         
https://files.pythonhosted.org/packages/source/t/txtorcon/txtorcon-%{version}.tar.gz
+BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module setuptools >= 36.2}
+BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-Automat
 Requires:       python-Twisted-tls >= 15.5.0
 Requires:       python-cryptography
-Requires:       python-six
 Requires:       python-zope.interface >= 3.6.1
 BuildArch:      noarch
 # SECTION test requirements
@@ -37,7 +38,6 @@
 BuildRequires:  %{python_module Automat}
 BuildRequires:  %{python_module Twisted-tls >= 15.5.0}
 BuildRequires:  %{python_module cryptography}
-BuildRequires:  %{python_module six}
 BuildRequires:  %{python_module zope.interface >= 3.6.1}
 %python_subpackages
 
@@ -51,10 +51,10 @@
 sed -i '/data_files/,/\]\,/s/^/#/' setup.py
 
 %build
-%python_build
+%pyproject_wheel
 
 %install
-%python_install
+%pyproject_install
 # remove the tests from distribution
 %python_expand rm -rf %{buildroot}%{$python_sitelib}/test/
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
@@ -69,6 +69,6 @@
 %files %{python_files}
 %license LICENSE docs/*.rst
 %{python_sitelib}/txtorcon
-%{python_sitelib}/txtorcon-%{version}*-info
+%{python_sitelib}/txtorcon-%{version}.dist-info
 %{python_sitelib}/twisted/plugins/*
 

++++++ txtorcon-23.11.0.tar.gz -> txtorcon-24.8.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/Makefile 
new/txtorcon-24.8.0/Makefile
--- old/txtorcon-23.11.0/Makefile       2023-11-20 08:48:37.000000000 +0100
+++ new/txtorcon-24.8.0/Makefile        2024-08-20 21:05:01.000000000 +0200
@@ -1,6 +1,6 @@
 .PHONY: test html counts coverage sdist clean install doc integration diagrams
 default: test
-VERSION = 23.11.0
+VERSION = 24.8.0
 
 test:
        PYTHONPATH=. trial --reporter=text test
@@ -119,8 +119,8 @@
        gpg --verify dist/txtorcon-${VERSION}.tar.gz.asc || gpg --pinentry 
loopback --no-version --detach-sign --armor --local-user mee...@meejah.ca 
dist/txtorcon-${VERSION}.tar.gz
 
 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}-py3-none-any.whl 
dist/txtorcon-${VERSION}-py3-none-any.whl.asc
+       twine upload --username __token__ --password `cat 
PRIVATE-release-token` -r pypi -c "txtorcon v${VERSION} tarball" 
dist/txtorcon-${VERSION}.tar.gz dist/txtorcon-${VERSION}.tar.gz.asc
+       twine upload --username __token__ --password `cat 
PRIVATE-release-token` -r pypi -c "txtorcon v${VERSION} wheel" 
dist/txtorcon-${VERSION}-py3-none-any.whl 
dist/txtorcon-${VERSION}-py3-none-any.whl.asc
 
 
 venv:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/PKG-INFO 
new/txtorcon-24.8.0/PKG-INFO
--- old/txtorcon-23.11.0/PKG-INFO       2023-11-20 08:48:41.153334100 +0100
+++ new/txtorcon-24.8.0/PKG-INFO        2024-08-20 21:53:55.427759000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: txtorcon
-Version: 23.11.0
+Version: 24.8.0
 Summary:      Twisted-based Tor controller client, with state-tracking and     
configuration abstractions.     https://txtorcon.readthedocs.org     
https://github.com/meejah/txtorcon 
 Home-page: https://github.com/meejah/txtorcon
 Author: meejah
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/docs/releases.rst 
new/txtorcon-24.8.0/docs/releases.rst
--- old/txtorcon-23.11.0/docs/releases.rst      2023-11-20 08:34:46.000000000 
+0100
+++ new/txtorcon-24.8.0/docs/releases.rst       2024-08-20 21:35:46.000000000 
+0200
@@ -15,7 +15,19 @@
 
 See also :ref:`api_stability`.
 
-`git main <https://github.com/meejah/txtorcon>`_ *will likely become v24.1.0*
+`git main <https://github.com/meejah/txtorcon>`_ *will likely become v24.9.0*
+
+
+v24.8.0
+-------
+
+August 20, 2024
+
+ * `txtorcon-24.8.0.tar.gz 
<http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-24.8.0.tar.gz>`_
 (`PyPI <https://pypi.python.org/pypi/txtorcon/24.8.0>`_ (:download:`local-sig 
</../signatues/txtorcon-24.8.0.tar.gz.asc>` or `github-sig 
<https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-24.8.0.tar.gz.asc?raw=true>`_)
 (`source <https://github.com/meejah/txtorcon/archive/v24.8.0.tar.gz>`_)
+ * Fix (test) issues with Twisted 24.7.0 (`#400 
<https://github.com/meejah/txtorcon/pull/400>`_)
+ * Remove usage of "six" (`#395 
<https://github.com/meejah/txtorcon/issues/395>`_,
+   from `a-dieste <https://github.com/a-detiste>`_
+
 
 v23.11.0
 --------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/connect.py 
new/txtorcon-24.8.0/examples/connect.py
--- old/txtorcon-23.11.0/examples/connect.py    2019-05-19 14:35:02.000000000 
+0200
+++ new/txtorcon-24.8.0/examples/connect.py     2024-03-13 23:34:03.000000000 
+0100
@@ -1,6 +1,5 @@
 #!/usr/bin/env python
 
-from __future__ import print_function
 from twisted.internet.task import react
 from twisted.internet.defer import inlineCallbacks
 from twisted.internet.endpoints import TCP4ClientEndpoint
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/disallow_streams_by_port.py 
new/txtorcon-24.8.0/examples/disallow_streams_by_port.py
--- old/txtorcon-23.11.0/examples/disallow_streams_by_port.py   2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/disallow_streams_by_port.py    2024-03-13 
23:34:03.000000000 +0100
@@ -1,4 +1,3 @@
-from __future__ import print_function
 #
 # This uses a very simple custom txtorcon.IStreamAttacher to disallow
 # certain streams based solely on their port; by default it closes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/dns_lookups.py 
new/txtorcon-24.8.0/examples/dns_lookups.py
--- old/txtorcon-23.11.0/examples/dns_lookups.py        2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/dns_lookups.py 2024-03-13 23:34:03.000000000 
+0100
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
 from twisted.internet.task import react
 from twisted.internet.defer import inlineCallbacks
 from twisted.internet.endpoints import clientFromString
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/hidden_echo.py 
new/txtorcon-24.8.0/examples/hidden_echo.py
--- old/txtorcon-23.11.0/examples/hidden_echo.py        2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/hidden_echo.py 2024-03-13 23:34:03.000000000 
+0100
@@ -1,4 +1,3 @@
-from __future__ import print_function
 from twisted.internet import protocol, reactor, endpoints
 
 # like the echo-server example on the front page of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/launch_tor.py 
new/txtorcon-24.8.0/examples/launch_tor.py
--- old/txtorcon-23.11.0/examples/launch_tor.py 2018-05-31 20:59:02.000000000 
+0200
+++ new/txtorcon-24.8.0/examples/launch_tor.py  2024-03-13 23:34:03.000000000 
+0100
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
 """
 Launch a private Tor instance.
 """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/launch_tor2web.py 
new/txtorcon-24.8.0/examples/launch_tor2web.py
--- old/txtorcon-23.11.0/examples/launch_tor2web.py     2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/launch_tor2web.py      2024-03-13 
23:34:03.000000000 +0100
@@ -5,8 +5,6 @@
 # running tor supports, *without* resorting to looking at version
 # numbers.
 
-from __future__ import print_function
-
 import sys
 from twisted.internet.task import react
 from twisted.internet.defer import inlineCallbacks, Deferred
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/launch_tor_endpoint.py 
new/txtorcon-24.8.0/examples/launch_tor_endpoint.py
--- old/txtorcon-23.11.0/examples/launch_tor_endpoint.py        2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/launch_tor_endpoint.py 2024-03-13 
23:34:03.000000000 +0100
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
 # Here we set up a Twisted Web server and then launch our own tor with
 # a configured hidden service directed at the Web server we set
 # up. This uses serverFromString to translate the "onion" endpoint
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/launch_tor_endpoint2.py 
new/txtorcon-24.8.0/examples/launch_tor_endpoint2.py
--- old/txtorcon-23.11.0/examples/launch_tor_endpoint2.py       2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/launch_tor_endpoint2.py        2024-03-13 
23:34:03.000000000 +0100
@@ -5,8 +5,6 @@
 # up. This uses serverFromString to translate the "onion" endpoint descriptor
 # into a TCPHiddenServiceEndpoint object...
 
-from __future__ import print_function
-
 from twisted.internet import reactor
 from twisted.web import server, resource
 from twisted.internet.endpoints import serverFromString
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/launch_tor_unix_sockets.py 
new/txtorcon-24.8.0/examples/launch_tor_unix_sockets.py
--- old/txtorcon-23.11.0/examples/launch_tor_unix_sockets.py    2020-06-10 
00:27:42.000000000 +0200
+++ new/txtorcon-24.8.0/examples/launch_tor_unix_sockets.py     2024-03-13 
23:34:03.000000000 +0100
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
 """
 Use the 'global_tor' instance from txtorcon; this is a Tor
 instance that either doesn't exist or is unique to this process'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/launch_tor_with_simplehttpd.py 
new/txtorcon-24.8.0/examples/launch_tor_with_simplehttpd.py
--- old/txtorcon-23.11.0/examples/launch_tor_with_simplehttpd.py        
2020-06-10 00:27:42.000000000 +0200
+++ new/txtorcon-24.8.0/examples/launch_tor_with_simplehttpd.py 2024-03-13 
23:34:03.000000000 +0100
@@ -11,8 +11,6 @@
     ./launch_tor_with_simplehttpd.py -p 8080 -d /opt/files/
 '''
 
-from __future__ import print_function
-
 import SimpleHTTPServer
 import SocketServer
 import functools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/minimal_endpoint.py 
new/txtorcon-24.8.0/examples/minimal_endpoint.py
--- old/txtorcon-23.11.0/examples/minimal_endpoint.py   2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/minimal_endpoint.py    2024-03-13 
23:34:03.000000000 +0100
@@ -1,6 +1,5 @@
 #!/usr/bin/env python
 
-from __future__ import print_function
 from twisted.internet import reactor
 from twisted.internet.endpoints import serverFromString
 from twisted.web import server, static
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/monitor.py 
new/txtorcon-24.8.0/examples/monitor.py
--- old/txtorcon-23.11.0/examples/monitor.py    2018-05-31 20:59:02.000000000 
+0200
+++ new/txtorcon-24.8.0/examples/monitor.py     2024-03-13 23:34:03.000000000 
+0100
@@ -3,8 +3,6 @@
 # Just listens for a few EVENTs from Tor (INFO NOTICE WARN ERR) and
 # prints out the contents, so functions like a log monitor.
 
-from __future__ import print_function
-
 from twisted.internet import task, defer
 from twisted.internet.endpoints import UNIXClientEndpoint
 import txtorcon
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/stem_relay_descriptor.py 
new/txtorcon-24.8.0/examples/stem_relay_descriptor.py
--- old/txtorcon-23.11.0/examples/stem_relay_descriptor.py      2023-06-09 
09:50:36.000000000 +0200
+++ new/txtorcon-24.8.0/examples/stem_relay_descriptor.py       2024-03-13 
23:34:03.000000000 +0100
@@ -13,7 +13,6 @@
 # descriptors -- by default Tor only downloads "microdescriptors"
 # (whose information is already available live via txtorcon.Router
 # instances). Set "UseMicrodescriptors 0" to download "full" descriptors
-from __future__ import print_function
 
 from twisted.internet.task import react
 from twisted.internet.defer import inlineCallbacks
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/stream_circuit_logger.py 
new/txtorcon-24.8.0/examples/stream_circuit_logger.py
--- old/txtorcon-23.11.0/examples/stream_circuit_logger.py      2020-06-10 
00:27:42.000000000 +0200
+++ new/txtorcon-24.8.0/examples/stream_circuit_logger.py       2024-03-13 
23:34:03.000000000 +0100
@@ -3,8 +3,6 @@
 # This uses an IStreamListener and an ICircuitListener to log all
 # built circuits and all streams that succeed.
 
-from __future__ import print_function
-
 import sys
 from twisted.python import log
 from twisted.internet.task import react
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/tor_info.py 
new/txtorcon-24.8.0/examples/tor_info.py
--- old/txtorcon-23.11.0/examples/tor_info.py   2018-05-31 20:59:02.000000000 
+0200
+++ new/txtorcon-24.8.0/examples/tor_info.py    2024-03-13 23:34:03.000000000 
+0100
@@ -15,8 +15,6 @@
 # transaction, you'll have to use TorControlProtocol's get_info
 # instead.
 
-from __future__ import print_function
-
 import sys
 from twisted.internet import reactor, defer
 from txtorcon import TorInfo, build_local_tor_connection
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/web_client.py 
new/txtorcon-24.8.0/examples/web_client.py
--- old/txtorcon-23.11.0/examples/web_client.py 2023-08-11 09:41:38.000000000 
+0200
+++ new/txtorcon-24.8.0/examples/web_client.py  2024-03-13 23:34:03.000000000 
+0100
@@ -1,8 +1,6 @@
 # this example shows how to use Twisted's web client with Tor via
 # txtorcon
 
-from __future__ import print_function
-
 from twisted.internet.defer import inlineCallbacks
 from twisted.internet.task import react
 from twisted.internet.endpoints import TCP4ClientEndpoint
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/web_client_authenticated.py 
new/txtorcon-24.8.0/examples/web_client_authenticated.py
--- old/txtorcon-23.11.0/examples/web_client_authenticated.py   2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/web_client_authenticated.py    2024-03-13 
23:34:03.000000000 +0100
@@ -1,8 +1,6 @@
 # this example shows how to use Twisted's web client with Tor via
 # txtorcon
 
-from __future__ import print_function
-
 from twisted.internet.defer import inlineCallbacks
 from twisted.internet.task import react
 from twisted.internet.endpoints import TCP4ClientEndpoint
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/web_client_custom_circuit.py 
new/txtorcon-24.8.0/examples/web_client_custom_circuit.py
--- old/txtorcon-23.11.0/examples/web_client_custom_circuit.py  2020-06-10 
00:27:42.000000000 +0200
+++ new/txtorcon-24.8.0/examples/web_client_custom_circuit.py   2024-03-13 
23:34:03.000000000 +0100
@@ -5,8 +5,6 @@
 # do anything "special" to select your circuit hops you risk making it
 # easy to de-anonymize this (and all other) Tor circuits.
 
-from __future__ import print_function
-
 from twisted.internet.protocol import Protocol, Factory
 from twisted.internet.defer import inlineCallbacks, Deferred
 from twisted.internet.task import react
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/web_client_treq.py 
new/txtorcon-24.8.0/examples/web_client_treq.py
--- old/txtorcon-23.11.0/examples/web_client_treq.py    2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/web_client_treq.py     2024-03-13 
23:34:03.000000000 +0100
@@ -1,8 +1,6 @@
 # just copying over most of "carml checkpypi" because it's a good
 # example of "I want a stream over *this* circuit".
 
-from __future__ import print_function
-
 from twisted.internet.defer import inlineCallbacks
 from twisted.internet.task import react
 from twisted.internet.endpoints import TCP4ClientEndpoint
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/web_onion_service_endpoints.py 
new/txtorcon-24.8.0/examples/web_onion_service_endpoints.py
--- old/txtorcon-23.11.0/examples/web_onion_service_endpoints.py        
2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/web_onion_service_endpoints.py 2024-03-13 
23:34:03.000000000 +0100
@@ -11,7 +11,6 @@
 # parser plugin but code without knowledge of txtorcon can still
 # launch a Tor instance using it. cool!
 
-from __future__ import print_function
 from twisted.internet import defer, task, endpoints, error
 from twisted.web import server, resource
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/web_onion_service_ephemeral_auth.py 
new/txtorcon-24.8.0/examples/web_onion_service_ephemeral_auth.py
--- old/txtorcon-23.11.0/examples/web_onion_service_ephemeral_auth.py   
2020-06-10 00:27:42.000000000 +0200
+++ new/txtorcon-24.8.0/examples/web_onion_service_ephemeral_auth.py    
2024-03-13 23:34:03.000000000 +0100
@@ -11,7 +11,6 @@
 # parser plugin but code without knowledge of txtorcon can still
 # launch a Tor instance using it. cool!
 
-from __future__ import print_function
 from twisted.internet import defer, task, endpoints
 from twisted.web import server, resource
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/web_onion_service_ephemeral_nonanon.py 
new/txtorcon-24.8.0/examples/web_onion_service_ephemeral_nonanon.py
--- old/txtorcon-23.11.0/examples/web_onion_service_ephemeral_nonanon.py        
2020-06-10 00:27:42.000000000 +0200
+++ new/txtorcon-24.8.0/examples/web_onion_service_ephemeral_nonanon.py 
2024-03-13 23:34:03.000000000 +0100
@@ -6,7 +6,6 @@
 # services. Once you publish a service like this, there's no going
 # back to location-hidden.
 
-from __future__ import print_function
 from twisted.internet import defer, task, endpoints
 from twisted.web import server, resource
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/web_onion_service_ephemeral_unix.py 
new/txtorcon-24.8.0/examples/web_onion_service_ephemeral_unix.py
--- old/txtorcon-23.11.0/examples/web_onion_service_ephemeral_unix.py   
2020-06-10 00:27:42.000000000 +0200
+++ new/txtorcon-24.8.0/examples/web_onion_service_ephemeral_unix.py    
2024-03-13 23:34:03.000000000 +0100
@@ -11,7 +11,6 @@
 # parser plugin but code without knowledge of txtorcon can still
 # launch a Tor instance using it. cool!
 
-from __future__ import print_function
 from os.path import abspath
 
 from twisted.internet import defer, task, endpoints
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/web_onion_service_filesystem.py 
new/txtorcon-24.8.0/examples/web_onion_service_filesystem.py
--- old/txtorcon-23.11.0/examples/web_onion_service_filesystem.py       
2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/web_onion_service_filesystem.py        
2024-03-13 23:34:03.000000000 +0100
@@ -1,6 +1,5 @@
 #!/usr/bin/env python
 
-from __future__ import print_function
 import os
 
 from twisted.internet import defer, task, endpoints
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/web_onion_service_prop224.py 
new/txtorcon-24.8.0/examples/web_onion_service_prop224.py
--- old/txtorcon-23.11.0/examples/web_onion_service_prop224.py  2020-06-10 
00:27:42.000000000 +0200
+++ new/txtorcon-24.8.0/examples/web_onion_service_prop224.py   2024-03-13 
23:34:03.000000000 +0100
@@ -11,7 +11,6 @@
 # parser plugin but code without knowledge of txtorcon can still
 # launch a Tor instance using it. cool!
 
-from __future__ import print_function
 from twisted.internet import defer, task, endpoints
 from twisted.web import server, resource
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/txtorcon-23.11.0/examples/web_onion_service_prop224_endpoints_file.py 
new/txtorcon-24.8.0/examples/web_onion_service_prop224_endpoints_file.py
--- old/txtorcon-23.11.0/examples/web_onion_service_prop224_endpoints_file.py   
2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/web_onion_service_prop224_endpoints_file.py    
2024-03-13 23:34:03.000000000 +0100
@@ -11,7 +11,6 @@
 # parser plugin but code without knowledge of txtorcon can still
 # launch a Tor instance using it. cool!
 
-from __future__ import print_function
 from twisted.internet import defer, task, endpoints
 from twisted.web import server, resource
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/examples/webui_server.py 
new/txtorcon-24.8.0/examples/webui_server.py
--- old/txtorcon-23.11.0/examples/webui_server.py       2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/examples/webui_server.py        2024-03-13 
23:34:03.000000000 +0100
@@ -1,7 +1,5 @@
 #!/usr/bin/env python
 
-from __future__ import print_function
-
 from twisted.internet import reactor
 from nevow.appserver import NevowSite
 from nevow import loaders, tags, livepage
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/setup.py 
new/txtorcon-24.8.0/setup.py
--- old/txtorcon-23.11.0/setup.py       2023-05-19 03:11:14.000000000 +0200
+++ new/txtorcon-24.8.0/setup.py        2024-03-13 23:34:03.000000000 +0100
@@ -1,8 +1,5 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-
 from os.path import join
 from os import listdir
 from setuptools import setup
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/test/test_controller.py 
new/txtorcon-24.8.0/test/test_controller.py
--- old/txtorcon-23.11.0/test/test_controller.py        2023-11-20 
07:11:22.000000000 +0100
+++ new/txtorcon-24.8.0/test/test_controller.py 2024-03-13 23:34:03.000000000 
+0100
@@ -1,5 +1,4 @@
 import os
-import six
 import functools
 from os.path import join
 from unittest.mock import Mock, patch
@@ -1504,12 +1503,6 @@
         yield self.tor.remove_onion_authentication("non_existing.onion")
         self.assertEqual(0, len(self.cfg.HidServAuth))
 
-    def test_context_manager_py2(self):
-        if not six.PY2:
-            return
-        with self.assertRaises(RuntimeError):
-            self.tor.onion_authentication("foo.onion", "token")
-
     @defer.inlineCallbacks
     def test_add_and_remove(self):
         yield self.tor.add_onion_authentication("foo.onion", "a_token")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/test/test_endpoints.py 
new/txtorcon-24.8.0/test/test_endpoints.py
--- old/txtorcon-23.11.0/test/test_endpoints.py 2023-11-20 07:11:22.000000000 
+0100
+++ new/txtorcon-24.8.0/test/test_endpoints.py  2024-03-13 23:34:03.000000000 
+0100
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
 import os
 import sys
 from unittest.mock import patch
@@ -1331,7 +1329,6 @@
 
 
 def port_generator():
-    # XXX six has xrange/range stuff?
     for x in range(65535, 0, -1):
         yield x
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/test/test_fsm.py 
new/txtorcon-24.8.0/test/test_fsm.py
--- old/txtorcon-23.11.0/test/test_fsm.py       2018-05-31 20:59:02.000000000 
+0200
+++ new/txtorcon-24.8.0/test/test_fsm.py        2024-03-13 23:34:03.000000000 
+0100
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
 import txtorcon.spaghetti
 from txtorcon.spaghetti import State
 from txtorcon.spaghetti import Transition
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/test/test_onion.py 
new/txtorcon-24.8.0/test/test_onion.py
--- old/txtorcon-23.11.0/test/test_onion.py     2023-11-20 07:11:22.000000000 
+0100
+++ new/txtorcon-24.8.0/test/test_onion.py      2024-03-13 23:34:03.000000000 
+0100
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
 import os
 import sys
 from unittest.mock import Mock
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/test/test_socks.py 
new/txtorcon-24.8.0/test/test_socks.py
--- old/txtorcon-23.11.0/test/test_socks.py     2023-11-20 07:11:22.000000000 
+0100
+++ new/txtorcon-24.8.0/test/test_socks.py      2024-03-13 23:34:03.000000000 
+0100
@@ -1,4 +1,4 @@
-from six import BytesIO, text_type
+from io import BytesIO
 from unittest.mock import Mock, patch
 
 from twisted.trial import unittest
@@ -768,7 +768,7 @@
         d = socks.resolve_ptr(socks_ep, 'meejah.ca')
         self.assertEqual(1, len(fac.mock_calls))
         self.assertTrue(
-            isinstance(fac.mock_calls[0][1][0], text_type)
+            isinstance(fac.mock_calls[0][1][0], str)
         )
         return d
 
@@ -778,7 +778,7 @@
         d = socks.resolve(socks_ep, 'meejah.ca')
         self.assertEqual(1, len(fac.mock_calls))
         self.assertTrue(
-            isinstance(fac.mock_calls[0][1][0], text_type)
+            isinstance(fac.mock_calls[0][1][0], str)
         )
         return d
 
@@ -788,7 +788,7 @@
         d = socks.resolve_ptr(socks_ep, b'meejah.ca')
         self.assertEqual(1, len(fac.mock_calls))
         self.assertTrue(
-            isinstance(fac.mock_calls[0][1][0], text_type)
+            isinstance(fac.mock_calls[0][1][0], str)
         )
         return d
 
@@ -798,7 +798,7 @@
         d = socks.resolve(socks_ep, b'meejah.ca')
         self.assertEqual(1, len(fac.mock_calls))
         self.assertTrue(
-            isinstance(fac.mock_calls[0][1][0], text_type)
+            isinstance(fac.mock_calls[0][1][0], str)
         )
         return d
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/test/test_stream.py 
new/txtorcon-24.8.0/test/test_stream.py
--- old/txtorcon-23.11.0/test/test_stream.py    2023-08-11 09:41:38.000000000 
+0200
+++ new/txtorcon-24.8.0/test/test_stream.py     2024-03-13 23:34:03.000000000 
+0100
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
 from txtorcon.util import maybe_ip_addr
 from twisted.trial import unittest
 from twisted.internet import defer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/test/test_torconfig.py 
new/txtorcon-24.8.0/test/test_torconfig.py
--- old/txtorcon-23.11.0/test/test_torconfig.py 2023-11-20 07:11:22.000000000 
+0100
+++ new/txtorcon-24.8.0/test/test_torconfig.py  2024-08-20 21:04:14.000000000 
+0200
@@ -1,11 +1,9 @@
-from __future__ import print_function
-
 import os
 import shutil
 import tempfile
 import functools
 import warnings
-from six import StringIO
+from io import StringIO
 from unittest.mock import Mock, patch
 from os.path import join
 
@@ -1459,8 +1457,11 @@
             )
             self.assertIs(tpp, fake_tor.process)
         calls = warn.mock_calls
-        self.assertEqual(1, len(calls))
-        self.assertEqual(calls[0][1][1], DeprecationWarning)
+        # on Twisted 24.7.0 and higher, there's an extra deprecation
+        # warning due to returnValue being deprecated
+        self.assertTrue(len(calls) >= 1)
+        for call in calls:
+            self.assertEqual(call[1][1], DeprecationWarning)
 
 
 class ErrorTests(unittest.TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/test/test_torcontrolprotocol.py 
new/txtorcon-24.8.0/test/test_torcontrolprotocol.py
--- old/txtorcon-23.11.0/test/test_torcontrolprotocol.py        2023-10-04 
21:25:18.000000000 +0200
+++ new/txtorcon-24.8.0/test/test_torcontrolprotocol.py 2024-03-13 
23:34:03.000000000 +0100
@@ -1,6 +1,3 @@
-from __future__ import print_function
-from __future__ import with_statement
-
 from os.path import exists
 
 from twisted.python import log, failure
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/test/test_torstate.py 
new/txtorcon-24.8.0/test/test_torstate.py
--- old/txtorcon-23.11.0/test/test_torstate.py  2023-11-20 07:11:22.000000000 
+0100
+++ new/txtorcon-24.8.0/test/test_torstate.py   2024-03-13 23:34:03.000000000 
+0100
@@ -1,5 +1,3 @@
-from __future__ import print_function
-
 from zope.interface import implementer, directlyProvides
 from zope.interface.verify import verifyClass
 from twisted.trial import unittest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/test/test_util_imports.py 
new/txtorcon-24.8.0/test/test_util_imports.py
--- old/txtorcon-23.11.0/test/test_util_imports.py      2018-05-31 
20:59:02.000000000 +0200
+++ new/txtorcon-24.8.0/test/test_util_imports.py       2024-03-13 
23:34:03.000000000 +0100
@@ -3,7 +3,6 @@
 import sys
 import functools
 from unittest import skipUnless
-import six
 
 
 def fake_import(orig, name, *args, **kw):
@@ -14,7 +13,7 @@
 
 class TestImports(unittest.TestCase):
 
-    @skipUnless(six.PY2 and 'pypy' not in sys.version.lower(), "Doesn't work 
in PYPY, Py3")
+    @skipUnless(False and 'pypy' not in sys.version.lower(), "Doesn't work in 
PYPY, Py3")
     def test_no_GeoIP(self):
         """
         Make sure we don't explode if there's no GeoIP module
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/__init__.py 
new/txtorcon-24.8.0/txtorcon/__init__.py
--- old/txtorcon-23.11.0/txtorcon/__init__.py   2018-05-31 20:59:02.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/__init__.py    2024-03-13 23:34:03.000000000 
+0100
@@ -1,10 +1,5 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import with_statement
-
 from txtorcon._metadata import __version__, __author__, __contact__
 from txtorcon._metadata import __license__, __copyright__, __url__
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/_metadata.py 
new/txtorcon-24.8.0/txtorcon/_metadata.py
--- old/txtorcon-23.11.0/txtorcon/_metadata.py  2023-11-20 07:12:18.000000000 
+0100
+++ new/txtorcon-24.8.0/txtorcon/_metadata.py   2024-08-20 21:05:12.000000000 
+0200
@@ -1,6 +1,6 @@
-__version__ = '23.11.0'
+__version__ = '24.8.0'
 __author__ = 'meejah'
 __contact__ = 'mee...@meejah.ca'
 __url__ = 'https://github.com/meejah/txtorcon'
 __license__ = 'MIT'
-__copyright__ = 'Copyright 2012-2023'
+__copyright__ = 'Copyright 2012-2024'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/addrmap.py 
new/txtorcon-24.8.0/txtorcon/addrmap.py
--- old/txtorcon-23.11.0/txtorcon/addrmap.py    2018-05-31 20:59:02.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/addrmap.py     2024-03-13 23:34:03.000000000 
+0100
@@ -1,10 +1,5 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import with_statement
-
 from txtorcon.interface import IAddrListener
 from txtorcon.util import maybe_ip_addr
 
@@ -15,7 +10,7 @@
 import shlex
 
 
-class Addr(object):
+class Addr:
     """
     One address mapping (e.g. example.com -> 127.0.0.1)
     """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/circuit.py 
new/txtorcon-24.8.0/txtorcon/circuit.py
--- old/txtorcon-23.11.0/txtorcon/circuit.py    2023-05-19 03:11:14.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/circuit.py     2024-03-13 23:34:03.000000000 
+0100
@@ -1,11 +1,5 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import with_statement
-
-import six
 import time
 from datetime import datetime
 
@@ -69,7 +63,7 @@
 
     def _add_real_target(self, real_addr, circuit, d):
         # joy oh joy, ipaddress wants unicode, Twisted gives us bytes...
-        real_host = maybe_ip_addr(six.text_type(real_addr.host))
+        real_host = maybe_ip_addr(str(real_addr.host))
         real_port = real_addr.port
         self._circuit_targets[(real_host, real_port)] = (circuit, d)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/controller.py 
new/txtorcon-24.8.0/txtorcon/controller.py
--- old/txtorcon-23.11.0/txtorcon/controller.py 2023-08-30 01:34:05.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/controller.py  2024-03-13 23:34:03.000000000 
+0100
@@ -1,12 +1,7 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import with_statement
-
 import os
 import sys
-import six
 import shlex
 import tempfile
 import functools
@@ -1039,7 +1034,7 @@
             raise ValueError(
                 "The only valid Onion service versions are 2 or 3"
             )
-        if not isinstance(ports, Sequence) or isinstance(ports, 
six.string_types):
+        if not isinstance(ports, Sequence) or isinstance(ports, str):
             raise ValueError("'ports' must be a sequence (list, tuple, ..)")
 
         processed_ports = yield _validate_ports(self._reactor, ports)
@@ -1097,7 +1092,7 @@
             been made.
 
         """
-        if not isinstance(ports, Sequence) or isinstance(ports, 
six.string_types):
+        if not isinstance(ports, Sequence) or isinstance(ports, str):
             raise ValueError("'ports' must be a sequence (list, tuple, ..)")
         processed_ports = yield _validate_ports(self._reactor, ports)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/endpoints.py 
new/txtorcon-24.8.0/txtorcon/endpoints.py
--- old/txtorcon-23.11.0/txtorcon/endpoints.py  2023-08-11 09:41:38.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/endpoints.py   2024-03-13 23:34:03.000000000 
+0100
@@ -1,9 +1,5 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import with_statement
-
 import os
 import shutil
 import weakref
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/interface.py 
new/txtorcon-24.8.0/txtorcon/interface.py
--- old/txtorcon-23.11.0/txtorcon/interface.py  2023-05-19 03:11:14.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/interface.py   2024-03-13 23:34:03.000000000 
+0100
@@ -1,10 +1,5 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import with_statement
-
 from zope.interface import implementer
 from zope.interface import Interface, Attribute
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/log.py 
new/txtorcon-24.8.0/txtorcon/log.py
--- old/txtorcon-23.11.0/txtorcon/log.py        2018-05-31 20:59:02.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/log.py 2024-03-13 23:34:03.000000000 +0100
@@ -4,11 +4,6 @@
 This module handles txtorcon debug messages.
 """
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import with_statement
-
 from twisted.python import log as twlog
 
 __all__ = ['txtorlog']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/onion.py 
new/txtorcon-24.8.0/txtorcon/onion.py
--- old/txtorcon-23.11.0/txtorcon/onion.py      2019-05-19 14:35:02.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/onion.py       2024-03-13 23:34:03.000000000 
+0100
@@ -1,6 +1,5 @@
 import os
 import re
-import six
 import base64
 import hashlib
 import functools
@@ -20,7 +19,7 @@
 from cryptography.hazmat.primitives import serialization
 
 
-class HiddenServiceClientAuth(object):
+class HiddenServiceClientAuth:
     """
     Encapsulates a single client-authorization, as parsed from a
     HiddenServiceDir's "client_keys" file if you have stealth or basic
@@ -1375,7 +1374,7 @@
                     "{} 127.0.0.1:{}".format(remote, local)
                 )
 
-        elif isinstance(port, (six.text_type, str)):
+        elif isinstance(port, str):
             _validate_single_port_string(port)
             processed_ports.append(port)
 
@@ -1407,7 +1406,7 @@
     """
     if not isinstance(ports, (list, tuple)):
         raise ValueError("'ports' must be a list of strings")
-    if any([not isinstance(x, (six.text_type, str)) for x in ports]):
+    if any([not isinstance(x, str) for x in ports]):
         raise ValueError("'ports' must be a list of strings")
     for port in ports:
         _validate_single_port_string(port)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/router.py 
new/txtorcon-24.8.0/txtorcon/router.py
--- old/txtorcon-23.11.0/txtorcon/router.py     2018-05-31 20:59:02.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/router.py      2024-03-13 23:34:03.000000000 
+0100
@@ -1,15 +1,9 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import with_statement
-
 import json
 from datetime import datetime
 from .util import NetLocation
 from .util import _Version
-import six
 from base64 import b64encode, b64decode
 from binascii import b2a_hex, a2b_hex
 
@@ -38,7 +32,7 @@
     return b64encode(a2b_hex(hexid))[:-1].decode('ascii')
 
 
-class PortRange(object):
+class PortRange:
     """
     Represents a range of ports for Router policies.
     """
@@ -53,7 +47,7 @@
         return "%d-%d" % (self.min, self.max)
 
 
-class Router(object):
+class Router:
     """
     Represents a Tor Router, including location.
 
@@ -179,7 +173,7 @@
         There is some current work in Twisted for open-ended constants
         (enums) support however, it seems.
         """
-        if isinstance(flags, (six.text_type, bytes)):
+        if isinstance(flags, (str, bytes)):
             flags = flags.split()
         self._flags = [x.lower() for x in flags]
         self.name_is_unique = 'named' in self._flags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/socks.py 
new/txtorcon-24.8.0/txtorcon/socks.py
--- old/txtorcon-23.11.0/txtorcon/socks.py      2020-06-10 00:27:42.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/socks.py       2024-03-13 23:34:03.000000000 
+0100
@@ -4,9 +4,6 @@
 # Python3. Also, Tor's SOCKS5 implementation is especially simple,
 # since it doesn't do BIND or UDP ASSOCIATE.
 
-from __future__ import print_function
-
-import six
 import struct
 from socket import inet_pton, inet_ntoa, inet_aton, AF_INET6, AF_INET
 
@@ -41,9 +38,9 @@
 
 
 def _create_ip_address(host, port):
-    if not isinstance(host, six.text_type):
+    if not isinstance(host, str):
         raise ValueError(
-            "'host' must be {}, not {}".format(six.text_type, type(host))
+            "'host' must be str, not {}".format(type(host))
         )
     try:
         a = ipaddress.ip_address(host)
@@ -87,13 +84,13 @@
                     req_type
                 )
             )
-        if not isinstance(host, (bytes, str, six.text_type)):
+        if not isinstance(host, (bytes, str)):
             raise ValueError(
                 "'host' must be text (not {})".format(type(host))
             )
         # XXX what if addr is None?
         self._req_type = req_type
-        self._addr = _create_ip_address(six.text_type(host), port)
+        self._addr = _create_ip_address(str(host), port)
         self._data = b''
         self._on_disconnect = on_disconnect
         self._create_connection = create_connection
@@ -646,9 +643,7 @@
 
     :param hostname: the hostname to look up.
     """
-    if six.PY2 and isinstance(hostname, str):
-        hostname = unicode(hostname)  # noqa
-    elif six.PY3 and isinstance(hostname, bytes):
+    if isinstance(hostname, bytes):
         hostname = hostname.decode('ascii')
     factory = _TorSocksFactory(
         hostname, 0, 'RESOLVE', None,
@@ -667,9 +662,7 @@
 
     :param ip: the IP address to look up.
     """
-    if six.PY2 and isinstance(ip, str):
-        ip = unicode(ip)  # noqa
-    elif six.PY3 and isinstance(ip, bytes):
+    if isinstance(ip, bytes):
         ip = ip.decode('ascii')
     factory = _TorSocksFactory(
         ip, 0, 'RESOLVE_PTR', None,
@@ -692,9 +685,7 @@
     def __init__(self, socks_endpoint, host, port, tls=False):
         self._proxy_ep = socks_endpoint  # can be Deferred
         assert self._proxy_ep is not None
-        if six.PY2 and isinstance(host, str):
-            host = unicode(host)  # noqa
-        if six.PY3 and isinstance(host, bytes):
+        if isinstance(host, bytes):
             host = host.decode('ascii')
         self._host = host
         self._port = port
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/spaghetti.py 
new/txtorcon-24.8.0/txtorcon/spaghetti.py
--- old/txtorcon-23.11.0/txtorcon/spaghetti.py  2018-05-31 20:59:02.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/spaghetti.py   2024-03-13 23:34:03.000000000 
+0100
@@ -1,13 +1,9 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import with_statement
-
 import warnings
 
 
-class FSM(object):
+class FSM:
     """
     Pass callables for matcher and handler to add_handler to create
     transitions between states. A "matcher" is a predicate, and if a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/stream.py 
new/txtorcon-24.8.0/txtorcon/stream.py
--- old/txtorcon-23.11.0/txtorcon/stream.py     2023-02-16 06:25:43.000000000 
+0100
+++ new/txtorcon-24.8.0/txtorcon/stream.py      2024-03-13 23:34:03.000000000 
+0100
@@ -11,18 +11,13 @@
 
 """
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import with_statement
-
 from twisted.python import log
 from twisted.internet import defer
 from txtorcon.interface import ICircuitContainer, IStreamListener
 from txtorcon.util import find_keywords, maybe_ip_addr
 
 
-class Stream(object):
+class Stream:
     """
     Represents an active stream in Tor's state (:class:`txtorcon.TorState`).
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/torconfig.py 
new/txtorcon-24.8.0/txtorcon/torconfig.py
--- old/txtorcon-23.11.0/txtorcon/torconfig.py  2023-11-20 07:07:30.000000000 
+0100
+++ new/txtorcon-24.8.0/txtorcon/torconfig.py   2024-03-13 23:34:03.000000000 
+0100
@@ -1,12 +1,7 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import with_statement
-
 import os
 import re
-import six
 import functools
 import warnings
 from io import StringIO
@@ -67,7 +62,7 @@
     defer.returnValue(tor.process)
 
 
-class TorConfigType(object):
+class TorConfigType:
     """
     Base class for all configuration types, which function as parsers
     and un-parsers.
@@ -253,11 +248,7 @@
         return '_ListWrapper' + super(_ListWrapper, self).__repr__()
 
 
-if six.PY2:
-    setattr(_ListWrapper, '__setslice__', _wrapture(list.__setslice__))
-
-
-class HiddenService(object):
+class HiddenService:
     """
     Because hidden service configuration is handled specially by Tor,
     we wrap the config in this class. This corresponds to the
@@ -424,7 +415,7 @@
 # resulting class in isinstance() things and the like, because Twisted
 # makes it into a function instead :( so we @deprecate __init__ for now
 # @deprecated(_Version("txtorcon", 18, 0, 0))
-class EphemeralHiddenService(object):
+class EphemeralHiddenService:
     '''
     Deprecated as of 18.0.0. Please instead use 
:class:`txtorcon.EphemeralOnionService`
 
@@ -448,7 +439,7 @@
             raise ValueError(
                 'key_blob_or_type must be a string in the formats '
                 '"NEW:<ALGORITHM>" or "<ALGORITHM>:<KEY>"')
-        if isinstance(ports, (six.text_type, str)):
+        if isinstance(ports, str):
             ports = [ports]
         self._ports = [x.replace(' ', ',') for x in ports]
         self._keyblob = key_blob_or_type
@@ -523,7 +514,7 @@
     return TCP4ClientEndpoint(reactor, host, port)
 
 
-class TorConfig(object):
+class TorConfig:
     """This class abstracts out Tor's config, and can be used both to
     create torrc files from nothing and track live configuration of a Tor
     instance.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/torcontrolprotocol.py 
new/txtorcon-24.8.0/txtorcon/torcontrolprotocol.py
--- old/txtorcon-23.11.0/txtorcon/torcontrolprotocol.py 2023-10-04 
21:25:18.000000000 +0200
+++ new/txtorcon-24.8.0/txtorcon/torcontrolprotocol.py  2024-03-13 
23:34:03.000000000 +0100
@@ -1,9 +1,5 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import with_statement
-
 import os
 import re
 import base64
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/torinfo.py 
new/txtorcon-24.8.0/txtorcon/torinfo.py
--- old/txtorcon-23.11.0/txtorcon/torinfo.py    2021-08-06 21:20:26.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/torinfo.py     2024-03-13 23:34:03.000000000 
+0100
@@ -1,17 +1,12 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import with_statement
-
 import functools
 from twisted.internet import defer
 
 from txtorcon.interface import ITorControlProtocol
 
 
-class MagicContainer(object):
+class MagicContainer:
     """
     This merely contains 1 or more methods or further MagicContainer
     instances; see _do_setup in TorInfo.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/torstate.py 
new/txtorcon-24.8.0/txtorcon/torstate.py
--- old/txtorcon-23.11.0/txtorcon/torstate.py   2023-08-11 09:41:38.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/torstate.py    2024-03-13 23:34:03.000000000 
+0100
@@ -1,9 +1,5 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import with_statement
-
 import os
 import stat
 import warnings
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/util.py 
new/txtorcon-24.8.0/txtorcon/util.py
--- old/txtorcon-23.11.0/txtorcon/util.py       2023-10-04 21:25:18.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/util.py        2024-03-13 23:34:03.000000000 
+0100
@@ -1,9 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import with_statement
-
+import asyncio
 import glob
 import os
 import hmac
@@ -12,7 +9,6 @@
 import subprocess
 import ipaddress
 import re
-import six
 
 from twisted.internet import defer
 from twisted.internet.interfaces import IProtocolFactory
@@ -22,9 +18,6 @@
 from zope.interface import implementer
 from zope.interface import Interface
 
-if six.PY3:
-    import asyncio
-
 try:
     import GeoIP as _GeoIP
     GeoIP = _GeoIP
@@ -148,8 +141,6 @@
     TODO consider explicitly checking for .exit or .onion at the end?
     """
 
-    if six.PY2 and isinstance(addr, str):
-        addr = unicode(addr)  # noqa
     try:
         return ipaddress.ip_address(addr)
     except ValueError:
@@ -337,10 +328,7 @@
     # handeled as escape codes by string.decode('string-escape').
     # This is needed so e.g. '\x00' is not unescaped as '\0'
     string = re.sub(r'((?:^|[^\\])(?:\\\\)*)\\([^ntr0-7\\])', r'\1\2', string)
-    if six.PY3:
-        # XXX hmmm?
-        return bytes(string, 'ascii').decode('unicode-escape')
-    return string.decode('string-escape')
+    return bytes(string, 'ascii').decode('unicode-escape')
 
 
 def default_control_port():
@@ -385,7 +373,7 @@
     (This is to insert in all callback chains from user code, in case
     that user code is Python3 and used 'async def')
     """
-    if six.PY3 and asyncio.iscoroutine(obj):
+    if asyncio.iscoroutine(obj):
         return defer.ensureDeferred(obj)
     return obj
 
@@ -532,7 +520,7 @@
     # for numeric hostnames, skip RFC1918 addresses, since no Tor exit
     # node will be able to reach those. Likewise ignore IPv6 addresses.
     try:
-        a = ipaddress.ip_address(six.text_type(host))
+        a = ipaddress.ip_address(str(host))
     except ValueError:
         return False        # non-numeric, let Tor try it
     if a.is_loopback or a.is_multicast or a.is_private or a.is_reserved \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon/web.py 
new/txtorcon-24.8.0/txtorcon/web.py
--- old/txtorcon-23.11.0/txtorcon/web.py        2023-05-19 03:11:14.000000000 
+0200
+++ new/txtorcon-24.8.0/txtorcon/web.py 2024-03-13 23:34:03.000000000 +0100
@@ -1,9 +1,5 @@
 # -*- coding: utf-8 -*-
 
-from __future__ import absolute_import
-from __future__ import print_function
-from __future__ import with_statement
-
 from twisted.web.iweb import IAgentEndpointFactory
 from twisted.web.client import Agent, BrowserLikePolicyForHTTPS
 from twisted.internet.defer import inlineCallbacks, returnValue, Deferred
@@ -17,7 +13,7 @@
 
 
 @implementer(IAgentEndpointFactory)
-class _AgentEndpointFactoryUsingTor(object):
+class _AgentEndpointFactoryUsingTor:
     def __init__(self, reactor, tor_socks_endpoint, tls_context_factory):
         self._reactor = reactor
         self._proxy_ep = SingleObserver()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/txtorcon-23.11.0/txtorcon.egg-info/PKG-INFO 
new/txtorcon-24.8.0/txtorcon.egg-info/PKG-INFO
--- old/txtorcon-23.11.0/txtorcon.egg-info/PKG-INFO     2023-11-20 
08:48:41.000000000 +0100
+++ new/txtorcon-24.8.0/txtorcon.egg-info/PKG-INFO      2024-08-20 
21:53:55.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: txtorcon
-Version: 23.11.0
+Version: 24.8.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

Reply via email to