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 2026-06-15 19:44:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-txtorcon (Old)
and /work/SRC/openSUSE:Factory/.python-txtorcon.new.1981 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-txtorcon"
Mon Jun 15 19:44:11 2026 rev:17 rq:1359303 version:26.6.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-txtorcon/python-txtorcon.changes
2024-09-23 15:24:42.651630171 +0200
+++
/work/SRC/openSUSE:Factory/.python-txtorcon.new.1981/python-txtorcon.changes
2026-06-15 19:47:29.261583060 +0200
@@ -1,0 +2,11 @@
+Sun Jun 14 19:40:29 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 26.6.0:
+ * eliminate GeoIP as a dependency (#409)
+ This will still load Tor's geoip-db if GeoIP is installed, and
+ the database is found database. Essentially this is just
+ optimization: txtorcon will ask Tor for
+ the country-code of anything interesting via the existing
+ `get_location()` API. +
+
+-------------------------------------------------------------------
Old:
----
txtorcon-24.8.0.tar.gz
New:
----
txtorcon-26.6.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-txtorcon.spec ++++++
--- /var/tmp/diff_new_pack.JXOh98/_old 2026-06-15 19:47:30.789647271 +0200
+++ /var/tmp/diff_new_pack.JXOh98/_new 2026-06-15 19:47:30.793647439 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-txtorcon
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: python-txtorcon
-Version: 24.8.0
+Version: 26.6.0
Release: 0
Summary: Twisted-based asynchronous Tor control protocol implementation
License: MIT
@@ -67,7 +67,8 @@
}
%files %{python_files}
-%license LICENSE docs/*.rst
+%license LICENSE
+%doc README.rst docs/*.rst
%{python_sitelib}/txtorcon
%{python_sitelib}/txtorcon-%{version}.dist-info
%{python_sitelib}/twisted/plugins/*
++++++ txtorcon-24.8.0.tar.gz -> txtorcon-26.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/Makefile new/txtorcon-26.6.0/Makefile
--- old/txtorcon-24.8.0/Makefile 2024-08-20 21:05:01.000000000 +0200
+++ new/txtorcon-26.6.0/Makefile 2026-06-01 05:20:48.000000000 +0200
@@ -1,6 +1,6 @@
.PHONY: test html counts coverage sdist clean install doc integration diagrams
default: test
-VERSION = 24.8.0
+VERSION = 26.6.0
test:
PYTHONPATH=. trial --reporter=text test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/PKG-INFO new/txtorcon-26.6.0/PKG-INFO
--- old/txtorcon-24.8.0/PKG-INFO 2024-08-20 21:53:55.427759000 +0200
+++ new/txtorcon-26.6.0/PKG-INFO 2026-06-01 05:25:29.767889000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: txtorcon
-Version: 24.8.0
+Version: 26.6.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-24.8.0/docs/releases.rst
new/txtorcon-26.6.0/docs/releases.rst
--- old/txtorcon-24.8.0/docs/releases.rst 2024-08-20 21:35:46.000000000
+0200
+++ new/txtorcon-26.6.0/docs/releases.rst 2026-06-01 05:24:46.000000000
+0200
@@ -15,7 +15,23 @@
See also :ref:`api_stability`.
-`git main <https://github.com/meejah/txtorcon>`_ *will likely become v24.9.0*
+`git main <https://github.com/meejah/txtorcon>`_ *will likely become v26.7.x*
+
+
+
+v26.6.0
+-------
+
+June 1, 2026
+
+ * `txtorcon-26.6.0.tar.gz
<http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-26.6.0.tar.gz>`_
(`PyPI <https://pypi.python.org/pypi/txtorcon/26.6.0>`_ (:download:`local-sig
</../signatues/txtorcon-26.6.0.tar.gz.asc>` or `github-sig
<https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-26.6.0.tar.gz.asc?raw=true>`_)
(`source <https://github.com/meejah/txtorcon/archive/v26.6.0.tar.gz>`_)
+* eliminate GeoIP as a dependency (#409)
+ This will still load Tor's geoip-db if GeoIP is installed, and the database
is found.
+ Only country-codes are supported by this database.
+ Essentially this is just optimization: txtorcon will ask Tor for the
country-code of anything interesting via the existing `get_location()` API.
+
+ Packagers / distributions: you may simply ignore GeoIP entirely.
+ To make this available to users: '/usr/share/tor/geoip' contains a Tor
geoip-database and the `pygeoip` Python package is installed.
v24.8.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/txtorcon-24.8.0/examples/web_onion_service_endpoints.py
new/txtorcon-26.6.0/examples/web_onion_service_endpoints.py
--- old/txtorcon-24.8.0/examples/web_onion_service_endpoints.py 2024-03-13
23:34:03.000000000 +0100
+++ new/txtorcon-26.6.0/examples/web_onion_service_endpoints.py 2026-05-30
03:48:36.000000000 +0200
@@ -56,7 +56,7 @@
port = yield ep.listen(server.Site(Simple()))
except error.ConnectionRefusedError:
print("Couldn't connect; is Tor listening on
localhost:{}?".format(default_control_port()))
- defer.returnValue(1)
+ return 1
print("Site listening: {}".format(port.getHost()))
print("Private key:\n{}".format(port.getHost().onion_key))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/requirements.txt
new/txtorcon-26.6.0/requirements.txt
--- old/txtorcon-24.8.0/requirements.txt 2023-08-29 17:13:24.000000000
+0200
+++ new/txtorcon-26.6.0/requirements.txt 2026-05-30 04:12:48.000000000
+0200
@@ -1,6 +1,3 @@
-## see also dev-requirements.txt to build
-## hmm, travis-ci doesn't like this since we need a GeoIP-dev package
-##GeoIP>=1.2.9
Twisted[tls]>=15.5.0
zope.interface>=3.6.1
automat
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/test/test_endpoints.py
new/txtorcon-26.6.0/test/test_endpoints.py
--- old/txtorcon-24.8.0/test/test_endpoints.py 2024-03-13 23:34:03.000000000
+0100
+++ new/txtorcon-26.6.0/test/test_endpoints.py 2026-05-30 03:48:36.000000000
+0200
@@ -627,8 +627,7 @@
yield arg.stopListening()
ep.listen(NoOpProtocolFactory())
- defer.returnValue(arg)
- return
+ return arg
d0.addBoth(more_listen)
self.protocol.commands[0][1].callback(
'ServiceID=blarglyfoo\nPrivateKey=bigbadkeyblob'
@@ -662,8 +661,7 @@
yield arg.stopListening()
ep.listen(NoOpProtocolFactory())
- defer.returnValue(arg)
- return
+ return arg
d0.addBoth(more_listen)
if True:
self.protocol.events['HS_DESC'](
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/test/test_torconfig.py
new/txtorcon-26.6.0/test/test_torconfig.py
--- old/txtorcon-24.8.0/test/test_torconfig.py 2024-08-20 21:04:14.000000000
+0200
+++ new/txtorcon-26.6.0/test/test_torconfig.py 2026-05-30 03:48:36.000000000
+0200
@@ -1332,11 +1332,11 @@
def test_hidden_service_parse_error(self):
conf = TorConfig(FakeControlProtocol(['config/names=']))
- try:
+ with warnings.catch_warnings(record=True) as w:
+ warnings.simplefilter("always")
conf._setup_hidden_services('''FakeHiddenServiceKey=foo''')
- self.fail()
- except RuntimeError as e:
- self.assertTrue('parse' in str(e))
+ self.assertEqual(len(w), 1)
+ self.assertTrue('unknown' in str(w[0].message).lower())
def test_hidden_service_directory_absolute_path(self):
conf = TorConfig(FakeControlProtocol(['config/names=']))
@@ -1457,11 +1457,8 @@
)
self.assertIs(tpp, fake_tor.process)
calls = warn.mock_calls
- # 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)
+ self.assertEqual(1, len(calls))
+ self.assertEqual(calls[0][1][1], DeprecationWarning)
class ErrorTests(unittest.TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/test/test_util.py
new/txtorcon-26.6.0/test/test_util.py
--- old/txtorcon-24.8.0/test/test_util.py 2023-11-20 07:11:22.000000000
+0100
+++ new/txtorcon-26.6.0/test/test_util.py 2026-05-30 04:12:48.000000000
+0200
@@ -99,6 +99,9 @@
r['region_name'] = 'Region'
return r
+ def country_code_by_addr(self, ip):
+ return 'XX'
+
class TestNetLocation(unittest.TestCase):
@@ -106,25 +109,25 @@
from txtorcon import util
orig = util.city
try:
- util.city = FakeGeoIP(version=2)
+ util.country = FakeGeoIP(version=2)
nl = util.NetLocation('127.0.0.1')
- self.assertTrue(nl.city)
- self.assertEqual(nl.city[0], 'City')
- self.assertEqual(nl.city[1], 'Region')
+ self.assertEqual(nl.countrycode, "XX")
+ self.assertIs(nl.city, None)
+ self.assertIs(nl.asn, None)
finally:
- util.ity = orig
+ util.country = orig
def test_valid_lookup_v3(self):
from txtorcon import util
- orig = util.city
+ orig = util.country
try:
- util.city = FakeGeoIP(version=3)
+ util.country = FakeGeoIP(version=3)
nl = util.NetLocation('127.0.0.1')
- self.assertTrue(nl.city)
- self.assertEqual(nl.city[0], 'City')
- self.assertEqual(nl.city[1], 'Region')
+ self.assertEqual(nl.countrycode, "XX")
+ self.assertIs(nl.city, None)
+ self.assertIs(nl.asn, None)
finally:
- util.ity = orig
+ util.country = orig
def test_city_fails(self):
"make sure we don't fail if the city lookup excepts"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/test/test_util_imports.py
new/txtorcon-26.6.0/test/test_util_imports.py
--- old/txtorcon-24.8.0/test/test_util_imports.py 2024-03-13
23:34:03.000000000 +0100
+++ new/txtorcon-26.6.0/test/test_util_imports.py 2026-05-30
03:48:36.000000000 +0200
@@ -19,7 +19,6 @@
Make sure we don't explode if there's no GeoIP module
"""
- global __import__
orig = __import__
try:
# attempt to ensure we've unimportted txtorcon.util
@@ -32,7 +31,6 @@
# replace global import with our test import, which will
# throw on GeoIP import no matter what
- global __builtins__
__builtins__['__import__'] = functools.partial(fake_import, orig)
# now ensure we set up all the databases as "None" when we
@@ -44,4 +42,4 @@
self.assertEqual(loc.countrycode, '')
finally:
- __import__ = orig
+ __builtins__['__import__'] = orig
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/_metadata.py
new/txtorcon-26.6.0/txtorcon/_metadata.py
--- old/txtorcon-24.8.0/txtorcon/_metadata.py 2024-08-20 21:05:12.000000000
+0200
+++ new/txtorcon-26.6.0/txtorcon/_metadata.py 2026-06-01 05:20:40.000000000
+0200
@@ -1,4 +1,4 @@
-__version__ = '24.8.0'
+__version__ = '26.6.0'
__author__ = 'meejah'
__contact__ = '[email protected]'
__url__ = 'https://github.com/meejah/txtorcon'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/circuit.py
new/txtorcon-26.6.0/txtorcon/circuit.py
--- old/txtorcon-24.8.0/txtorcon/circuit.py 2024-03-13 23:34:03.000000000
+0100
+++ new/txtorcon-26.6.0/txtorcon/circuit.py 2026-05-30 03:48:36.000000000
+0200
@@ -104,7 +104,7 @@
)))
return
d.callback(None)
- defer.returnValue(circuit)
+ return circuit
except Exception:
d.errback(Failure())
@@ -114,7 +114,7 @@
if _get_circuit_attacher.attacher is None:
_get_circuit_attacher.attacher = _CircuitAttacher()
yield state.set_attacher(_get_circuit_attacher.attacher, reactor)
- defer.returnValue(_get_circuit_attacher.attacher)
+ return _get_circuit_attacher.attacher
_get_circuit_attacher.attacher = None
@@ -150,7 +150,7 @@
attached_d = attacher.add_endpoint(self._target_endpoint,
self._circuit)
proto = yield connect_d
yield attached_d
- defer.returnValue(proto)
+ return proto
class Circuit(object):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/controller.py
new/txtorcon-26.6.0/txtorcon/controller.py
--- old/txtorcon-24.8.0/txtorcon/controller.py 2024-03-13 23:34:03.000000000
+0100
+++ new/txtorcon-26.6.0/txtorcon/controller.py 2026-05-30 03:48:36.000000000
+0200
@@ -14,7 +14,7 @@
from twisted.python import log
from twisted.python.failure import Failure
-from twisted.internet.defer import inlineCallbacks, returnValue, Deferred,
succeed, fail
+from twisted.internet.defer import inlineCallbacks, Deferred, succeed, fail
from twisted.internet import protocol, error
from twisted.internet.endpoints import TCP4ClientEndpoint
from twisted.internet.endpoints import UNIXClientEndpoint
@@ -362,14 +362,12 @@
# note that attach_protocol waits for the protocol to be
# boostrapped if necessary
- returnValue(
- Tor(
- reactor,
- config.protocol,
- _tor_config=config,
- _process_proto=process_protocol,
- _non_anonymous=True if non_anonymous_mode else False,
- )
+ return Tor(
+ reactor,
+ config.protocol,
+ _tor_config=config,
+ _process_proto=process_protocol,
+ _non_anonymous=True if non_anonymous_mode else False,
)
@@ -420,8 +418,7 @@
)
)
config = yield TorConfig.from_protocol(proto)
- tor = Tor(reactor, proto, _tor_config=config)
- returnValue(tor)
+ return Tor(reactor, proto, _tor_config=config)
if control_endpoint is None:
to_try = [
@@ -450,7 +447,7 @@
try:
tor = yield try_endpoint(ep)
txtorlog.msg("Connected via '{}'".format(ep))
- returnValue(tor)
+ return tor
except Exception as e:
errors.append(e)
if len(errors) == 1:
@@ -559,7 +556,7 @@
"""
if self._config is None:
self._config = yield TorConfig.from_protocol(self._protocol)
- returnValue(self._config)
+ return self._config
def web_agent(self, pool=None, socks_endpoint=None,
tls_context_factory=None):
"""
@@ -609,7 +606,7 @@
"""
socks_ep = yield self._default_socks_endpoint()
ans = yield socks.resolve(socks_ep, hostname)
- returnValue(ans)
+ return ans
@inlineCallbacks
def dns_resolve_ptr(self, ip):
@@ -622,7 +619,7 @@
"""
socks_ep = yield self._default_socks_endpoint()
ans = yield socks.resolve_ptr(socks_ep, ip)
- returnValue(ans)
+ return ans
@inlineCallbacks
def add_onion_authentication(self, onion_host, token):
@@ -678,8 +675,8 @@
if to_remove is not None:
config.HidServAuth.remove(to_remove)
yield config.save()
- returnValue(True)
- returnValue(False)
+ return True
+ return False
def onion_authentication(self, onion_host, token):
"""
@@ -913,7 +910,7 @@
"""
state = TorState(self.protocol)
yield state.post_bootstrap
- returnValue(state)
+ return state
def __str__(self):
return "<Tor version='{tor_version}'>".format(
@@ -933,12 +930,10 @@
"status/enough-dir-info",
"status/circuit-established",
)
- returnValue(
- not (
- int(info["dormant"]) or
- not int(info["status/enough-dir-info"]) or
- not int(info["status/circuit-established"])
- )
+ return not (
+ int(info["dormant"]) or
+ not int(info["status/enough-dir-info"]) or
+ not int(info["status/circuit-established"])
)
@inlineCallbacks
@@ -967,7 +962,7 @@
)
if self._socks_endpoint is None:
self._socks_endpoint = yield _create_socks_endpoint(self._reactor,
self._protocol)
- returnValue(self._socks_endpoint)
+ return self._socks_endpoint
# For all these create_*() methods, instead of magically computing
# the class-name from arguments (e.g. we could decide "it's a
@@ -1050,7 +1045,7 @@
single_hop=single_hop,
detach=detach,
)
- returnValue(service)
+ return service
@inlineCallbacks
def create_filesystem_onion_service(self, ports, onion_service_dir,
@@ -1111,7 +1106,7 @@
progress=progress,
await_all_uploads=await_all_uploads,
)
- returnValue(service)
+ return service
class TorNotFound(RuntimeError):
@@ -1412,4 +1407,4 @@
yield self.tor_protocol.queue_command('RESETCONF
__OwningControllerProcess')
if self.config is not None and self.config.protocol is None:
yield self.config.attach_protocol(proto)
- returnValue(self) # XXX or "proto"?
+ return self # XXX or "proto"?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/endpoints.py
new/txtorcon-26.6.0/txtorcon/endpoints.py
--- old/txtorcon-24.8.0/txtorcon/endpoints.py 2024-03-13 23:34:03.000000000
+0100
+++ new/txtorcon-26.6.0/txtorcon/endpoints.py 2026-05-30 03:48:36.000000000
+0200
@@ -72,7 +72,6 @@
is called. All calls to this method return the same instance.
"""
global _global_tor
- global _global_tor_lock
yield _global_tor_lock.acquire()
if _tor_launcher is None:
@@ -96,7 +95,7 @@
control_port,
)
- defer.returnValue(_global_tor)
+ return _global_tor
finally:
_global_tor_lock.release()
@@ -131,7 +130,7 @@
_tor_launcher=_tor_launcher,
)
cfg = yield tor.get_config()
- defer.returnValue(cfg)
+ return cfg
class IProgressProvider(Interface):
@@ -669,13 +668,11 @@
# (so can provide .local_port -> shoujld be local_endpoint I
# guess actually...)
# 2. anyway, can provide access to the "real" hs anyway if we want
- defer.returnValue(
- TorOnionListeningPort(
- self.tcp_listening_port,
- self.public_port,
- self.hiddenservice,
- self._config,
- )
+ return TorOnionListeningPort(
+ self.tcp_listening_port,
+ self.public_port,
+ self.hiddenservice,
+ self._config,
)
@@ -1033,7 +1030,7 @@
socks_endpoint = _endpoint_from_socksport_line(reactor, socks_config)
assert socks_endpoint is not None
- defer.returnValue(socks_endpoint)
+ return socks_endpoint
@implementer(IStreamClientEndpoint)
@@ -1160,7 +1157,7 @@
# forward the address to any listeners we have
socks_ep._get_address().addCallback(self._when_address.fire)
proto = yield socks_ep.connect(protocolfactory)
- defer.returnValue(proto)
+ return proto
else:
for socks_port in self.socks_ports_to_try:
tor_ep = TCP4ClientEndpoint(
@@ -1173,7 +1170,7 @@
socks_ep._get_address().addCallback(self._when_address.fire)
try:
proto = yield socks_ep.connect(protocolfactory)
- defer.returnValue(proto)
+ return proto
except error.ConnectError as e0:
last_error = e0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/onion.py
new/txtorcon-26.6.0/txtorcon/onion.py
--- old/txtorcon-24.8.0/txtorcon/onion.py 2024-03-13 23:34:03.000000000
+0100
+++ new/txtorcon-26.6.0/txtorcon/onion.py 2026-05-30 03:48:36.000000000
+0200
@@ -251,7 +251,7 @@
yield config.save()
yield uploaded[0]
- defer.returnValue(fhs)
+ return fhs
def __init__(self, config, thedir, ports, version=3, group_readable=0):
"""
@@ -744,7 +744,7 @@
)
yield _add_ephemeral_service(config, onion, progress, version, auth,
await_all_uploads)
- defer.returnValue(onion)
+ return onion
def __init__(self, config, ports, hostname=None, private_key=None,
auth=[], version=3,
detach=False, single_hop=None):
@@ -898,7 +898,7 @@
yield _add_ephemeral_service(config, onion, progress, version, None,
await_all_uploads)
- defer.returnValue(onion)
+ return onion
def __init__(self, config, ports, hostname=None, private_key=None,
version=3,
detach=False, await_all_uploads=None, single_hop=None,
**kwarg):
@@ -1164,7 +1164,7 @@
yield config.save()
yield uploaded[0]
- defer.returnValue(fhs)
+ return fhs
def __init__(self, config, thedir, ports, auth, version=3,
group_readable=0):
# XXX do we need version here? probably...
@@ -1389,7 +1389,7 @@
processed_ports.append(
"{} 127.0.0.1:{}".format(remote, local)
)
- defer.returnValue(processed_ports)
+ return processed_ports
def _validate_ports_low_level(ports):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/router.py
new/txtorcon-26.6.0/txtorcon/router.py
--- old/txtorcon-24.8.0/txtorcon/router.py 2024-03-13 23:34:03.000000000
+0100
+++ new/txtorcon-26.6.0/txtorcon/router.py 2026-05-30 03:48:36.000000000
+0200
@@ -7,7 +7,7 @@
from base64 import b64encode, b64decode
from binascii import b2a_hex, a2b_hex
-from twisted.internet.defer import inlineCallbacks, returnValue, succeed
+from twisted.internet.defer import inlineCallbacks, succeed
from twisted.python.deprecate import deprecated
from twisted.web.client import readBody
@@ -215,7 +215,7 @@
raise RuntimeError(
'Expected "{}" but got data for "{}"'.format(self.id_hex,
relay_data['fingerprint'])
)
- returnValue(relay_data)
+ return relay_data
# note that exit-policy is no longer included in the
# microdescriptors by default, so this stuff is mostly here as a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/socks.py
new/txtorcon-26.6.0/txtorcon/socks.py
--- old/txtorcon-24.8.0/txtorcon/socks.py 2024-03-13 23:34:03.000000000
+0100
+++ new/txtorcon-26.6.0/txtorcon/socks.py 2026-05-30 03:48:36.000000000
+0200
@@ -7,7 +7,7 @@
import struct
from socket import inet_pton, inet_ntoa, inet_aton, AF_INET6, AF_INET
-from twisted.internet.defer import inlineCallbacks, returnValue, Deferred
+from twisted.internet.defer import inlineCallbacks, Deferred
from twisted.internet.protocol import Protocol, Factory
from twisted.internet.address import IPv4Address, IPv6Address, HostnameAddress
from twisted.python.failure import Failure
@@ -650,7 +650,7 @@
)
proto = yield tor_endpoint.connect(factory)
result = yield proto.when_done()
- returnValue(result)
+ return result
@inlineCallbacks
@@ -669,7 +669,7 @@
)
proto = yield tor_endpoint.connect(factory)
result = yield proto.when_done()
- returnValue(result)
+ return result
@implementer(IStreamClientEndpoint)
@@ -742,6 +742,6 @@
proto = yield proxy_ep.connect(socks_factory)
wrapped_proto = yield proto.when_done()
if self._tls:
- returnValue(wrapped_proto.wrappedProtocol)
+ return wrapped_proto.wrappedProtocol
else:
- returnValue(wrapped_proto)
+ return wrapped_proto
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/testutil.py
new/txtorcon-26.6.0/txtorcon/testutil.py
--- old/txtorcon-24.8.0/txtorcon/testutil.py 2018-09-01 17:43:17.000000000
+0200
+++ new/txtorcon-26.6.0/txtorcon/testutil.py 2026-05-30 03:48:36.000000000
+0200
@@ -83,7 +83,7 @@
text = yield self.get_info_raw(info)
for line in text.split('\r\n'):
cb(line)
- defer.returnValue('') # FIXME uh....what's up at torstate.py:350?
+ return '' # FIXME uh....what's up at torstate.py:350?
def get_conf(self, info):
if len(self.answers) == 0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/torconfig.py
new/txtorcon-26.6.0/txtorcon/torconfig.py
--- old/txtorcon-24.8.0/txtorcon/torconfig.py 2024-03-13 23:34:03.000000000
+0100
+++ new/txtorcon-26.6.0/txtorcon/torconfig.py 2026-05-30 03:48:36.000000000
+0200
@@ -59,7 +59,7 @@
kill_on_stderr=kill_on_stderr,
_tor_config=config,
)
- defer.returnValue(tor.process)
+ return tor.process
class TorConfigType:
@@ -573,7 +573,7 @@
"""
cfg = TorConfig(control=proto)
yield cfg.post_bootstrap
- defer.returnValue(cfg)
+ return cfg
def __init__(self, control=None):
self.config = {}
@@ -714,9 +714,7 @@
)
)
- defer.returnValue(
- _endpoint_from_socksport_line(reactor, socks_config)
- )
+ return _endpoint_from_socksport_line(reactor, socks_config)
# FIXME should re-name this to "tor_protocol" to be consistent
# with other things? Or rename the other things?
@@ -1005,7 +1003,7 @@
except TorProtocolError:
# must be a version of Tor without config/defaults
defaults = dict()
- defer.returnValue(defaults)
+ return defaults
@defer.inlineCallbacks
def _do_setup(self, data):
@@ -1136,7 +1134,7 @@
)
)
self.config['DetachedOnionServices'] = onions
- defer.returnValue(self)
+ return self
def _setup_hidden_services(self, servicelines):
@@ -1213,7 +1211,10 @@
group_read = int(v)
else:
- raise RuntimeError("Can't parse HiddenServiceOptions: " + k)
+ warnings.warn(
+ "Ignoring unknown HiddenService option: {}={}".format(k,
v),
+ RuntimeWarning,
+ )
maybe_add_hidden_service()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/torcontrolprotocol.py
new/txtorcon-26.6.0/txtorcon/torcontrolprotocol.py
--- old/txtorcon-24.8.0/txtorcon/torcontrolprotocol.py 2024-03-13
23:34:03.000000000 +0100
+++ new/txtorcon-26.6.0/txtorcon/torcontrolprotocol.py 2026-05-30
03:48:36.000000000 +0200
@@ -945,7 +945,7 @@
yield self.queue_command('USEFEATURE EXTENDED_EVENTS')
self.post_bootstrap.callback(self)
- defer.returnValue(self)
+ return self
# State Machine transitions and matchers. See the __init__ method
# for a way to output a GraphViz dot diagram of the machine.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/util.py
new/txtorcon-26.6.0/txtorcon/util.py
--- old/txtorcon-24.8.0/txtorcon/util.py 2024-03-13 23:34:03.000000000
+0100
+++ new/txtorcon-26.6.0/txtorcon/util.py 2026-05-30 04:12:48.000000000
+0200
@@ -82,9 +82,9 @@
return None
-city = maybe_create_db("/usr/share/GeoIP/GeoLiteCity.dat")
-asn = maybe_create_db("/usr/share/GeoIP/GeoIPASNum.dat")
-country = maybe_create_db("/usr/share/GeoIP/GeoIP.dat")
+city = None
+asn = None
+country = maybe_create_db("/usr/share/tor/geoip")
def is_executable(path):
@@ -248,31 +248,12 @@
if self.ip is None or self.ip == 'unknown':
return
- if city:
- try:
- r = city.record_by_addr(self.ip)
- except Exception:
- r = None
- if r is not None:
- self.countrycode = r['country_code']
- self.latlng = (r['latitude'], r['longitude'])
- try:
- self.city = (r['city'], r['region_code'])
- except KeyError:
- self.city = (r['city'], r['region_name'])
-
- elif country:
+ if country:
self.countrycode = country.country_code_by_addr(ipaddr)
else:
self.countrycode = ''
- if asn:
- try:
- self.asn = asn.org_by_addr(self.ip)
- except Exception:
- self.asn = None
-
@implementer(IProtocolFactory)
class NoOpProtocolFactory:
@@ -299,7 +280,7 @@
port = yield endpoint.listen(NoOpProtocolFactory())
address = port.getHost()
yield port.stopListening()
- defer.returnValue(address.port)
+ return address.port
def unescape_quoted_string(string):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon/web.py
new/txtorcon-26.6.0/txtorcon/web.py
--- old/txtorcon-24.8.0/txtorcon/web.py 2024-03-13 23:34:03.000000000 +0100
+++ new/txtorcon-26.6.0/txtorcon/web.py 2026-05-30 03:48:36.000000000 +0200
@@ -2,7 +2,7 @@
from twisted.web.iweb import IAgentEndpointFactory
from twisted.web.client import Agent, BrowserLikePolicyForHTTPS
-from twisted.internet.defer import inlineCallbacks, returnValue, Deferred
+from twisted.internet.defer import inlineCallbacks, Deferred
from twisted.internet.endpoints import TCP4ClientEndpoint, UNIXClientEndpoint
from zope.interface import implementer
@@ -162,12 +162,10 @@
port = int(socks_config)
socks_ep = TCP4ClientEndpoint(reactor, host, port)
- returnValue(
- Agent.usingEndpointFactory(
- reactor,
- _AgentEndpointFactoryUsingTor(
- reactor, socks_ep, tls_context_factory=tls_context_factory
- ),
- pool=pool,
- )
+ return Agent.usingEndpointFactory(
+ reactor,
+ _AgentEndpointFactoryUsingTor(
+ reactor, socks_ep, tls_context_factory=tls_context_factory
+ ),
+ pool=pool,
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/txtorcon-24.8.0/txtorcon.egg-info/PKG-INFO
new/txtorcon-26.6.0/txtorcon.egg-info/PKG-INFO
--- old/txtorcon-24.8.0/txtorcon.egg-info/PKG-INFO 2024-08-20
21:53:55.000000000 +0200
+++ new/txtorcon-26.6.0/txtorcon.egg-info/PKG-INFO 2026-06-01
05:25:29.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: txtorcon
-Version: 24.8.0
+Version: 26.6.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