Pyro5 5.14__tar.gz → 5.16__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {Pyro5-5.14 → pyro5-5.16}/.github/workflows/main-ci.yml +3 -3
- {Pyro5-5.14 → pyro5-5.16}/Makefile +3 -6
- {Pyro5-5.14 → pyro5-5.16}/PKG-INFO +8 -14
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/__init__.py +1 -1
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/client.py +1 -1
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/nameserver.py +3 -2
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/server.py +15 -3
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/utils/httpgateway.py +36 -32
- {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/PKG-INFO +8 -14
- {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/SOURCES.txt +0 -3
- {Pyro5-5.14 → pyro5-5.16}/Readme.rst +2 -6
- pyro5-5.16/certs/client_cert.pem +23 -0
- pyro5-5.16/certs/client_key.pem +28 -0
- pyro5-5.16/certs/server_cert.pem +23 -0
- pyro5-5.16/certs/server_key.pem +28 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/changelog.rst +18 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/clientcode.rst +23 -16
- {Pyro5-5.14 → pyro5-5.16}/docs/source/errors.rst +1 -1
- {Pyro5-5.14 → pyro5-5.16}/docs/source/intro.rst +8 -4
- {Pyro5-5.14 → pyro5-5.16}/docs/source/nameserver.rst +3 -3
- {Pyro5-5.14 → pyro5-5.16}/docs/source/security.rst +2 -2
- {Pyro5-5.14 → pyro5-5.16}/docs/source/servercode.rst +14 -9
- {Pyro5-5.14 → pyro5-5.16}/docs/source/tipstricks.rst +19 -12
- {Pyro5-5.14 → pyro5-5.16}/examples/callback/client2.py +3 -3
- {Pyro5-5.14 → pyro5-5.16}/examples/ssl/client.py +1 -1
- {Pyro5-5.14 → pyro5-5.16}/examples/ssl/server.py +1 -1
- {Pyro5-5.14 → pyro5-5.16}/examples/streaming/client.py +4 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/streaming/server.py +8 -0
- {Pyro5-5.14 → pyro5-5.16}/setup.cfg +5 -6
- {Pyro5-5.14 → pyro5-5.16}/test-requirements.txt +1 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_daemon.py +15 -3
- {Pyro5-5.14 → pyro5-5.16}/tests/test_naming.py +10 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_server.py +2 -2
- {Pyro5-5.14 → pyro5-5.16}/tests/test_socketutil.py +11 -4
- {Pyro5-5.14 → pyro5-5.16}/tox.ini +1 -1
- Pyro5-5.14/.lgtm.yml +0 -4
- Pyro5-5.14/certs/client_cert.pem +0 -23
- Pyro5-5.14/certs/client_key.pem +0 -28
- Pyro5-5.14/certs/server_cert.pem +0 -23
- Pyro5-5.14/certs/server_key.pem +0 -28
- Pyro5-5.14/examples/test/client.py +0 -22
- Pyro5-5.14/examples/test/server.py +0 -43
- {Pyro5-5.14 → pyro5-5.16}/.gitattributes +0 -0
- {Pyro5-5.14 → pyro5-5.16}/LICENSE +0 -0
- {Pyro5-5.14 → pyro5-5.16}/MANIFEST.in +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/api.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/callcontext.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/compatibility/Pyro4.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/compatibility/__init__.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/configure.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/core.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/errors.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/nsc.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/protocol.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/serializers.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/socketutil.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/svr_existingconn.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/svr_multiplex.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/svr_threads.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/utils/__init__.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5/utils/echoserver.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/dependency_links.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/entry_points.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/requires.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/top_level.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/zip-safe +0 -0
- {Pyro5-5.14 → pyro5-5.16}/certs/readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/Makefile +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/make.bat +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/_static/css/customize.css +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/_static/flammable.png +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/_static/pyro-large.png +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/_static/pyro.png +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/_static/tf_pyrotaunt.png +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/api.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/callcontext.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/client.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/compatibility.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/config.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/core.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/echoserver.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/errors.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/httpgateway.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/nameserver.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/protocol.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/server.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/socketserver.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api/socketutil.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/api.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/commandline.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/conf.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/config.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/docutils.conf +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/index.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/install.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/license.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/pyrolite.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/docs/source/tutorials.rst +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/attributes/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/attributes/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/attributes/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoproxy/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoproxy/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoproxy/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoproxy/thingy.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoreconnect/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoreconnect/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoreconnect/clientNS.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoreconnect/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoreconnect/serverNS.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoretry/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoretry/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/autoretry/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/banks/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/banks/banks.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/banks/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/banks/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/batchedcalls/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/batchedcalls/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/batchedcalls/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/benchmark/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/benchmark/bench.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/benchmark/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/benchmark/connections.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/benchmark/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/client/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/client/customdata.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/dispatcher/dispatcher.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/listeners/customdata.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/listeners/listener.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/listeners/main.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/callback/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/callback/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/callback/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/callback/server2.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/callcontext/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/callcontext/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/callcontext/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/chatbox/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/chatbox/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/chatbox/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/circular/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/circular/chain.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/circular/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/circular/servA.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/circular/servB.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/circular/servC.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/custom-serialization/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/custom-serialization/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/custom-serialization/mycustomclasses.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/custom-serialization/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/diffie-hellman/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/diffie-hellman/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/diffie-hellman/diffiehellman.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/diffie-hellman/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/disconnects/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/disconnects/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/disconnects/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing/dispatcher.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing/worker.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing/workitem.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing2/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing2/alice.zip +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing2/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing2/servers.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing3/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing3/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing3/worker.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/client_asciizoom.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/client_graphics.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/launch_servers.sh +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/normal.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/normal_graphics.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/echoserver/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/echoserver/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/eventloop/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/eventloop/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/eventloop/server_multiplexed.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/eventloop/server_threads.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/exceptions/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/exceptions/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/exceptions/excep.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/exceptions/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/filetransfer/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/filetransfer/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/filetransfer/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/gui_eventloop/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/gui_eventloop/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/gui_eventloop/gui_nothreads.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/gui_eventloop/gui_threads.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/handshake/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/handshake/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/handshake/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/http/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/http/client.js +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/http/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/hugetransfer/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/hugetransfer/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/hugetransfer/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/instancemode/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/instancemode/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/instancemode/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/maxsize/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/maxsize/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/manytopics_publisher.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/manytopics_subscriber.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/messagebus/__init__.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/messagebus/messagebus.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/messagebus/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/publisher.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/subscriber.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/subscriber_manual_consume.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/nameserverstress/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/nameserverstress/stress.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/nonameserver/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/nonameserver/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/nonameserver/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/ns-metadata/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/ns-metadata/example.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/ns-metadata/resources.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/oneway/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/oneway/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/oneway/client2.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/oneway/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/oneway/server2.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/privilege-separation/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/privilege-separation/drop_privs_client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/privilege-separation/drop_privs_server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/privilege-separation/elevated_client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/privilege-separation/elevated_server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/resourcetracking/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/resourcetracking/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/resourcetracking/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/robots/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/robots/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/robots/gameserver.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/robots/remote.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/robots/robot.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/servertypes/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/servertypes/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/servertypes/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/shoppingcart/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/shoppingcart/clients.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/shoppingcart/shoppingcart.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/shoppingcart/shopserver.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/socketpair/pair-fork.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/socketpair/pair-thread.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/socketpair/readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/ssl/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase1/stockmarket.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase1/viewer.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase2/stockmarket.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase2/viewer.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase3/stockmarket.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase3/viewer.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/streaming/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/thirdpartylib/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/thirdpartylib/awesome_thirdparty_library.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/thirdpartylib/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/thirdpartylib/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/thirdpartylib/server2.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/threadproxysharing/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/threadproxysharing/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/timeout/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/timeout/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/timeout/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/timezones/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/timezones/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/timezones/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/unixdomainsock/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/unixdomainsock/abstract_namespace_server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/unixdomainsock/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/unixdomainsock/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/usersession/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/usersession/client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/usersession/database.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/usersession/server.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/Readme.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase1/person.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase1/visit.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase1/warehouse.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase2/person.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase2/visit.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase2/warehouse.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase3/person.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase3/visit.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase3/warehouse.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/mypy.ini +0 -0
- {Pyro5-5.14 → pyro5-5.16}/requirements.txt +0 -0
- {Pyro5-5.14 → pyro5-5.16}/setup.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/support.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_api.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_client.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_core.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_echoserver.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_errors.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_httpgateway.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_protocol.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_pyro4compat.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_serialize.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_server_timeout.py +0 -0
- {Pyro5-5.14 → pyro5-5.16}/tests/test_threadpool.py +0 -0
|
@@ -18,13 +18,13 @@ jobs:
|
|
|
18
18
|
runs-on: ubuntu-latest
|
|
19
19
|
strategy:
|
|
20
20
|
matrix:
|
|
21
|
-
python-version: ['3.
|
|
21
|
+
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
|
|
22
22
|
|
|
23
23
|
steps:
|
|
24
24
|
- name: Checkout source
|
|
25
|
-
uses: actions/checkout@
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
26
|
- name: Set up Python
|
|
27
|
-
uses: actions/setup-python@
|
|
27
|
+
uses: actions/setup-python@v5
|
|
28
28
|
with:
|
|
29
29
|
python-version: ${{ matrix.python-version }}
|
|
30
30
|
- name: Install dependencies
|
|
@@ -2,21 +2,18 @@
|
|
|
2
2
|
PYTHON=python3
|
|
3
3
|
|
|
4
4
|
all:
|
|
5
|
-
@echo "targets: dist, docs, upload,
|
|
5
|
+
@echo "targets: dist, docs, upload, clean, test"
|
|
6
6
|
|
|
7
7
|
docs:
|
|
8
|
-
|
|
8
|
+
sphinx-build docs/source build/docs
|
|
9
9
|
|
|
10
10
|
dist:
|
|
11
|
-
$(PYTHON)
|
|
11
|
+
$(PYTHON) -m build --sdist --wheel
|
|
12
12
|
|
|
13
13
|
upload: dist
|
|
14
14
|
@echo "Uploading to Pypi using twine...."
|
|
15
15
|
twine upload dist/*
|
|
16
16
|
|
|
17
|
-
install:
|
|
18
|
-
$(PYTHON) setup.py install
|
|
19
|
-
|
|
20
17
|
test:
|
|
21
18
|
PYTHONPATH=. python3 -m pytest tests
|
|
22
19
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: Pyro5
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.16
|
|
4
4
|
Summary: Remote object communication library, fifth major version
|
|
5
5
|
Home-page: https://github.com/irmen/Pyro5
|
|
6
6
|
Author: Irmen de Jong
|
|
@@ -9,21 +9,19 @@ License: MIT
|
|
|
9
9
|
Keywords: distributed objects,RPC,remote method call,IPC
|
|
10
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
13
12
|
Classifier: Natural Language :: English
|
|
14
13
|
Classifier: Natural Language :: Dutch
|
|
15
14
|
Classifier: Operating System :: OS Independent
|
|
16
15
|
Classifier: Programming Language :: Python
|
|
17
|
-
Classifier: Programming Language :: Python :: 3
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
21
17
|
Classifier: Topic :: Software Development :: Object Brokering
|
|
22
18
|
Classifier: Topic :: System :: Distributed Computing
|
|
23
19
|
Classifier: Topic :: System :: Networking
|
|
24
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.7
|
|
25
21
|
Description-Content-Type: text/x-rst
|
|
26
22
|
License-File: LICENSE
|
|
23
|
+
Requires-Dist: serpent>=1.41
|
|
24
|
+
Dynamic: license-file
|
|
27
25
|
|
|
28
26
|
Pyro5
|
|
29
27
|
=====
|
|
@@ -36,11 +34,7 @@ Pyro5
|
|
|
36
34
|
.. image:: https://anaconda.org/conda-forge/pyro5/badges/version.svg
|
|
37
35
|
:target: https://anaconda.org/conda-forge/pyro5
|
|
38
36
|
|
|
39
|
-
|
|
40
|
-
:target: https://lgtm.com/projects/g/irmen/Pyro5/context:python
|
|
41
|
-
|
|
42
|
-
.. image:: https://img.shields.io/lgtm/alerts/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
|
|
43
|
-
:target: https://lgtm.com/projects/g/irmen/Pyro5/alerts
|
|
37
|
+
**Project status: super low maintenance mode. Not really worked on anymore, only reported bugs will be looked at.**
|
|
44
38
|
|
|
45
39
|
|
|
46
40
|
Info
|
|
@@ -68,7 +62,7 @@ New code should use Pyro5 if at all possible.
|
|
|
68
62
|
Features
|
|
69
63
|
--------
|
|
70
64
|
|
|
71
|
-
- written in 100% Python so extremely portable, supported on Python 3.
|
|
65
|
+
- written in 100% Python so extremely portable, supported on Python 3.9 and newer, and Pypy3
|
|
72
66
|
- works between different system architectures and operating systems.
|
|
73
67
|
- able to communicate between different Python versions transparently.
|
|
74
68
|
- defaults to a safe serializer (`serpent <https://pypi.python.org/pypi/serpent>`_) that supports many Python data types.
|
|
@@ -413,7 +413,7 @@ class Proxy(object):
|
|
|
413
413
|
log.debug("from meta: methods=%s, oneway methods=%s, attributes=%s",
|
|
414
414
|
sorted(self._pyroMethods), sorted(self._pyroOneway), sorted(self._pyroAttrs))
|
|
415
415
|
if not self._pyroMethods and not self._pyroAttrs:
|
|
416
|
-
raise errors.PyroError("remote object doesn't expose any methods or attributes. Did you forget setting @expose on them?")
|
|
416
|
+
raise errors.PyroError("remote object '%s' doesn't expose any methods or attributes. Did you forget setting @expose on them?" % self._pyroUri)
|
|
417
417
|
|
|
418
418
|
def _pyroReconnect(self, tries=100000000):
|
|
419
419
|
"""
|
|
@@ -645,7 +645,8 @@ class BroadcastServer(object):
|
|
|
645
645
|
|
|
646
646
|
|
|
647
647
|
def start_ns_loop(host=None, port=None, enableBroadcast=True, bchost=None, bcport=None,
|
|
648
|
-
unixsocket=None, nathost=None, natport=None, storage=None
|
|
648
|
+
unixsocket=None, nathost=None, natport=None, storage=None,
|
|
649
|
+
loopCondition=lambda: True):
|
|
649
650
|
"""utility function that starts a new Name server and enters its requestloop."""
|
|
650
651
|
daemon = NameServerDaemon(host, port, unixsocket, nathost=nathost, natport=natport, storage=storage)
|
|
651
652
|
nsUri = daemon.uriFor(daemon.nameserver)
|
|
@@ -681,7 +682,7 @@ def start_ns_loop(host=None, port=None, enableBroadcast=True, bchost=None, bcpor
|
|
|
681
682
|
print("URI = %s" % nsUri)
|
|
682
683
|
sys.stdout.flush()
|
|
683
684
|
try:
|
|
684
|
-
daemon.requestLoop()
|
|
685
|
+
daemon.requestLoop(loopCondition=loopCondition)
|
|
685
686
|
finally:
|
|
686
687
|
daemon.close()
|
|
687
688
|
if bcserver is not None:
|
|
@@ -168,7 +168,7 @@ class DaemonObject(object):
|
|
|
168
168
|
metadata = _get_exposed_members(obj)
|
|
169
169
|
if not metadata["methods"] and not metadata["attrs"]:
|
|
170
170
|
# Something seems wrong: nothing is remotely exposed.
|
|
171
|
-
warnings.warn("Class %
|
|
171
|
+
warnings.warn("Class %s doesn't expose any methods or attributes. Did you forget setting @expose on them?" % repr(obj))
|
|
172
172
|
return metadata
|
|
173
173
|
else:
|
|
174
174
|
log.debug("unknown object requested: %s", objectId)
|
|
@@ -456,6 +456,16 @@ class Daemon(object):
|
|
|
456
456
|
if method == "__getattr__":
|
|
457
457
|
# special case for direct attribute access (only exposed @properties are accessible)
|
|
458
458
|
data = _get_exposed_property_value(obj, vargs[0])
|
|
459
|
+
if not request_flags & protocol.FLAGS_ONEWAY:
|
|
460
|
+
isStream, data = self._streamResponse(data, conn)
|
|
461
|
+
if isStream:
|
|
462
|
+
# throw an exception as well as setting message flags
|
|
463
|
+
# this way, it is backwards compatible with older pyro versions.
|
|
464
|
+
exc = errors.ProtocolError("result of call is an iterator")
|
|
465
|
+
ann = {"STRM": data.encode()} if data else {}
|
|
466
|
+
self._sendExceptionResponse(conn, request_seq, serializer.serializer_id, exc, None,
|
|
467
|
+
annotations=ann, flags=protocol.FLAGS_ITEMSTREAMRESULT)
|
|
468
|
+
return
|
|
459
469
|
elif method == "__setattr__":
|
|
460
470
|
# special case for direct attribute access (only exposed @properties are accessible)
|
|
461
471
|
data = _set_exposed_property_value(obj, vargs[0], vargs[1])
|
|
@@ -650,7 +660,9 @@ class Daemon(object):
|
|
|
650
660
|
obj_or_class._pyroInstancing = ("session", None)
|
|
651
661
|
if not force:
|
|
652
662
|
if hasattr(obj_or_class, "_pyroId") and obj_or_class._pyroId != "": # check for empty string is needed for Cython
|
|
653
|
-
|
|
663
|
+
pyro_id = obj_or_class._pyroId
|
|
664
|
+
if pyro_id and self.objectsById.get(pyro_id) is obj_or_class:
|
|
665
|
+
raise errors.DaemonError("object or class already has a Pyro id")
|
|
654
666
|
if objectId in self.objectsById:
|
|
655
667
|
raise errors.DaemonError("an object or class is already registered with that id")
|
|
656
668
|
# set some pyro attributes
|
|
@@ -664,7 +676,7 @@ class Daemon(object):
|
|
|
664
676
|
else:
|
|
665
677
|
ser.register_type_replacement(type(obj_or_class), _pyro_obj_to_auto_proxy)
|
|
666
678
|
# register the object/class in the mapping
|
|
667
|
-
self.objectsById[obj_or_class._pyroId] =
|
|
679
|
+
self.objectsById[obj_or_class._pyroId] = obj_or_class if not weak else weakref.ref(obj_or_class)
|
|
668
680
|
if weak: weakref.finalize(obj_or_class,self.unregister,objectId)
|
|
669
681
|
return self.uriFor(objectId)
|
|
670
682
|
|
|
@@ -24,7 +24,7 @@ Pyro - Python Remote Objects. Copyright by Irmen de Jong (irmen@razorvine.net).
|
|
|
24
24
|
|
|
25
25
|
import sys
|
|
26
26
|
import re
|
|
27
|
-
import
|
|
27
|
+
import urllib.parse
|
|
28
28
|
import uuid
|
|
29
29
|
import json
|
|
30
30
|
from wsgiref.simple_server import make_server
|
|
@@ -91,29 +91,33 @@ index_page_template = """<!DOCTYPE html>
|
|
|
91
91
|
</style>
|
|
92
92
|
</head>
|
|
93
93
|
<body>
|
|
94
|
-
<script src="//code.jquery.com/jquery-2.1.3.min.js"></script>
|
|
95
94
|
<script>
|
|
96
95
|
"use strict";
|
|
97
|
-
function pyro_call(name, method, params) {{
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
var errormessage = "ERROR: "+xhr.status+" "+error+" \\n"+xhr.responseText;
|
|
111
|
-
$("#pyro_response").text(errormessage);
|
|
112
|
-
}},
|
|
113
|
-
success: function(data) {{
|
|
114
|
-
$("#pyro_response").text(JSON.stringify(data, null, 4));
|
|
96
|
+
async function pyro_call(name, method, params) {{
|
|
97
|
+
// http header examples:
|
|
98
|
+
// "X-Pyro-Correlation-Id": "11112222-1111-2222-3333-222244449999"
|
|
99
|
+
// "X-Pyro-Gateway-Key": "secret-key"
|
|
100
|
+
// "X-Pyro-Options": "oneway"
|
|
101
|
+
let api_url = name+"/"+method
|
|
102
|
+
if(params) api_url += "?"+(new URLSearchParams(params).toString())
|
|
103
|
+
document.getElementById("pyro_call").innerText = "GET "+api_url;
|
|
104
|
+
await fetch(api_url, {{
|
|
105
|
+
method: 'GET',
|
|
106
|
+
headers: {{
|
|
107
|
+
'Accept': 'application/json',
|
|
108
|
+
'Content-Type': 'application/json'
|
|
115
109
|
}}
|
|
116
|
-
}})
|
|
110
|
+
}} )
|
|
111
|
+
.then(async res => {{
|
|
112
|
+
if(res.status>=400) {{
|
|
113
|
+
const err = "SERVER ERROR "+res.status+"\\n"+(await res.text())
|
|
114
|
+
document.getElementById("pyro_response").innerText = err
|
|
115
|
+
throw err
|
|
116
|
+
}} else {{
|
|
117
|
+
return res.json()
|
|
118
|
+
}}
|
|
119
|
+
}})
|
|
120
|
+
.then(json_result => document.getElementById("pyro_response").innerText = JSON.stringify(json_result, null, 4))
|
|
117
121
|
}}
|
|
118
122
|
</script>
|
|
119
123
|
<div id="title-logo"><img src="http://pyro5.readthedocs.io/en/stable/_static/pyro.png"></div>
|
|
@@ -130,25 +134,25 @@ index_page_template = """<!DOCTYPE html>
|
|
|
130
134
|
{name_server_contents_list}
|
|
131
135
|
<p>Name server examples: (these examples are working if you expose the Pyro.NameServer object)</p>
|
|
132
136
|
<ul>
|
|
133
|
-
<li><a href="
|
|
137
|
+
<li><a href="javascript:void();" onclick="pyro_call('Pyro.NameServer','$meta'); return false;">Pyro.NameServer/$meta</a>
|
|
134
138
|
-- gives meta info of the name server (methods)</li>
|
|
135
|
-
<li><a href="
|
|
139
|
+
<li><a href="javascript:void();" onclick="pyro_call('Pyro.NameServer','list'); return false;">Pyro.NameServer/list</a>
|
|
136
140
|
-- lists the contents of the name server</li>
|
|
137
|
-
<li><a href="
|
|
141
|
+
<li><a href="javascript:void();"
|
|
138
142
|
onclick="pyro_call('Pyro.NameServer','list', {{'prefix':'test.'}}); return false;">
|
|
139
143
|
Pyro.NameServer/list?prefix=test.</a> -- lists the contents of the name server starting with 'test.'</li>
|
|
140
|
-
<li><a href="
|
|
144
|
+
<li><a href="javascript:void();"
|
|
141
145
|
onclick="pyro_call('Pyro.NameServer','lookup', {{'name':'Pyro.NameServer'}}); return false;">
|
|
142
146
|
Pyro.NameServer/lookup?name=Pyro.NameServer</a> -- perform lookup method of the name server</li>
|
|
143
|
-
<li><a href="
|
|
147
|
+
<li><a href="javascript:void();"
|
|
144
148
|
onclick="pyro_call('Pyro.NameServer','lookup', {{'name':'test.echoserver'}}); return false;">
|
|
145
149
|
Pyro.NameServer/lookup?name=test.echoserver</a> -- perform lookup method of the echo server</li>
|
|
146
150
|
</ul>
|
|
147
151
|
<p>Echoserver examples: (these examples are working if you expose the test.echoserver object)</p>
|
|
148
152
|
<ul>
|
|
149
|
-
<li><a href="
|
|
153
|
+
<li><a href="javascript:void();" onclick="pyro_call('test.echoserver','error'); return false;">test.echoserver/error</a>
|
|
150
154
|
-- perform error call on echoserver</li>
|
|
151
|
-
<li><a href="
|
|
155
|
+
<li><a href="javascript:void();"
|
|
152
156
|
onclick="pyro_call('test.echoserver','echo', {{'message':'Hi there, browser script!'}}); return false;">
|
|
153
157
|
test.echoserver/echo?message=Hi there, browser script!</a> -- perform echo call on echoserver</li>
|
|
154
158
|
</ul>
|
|
@@ -182,7 +186,7 @@ def return_homepage(environ, start_response):
|
|
|
182
186
|
proxy._pyroBind()
|
|
183
187
|
methods = " ".join(proxy._pyroMethods) or "-"
|
|
184
188
|
attributes = [
|
|
185
|
-
"<a href=\"
|
|
189
|
+
"<a href=\"javascript:void();\" onclick=\"pyro_call('{name}','{attribute}'); return false;\">{attribute}</a>"
|
|
186
190
|
.format(name=name, attribute=attribute)
|
|
187
191
|
for attribute in proxy._pyroAttrs
|
|
188
192
|
]
|
|
@@ -193,7 +197,7 @@ def return_homepage(environ, start_response):
|
|
|
193
197
|
traceback.print_exc(file=stderr)
|
|
194
198
|
methods = "??error:%s??" % str(x)
|
|
195
199
|
nslist.append(
|
|
196
|
-
"<tr><td><a href=\"
|
|
200
|
+
"<tr><td><a href=\"javascript:void();\" onclick=\"pyro_call('{name}','$meta'); "
|
|
197
201
|
"return false;\">{name}</a></td><td>{methods}</td><td>{attributes}</td></tr>"
|
|
198
202
|
.format(name=name, methods=methods, attributes=attributes))
|
|
199
203
|
nslist.append("</table>")
|
|
@@ -304,7 +308,7 @@ def pyro_app(environ, start_response):
|
|
|
304
308
|
return option_request(start_response)
|
|
305
309
|
else:
|
|
306
310
|
"""GET POST"""
|
|
307
|
-
parameters = singlyfy_parameters(
|
|
311
|
+
parameters = singlyfy_parameters(urllib.parse.parse_qs(environ["QUERY_STRING"]))
|
|
308
312
|
return process_pyro_request(environ, path[5:], parameters, start_response)
|
|
309
313
|
else:
|
|
310
314
|
return invalid_request(start_response)
|
|
@@ -314,7 +318,7 @@ def pyro_app(environ, start_response):
|
|
|
314
318
|
|
|
315
319
|
def singlyfy_parameters(parameters):
|
|
316
320
|
"""
|
|
317
|
-
Makes a
|
|
321
|
+
Makes a parsed querystring parameter dictionary into a dict where the values that
|
|
318
322
|
are just a list of a single value, are converted to just that single value.
|
|
319
323
|
"""
|
|
320
324
|
for key, value in parameters.items():
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: Pyro5
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.16
|
|
4
4
|
Summary: Remote object communication library, fifth major version
|
|
5
5
|
Home-page: https://github.com/irmen/Pyro5
|
|
6
6
|
Author: Irmen de Jong
|
|
@@ -9,21 +9,19 @@ License: MIT
|
|
|
9
9
|
Keywords: distributed objects,RPC,remote method call,IPC
|
|
10
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
13
12
|
Classifier: Natural Language :: English
|
|
14
13
|
Classifier: Natural Language :: Dutch
|
|
15
14
|
Classifier: Operating System :: OS Independent
|
|
16
15
|
Classifier: Programming Language :: Python
|
|
17
|
-
Classifier: Programming Language :: Python :: 3
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
21
17
|
Classifier: Topic :: Software Development :: Object Brokering
|
|
22
18
|
Classifier: Topic :: System :: Distributed Computing
|
|
23
19
|
Classifier: Topic :: System :: Networking
|
|
24
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.7
|
|
25
21
|
Description-Content-Type: text/x-rst
|
|
26
22
|
License-File: LICENSE
|
|
23
|
+
Requires-Dist: serpent>=1.41
|
|
24
|
+
Dynamic: license-file
|
|
27
25
|
|
|
28
26
|
Pyro5
|
|
29
27
|
=====
|
|
@@ -36,11 +34,7 @@ Pyro5
|
|
|
36
34
|
.. image:: https://anaconda.org/conda-forge/pyro5/badges/version.svg
|
|
37
35
|
:target: https://anaconda.org/conda-forge/pyro5
|
|
38
36
|
|
|
39
|
-
|
|
40
|
-
:target: https://lgtm.com/projects/g/irmen/Pyro5/context:python
|
|
41
|
-
|
|
42
|
-
.. image:: https://img.shields.io/lgtm/alerts/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
|
|
43
|
-
:target: https://lgtm.com/projects/g/irmen/Pyro5/alerts
|
|
37
|
+
**Project status: super low maintenance mode. Not really worked on anymore, only reported bugs will be looked at.**
|
|
44
38
|
|
|
45
39
|
|
|
46
40
|
Info
|
|
@@ -68,7 +62,7 @@ New code should use Pyro5 if at all possible.
|
|
|
68
62
|
Features
|
|
69
63
|
--------
|
|
70
64
|
|
|
71
|
-
- written in 100% Python so extremely portable, supported on Python 3.
|
|
65
|
+
- written in 100% Python so extremely portable, supported on Python 3.9 and newer, and Pypy3
|
|
72
66
|
- works between different system architectures and operating systems.
|
|
73
67
|
- able to communicate between different Python versions transparently.
|
|
74
68
|
- defaults to a safe serializer (`serpent <https://pypi.python.org/pypi/serpent>`_) that supports many Python data types.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
.gitattributes
|
|
2
|
-
.lgtm.yml
|
|
3
2
|
LICENSE
|
|
4
3
|
MANIFEST.in
|
|
5
4
|
Makefile
|
|
@@ -253,8 +252,6 @@ examples/stockquotes/phase3/viewer.py
|
|
|
253
252
|
examples/streaming/Readme.txt
|
|
254
253
|
examples/streaming/client.py
|
|
255
254
|
examples/streaming/server.py
|
|
256
|
-
examples/test/client.py
|
|
257
|
-
examples/test/server.py
|
|
258
255
|
examples/thirdpartylib/Readme.txt
|
|
259
256
|
examples/thirdpartylib/awesome_thirdparty_library.py
|
|
260
257
|
examples/thirdpartylib/client.py
|
|
@@ -9,11 +9,7 @@ Pyro5
|
|
|
9
9
|
.. image:: https://anaconda.org/conda-forge/pyro5/badges/version.svg
|
|
10
10
|
:target: https://anaconda.org/conda-forge/pyro5
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
:target: https://lgtm.com/projects/g/irmen/Pyro5/context:python
|
|
14
|
-
|
|
15
|
-
.. image:: https://img.shields.io/lgtm/alerts/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
|
|
16
|
-
:target: https://lgtm.com/projects/g/irmen/Pyro5/alerts
|
|
12
|
+
**Project status: super low maintenance mode. Not really worked on anymore, only reported bugs will be looked at.**
|
|
17
13
|
|
|
18
14
|
|
|
19
15
|
Info
|
|
@@ -41,7 +37,7 @@ New code should use Pyro5 if at all possible.
|
|
|
41
37
|
Features
|
|
42
38
|
--------
|
|
43
39
|
|
|
44
|
-
- written in 100% Python so extremely portable, supported on Python 3.
|
|
40
|
+
- written in 100% Python so extremely portable, supported on Python 3.9 and newer, and Pypy3
|
|
45
41
|
- works between different system architectures and operating systems.
|
|
46
42
|
- able to communicate between different Python versions transparently.
|
|
47
43
|
- defaults to a safe serializer (`serpent <https://pypi.python.org/pypi/serpent>`_) that supports many Python data types.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIID5zCCAs+gAwIBAgIUH6vXMyAKUtztBwK3qFZ3PzeqwOMwDQYJKoZIhvcNAQEL
|
|
3
|
+
BQAwgYIxCzAJBgNVBAYTAk5MMRMwEQYDVQQIDApTb21lLVN0YXRlMRYwFAYDVQQK
|
|
4
|
+
DA1SYXpvcnZpbmUubmV0MQ4wDAYDVQQLDAVQeXJvNTESMBAGA1UEAwwJbG9jYWxo
|
|
5
|
+
b3N0MSIwIAYJKoZIhvcNAQkBFhNpcm1lbkByYXpvcnZpbmUubmV0MB4XDTIzMTAx
|
|
6
|
+
ODIwMDUxMFoXDTI2MDcxMzIwMDUxMFowgYIxCzAJBgNVBAYTAk5MMRMwEQYDVQQI
|
|
7
|
+
DApTb21lLVN0YXRlMRYwFAYDVQQKDA1SYXpvcnZpbmUubmV0MQ4wDAYDVQQLDAVQ
|
|
8
|
+
eXJvNTESMBAGA1UEAwwJbG9jYWxob3N0MSIwIAYJKoZIhvcNAQkBFhNpcm1lbkBy
|
|
9
|
+
YXpvcnZpbmUubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4+xK
|
|
10
|
+
kHgMHDKvhAh0XUiEBaMCAs5T1sMZ4LTWxPhWYbIHilmyuxubl2jCGRzQ5YsnBc4Q
|
|
11
|
+
oyDefog53f36neYJjuI/04G50Ijif9qvrxs/1DTkre+ukvXeThU9lAtfX4F8XLE0
|
|
12
|
+
y1jeOSSkuPMeynStpPb3KQgrxNM1EOzTKwTZZOyeLQpZNytKwcNedPFUlJLXJbZt
|
|
13
|
+
xWWZZUsCCnukLemq03Uc/qG/UvP7yXrLFyJTMo8JQytdsfC3mnlNeVqt0lHIU3tJ
|
|
14
|
+
dzxl48qYFhDXDGpNDmDqv0BNTxe12kdFkBLjys/JYMNAgKVvZRN1YK4FMH3sWnvJ
|
|
15
|
+
MAJLpSJeF1rqe5WhAwIDAQABo1MwUTAdBgNVHQ4EFgQUwsK62EoZPhoTBMNw5Fde
|
|
16
|
+
33m9XnMwHwYDVR0jBBgwFoAUwsK62EoZPhoTBMNw5Fde33m9XnMwDwYDVR0TAQH/
|
|
17
|
+
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAPt4W0fZ6Upl7mZx/3YrpW7pCi4aD
|
|
18
|
+
FvJ0EfZ+Jc74cMziegMrXe8C6UECybdWCT2UyR1wzwJ8rBaZ+CTXxzLQz1Z5c5DV
|
|
19
|
+
Am7SgKUe9j29/hVIQbj2BfEmD0ls5hVB0waOS3b7i9T0mSjZv52xqBLfnpryI1Ln
|
|
20
|
+
r/Fa1Z2SvWxEHyQ+scFyoQV514X8Rjiugb4PickYYCSgIwTyGS7+HfpDydhxHNgO
|
|
21
|
+
m0Bcplw1jNt3rLPZhO/B3lhIEuetPirwKVsS4P5R60k5J+4rkst0SKqFdkyWWeFK
|
|
22
|
+
7pQPZMakBA7U2r+XFDlBGGrqiN0Q9mVVDKMvZY3Aq53SdVPgOfFBdoy/+w==
|
|
23
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDj7EqQeAwcMq+E
|
|
3
|
+
CHRdSIQFowICzlPWwxngtNbE+FZhsgeKWbK7G5uXaMIZHNDliycFzhCjIN5+iDnd
|
|
4
|
+
/fqd5gmO4j/TgbnQiOJ/2q+vGz/UNOSt766S9d5OFT2UC19fgXxcsTTLWN45JKS4
|
|
5
|
+
8x7KdK2k9vcpCCvE0zUQ7NMrBNlk7J4tClk3K0rBw1508VSUktcltm3FZZllSwIK
|
|
6
|
+
e6Qt6arTdRz+ob9S8/vJessXIlMyjwlDK12x8LeaeU15Wq3SUchTe0l3PGXjypgW
|
|
7
|
+
ENcMak0OYOq/QE1PF7XaR0WQEuPKz8lgw0CApW9lE3VgrgUwfexae8kwAkulIl4X
|
|
8
|
+
Wup7laEDAgMBAAECggEAPbBUtilnzbICQ1AufpkD8qqd/rhthLElreYEQyeb6bFP
|
|
9
|
+
zShd8bqVMDPQZQ+hkp9JHo8Zfa2FyuWAFA+L53S9nYirEcoIyuJhu40rA8/yRLNU
|
|
10
|
+
OaenrmsRkjy5f/pcA/N9/3CPA4K4EutSEiTrboyJ+x5E4zws7Ibl1ADlXr1fQasu
|
|
11
|
+
ZdIwgs59iWefdPIerqCE9PvKwkz/le3Soum4Do3Mb+M5rKqV9H+dmyjqd+c/DR9S
|
|
12
|
+
xw42VwbNkTMJaSky8pidZKmlUt/U7picXxi7pBHpA0aK822jRnAmIv5+LnfV6X4P
|
|
13
|
+
OlgpJsmBIs6JCLsyQVRtot1+5JHKcUuTeegccP2BkQKBgQD/gPZmPEObKfPSEUJP
|
|
14
|
+
O9D7LE+tyLLfIkiLLi9sOK0XjUBvBaxppxl/koxmPck3A6VBXKn/WGh8JA5h1AUG
|
|
15
|
+
v2N9ymcPfl7UcZEZUDXTiIemapVT4XSwwCiuKdMpCi/pD5O82Gb9w4hoMrntWnsr
|
|
16
|
+
2yx7dQ+j698GGI1GbbmvEzHCzQKBgQDkXZ2SGJ7/+34FulddUK/LydJcX8PRKrbU
|
|
17
|
+
t7E7CuMcEWrV+vmgYtUOoifW/yLNUeRE6E89T46wesR6fmqT8I82HBmnN5JSKzls
|
|
18
|
+
a1H7n6F1hihivMQJ9DpUVkzlduB2dGa6sht+78Lil4ZcP0oZfdzt+gPyqmUnqJwR
|
|
19
|
+
B/59Dw4TDwKBgQDcC7spjVlENrtP/aE4D/IJf74XkzPJzALiKyKYd69LC1GkzCQS
|
|
20
|
+
0eC56AKWwzuZ77/RLPcTfJZv47WnNywlBYuv+DMOOu181Vn7jQLubTU2c7Crjw4q
|
|
21
|
+
czQV2tuLCsT8WXgJOe5pOo8t/hH2guh1essygDy6Fhf7bgWt1C4Iw+UlOQKBgQDb
|
|
22
|
+
G3cz1au4r/QaSs/IGMKTJPFQ8BFRf0osjpLds3R0WcHHzSX1XN5PTAYtol4h4ZDD
|
|
23
|
+
DKH6kXq2mRQq82AO0aCWqh9y8T7S1+YgwFfItUCVIkNdeQAfDNVqVeMxxv1Wqhhm
|
|
24
|
+
yLzY7fJutjOUDqVqD/kJ2/gtvI+RnZUgQitKkkdOwQKBgBUZ4XhDau/XUbP+wdym
|
|
25
|
+
rPbI1sZ2lmZx+UKjhurl8Ev8GKHqU3RJo+bfIkhxl/+jHQLY/etIeIsErp4YbxSf
|
|
26
|
+
ppQ32t5cMzNG0fvXDpVcm++e1R8dtLaiZtc2KorV+MYP2mXkSMeoqTpGII6hg9qo
|
|
27
|
+
1IqrIzI5XWAVTc5uX0jC7RsM
|
|
28
|
+
-----END PRIVATE KEY-----
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIID5zCCAs+gAwIBAgIUY7Wi63Hix4y+QgDH6rljTntmlAcwDQYJKoZIhvcNAQEL
|
|
3
|
+
BQAwgYIxCzAJBgNVBAYTAk5MMRMwEQYDVQQIDApTb21lLVN0YXRlMRYwFAYDVQQK
|
|
4
|
+
DA1SYXpvcnZpbmUubmV0MQ4wDAYDVQQLDAVQeXJvNTESMBAGA1UEAwwJbG9jYWxo
|
|
5
|
+
b3N0MSIwIAYJKoZIhvcNAQkBFhNpcm1lbkByYXpvcnZpbmUubmV0MB4XDTIzMTAx
|
|
6
|
+
ODIwMDY0NVoXDTI2MDcxMzIwMDY0NVowgYIxCzAJBgNVBAYTAk5MMRMwEQYDVQQI
|
|
7
|
+
DApTb21lLVN0YXRlMRYwFAYDVQQKDA1SYXpvcnZpbmUubmV0MQ4wDAYDVQQLDAVQ
|
|
8
|
+
eXJvNTESMBAGA1UEAwwJbG9jYWxob3N0MSIwIAYJKoZIhvcNAQkBFhNpcm1lbkBy
|
|
9
|
+
YXpvcnZpbmUubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxNxk
|
|
10
|
+
TbBAMb6FG6oip8SrSvKsXPNZNRg4qbSezQ2TJJTxDZ8z01km5yuBW+vnb8NymCet
|
|
11
|
+
sKiUvWmegy8z5Rz8idp2tHJP3NjdiLdwueCZ8tA49LUC85UWobxdBKRiRocsu7Ns
|
|
12
|
+
MVAMvIWF46+z5h5NzsQTAUXtMCU5g8CjR1kAKox1JTkU75rRREOdx0oVMzHf4rgi
|
|
13
|
+
WJfyuIlcloGWx4nFEiRfpfuU+qiUvEIwaIBPwxOuco5R1/1CoUJfAbJejggmmJ+L
|
|
14
|
+
TdtZvS21YSZUh2xDfDVTYbumNzncN/euZwC91dplz9beALDWaLdQku5Fq0975k1S
|
|
15
|
+
/hWRfDYp+hqMBfVwzQIDAQABo1MwUTAdBgNVHQ4EFgQULMZobyPRpnoDA09X2slN
|
|
16
|
+
Vv5dLBkwHwYDVR0jBBgwFoAULMZobyPRpnoDA09X2slNVv5dLBkwDwYDVR0TAQH/
|
|
17
|
+
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEARWouYRd/6ySsoML9Ji5D2UnU8DSm
|
|
18
|
+
eC3KFJ8ATW65/WZD1ZcCkbjVvk1m09yPGr+Ko5kZ329uopSzrlTyncmMgC+rEXgI
|
|
19
|
+
1bzBkqTUexQG797/oAY1VxqQTrczjLnO1UkzKTBbFQn3BxkMRdFbU/FmVDgDZ6ix
|
|
20
|
+
Yv2W688MoGGc8uL3BH8UM4ShBSbXvJVRvBRbqD4HwpFrIWR9+YuMnhBiI0RHnpE7
|
|
21
|
+
d2VEOZRfrI+wb/LlpqWkRW2SsoQRMrk5aGK+hQOSS6wCGKQkM4tC/U/5owdkAW3q
|
|
22
|
+
OZ/4pGyKK8PHTZoH5XYcZzdKFokZZjFT/O+1HoRbHF9QsO+r5xIdbZSxEQ==
|
|
23
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDE3GRNsEAxvoUb
|
|
3
|
+
qiKnxKtK8qxc81k1GDiptJ7NDZMklPENnzPTWSbnK4Fb6+dvw3KYJ62wqJS9aZ6D
|
|
4
|
+
LzPlHPyJ2na0ck/c2N2It3C54Jny0Dj0tQLzlRahvF0EpGJGhyy7s2wxUAy8hYXj
|
|
5
|
+
r7PmHk3OxBMBRe0wJTmDwKNHWQAqjHUlORTvmtFEQ53HShUzMd/iuCJYl/K4iVyW
|
|
6
|
+
gZbHicUSJF+l+5T6qJS8QjBogE/DE65yjlHX/UKhQl8Bsl6OCCaYn4tN21m9LbVh
|
|
7
|
+
JlSHbEN8NVNhu6Y3Odw3965nAL3V2mXP1t4AsNZot1CS7kWrT3vmTVL+FZF8Nin6
|
|
8
|
+
GowF9XDNAgMBAAECggEAD8upRqyGMheZ4ZLgrfpzThOzrc+e0EpNvZwvA7/7lvtW
|
|
9
|
+
biPgiixEmVbdzczbaJXTm47PenXEXYBchiUi8lbFkqATVz421z8VY3NomZmCcL+x
|
|
10
|
+
Wj0t6/KB+t88zXMNKaCN/8+RNlG4e+XwzMib1DKJRrZn2fnM4siR2Vb7Iu3qu/8e
|
|
11
|
+
BkZQZwjpmZC4hr0JborBRqW+U4mLPuGtVkR7cXNQ3qm/MV9xy/urmGYmwfVVeH5e
|
|
12
|
+
xUue9B69RdUs/eNRnjmOmR56AVLJt2JXSCLrLR+TB1NVGEXZ7VBUaIUSjxgCPh6R
|
|
13
|
+
IoPahnnFJBMUQOVGERispLc0iJi+CEakr6NJnmOUxwKBgQDxZqyd+HbgDIXoKJhW
|
|
14
|
+
g63NTDfHuW3Dg0f+nh3owvhESFD6fIwJriE3ox7QzBlLEUSANToEnUf6ZLGAAaMG
|
|
15
|
+
Jw3Mt4ZaoRZ/Z4Tu0LrbyYkVBGE57Qg5HX9pdBMlAVlY6ek/d5hRZGEds566pt/9
|
|
16
|
+
Ca2Q78edIfeTdLMClJ2OP5XQIwKBgQDQxCe02VS9kOmwrjic8cO107groP8ovJ9W
|
|
17
|
+
0Qm0Alc2vhAonl2lFIU9/IAhqAiA6viSnbPnM8LrLOR3717xHnS5gjYgTYGYYo64
|
|
18
|
+
3GeDWkUG8Tn/PCI+VRW34M+4id7s3Oh/BFbwAWMwZv9mh8Ru7UxxaBt4xa9nA3aL
|
|
19
|
+
/IEkJyVSTwKBgQCUkjulEfmf1TVI+Esh2/NJCiK+gopirVbPB2OjEPQZmmR0ddj+
|
|
20
|
+
UDRTeMqLeUIL6Hm/aoLluiNFoVl5TgiWzcx5dW50MvaUvRKcpMyMXtJGpCZur0rD
|
|
21
|
+
VDtJnM33lYf26CfNDv8pAN2gmR8VA4WRx7YSIPE67V/hWg6ehPcfSFUc/wKBgQCW
|
|
22
|
+
OuH78X1aoQKaAvV4cz4MBZx9wPB9JydeuTTLVffey+0i3buzxM2RarfmAF6GLxDL
|
|
23
|
+
qTLCCOyWggqzCA2BZBJJQJukqUG+IAZmnyzaSEZuFX9P3b0ir+XeGahBOu2x89JX
|
|
24
|
+
PQ82zTjMpwHZjY/c52TgIzPJuDBd6A8R85YXJxhjXwKBgQCM1AG9kgSn+0Yuc8XI
|
|
25
|
+
blTUWZKU+v9yIJoI+T02qZj1EwlwSR6iVSlmI2+Y72jpT0BcgPCEwsAiDro+RmmM
|
|
26
|
+
2CrOkOuaZAa+lKrYAR/9zoFxFpQyP0U4F5CtBv/zn1k4DXWpk9XaFgVsyQgakLRa
|
|
27
|
+
oYBrU6tJTMtbETSwyB2F+jDWmQ==
|
|
28
|
+
-----END PRIVATE KEY-----
|
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
Change Log
|
|
3
3
|
**********
|
|
4
4
|
|
|
5
|
+
**Pyro 5.16**
|
|
6
|
+
|
|
7
|
+
- project going into super low maintenance mode, I don't plan on working on it any longer unless nasty bugs are reported.
|
|
8
|
+
- properties can now be a streaming generator too
|
|
9
|
+
- loopCondition is relayed from start_ns_loop() to its daemon
|
|
10
|
+
- removed Python 3.8 and 3.9 from the support list (they are EOL). Now supported on Python 3.10 or newer.
|
|
11
|
+
- docs: clarify @expose on a class not automatically exposing base class(es).
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
**Pyro 5.15**
|
|
15
|
+
|
|
16
|
+
- removed Python 3.7 from the support list (it is EOL). Now supported on Python 3.8 or newer.
|
|
17
|
+
- fixed cgi.parse deprecation problem in http gateway
|
|
18
|
+
- removed jquery dependency in http gateway
|
|
19
|
+
- some small tweaks to setup, tests, examples, and docs.
|
|
20
|
+
- updated the self-signed example certificates and serial numbers in the ssl example.
|
|
21
|
+
|
|
22
|
+
|
|
5
23
|
**Pyro 5.14**
|
|
6
24
|
|
|
7
25
|
- http gateway now also has OPTION call with CORS
|