Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-Pyro5 for openSUSE:Factory 
checked in at 2024-01-10 21:51:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Pyro5 (Old)
 and      /work/SRC/openSUSE:Factory/.python-Pyro5.new.21961 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-Pyro5"

Wed Jan 10 21:51:59 2024 rev:3 rq:1137817 version:5.15

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Pyro5/python-Pyro5.changes        
2023-06-12 15:27:18.599356760 +0200
+++ /work/SRC/openSUSE:Factory/.python-Pyro5.new.21961/python-Pyro5.changes     
2024-01-10 21:52:21.252310016 +0100
@@ -1,0 +2,13 @@
+Tue Jan  9 21:39:34 UTC 2024 - Dirk Müller <[email protected]>
+
+- update to 5.15:
+  * removed Python 3.7 from the support list (it is EOL). Now
+    supported on Python 3.8 or newer.
+  * fixed cgi.parse deprecation problem in http gateway
+  * removed jquery dependency in http gateway
+  * some small tweaks to setup, tests, examples, and docs.
+  * updated the self-signed example certificates and serial
+    numbers in the ssl example.
+- drop add-network-marker.patch (upstream)
+
+-------------------------------------------------------------------

Old:
----
  Pyro5-5.14.tar.gz
  add-network-marker.patch

New:
----
  Pyro5-5.15.tar.gz

BETA DEBUG BEGIN:
  Old:    numbers in the ssl example.
- drop add-network-marker.patch (upstream)
BETA DEBUG END:

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

Other differences:
------------------
++++++ python-Pyro5.spec ++++++
--- /var/tmp/diff_new_pack.bRFPjb/_old  2024-01-10 21:52:22.524356210 +0100
+++ /var/tmp/diff_new_pack.bRFPjb/_new  2024-01-10 21:52:22.532356500 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-Pyro5
 #
-# 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
@@ -18,14 +18,12 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-Pyro5
-Version:        5.14
+Version:        5.15
 Release:        0
 Summary:        Distributed object middleware for Python (RPC)
 License:        MIT
 URL:            https://github.com/irmen/Pyro5
 Source:         
https://files.pythonhosted.org/packages/source/P/Pyro5/Pyro5-%{version}.tar.gz
-# PATCH-FIX-UPSTREAM gh#irmen/Pyro5#76
-Patch0:         add-network-marker.patch
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros

++++++ Pyro5-5.14.tar.gz -> Pyro5-5.15.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/.github/workflows/main-ci.yml 
new/Pyro5-5.15/.github/workflows/main-ci.yml
--- old/Pyro5-5.14/.github/workflows/main-ci.yml        2022-10-12 
22:35:31.000000000 +0200
+++ new/Pyro5-5.15/.github/workflows/main-ci.yml        2023-10-18 
22:37:43.000000000 +0200
@@ -18,7 +18,7 @@
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        python-version: ['3.7', '3.8', '3.9', '3.10', '3.11.0-rc.2']
+        python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
         
     steps:
       - name: Checkout source
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/.lgtm.yml new/Pyro5-5.15/.lgtm.yml
--- old/Pyro5-5.14/.lgtm.yml    2018-09-05 21:46:29.000000000 +0200
+++ new/Pyro5-5.15/.lgtm.yml    1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-# Format of this file: https://lgtm.com/help/lgtm/lgtm.yml-configuration-file
-path_classifiers:
-  documentation:
-    - examples
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/Makefile new/Pyro5-5.15/Makefile
--- old/Pyro5-5.14/Makefile     2020-04-16 15:51:22.000000000 +0200
+++ new/Pyro5-5.15/Makefile     2023-10-18 22:29:22.000000000 +0200
@@ -5,7 +5,7 @@
        @echo "targets: dist, docs, upload, install, clean, test"
 
 docs:
-       $(PYTHON) setup.py build_sphinx
+       sphinx-build docs/source build/docs
 
 dist:
        $(PYTHON) setup.py sdist bdist_wheel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/PKG-INFO new/Pyro5-5.15/PKG-INFO
--- old/Pyro5-5.14/PKG-INFO     2022-10-12 22:42:18.973033200 +0200
+++ new/Pyro5-5.15/PKG-INFO     2023-10-18 22:42:33.455201100 +0200
@@ -1,12 +1,13 @@
 Metadata-Version: 2.1
 Name: Pyro5
-Version: 5.14
+Version: 5.15
 Summary: Remote object communication library, fifth major version
 Home-page: https://github.com/irmen/Pyro5
 Author: Irmen de Jong
 Author-email: [email protected]
 License: MIT
 Keywords: distributed objects,RPC,remote method call,IPC
+Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
@@ -14,14 +15,11 @@
 Classifier: Natural Language :: Dutch
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3.7
-Classifier: Programming Language :: Python :: 3.8
-Classifier: Programming Language :: Python :: 3.9
-Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3
 Classifier: Topic :: Software Development :: Object Brokering
 Classifier: Topic :: System :: Distributed Computing
 Classifier: Topic :: System :: Networking
-Requires-Python: >=3.2
+Requires-Python: >=3.7
 Description-Content-Type: text/x-rst
 License-File: LICENSE
 
@@ -36,12 +34,6 @@
 .. image:: https://anaconda.org/conda-forge/pyro5/badges/version.svg
     :target: https://anaconda.org/conda-forge/pyro5
 
-.. image:: 
https://img.shields.io/lgtm/grade/python/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
-    :target: https://lgtm.com/projects/g/irmen/Pyro5/context:python
-
-.. image:: 
https://img.shields.io/lgtm/alerts/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
-    :target: https://lgtm.com/projects/g/irmen/Pyro5/alerts
-
 
 Info
 ----
@@ -68,7 +60,7 @@
 Features
 --------
 
-- written in 100% Python so extremely portable, supported on Python 3.7 and 
newer, and Pypy3
+- written in 100% Python so extremely portable, supported on Python 3.8 and 
newer, and Pypy3
 - works between different system architectures and operating systems.
 - able to communicate between different Python versions transparently.
 - defaults to a safe serializer (`serpent 
<https://pypi.python.org/pypi/serpent>`_) that supports many Python data types.
@@ -95,3 +87,5 @@
 - large amount of unit tests and high test coverage.
 - reliable and established: built upon more than 20 years of existing Pyro 
history, with ongoing support and development.
 
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/Pyro5/__init__.py 
new/Pyro5-5.15/Pyro5/__init__.py
--- old/Pyro5-5.14/Pyro5/__init__.py    2022-10-12 22:28:56.000000000 +0200
+++ new/Pyro5-5.15/Pyro5/__init__.py    2023-10-18 22:09:25.000000000 +0200
@@ -4,7 +4,7 @@
 Pyro - Python Remote Objects.  Copyright by Irmen de Jong 
