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

Reply via email to