([email protected]).
 """
 
-__version__ = "5.14"
+__version__ = "5.15"
 __author__ = "Irmen de Jong"
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/Pyro5/utils/httpgateway.py 
new/Pyro5-5.15/Pyro5/utils/httpgateway.py
--- old/Pyro5-5.14/Pyro5/utils/httpgateway.py   2022-06-17 17:38:28.000000000 
+0200
+++ new/Pyro5-5.15/Pyro5/utils/httpgateway.py   2023-10-18 21:56:19.000000000 
+0200
@@ -24,7 +24,7 @@
 
 import sys
 import re
-import cgi
+import urllib.parse
 import uuid
 import json
 from wsgiref.simple_server import make_server
@@ -91,29 +91,33 @@
     </style>
 </head>
 <body>
-    <script src="//code.jquery.com/jquery-2.1.3.min.js"></script>
     <script>
     "use strict";
-    function pyro_call(name, method, params) {{
-        $.ajax({{
-            url: name+"/"+method,
-            type: "GET",
-            data: params,
-            dataType: "json",
-            // headers: {{ "X-Pyro-Correlation-Id": 
"11112222-1111-2222-3333-222244449999" }},
-            // headers: {{ "X-Pyro-Gateway-Key": "secret-key" }},
-            // headers: {{ "X-Pyro-Options": "oneway" }},
-            beforeSend: function(xhr, settings) {{
-                $("#pyro_call").text(settings.type+" "+settings.url);
-            }},
-            error: function(xhr, status, error) {{
-                var errormessage = "ERROR: "+xhr.status+" "+error+" 
\\n"+xhr.responseText;
-                $("#pyro_response").text(errormessage);
-            }},
-            success: function(data) {{
-                $("#pyro_response").text(JSON.stringify(data, null, 4));
+    async function pyro_call(name, method, params) {{
+        // http header examples:
+        //  "X-Pyro-Correlation-Id": "11112222-1111-2222-3333-222244449999"
+        //  "X-Pyro-Gateway-Key": "secret-key"
+        //  "X-Pyro-Options": "oneway"
+        let api_url = name+"/"+method
+        if(params) api_url += "?"+(new URLSearchParams(params).toString())
+        document.getElementById("pyro_call").innerText = "GET "+api_url;
+        await fetch(api_url, {{
+            method: 'GET',
+            headers: {{
+                'Accept': 'application/json',
+                'Content-Type': 'application/json' 
             }}
-        }});
+        }} )
+        .then(async res => {{
+            if(res.status>=400) {{
+                const err =  "SERVER ERROR "+res.status+"\\n"+(await 
res.text())
+                document.getElementById("pyro_response").innerText = err
+                throw err
+            }} else {{
+                return res.json()
+            }}
+        }})
+        .then(json_result => 
document.getElementById("pyro_response").innerText = 
JSON.stringify(json_result, null, 4))
     }}
     </script>
 <div id="title-logo"><img 
src="http://pyro5.readthedocs.io/en/stable/_static/pyro.png";></div>
@@ -130,25 +134,25 @@
 {name_server_contents_list}
 <p>Name server examples: (these examples are working if you expose the 
Pyro.NameServer object)</p>
 <ul>
-<li><a href="Pyro.NameServer/$meta" 
onclick="pyro_call('Pyro.NameServer','$meta'); return 
false;">Pyro.NameServer/$meta</a>
+<li><a href="javascript:void();" 
onclick="pyro_call('Pyro.NameServer','$meta'); return 
false;">Pyro.NameServer/$meta</a>
      -- gives meta info of the name server (methods)</li>
-<li><a href="Pyro.NameServer/list" 
onclick="pyro_call('Pyro.NameServer','list'); return 
false;">Pyro.NameServer/list</a>
+<li><a href="javascript:void();" onclick="pyro_call('Pyro.NameServer','list'); 
return false;">Pyro.NameServer/list</a>
      -- lists the contents of the name server</li>
-<li><a href="Pyro.NameServer/list?prefix=test."
+<li><a href="javascript:void();"
        onclick="pyro_call('Pyro.NameServer','list', {{'prefix':'test.'}}); 
return false;">
        Pyro.NameServer/list?prefix=test.</a> -- lists the contents of the name 
server starting with 'test.'</li>
-<li><a href="Pyro.NameServer/lookup?name=Pyro.NameServer"
+<li><a href="javascript:void();"
        onclick="pyro_call('Pyro.NameServer','lookup', 
{{'name':'Pyro.NameServer'}}); return false;">
        Pyro.NameServer/lookup?name=Pyro.NameServer</a> -- perform lookup 
method of the name server</li>
-<li><a href="Pyro.NameServer/lookup?name=test.echoserver"
+<li><a href="javascript:void();"
        onclick="pyro_call('Pyro.NameServer','lookup', 
{{'name':'test.echoserver'}}); return false;">
        Pyro.NameServer/lookup?name=test.echoserver</a> -- perform lookup 
method of the echo server</li>
 </ul>
 <p>Echoserver examples: (these examples are working if you expose the 
test.echoserver object)</p>
 <ul>
-<li><a href="test.echoserver/error" 
onclick="pyro_call('test.echoserver','error'); return 
false;">test.echoserver/error</a>
+<li><a href="javascript:void();" 
onclick="pyro_call('test.echoserver','error'); return 
false;">test.echoserver/error</a>
      -- perform error call on echoserver</li>
-<li><a href="test.echoserver/echo?message=Hi there, browser script!"
+<li><a href="javascript:void();"
        onclick="pyro_call('test.echoserver','echo', {{'message':'Hi there, 
browser script!'}}); return false;">
        test.echoserver/echo?message=Hi there, browser script!</a> -- perform 
echo call on echoserver</li>
 </ul>
@@ -182,7 +186,7 @@
                     proxy._pyroBind()
                     methods = " &nbsp; ".join(proxy._pyroMethods) or "-"
                     attributes = [
-                        "<a href=\"{name}/{attribute}\" 
onclick=\"pyro_call('{name}','{attribute}'); return false;\">{attribute}</a>"
+                        "<a href=\"javascript:void();\" 
onclick=\"pyro_call('{name}','{attribute}'); return false;\">{attribute}</a>"
                         .format(name=name, attribute=attribute)
                         for attribute in proxy._pyroAttrs
                     ]
@@ -193,7 +197,7 @@
                 traceback.print_exc(file=stderr)
                 methods = "??error:%s??" % str(x)
             nslist.append(
-                "<tr><td><a href=\"{name}/$meta\" 
onclick=\"pyro_call('{name}','$meta'); "
+                "<tr><td><a href=\"javascript:void();\" 
onclick=\"pyro_call('{name}','$meta'); "
                 "return 
false;\">{name}</a></td><td>{methods}</td><td>{attributes}</td></tr>"
                 .format(name=name, methods=methods, attributes=attributes))
     nslist.append("</table>")
@@ -304,7 +308,7 @@
                 return option_request(start_response)
             else:
                 """GET POST"""
-                parameters = 
singlyfy_parameters(cgi.parse(environ['wsgi.input'], environ))
+                parameters = 
singlyfy_parameters(urllib.parse.parse_qs(environ["QUERY_STRING"]))
                 return process_pyro_request(environ, path[5:], parameters, 
start_response)
         else:
             return invalid_request(start_response)
@@ -314,7 +318,7 @@
 
 def singlyfy_parameters(parameters):
     """
-    Makes a cgi-parsed parameter dictionary into a dict where the values that
+    Makes a parsed querystring parameter dictionary into a dict where the 
values that
     are just a list of a single value, are converted to just that single value.
     """
     for key, value in parameters.items():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/Pyro5.egg-info/PKG-INFO 
new/Pyro5-5.15/Pyro5.egg-info/PKG-INFO
--- old/Pyro5-5.14/Pyro5.egg-info/PKG-INFO      2022-10-12 22:42:18.000000000 
+0200
+++ new/Pyro5-5.15/Pyro5.egg-info/PKG-INFO      2023-10-18 22:42:33.000000000 
+0200
@@ -1,12 +1,13 @@
 Metadata-Version: 2.1
 Name: Pyro5
-Version: 5.14
+Version: 5.15
 Summary: Remote object communication library, fifth major version
 Home-page: https://github.com/irmen/Pyro5
 Author: Irmen de Jong
 Author-email: [email protected]
 License: MIT
 Keywords: distributed objects,RPC,remote method call,IPC
+Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
@@ -14,14 +15,11 @@
 Classifier: Natural Language :: Dutch
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3.7
-Classifier: Programming Language :: Python :: 3.8
-Classifier: Programming Language :: Python :: 3.9
-Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3
 Classifier: Topic :: Software Development :: Object Brokering
 Classifier: Topic :: System :: Distributed Computing
 Classifier: Topic :: System :: Networking
-Requires-Python: >=3.2
+Requires-Python: >=3.7
 Description-Content-Type: text/x-rst
 License-File: LICENSE
 
@@ -36,12 +34,6 @@
 .. image:: https://anaconda.org/conda-forge/pyro5/badges/version.svg
     :target: https://anaconda.org/conda-forge/pyro5
 
-.. image:: 
https://img.shields.io/lgtm/grade/python/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
-    :target: https://lgtm.com/projects/g/irmen/Pyro5/context:python
-
-.. image:: 
https://img.shields.io/lgtm/alerts/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
-    :target: https://lgtm.com/projects/g/irmen/Pyro5/alerts
-
 
 Info
 ----
@@ -68,7 +60,7 @@
 Features
 --------
 
-- written in 100% Python so extremely portable, supported on Python 3.7 and 
newer, and Pypy3
+- written in 100% Python so extremely portable, supported on Python 3.8 and 
newer, and Pypy3
 - works between different system architectures and operating systems.
 - able to communicate between different Python versions transparently.
 - defaults to a safe serializer (`serpent 
<https://pypi.python.org/pypi/serpent>`_) that supports many Python data types.
@@ -95,3 +87,5 @@
 - large amount of unit tests and high test coverage.
 - reliable and established: built upon more than 20 years of existing Pyro 
history, with ongoing support and development.
 
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/Pyro5.egg-info/SOURCES.txt 
new/Pyro5-5.15/Pyro5.egg-info/SOURCES.txt
--- old/Pyro5-5.14/Pyro5.egg-info/SOURCES.txt   2022-10-12 22:42:18.000000000 
+0200
+++ new/Pyro5-5.15/Pyro5.egg-info/SOURCES.txt   2023-10-18 22:42:33.000000000 
+0200
@@ -1,5 +1,4 @@
 .gitattributes
-.lgtm.yml
 LICENSE
 MANIFEST.in
 Makefile
@@ -253,8 +252,6 @@
 examples/streaming/Readme.txt
 examples/streaming/client.py
 examples/streaming/server.py
-examples/test/client.py
-examples/test/server.py
 examples/thirdpartylib/Readme.txt
 examples/thirdpartylib/awesome_thirdparty_library.py
 examples/thirdpartylib/client.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/Pyro5.egg-info/entry_points.txt 
new/Pyro5-5.15/Pyro5.egg-info/entry_points.txt
--- old/Pyro5-5.14/Pyro5.egg-info/entry_points.txt      2022-10-12 
22:42:18.000000000 +0200
+++ new/Pyro5-5.15/Pyro5.egg-info/entry_points.txt      2023-10-18 
22:42:33.000000000 +0200
@@ -4,3 +4,4 @@
 pyro5-httpgateway = Pyro5.utils.httpgateway:main
 pyro5-ns = Pyro5.nameserver:main
 pyro5-nsc = Pyro5.nsc:main
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/Readme.rst new/Pyro5-5.15/Readme.rst
--- old/Pyro5-5.14/Readme.rst   2021-12-23 22:17:00.000000000 +0100
+++ new/Pyro5-5.15/Readme.rst   2023-09-24 13:24:11.000000000 +0200
@@ -9,12 +9,6 @@
 .. image:: https://anaconda.org/conda-forge/pyro5/badges/version.svg
     :target: https://anaconda.org/conda-forge/pyro5
 
-.. image:: 
https://img.shields.io/lgtm/grade/python/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
-    :target: https://lgtm.com/projects/g/irmen/Pyro5/context:python
-
-.. image:: 
https://img.shields.io/lgtm/alerts/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
-    :target: https://lgtm.com/projects/g/irmen/Pyro5/alerts
-
 
 Info
 ----
@@ -41,7 +35,7 @@
 Features
 --------
 
-- written in 100% Python so extremely portable, supported on Python 3.7 and 
newer, and Pypy3
+- written in 100% Python so extremely portable, supported on Python 3.8 and 
newer, and Pypy3
 - works between different system architectures and operating systems.
 - able to communicate between different Python versions transparently.
 - defaults to a safe serializer (`serpent 
<https://pypi.python.org/pypi/serpent>`_) that supports many Python data types.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/certs/client_cert.pem 
new/Pyro5-5.15/certs/client_cert.pem
--- old/Pyro5-5.14/certs/client_cert.pem        2018-08-16 09:50:05.000000000 
+0200
+++ new/Pyro5-5.15/certs/client_cert.pem        2023-10-18 22:05:10.000000000 
+0200
@@ -1,23 +1,23 @@
 -----BEGIN CERTIFICATE-----
-MIID3DCCAsSgAwIBAgIJANw+/bUr6dNQMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
-VQQGEwJOTDETMBEGA1UECAwKU29tZS1TdGF0ZTEWMBQGA1UECgwNUmF6b3J2aW5l
-Lm5ldDEOMAwGA1UECwwFUHlybzUxEjAQBgNVBAMMCWxvY2FsaG9zdDEiMCAGCSqG
-SIb3DQEJARYTaXJtZW5AcmF6b3J2aW5lLm5ldDAeFw0xODA2MTMyMjQ2MTRaFw0y
-MDExMjkyMjQ2MTRaMIGCMQswCQYDVQQGEwJOTDETMBEGA1UECAwKU29tZS1TdGF0
-ZTEWMBQGA1UECgwNUmF6b3J2aW5lLm5ldDEOMAwGA1UECwwFUHlybzUxEjAQBgNV
-BAMMCWxvY2FsaG9zdDEiMCAGCSqGSIb3DQEJARYTaXJtZW5AcmF6b3J2aW5lLm5l
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALkoq/1zaZwjMn76HLTz
-XJkz8FBz74fydwyentCtH4k6fRa83Oc73qtpBw8p/vNxWrQb5mO7D5JW2sxAQBhL
-sjq5KT/JC5zFJbutTXjGmYX9hqe14ts8rNbfCIBHYhZHTPKVTAvJZda2sG+KrOa8
-ojQf8D57T2nQ2TggYPetTPX0JLjEXXe8FRZcjdQm2j0pVptiErj2nLkCFaRV0/WO
-lrHEI9J3N2PV8FEClLhqgGmzmvDFrGwul3nPw7Z2Z4B0iAdoBK4X7mm+DlFPGQD+
-QBcxSfsDCoNjqt4mUeitdyqG8XvOARWNma19S/KF4fEh19MN8bJQwsh/N6JJw5G3
-n2MCAwEAAaNTMFEwHQYDVR0OBBYEFBUythr0ngdQ6e11uqlbX99a71tJMB8GA1Ud
-IwQYMBaAFBUythr0ngdQ6e11uqlbX99a71tJMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQELBQADggEBACCBDVBY5ba1SRcoKBYCJaT6bEWbIMetXaNvRqLEwrwC
-QntNlaoyCYt7nY6p3Kc/OxujAJse7FovACLpCiXqAn1YIv2hixKodVwRvNEdOQOD
-ohBmtOdxcjzs4MRCo87ZyoJwgphmai3uYcwcEr6sMVmTURl91PQJuM3+B9tx5aGF
-VWuXFHahJ0tHmblp02Imq0je8536REb+rQyuRsFIAUmgTqn30WEay36sh+JYG4tK
-EwEhpG+/OjSghB3doqUqMu7bYi2W6/EVsjNhmTv5pv6E7azG32ebb6fiz6Bne0Ub
-dehUNY0kMoBM53UG1QjOxBNVsNWelEM/OU39/sVwi2k=
+MIID5zCCAs+gAwIBAgIUH6vXMyAKUtztBwK3qFZ3PzeqwOMwDQYJKoZIhvcNAQEL
+BQAwgYIxCzAJBgNVBAYTAk5MMRMwEQYDVQQIDApTb21lLVN0YXRlMRYwFAYDVQQK
+DA1SYXpvcnZpbmUubmV0MQ4wDAYDVQQLDAVQeXJvNTESMBAGA1UEAwwJbG9jYWxo
+b3N0MSIwIAYJKoZIhvcNAQkBFhNpcm1lbkByYXpvcnZpbmUubmV0MB4XDTIzMTAx
+ODIwMDUxMFoXDTI2MDcxMzIwMDUxMFowgYIxCzAJBgNVBAYTAk5MMRMwEQYDVQQI
+DApTb21lLVN0YXRlMRYwFAYDVQQKDA1SYXpvcnZpbmUubmV0MQ4wDAYDVQQLDAVQ
+eXJvNTESMBAGA1UEAwwJbG9jYWxob3N0MSIwIAYJKoZIhvcNAQkBFhNpcm1lbkBy
+YXpvcnZpbmUubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+xK
+kHgMHDKvhAh0XUiEBaMCAs5T1sMZ4LTWxPhWYbIHilmyuxubl2jCGRzQ5YsnBc4Q
+oyDefog53f36neYJjuI/04G50Ijif9qvrxs/1DTkre+ukvXeThU9lAtfX4F8XLE0
+y1jeOSSkuPMeynStpPb3KQgrxNM1EOzTKwTZZOyeLQpZNytKwcNedPFUlJLXJbZt
+xWWZZUsCCnukLemq03Uc/qG/UvP7yXrLFyJTMo8JQytdsfC3mnlNeVqt0lHIU3tJ
+dzxl48qYFhDXDGpNDmDqv0BNTxe12kdFkBLjys/JYMNAgKVvZRN1YK4FMH3sWnvJ
+MAJLpSJeF1rqe5WhAwIDAQABo1MwUTAdBgNVHQ4EFgQUwsK62EoZPhoTBMNw5Fde
+33m9XnMwHwYDVR0jBBgwFoAUwsK62EoZPhoTBMNw5Fde33m9XnMwDwYDVR0TAQH/
+BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAPt4W0fZ6Upl7mZx/3YrpW7pCi4aD
+FvJ0EfZ+Jc74cMziegMrXe8C6UECybdWCT2UyR1wzwJ8rBaZ+CTXxzLQz1Z5c5DV
+Am7SgKUe9j29/hVIQbj2BfEmD0ls5hVB0waOS3b7i9T0mSjZv52xqBLfnpryI1Ln
+r/Fa1Z2SvWxEHyQ+scFyoQV514X8Rjiugb4PickYYCSgIwTyGS7+HfpDydhxHNgO
+m0Bcplw1jNt3rLPZhO/B3lhIEuetPirwKVsS4P5R60k5J+4rkst0SKqFdkyWWeFK
+7pQPZMakBA7U2r+XFDlBGGrqiN0Q9mVVDKMvZY3Aq53SdVPgOfFBdoy/+w==
 -----END CERTIFICATE-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/certs/client_key.pem 
new/Pyro5-5.15/certs/client_key.pem
--- old/Pyro5-5.14/certs/client_key.pem 2018-08-16 09:50:05.000000000 +0200
+++ new/Pyro5-5.15/certs/client_key.pem 2023-10-18 22:04:10.000000000 +0200
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC5KKv9c2mcIzJ+
-+hy081yZM/BQc++H8ncMnp7QrR+JOn0WvNznO96raQcPKf7zcVq0G+Zjuw+SVtrM
-QEAYS7I6uSk/yQucxSW7rU14xpmF/YanteLbPKzW3wiAR2IWR0zylUwLyWXWtrBv
-iqzmvKI0H/A+e09p0Nk4IGD3rUz19CS4xF13vBUWXI3UJto9KVabYhK49py5AhWk
-VdP1jpaxxCPSdzdj1fBRApS4aoBps5rwxaxsLpd5z8O2dmeAdIgHaASuF+5pvg5R
-TxkA/kAXMUn7AwqDY6reJlHorXcqhvF7zgEVjZmtfUvyheHxIdfTDfGyUMLIfzei
-ScORt59jAgMBAAECggEBALJI91KUTpyJR5X8Pqf9rKvX1w2glIPSc88y7LkB+duo
-9clvEUWV4FIsTx/K0DKYcz35n11oQRYni4YgV5cNTBA/OfixHP1W135e4LnqgOkD
-tSTHfiibw9Eh8I2ULl5FSVJLb23p/qVAQ6MjZFjISWbnWezPzyeUcZQZmUTjGbe4
-Olw+7T/DIKASuWzyxjEwYEHmCp6sBAN2E4BjkaH40oOo4h2movgpEL5wqMJf2zG1
-z8vzpXRT8OXqyClX4o/9yaVgA3VWMZPYp0FSu3gd99uZ8o+EekD0EVaA1cCCvN3J
-qBkkWdf+4fqOyU8XSxE95YgKnPWPUO36/03/tlslDAECgYEA2qYNZHBeZm+66cEM
-WlMcv1qp3U2utpotNo7Iz8lp4hVhCaFVhMuhRbNe6RpxHBoOsDTBSBWy/Urg+hWv
-MZTDk9dfS/5oYLosQ9gftq+wgzKtpfUSQU9lYVbapCPyQiXhq+fqU1aCX47Qpesa
-6NrjrhG28YtFT8trMOhFKO+bcHUCgYEA2MoLUMpqReAP4d56W2tiuAXBw64Lhdzo
-grFeNXsHrFEclofQbe0OuUE0IMPYjtHpdFVyiU2umW3paHFlBTUJYqZCMdliBj7Y
-sOx8xKzaAXZbVwDIwzWfcj+QCvjRi90nlanoZ6jf5HeIBjt44xz0+8aYzDmPDsfO
-ADMDB0+x1XcCgYBVMd6GBELEJ0TtUAtAJqJM7UbCtEIfZHO5jmkwjYp0TWBCIFry
-I2XzgrC4o1TvXjfa8LNfIxVbHJIM3+Yjq5OJR6IaOkbxaZlV1iCFTm+4r0Z6I8O5
-LvaRtwX6bwc2Pwxvry3eyxaBpWQnQjR6BtAwQzbFZz7amKhrphVMnhAzAQKBgQCo
-bLBF4DyYdO9h59rf05oqpi5XvIwvP+VURECRBDh947Z2LKX+AUKDIulA22cP7n2V
-aB1IFxYjFYVVI2P8m6vi/JBI8j5547GuIsz8b94fbLih63YOU0bBGCjsnUsPgo4S
-dKKehlELyuHfFa1hpUmfojdr0vwV251sAjXEJGJhGQKBgQCBK1ZtedBCuyuavKcI
-Na/bYC84nHnKSEfGhx8lUG2ugX3lXIlrElqSpoUFSCRdKadHRBKYS6mg02Y48B1N
-XrJ3sNMS6k6xq/57y1LlnOjzdnP9gqYQ9xMbvkvxzJjI+i0yOJRufYREb6DD7g50
-w80R2Deyap2JbcdBOlLdAYC/Uw==
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDj7EqQeAwcMq+E
+CHRdSIQFowICzlPWwxngtNbE+FZhsgeKWbK7G5uXaMIZHNDliycFzhCjIN5+iDnd
+/fqd5gmO4j/TgbnQiOJ/2q+vGz/UNOSt766S9d5OFT2UC19fgXxcsTTLWN45JKS4
+8x7KdK2k9vcpCCvE0zUQ7NMrBNlk7J4tClk3K0rBw1508VSUktcltm3FZZllSwIK
+e6Qt6arTdRz+ob9S8/vJessXIlMyjwlDK12x8LeaeU15Wq3SUchTe0l3PGXjypgW
+ENcMak0OYOq/QE1PF7XaR0WQEuPKz8lgw0CApW9lE3VgrgUwfexae8kwAkulIl4X
+Wup7laEDAgMBAAECggEAPbBUtilnzbICQ1AufpkD8qqd/rhthLElreYEQyeb6bFP
+zShd8bqVMDPQZQ+hkp9JHo8Zfa2FyuWAFA+L53S9nYirEcoIyuJhu40rA8/yRLNU
+OaenrmsRkjy5f/pcA/N9/3CPA4K4EutSEiTrboyJ+x5E4zws7Ibl1ADlXr1fQasu
+ZdIwgs59iWefdPIerqCE9PvKwkz/le3Soum4Do3Mb+M5rKqV9H+dmyjqd+c/DR9S
+xw42VwbNkTMJaSky8pidZKmlUt/U7picXxi7pBHpA0aK822jRnAmIv5+LnfV6X4P
+OlgpJsmBIs6JCLsyQVRtot1+5JHKcUuTeegccP2BkQKBgQD/gPZmPEObKfPSEUJP
+O9D7LE+tyLLfIkiLLi9sOK0XjUBvBaxppxl/koxmPck3A6VBXKn/WGh8JA5h1AUG
+v2N9ymcPfl7UcZEZUDXTiIemapVT4XSwwCiuKdMpCi/pD5O82Gb9w4hoMrntWnsr
+2yx7dQ+j698GGI1GbbmvEzHCzQKBgQDkXZ2SGJ7/+34FulddUK/LydJcX8PRKrbU
+t7E7CuMcEWrV+vmgYtUOoifW/yLNUeRE6E89T46wesR6fmqT8I82HBmnN5JSKzls
+a1H7n6F1hihivMQJ9DpUVkzlduB2dGa6sht+78Lil4ZcP0oZfdzt+gPyqmUnqJwR
+B/59Dw4TDwKBgQDcC7spjVlENrtP/aE4D/IJf74XkzPJzALiKyKYd69LC1GkzCQS
+0eC56AKWwzuZ77/RLPcTfJZv47WnNywlBYuv+DMOOu181Vn7jQLubTU2c7Crjw4q
+czQV2tuLCsT8WXgJOe5pOo8t/hH2guh1essygDy6Fhf7bgWt1C4Iw+UlOQKBgQDb
+G3cz1au4r/QaSs/IGMKTJPFQ8BFRf0osjpLds3R0WcHHzSX1XN5PTAYtol4h4ZDD
+DKH6kXq2mRQq82AO0aCWqh9y8T7S1+YgwFfItUCVIkNdeQAfDNVqVeMxxv1Wqhhm
+yLzY7fJutjOUDqVqD/kJ2/gtvI+RnZUgQitKkkdOwQKBgBUZ4XhDau/XUbP+wdym
+rPbI1sZ2lmZx+UKjhurl8Ev8GKHqU3RJo+bfIkhxl/+jHQLY/etIeIsErp4YbxSf
+ppQ32t5cMzNG0fvXDpVcm++e1R8dtLaiZtc2KorV+MYP2mXkSMeoqTpGII6hg9qo
+1IqrIzI5XWAVTc5uX0jC7RsM
 -----END PRIVATE KEY-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/certs/server_cert.pem 
new/Pyro5-5.15/certs/server_cert.pem
--- old/Pyro5-5.14/certs/server_cert.pem        2018-08-16 09:50:05.000000000 
+0200
+++ new/Pyro5-5.15/certs/server_cert.pem        2023-10-18 22:06:45.000000000 
+0200
@@ -1,23 +1,23 @@
 -----BEGIN CERTIFICATE-----
-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
+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
 -----END CERTIFICATE-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/certs/server_key.pem 
new/Pyro5-5.15/certs/server_key.pem
--- old/Pyro5-5.14/certs/server_key.pem 2018-08-16 09:50:05.000000000 +0200
+++ new/Pyro5-5.15/certs/server_key.pem 2023-10-18 22:06:05.000000000 +0200
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDCU8XQIDJzhWgy
-mLfhFhajUapR9ulrbSvHlqpQaHl9H0VXQMccpeCFLAquOhUkKhIqVmFvaX0MrjU1
-8iuPchC4bsTwuIB8+vmz5LKanIcBi5KJ/TIixUZJVxjzQFaSO3r20d82N/o8Onk9
-PusXJCPMnnU+nietWyCkP+I7GZd0iKsEQPd1x39aLl0eheqwQNFJxupsYVcrnaTd
-7HdLkGeDRSkDSZqla2HlIfuPsSkHthWLnsrgqW6l/16RN2R5Mfl/UeLqSHiQ2Tbs
-8bRNFd4oLgpYKzMBq4kRAozVA6px3T+/UoCPoluOHJmSUBHoZMo7YzAZFC/3Pxl6
-3qL+n3tBAgMBAAECggEBAIm/yGEX8athzdLP3sh3V+S9ZvZjCGNWJ8p7So9k/3lq
-SUTobjwoeVbtOUT3dzUDfYz1XmwTYskyVBXBbI9qU9/o5UGeB7aQUaDrZI+klS7L
-OT0HdhqfrIsgaldELBnMgAWmD4vnckJvULHRf+QPgjDxwjp48bc4+ZJ0lnE+WtYH
-Lrnao/P2Al2hGEcnYSWyGphdqmOnCy7pplETN7cyLiDarZjde5BM/lcAH001LIpW
-yoJftm/gl4MjEW5v82L9tadzOgRJyybhHG5k34bzaBpV63p3jp0FsBX587C4NIP4
-BmnIhfEMpq9RjS9L7vYSKbzMge/Prj0L8g5r90pZAeECgYEA4Odx7fMEZlVgQHU6
-5ZgdJKLJ8lYQ3pcy+3pgPj7HlT/N6REbn8OOO91vEalpHi8I1hOERRzjIWQGH5oR
-tzNdFf9BsuIs7Ur6tCYoYcy2pz25zwh58xOtqAvScE2aGVvBP1iTpKGEXkwv0Nn7
-zWcbwh22BIckCzYK2RQaXY/irV8CgYEA3TIMz9sNkOi/iAzh4Ey26nIKfOg852A8
-33c+wvpNcWSGYR9OLnk/a8AGjT+HQA8w8kU3s79T0S7IVLDeVnQomh1lklfhRGGH
-6QL/u/miAhIY2ykOtBFS7zICyH0egXUWQea6t3aiHNgqFMLyipa0SngamG9/vP9O
-tRSl0j+b+18CgYABUVnZixL7hoSJ3CX8Mmf5Tvrf8KEorLofvxfRRYzl0vnh47fF
-t9+dei6sa9Gx25SxrGuZ/BFYoL1ocf6olCR3fIdmBO0+drIBXDfgWtK3KCVukR4l
-zne2BFu3TL0aaO8478vtqwSbiNa+4ogXLAN9n67xV9leN3LY0sVUxwMNAQKBgQCO
-cnX3wc0JviniVtF73kuJzeldKT5Xjw2Ep8l+TS1kUeWMVFnH6gNiw6Y0fm3+Xgoa
-a2ME2bkDpIoUqFZ2/JVNMpM/3GJQ5DJfZ7QDfS7NAJSLRvSWF/X93ooWTSVBH4M2
-63zhO4AI7VikSCtj/suajaAq/NsZfp1UVji3nok4JwKBgFoeRO1ezkq3J7igkIBr
-d6D8u6z1/3sAgnYJLbSKjgdpewcedRV9uVC1g0tFRPRjTG7X0F7+ZPLaVjDM8UvO
-2zhPOL6S0+fYg2bUPHexuEf2ec0PqIF6rAS+0cR85AohAXqyYGydmyDCQFDNvOvW
-ygLQbLsx9AyZzrqsRoEJ7Yo6
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDE3GRNsEAxvoUb
+qiKnxKtK8qxc81k1GDiptJ7NDZMklPENnzPTWSbnK4Fb6+dvw3KYJ62wqJS9aZ6D
+LzPlHPyJ2na0ck/c2N2It3C54Jny0Dj0tQLzlRahvF0EpGJGhyy7s2wxUAy8hYXj
+r7PmHk3OxBMBRe0wJTmDwKNHWQAqjHUlORTvmtFEQ53HShUzMd/iuCJYl/K4iVyW
+gZbHicUSJF+l+5T6qJS8QjBogE/DE65yjlHX/UKhQl8Bsl6OCCaYn4tN21m9LbVh
+JlSHbEN8NVNhu6Y3Odw3965nAL3V2mXP1t4AsNZot1CS7kWrT3vmTVL+FZF8Nin6
+GowF9XDNAgMBAAECggEAD8upRqyGMheZ4ZLgrfpzThOzrc+e0EpNvZwvA7/7lvtW
+biPgiixEmVbdzczbaJXTm47PenXEXYBchiUi8lbFkqATVz421z8VY3NomZmCcL+x
+Wj0t6/KB+t88zXMNKaCN/8+RNlG4e+XwzMib1DKJRrZn2fnM4siR2Vb7Iu3qu/8e
+BkZQZwjpmZC4hr0JborBRqW+U4mLPuGtVkR7cXNQ3qm/MV9xy/urmGYmwfVVeH5e
+xUue9B69RdUs/eNRnjmOmR56AVLJt2JXSCLrLR+TB1NVGEXZ7VBUaIUSjxgCPh6R
+IoPahnnFJBMUQOVGERispLc0iJi+CEakr6NJnmOUxwKBgQDxZqyd+HbgDIXoKJhW
+g63NTDfHuW3Dg0f+nh3owvhESFD6fIwJriE3ox7QzBlLEUSANToEnUf6ZLGAAaMG
+Jw3Mt4ZaoRZ/Z4Tu0LrbyYkVBGE57Qg5HX9pdBMlAVlY6ek/d5hRZGEds566pt/9
+Ca2Q78edIfeTdLMClJ2OP5XQIwKBgQDQxCe02VS9kOmwrjic8cO107groP8ovJ9W
+0Qm0Alc2vhAonl2lFIU9/IAhqAiA6viSnbPnM8LrLOR3717xHnS5gjYgTYGYYo64
+3GeDWkUG8Tn/PCI+VRW34M+4id7s3Oh/BFbwAWMwZv9mh8Ru7UxxaBt4xa9nA3aL
+/IEkJyVSTwKBgQCUkjulEfmf1TVI+Esh2/NJCiK+gopirVbPB2OjEPQZmmR0ddj+
+UDRTeMqLeUIL6Hm/aoLluiNFoVl5TgiWzcx5dW50MvaUvRKcpMyMXtJGpCZur0rD
+VDtJnM33lYf26CfNDv8pAN2gmR8VA4WRx7YSIPE67V/hWg6ehPcfSFUc/wKBgQCW
+OuH78X1aoQKaAvV4cz4MBZx9wPB9JydeuTTLVffey+0i3buzxM2RarfmAF6GLxDL
+qTLCCOyWggqzCA2BZBJJQJukqUG+IAZmnyzaSEZuFX9P3b0ir+XeGahBOu2x89JX
+PQ82zTjMpwHZjY/c52TgIzPJuDBd6A8R85YXJxhjXwKBgQCM1AG9kgSn+0Yuc8XI
+blTUWZKU+v9yIJoI+T02qZj1EwlwSR6iVSlmI2+Y72jpT0BcgPCEwsAiDro+RmmM
+2CrOkOuaZAa+lKrYAR/9zoFxFpQyP0U4F5CtBv/zn1k4DXWpk9XaFgVsyQgakLRa
+oYBrU6tJTMtbETSwyB2F+jDWmQ==
 -----END PRIVATE KEY-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/docs/source/changelog.rst 
new/Pyro5-5.15/docs/source/changelog.rst
--- old/Pyro5-5.14/docs/source/changelog.rst    2022-10-12 22:39:32.000000000 
+0200
+++ new/Pyro5-5.15/docs/source/changelog.rst    2023-10-18 22:22:41.000000000 
+0200
@@ -2,6 +2,15 @@
 Change Log
 **********
 
+**Pyro 5.15**
+
+- removed Python 3.7 from the support list (it is EOL). Now supported on 
Python 3.8 or newer.
+- fixed cgi.parse deprecation problem in http gateway
+- removed jquery dependency in http gateway
+- some small tweaks to setup, tests, examples, and docs.
+- updated the self-signed example certificates and serial numbers in the ssl 
example.
+
+
 **Pyro 5.14**
 
 - http gateway now also has OPTION call with CORS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/docs/source/clientcode.rst 
new/Pyro5-5.15/docs/source/clientcode.rst
--- old/Pyro5-5.14/docs/source/clientcode.rst   2021-09-12 16:16:26.000000000 
+0200
+++ new/Pyro5-5.15/docs/source/clientcode.rst   2023-01-17 22:46:56.000000000 
+0100
@@ -136,7 +136,7 @@
     print("velocity = ", velo)
 
 
-See the :file:`attributes` example for more information.
+See the `attributes example 
<https://github.com/irmen/Pyro5/tree/master/examples/attributes>`_ for more 
information.
 
 
 
@@ -191,7 +191,11 @@
 and their unregister-counterparts:
     :py:meth:`Pyro5.api.unregister_class_to_dict` and 
:py:meth:`Pyro5.api.unregister_dict_to_class`
 
-Click on the method link to see its apidoc, or have a look at the 
:file:`custom-serialization` example and the :file:`test_serialize` unit tests 
for more information.
+Click on the method link to see its apidoc, or have a look at the
+`custom-serialization example 
<https://github.com/irmen/Pyro5/tree/master/examples/custom-serialization>`_
+and the
+`test_serialize unit tests 
<https://github.com/irmen/Pyro5/blob/master/tests/test_serialize.py>`_
+for more information.
 It is recommended to avoid using these hooks if possible, there's a security 
risk
 to create arbitrary objects from serialized data that is received from 
untrusted sources.
 
@@ -251,7 +255,8 @@
 **How to make methods one-way:**
 You mark the methods of your class *in the server* as one-way by using a 
special *decorator*.
 See :ref:`decorating-pyro-class` for details on how to do this.
-See the :file:`oneway` example for some code that demonstrates the use of 
oneway methods.
+See the `oneway example 
<https://github.com/irmen/Pyro5/tree/master/examples/oneway>`_
+for some code that demonstrates the use of oneway methods.
 
 
 .. index:: batch calls
@@ -299,7 +304,7 @@
     # results==None
 
 
-See the :py:mod:`batchedcalls` example for more details.
+See the `batchedcalls example 
<https://github.com/irmen/Pyro5/tree/master/examples/batchedcalls>`_ for more 
details.
 
 
 .. index:: remote iterators/generators
@@ -353,8 +358,10 @@
 Lingering can be disabled completely by setting the value to 0, then all 
remote generators from a proxy will
 immediately be discarded in the server if the proxy gets disconnected or 
closed.
 
-There are several examples that use the remote iterator feature.
-Have a look at the :py:mod:`streaming`, :py:mod:`stockquotes`, or the 
:py:mod:`filetransfer` examples.
+There are several examples that use the remote iterator feature. Have a look 
at the
+`streaming <https://github.com/irmen/Pyro5/tree/master/examples/streaming>`_ ,
+`stockquotes 
<https://github.com/irmen/Pyro5/tree/master/examples/stockquotes>`_ or the
+`filetransfer 
<https://github.com/irmen/Pyro5/tree/master/examples/filetransfer>`_ examples.
 
 
 .. index:: callback
@@ -404,7 +411,7 @@
 
 Also notice that the callback method (or the whole class) has to be decorated
 with ``@Pyro5.api.expose`` as well to allow it to be called remotely at all.
-See the :py:mod:`callback` example for more details and code.
+See the `callback example 
<https://github.com/irmen/Pyro5/tree/master/examples/callback>`_ for more 
details and code.
 
 
 .. index:: misc features
@@ -422,7 +429,7 @@
 However, Pyro provides a few extra features when dealing with errors that 
occurred in
 remote objects. This subject is explained in detail its own chapter: 
:doc:`errors`.
 
-See the :py:mod:`exceptions` example for more details.
+See the `exceptions example 
<https://github.com/irmen/Pyro5/tree/master/examples/exceptions>`_ for more 
details.
 
 .. index:: timeouts
 
@@ -444,7 +451,7 @@
     proxy._pyroTimeout = 1.5    # 1.5 seconds
 
 
-See the :py:mod:`timeout` example for more details.
+See the `timeout example 
<https://github.com/irmen/Pyro5/tree/master/examples/timeout>`_ for more 
details.
 
 Also, there is a automatic retry mechanism for timeout or connection closed 
(by server side),
 in order to use this automatically retry::
@@ -456,7 +463,7 @@
     proxy._pyroMaxRetries = 3      # attempt to retry 3 times before raise the 
exception
 
 Be careful to use when remote functions have a side effect (e.g.: calling 
twice results in error)!
-See the :py:mod:`autoretry` example for more details.
+See the `autoretry example 
<https://github.com/irmen/Pyro5/tree/master/examples/autoretry>`_ for more 
details.
 
 .. index::
     double: reconnecting; automatic
@@ -467,7 +474,7 @@
 ----------------------
 If your client program becomes disconnected to the server (because the server 
crashed for instance),
 Pyro will raise a :py:exc:`Pyro5.errors.ConnectionClosedError`.
-You can use the automatic retry mechanism to handle this exception, see the 
:py:mod:`autoretry` example for more details.
+You can use the automatic retry mechanism to handle this exception, see the 
`autoretry example 
<https://github.com/irmen/Pyro5/tree/master/examples/autoretry>`_ for more 
details.
 Alternatively, it is also possible to catch this and tell Pyro to attempt to 
reconnect to the server by calling
 ``_pyroReconnect()`` on the proxy (it takes an optional argument: the number 
of attempts
 to reconnect to the daemon. By default this is almost infinite). Once 
successful, you can resume operations
@@ -483,7 +490,7 @@
 up again, it needs to publish its Pyro objects with the exact same URI as 
before (object id, hostname, daemon
 port number).
 
-See the :py:mod:`autoreconnect` example for more details and some suggestions 
on how to do this.
+See the `autoreconnect example 
<https://github.com/irmen/Pyro5/tree/master/examples/autoreconnect>`_ for more 
details and some suggestions on how to do this.
 
 The ``_pyroReconnect()`` method can also be used to force a newly created 
proxy to connect immediately,
 rather than on first use.
@@ -502,7 +509,7 @@
 You can explicitly transfer ownership of a proxy to another thread via the 
proxy's ``_pyroClaimOwnership()`` method.
 The current thread then claims the ownership of this proxy from another 
thread. Any existing connection will remain active.
 
-See the :py:mod:`threadproxysharing` example for more details.
+See the `threadproxysharing example 
<https://github.com/irmen/Pyro5/tree/master/examples/threadproxysharing>`_ for 
more details.
 
 
 .. index::
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/docs/source/errors.rst 
new/Pyro5-5.15/docs/source/errors.rst
--- old/Pyro5-5.14/docs/source/errors.rst       2020-05-04 00:40:32.000000000 
+0200
+++ new/Pyro5-5.15/docs/source/errors.rst       2023-01-17 22:47:24.000000000 
+0100
@@ -5,7 +5,7 @@
 ********************************
 
 There is an example that shows various ways to deal with exceptions when 
writing Pyro code.
-Have a look at the ``exceptions`` example in the :file:`examples` directory.
+Have a look at the `exceptions example 
<https://github.com/irmen/Pyro5/tree/master/examples/exceptions>`_ .
 
 Pyro exceptions
 ---------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/docs/source/intro.rst 
new/Pyro5-5.15/docs/source/intro.rst
--- old/Pyro5-5.14/docs/source/intro.rst        2021-12-23 22:02:04.000000000 
+0100
+++ new/Pyro5-5.15/docs/source/intro.rst        2023-09-24 13:24:42.000000000 
+0200
@@ -86,7 +86,7 @@
 consisting of many different parts and pieces. As long as you have a working 
(and supported) Python version
 running on it, you should be able to talk to it using Pyro from any other part 
of the system.
 
-Have a look at the :file:`examples` directory in the source archive, perhaps 
one of the many example
+Have a look at the `examples directory 
<https://github.com/irmen/Pyro5/tree/master/examples/>`_ in the source, perhaps 
one of the many example
 programs in there gives even more inspiration of possibilities.
 
 
@@ -119,7 +119,7 @@
 
 If you're familiar with Pyro4, most of the things are the same in Pyro5. These 
are the changes though:
 
-- Requires Python 3.7 or newer.
+- Supported on Python 3.8 or newer.
 - the Pyro5 API is redesigned and this library is not compatible with Pyro4 
code (although everything should be familiar):
 
       - Pyro5 is the new package name
@@ -278,7 +278,7 @@
 This concludes this simple Pyro example.
 
 .. note::
- In the source archive there is a directory :file:`examples` that contains a 
truckload
+ In the source code there is an `examples directory 
<https://github.com/irmen/Pyro5/tree/master/examples/>`_ that contains a 
truckload
  of example programs that show the various features of Pyro. If you're 
interested in them
  (it is highly recommended to be so!) you will have to download the Pyro 
distribution archive.
  Installing Pyro only provides the library modules. For more information, see 
:doc:`config`.
@@ -303,4 +303,8 @@
 - contents and size of the pyro call request and response messages
 - the serializer being used
 
-Experiment with the ``benchmark``, ``batchedcalls`` and ``hugetransfer`` 
examples to see what results you get on your own setup.
+Experiment with the
+`benchmark <https://github.com/irmen/Pyro5/tree/master/examples/benchmark>`_ ,
+`batchedcalls 
<https://github.com/irmen/Pyro5/tree/master/examples/batchedcalls>`_ and
+`hugetransfer 
<https://github.com/irmen/Pyro5/tree/master/examples/hugetransfer>`_
+examples to see what results you get on your own setup.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/docs/source/nameserver.rst 
new/Pyro5-5.15/docs/source/nameserver.rst
--- old/Pyro5-5.14/docs/source/nameserver.rst   2020-05-04 12:17:50.000000000 
+0200
+++ new/Pyro5-5.15/docs/source/nameserver.rst   2023-01-17 22:57:00.000000000 
+0100
@@ -144,7 +144,7 @@
 because you have to integrate the name server into the rest of your program 
(perhaps you need to merge event loops?).
 For your convenience, two helper functions are available to create a name 
server yourself:
 :py:func:`Pyro5.nameserver.start_ns` and 
:py:func:`Pyro5.nameserver.start_ns_loop`.
-Look at the :file:`eventloop` example to see how you can use this.
+Look at the `eventloop example 
<https://github.com/irmen/Pyro5/tree/master/examples/eventloop>`_ to see how 
you can use this.
 
 **Custom storage mechanism:**
 The utility functions allow you to specify a custom storage mechanism (via the 
``storage`` parameter).
@@ -360,7 +360,7 @@
 An additional benefit of using a PYRONAME uri in a proxy is that the proxy 
isn't strictly
 tied to a specific object on a specific location. This is useful in scenarios 
where the server
 objects might move to another location, for instance when a 
disconnect/reconnect occurs.
-See the :file:`autoreconnect` example for more details about this.
+See the `autoreconnect example 
<https://github.com/irmen/Pyro5/tree/master/examples/autoreconnect>`_ for more 
details about this.
 
 .. note::
     Pyro has to do a lookup every time it needs to connect one of these 
PYRONAME uris.
@@ -614,7 +614,7 @@
 Also see :ref:`nameserver-pyrometa`.
 
 
-You can find some code that uses the metadata API in the :file:`ns-metadata` 
example.
+You can find some code that uses the metadata API in the `ns-metadata example 
<https://github.com/irmen/Pyro5/tree/master/examples/ns-metadata>`_ .
 Note that the ``nsc`` tool (:ref:`nameserver-nsc`) also allows you to 
manipulate the metadata in the name server from the command line.
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/docs/source/security.rst 
new/Pyro5-5.15/docs/source/security.rst
--- old/Pyro5-5.14/docs/source/security.rst     2020-05-04 00:55:18.000000000 
+0200
+++ new/Pyro5-5.15/docs/source/security.rst     2023-01-17 22:50:32.000000000 
+0100
@@ -68,7 +68,7 @@
 For more details see here :ref:`cert_verification`. The SSL config items are 
in :ref:`config-items`.
 
 For example code on how to set up a 2-way-SSL Pyro client and server, with 
cert verification,
-see the ``ssl`` example.
+see the `ssl example 
<https://github.com/irmen/Pyro5/tree/master/examples/ssl>`_ .
 
 .. index::
     double: security; object traversal
@@ -123,4 +123,4 @@
 It's a bit too involved to fully describe here but it not much harder than the 
basic SSL configuration
 described earlier. You just have to make sure you supply a client certificate 
and that the server requires
 a client certificate (and verifies some properties of it).
-The ``ssl`` example shows how to do all this.
+The `ssl example <https://github.com/irmen/Pyro5/tree/master/examples/ssl>`_ 
shows how to do all this.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/docs/source/servercode.rst 
new/Pyro5-5.15/docs/source/servercode.rst
--- old/Pyro5-5.14/docs/source/servercode.rst   2022-01-26 22:16:21.000000000 
+0100
+++ new/Pyro5-5.15/docs/source/servercode.rst   2023-01-17 22:52:56.000000000 
+0100
@@ -109,7 +109,7 @@
 
 
 See :ref:`oneway-calls-client` for the documentation about how client code 
handles this.
-See the :file:`oneway` example for some code that demonstrates the use of 
oneway methods.
+See the `oneway example 
<https://github.com/irmen/Pyro5/tree/master/examples/oneway>`_ for some code 
that demonstrates the use of oneway methods.
 
 
 Exposing classes and methods without changing existing source code
@@ -156,7 +156,7 @@
    serialization issues for instance when a method of the class returns an 
object whose type is again a class from the library.
 
 
-See the :file:`thirdpartylib` example for a little server that deals with such 
a third party library.
+See the `thirdpartylib example 
<https://github.com/irmen/Pyro5/tree/master/examples/thirdpartylib>`_ for a 
little server that deals with such a third party library.
 
 
 .. index:: publishing objects
@@ -494,7 +494,9 @@
 * :py:attr:`Pyro5.server.Daemon.sockets` - list of all socket objects used by 
the daemon, to inject in your own event loop
 * :py:meth:`Pyro5.server.Daemon.events` - method to call from your own event 
loop when Pyro needs to process requests. Argument is a list of sockets that 
triggered.
 
-For more details and example code, see the :file:`eventloop` and 
:file:`gui_eventloop` examples.
+For more details and example code, see the
+`eventloop <https://github.com/irmen/Pyro5/tree/master/examples/eventloop>`_ 
and
+`gui_eventloop 
<https://github.com/irmen/Pyro5/tree/master/examples/gui_eventloop>`_ examples.
 They show how to use Pyro including a name server, in your own event loop, and 
also possible ways
 to use Pyro from within a GUI program with its own event loop.
 
@@ -519,7 +521,7 @@
    so that you only have to call the requestLoop of that "master daemon".
    Basically Pyro will run an integrated multiplexed event loop for you.
    You can combine normal Daemon objects, the NameServerDaemon and also the 
name server's BroadcastServer.
-   Again, have a look at the :file:`eventloop` example to see how this can be 
done.
+   Again, have a look at the `eventloop example 
<https://github.com/irmen/Pyro5/tree/master/examples/eventloop>`_ to see how 
this can be done.
    (Note: this will only work with the ``multiplex`` server type, not with the 
``thread`` type)
 
 
@@ -608,8 +610,8 @@
 an ``instance_creator`` callable as well. Pyro will then use that to create an 
instance of your class.
 It will call it with the class to create an instance of as the single 
parameter.
 
-See the :file:`instancemode` example to learn about various ways to use this.
-See the :file:`usersession` example to learn how you could use it to build 
user-bound resource access without concurrency problems.
+See the `instancemode example 
<https://github.com/irmen/Pyro5/tree/master/examples/instancemode>`_ to learn 
about various ways to use this.
+See the `usersession example 
<https://github.com/irmen/Pyro5/tree/master/examples/usersession>`_ to learn 
how you could use it to build user-bound resource access without concurrency 
problems.
 
 
 .. index:: automatic proxying
@@ -626,7 +628,7 @@
         self._pyroDaemon.register(thing)
         return thing    # just return it, no need to return a proxy
 
-There is a :file:`autoproxy` example that shows the use of this feature,
+There is a `autoproxy example 
<https://github.com/irmen/Pyro5/tree/master/examples/autoproxy>`_ that shows 
the use of this feature,
 and several other examples also make use of it.
 
 Note that when using the marshal serializer, this feature doesn't work. You 
have to use
@@ -810,7 +812,7 @@
 
 It may be useful however to also process the error on the *server*, for 
instance, to log the error
 somewhere for later reference. For this purpose, you can set the 
``methodcall_error_handler`` attribute
-on the daemon object to a custom error handler function. See the 
:file:`exceptions` example.
+on the daemon object to a custom error handler function. See the `exceptions 
example <https://github.com/irmen/Pyro5/tree/master/examples/exceptions>`_ .
 This function's signature is::
 
     def custom_error_handler(daemon: Daemon, client_sock: 
socketutil.SocketConnection,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/docs/source/tipstricks.rst 
new/Pyro5-5.15/docs/source/tipstricks.rst
--- old/Pyro5-5.14/docs/source/tipstricks.rst   2021-06-12 15:06:33.000000000 
+0200
+++ new/Pyro5-5.15/docs/source/tipstricks.rst   2023-10-18 20:28:58.000000000 
+0200
@@ -296,7 +296,7 @@
 
 
 The following table is an indication of the relative speeds when dealing with 
large amounts
-of binary data. It lists the results of the :file:`hugetransfer` example, 
using python 3.8,
+of binary data. It lists the results of the `hugetransfer example 
<https://github.com/irmen/Pyro5/tree/master/examples/hugetransfer>`_ , using 
python 3.8,
 over a 1 Gbit LAN connection:
 
 ========== ========== ============= ================ ====================
@@ -317,7 +317,7 @@
 Pyro allows you to add custom annotation chunks to the request and response 
messages
 (see  :ref:`msg_annotations`). Because these are binary chunks they will not 
be passed
 through the serializer at all. Depending on what the configured maximum 
message size is
-you may have to split up larger files. The ``filetransfer`` example contains
+you may have to split up larger files. The `filetransfer example 
<https://github.com/irmen/Pyro5/tree/master/examples/filetransfer>`_ contains
 fully working example code to see this in action. It combines this with the 
remote
 iterator capability of Pyro to easily get all chunks of the file.
 It has to split up the file in small chunks but is still quite a bit faster 
than transmitting
@@ -330,7 +330,7 @@
 It is possible to get data transfer speeds that are close to the limit of your 
network adapter
 by doing the actual data transfer via low-level socket code and everything 
else via Pyro.
 This keeps the amount of low-level code to a minimum.
-Have a look at the ``filetransfer`` example again, to see a possible way of 
doing this.
+Have a look at the `filetransfer example 
<https://github.com/irmen/Pyro5/tree/master/examples/filetransfer>`_ again, to 
see a possible way of doing this.
 It creates a special Daemon subclass that uses Pyro for everything as usual,
 but for actual file transfer it sets up a dedicated temporary socket 
connection over which the file data
 is transmitted.
@@ -439,7 +439,7 @@
 Parameters are passed via a regular query string parameter list (in case of a 
GET request) or via form post parameters
 (in case of a POST request). The response is a JSON document.
 In case of an exception, a JSON encoded exception object is returned.
-You can easily call this from your web page scripts using ``XMLHttpRequest`` 
or something like JQuery's ``$.ajax()``.
+You can easily call this from your web page scripts using javascript's 
``fetch()``.
 Have a look at the page source of the gateway's web page to see how this could 
be done.
 Note that you have to comply with the browser's same-origin policy: if you 
want to allow your own scripts
 to access the gateway, you'll have to make sure they are loaded from the same 
website.
@@ -476,7 +476,7 @@
 - 500 Internal server error: something went wrong during request processing, 
response is serialized exception object (if available)
 
 
-Look at the :file:`http` example for working code how you could set this up.
+Look at the `http example 
<https://github.com/irmen/Pyro5/tree/master/examples/http>`_ for working code 
how you could set this up.
 
 
 .. index:: current_context, correlation_id
@@ -550,8 +550,8 @@
 
 
 For an example of how this information can be retrieved, and how to set the 
``correlation_id``,
-see the :file:`callcontext` example.
-See the :file:`usersession` example to learn how you could use it to build 
user-bound resource access without concurrency problems.
+see the `callcontext example 
<https://github.com/irmen/Pyro5/tree/master/examples/callcontext>`_ .
+See the `usersession example 
<https://github.com/irmen/Pyro5/tree/master/examples/usersession>`_ to learn 
how you could use it to build user-bound resource access without concurrency 
problems.
 
 
 .. index:: resource-tracking
@@ -593,7 +593,7 @@
     Untrack a previously tracked resource, useful if you have freed it 
normally.
 
 
-See the ``resourcetracking`` example for working code utilizing this.
+See the `resourcetracking example 
<https://github.com/irmen/Pyro5/tree/master/examples/resourcetracking>`_ for 
working code utilizing this.
 
 .. note::
     The order in which the resources are freed is arbitrary.
@@ -639,7 +639,9 @@
 See :ref:`current_context`.
 In your server code, in the Daemon, you can use the 
:py:data:`Pyro5.current_context` to access the ``annotations`` of the last 
message that was received.
 
-To see how you can work with custom message annotations, see the 
:py:mod:`callcontext` or :py:mod:`filetransfer` examples.
+To see how you can work with custom message annotations, see the
+`callcontext 
<https://github.com/irmen/Pyro5/tree/master/examples/callcontext>`_ or
+`filetransfer 
<https://github.com/irmen/Pyro5/tree/master/examples/filetransfer>`_ examples.
 
 
 .. index:: handshake
@@ -667,7 +669,7 @@
 if you subclass the proxy and override 
:py:meth:`Pyro5.client.Proxy._pyroValidateHandshake`.
 
 
-For an example of how you can work with connections handshake validation, see 
the :py:mod:`handshake` example.
+For an example of how you can work with connections handshake validation, see 
the `handshake example 
<https://github.com/irmen/Pyro5/tree/master/examples/handshake>`_ .
 It implements a (bad!) security mechanism that requires the client to supply a 
"secret" password to be able to connect to the daemon.
 
 
@@ -705,7 +707,7 @@
 and also don't have to include the source code for the serialized types in the 
dispatcher.
 It just deals with a blob of serialized bytes.
 
-An example that shows how this mechanism can be used, can be found as 
:py:mod:`blob-dispatch` in the examples folder.
+An example that shows how this mechanism can be used, is `blob-dispatch 
<https://github.com/irmen/Pyro5/tree/master/examples/blob-dispatch>`_ .
 
 
 .. index:: socketpair, user provided sockets
@@ -727,5 +729,5 @@
 for another proxy (to access a different object). You created the socket(s) 
yourself,
 and you also have to close the socket(s) yourself.
 
-See the :py:mod:`socketpair` example for two example programs (one using 
threads, the other using fork
+See the `socketpair example 
<https://github.com/irmen/Pyro5/tree/master/examples/socketpair>`_ for two 
example programs (one using threads, the other using fork
 to create a child process).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/examples/callback/client2.py 
new/Pyro5-5.15/examples/callback/client2.py
--- old/Pyro5-5.14/examples/callback/client2.py 2018-08-16 09:50:05.000000000 
+0200
+++ new/Pyro5-5.15/examples/callback/client2.py 2022-11-10 22:28:48.000000000 
+0100
@@ -30,11 +30,11 @@
 
 
 daemon = Daemon()
-callback = CallbackHandler()
-daemon.register(callback)
+callback_handler = CallbackHandler()
+daemon.register(callback_handler)
 
 with Proxy("PYRONAME:example.callback2") as server:
-    server.doCallback(callback)   # this is a oneway call, so we can continue 
right away
+    server.doCallback(callback_handler)   # this is a oneway call, so we can 
continue right away
 
 print("waiting for callbacks to arrive...")
 print("(ctrl-c/break the program once it's done)")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/examples/ssl/client.py 
new/Pyro5-5.15/examples/ssl/client.py
--- old/Pyro5-5.14/examples/ssl/client.py       2018-08-16 09:50:05.000000000 
+0200
+++ new/Pyro5-5.15/examples/ssl/client.py       2023-10-18 22:19:55.000000000 
+0200
@@ -20,7 +20,7 @@
     # today = datetime.datetime.now()
     # if today > not_after or today < not_before:
     #     raise Pyro5.errors.CommunicationError("cert not yet valid or 
expired")
-    if cert["serialNumber"] != "8C3AD2A88A0657EF":
+    if cert["serialNumber"] != "63B5A2EB71E2C78CBE4200C7EAB9634E7B669407":
         raise Pyro5.errors.CommunicationError("cert serial number incorrect", 
cert["serialNumber"])
     issuer = dict(p[0] for p in cert["issuer"])
     subject = dict(p[0] for p in cert["subject"])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/examples/ssl/server.py 
new/Pyro5-5.15/examples/ssl/server.py
--- old/Pyro5-5.14/examples/ssl/server.py       2018-08-16 09:50:05.000000000 
+0200
+++ new/Pyro5-5.15/examples/ssl/server.py       2023-10-18 22:18:44.000000000 
+0200
@@ -30,7 +30,7 @@
         # today = datetime.datetime.now()
         # if today > not_after or today < not_before:
         #     raise Pyro5.errors.CommunicationError("cert not yet valid or 
expired")
-        if cert["serialNumber"] != "DC3EFDB52BE9D350":
+        if cert["serialNumber"] != "1FABD733200A52DCED0702B7A856773F37AAC0E3":
             raise Pyro5.errors.CommunicationError("cert serial number 
incorrect", cert["serialNumber"])
         issuer = dict(p[0] for p in cert["issuer"])
         subject = dict(p[0] for p in cert["subject"])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/examples/test/client.py 
new/Pyro5-5.15/examples/test/client.py
--- old/Pyro5-5.14/examples/test/client.py      2022-06-17 20:56:11.000000000 
+0200
+++ new/Pyro5-5.15/examples/test/client.py      1970-01-01 01:00:00.000000000 
+0100
@@ -1,22 +0,0 @@
-from Pyro5.api import Proxy
-
-uri = input("enter server uri: ")
-t = Proxy(uri)
-
-print(len(t))
-for letter in t:
-    print(letter)
-# print()
-# for letter in reversed(t):
-#     print(letter)
-# print()
-# for letter in sorted(t):
-#     print(letter)
-# print()
-# print("z" in t)
-# print(t[1])
-# t[1]='z'
-# print(t[1])
-# del t[1]
-# for letter in t:
-#     print(letter)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/examples/test/server.py 
new/Pyro5-5.15/examples/test/server.py
--- old/Pyro5-5.14/examples/test/server.py      2022-06-17 20:47:22.000000000 
+0200
+++ new/Pyro5-5.15/examples/test/server.py      1970-01-01 01:00:00.000000000 
+0100
@@ -1,43 +0,0 @@
-from Pyro5.api import Daemon, expose
-
-@expose
-class Thing:
-    items = ['e','b','c','d','a']
-
-    def __dunder__(self):
-        print(".dunder")
-        return "dunder"
-
-    def __len__(self):
-        print(".len")
-        return len(self.items)
-
-    def __contains__(self, item):
-        print(".contains", item)
-        return item in self.items
-
-    def __getitem__(self, item):
-        print(".getitem", item)
-        return self.items[item]
-
-    def __reversed__(self):
-        print(".reversed")
-        return reversed(self.items)
-
-    def __iter__(self):
-        print(".iter")
-        return iter(self.items)
-
-    def __setitem__(self, key, value):
-        print(".setitem", key, value)
-        self.items[key]=value
-
-    def __delitem__(self, key):
-        print(".delitem", key)
-        del self.items[key]
-
-
-if __name__ == "__main__":
-    Daemon.serveSimple({
-        Thing: "thing"
-    })
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/setup.cfg new/Pyro5-5.15/setup.cfg
--- old/Pyro5-5.14/setup.cfg    2022-10-12 22:42:18.973033200 +0200
+++ new/Pyro5-5.15/setup.cfg    2023-10-18 22:42:33.455201100 +0200
@@ -18,10 +18,7 @@
        Natural Language :: Dutch
        Operating System :: OS Independent
        Programming Language :: Python
-       Programming Language :: Python :: 3.7
-       Programming Language :: Python :: 3.8
-       Programming Language :: Python :: 3.9
-       Programming Language :: Python :: 3.10
+       Programming Language :: Python :: 3
        Topic :: Software Development :: Object Brokering
        Topic :: System :: Distributed Computing
        Topic :: System :: Networking
@@ -30,7 +27,7 @@
 zip_safe = True
 include_package_data = False
 packages = Pyro5, Pyro5.utils, Pyro5.compatibility
-python_requires = >=3.2
+python_requires = >=3.7
 install_requires = 
        serpent>=1.41
 
@@ -46,6 +43,9 @@
 max-line-length = 140
 exclude = .git,__pycache__,.tox,docs,tests,build,dist,.eggs,.cache,examples
 
+[tool:pytest]
+markers = network: Mark a test as requiring network access
+
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/tests/test_naming.py 
new/Pyro5-5.15/tests/test_naming.py
--- old/Pyro5-5.14/tests/test_naming.py 2022-02-02 23:58:11.000000000 +0100
+++ new/Pyro5-5.15/tests/test_naming.py 2023-06-04 18:18:11.000000000 +0200
@@ -36,6 +36,7 @@
 
 
 class TestBCSetup:
+    @pytest.mark.network
     def testBCstart(self):
         myIpAddress = Pyro5.socketutil.get_ip_address("", workaround127=True)
         nsUri, nameserver, bcserver = 
Pyro5.nameserver.start_ns(host=myIpAddress, port=0, bcport=0, 
enableBroadcast=False)
@@ -76,11 +77,13 @@
         config.NS_PORT = self.old_nsPort
         config.NS_BCPORT = self.old_bcPort
 
+    @pytest.mark.network
     def testLookupUnixsockParsing(self):
         # this must not raise AttributeError, it did before because of a parse 
bug
         with pytest.raises(NamingError):
             Pyro5.core.locate_ns("./u:/tmp/Pyro5-naming.usock")
 
+    @pytest.mark.network
     def testLookupAndRegister(self):
         ns = Pyro5.core.locate_ns()  # broadcast lookup
         assert isinstance(ns, Pyro5.client.Proxy)
@@ -107,6 +110,7 @@
         assert ns.lookup("unittest.object3") == 
Pyro5.core.URI("PYRO:[email protected]:4444")
         ns._pyroRelease()
 
+    @pytest.mark.network
     def testDaemonPyroObj(self):
         uri = self.nsUri
         uri.object = Pyro5.core.DAEMON_NAME
@@ -116,6 +120,7 @@
             with pytest.raises(AttributeError):
                 daemonobj.shutdown()
 
+    @pytest.mark.network
     def testMulti(self):
         uristr = str(self.nsUri)
         p = Pyro5.client.Proxy(uristr)
@@ -157,6 +162,7 @@
         _ = Pyro5.core.resolve(pyronameUri)
         _ = Pyro5.core.resolve(pyronameUri)
 
+    @pytest.mark.network
     def testResolve(self):
         resolved1 = 
Pyro5.core.resolve(Pyro5.core.URI("PYRO:[email protected]:4444"))
         resolved2 = Pyro5.core.resolve("PYRO:[email protected]:4444")
@@ -186,6 +192,7 @@
         with pytest.raises(TypeError):
             Pyro5.core.resolve(999)
 
+    @pytest.mark.network
     def testRefuseDottedNames(self):
         with Pyro5.core.locate_ns(self.nsUri.host, self.nsUri.port) as ns:
             # the name server should never have dotted names enabled
@@ -194,6 +201,7 @@
             assert ns._pyroConnection is not None
         assert ns._pyroConnection is None
 
+    @pytest.mark.network
     def testAutoClean(self):
         try:
             config.NS_AUTOCLEAN = 0.0
@@ -243,6 +251,7 @@
         config.NS_PORT = self.old_nsPort
         config.NS_BCPORT = self.old_bcPort
 
+    @pytest.mark.network
     def testBCLookup0000(self):
         ns = Pyro5.core.locate_ns()  # broadcast lookup
         assert isinstance(ns, Pyro5.client.Proxy)
@@ -388,6 +397,7 @@
                 pass
         ns.close()
 
+    @pytest.mark.network
     def testStartNSfunc(self):
         myIpAddress = Pyro5.socketutil.get_ip_address("", workaround127=True)
         uri1, ns1, bc1 = Pyro5.nameserver.start_ns(host=myIpAddress, port=0, 
bcport=0, enableBroadcast=False)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/tests/test_socketutil.py 
new/Pyro5-5.15/tests/test_socketutil.py
--- old/Pyro5-5.14/tests/test_socketutil.py     2022-02-02 23:58:25.000000000 
+0100
+++ new/Pyro5-5.15/tests/test_socketutil.py     2023-06-04 18:18:11.000000000 
+0200
@@ -29,6 +29,7 @@
     def setup_class(cls):
         config.POLLTIMEOUT = 0.1
 
+    @pytest.mark.network
     def testGetIP(self):
         config.PREFER_IP_VERSION = 4
         myip = socketutil.get_ip_address("")
@@ -231,6 +232,7 @@
         if os.path.exists(SOCKNAME):
             os.remove(SOCKNAME)
 
+    @pytest.mark.network
     def testBroadcast(self):
         ss = socketutil.create_bc_socket((None, 0))
         port = ss.getsockname()[1]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Pyro5-5.14/tox.ini new/Pyro5-5.15/tox.ini
--- old/Pyro5-5.14/tox.ini      2022-06-22 19:03:51.000000000 +0200
+++ new/Pyro5-5.15/tox.ini      2023-09-24 13:23:24.000000000 +0200
@@ -1,5 +1,5 @@
 [tox]
-envlist=py37,py38,py39,py310,py311,pypy3
+envlist=py38,py39,py310,py311,pypy3
 
 [testenv]
 deps=

Reply via email to