Pyro5 5.15__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.15 → pyro5-5.16}/.github/workflows/main-ci.yml +3 -3
- {Pyro5-5.15 → pyro5-5.16}/Makefile +2 -5
- {Pyro5-5.15 → pyro5-5.16}/PKG-INFO +7 -7
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/__init__.py +1 -1
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/client.py +1 -1
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/nameserver.py +3 -2
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/server.py +15 -3
- {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/PKG-INFO +7 -7
- {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/entry_points.txt +0 -1
- {Pyro5-5.15 → pyro5-5.16}/Readme.rst +3 -1
- {Pyro5-5.15 → pyro5-5.16}/docs/source/changelog.rst +9 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/clientcode.rst +3 -3
- {Pyro5-5.15 → pyro5-5.16}/docs/source/intro.rst +1 -1
- {Pyro5-5.15 → pyro5-5.16}/docs/source/servercode.rst +4 -1
- {Pyro5-5.15 → pyro5-5.16}/docs/source/tipstricks.rst +5 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/streaming/client.py +4 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/streaming/server.py +8 -0
- {Pyro5-5.15 → pyro5-5.16}/setup.cfg +0 -1
- {Pyro5-5.15 → pyro5-5.16}/test-requirements.txt +1 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_daemon.py +15 -3
- {Pyro5-5.15 → pyro5-5.16}/tests/test_server.py +2 -2
- {Pyro5-5.15 → pyro5-5.16}/tests/test_socketutil.py +9 -4
- {Pyro5-5.15 → pyro5-5.16}/tox.ini +1 -1
- {Pyro5-5.15 → pyro5-5.16}/.gitattributes +0 -0
- {Pyro5-5.15 → pyro5-5.16}/LICENSE +0 -0
- {Pyro5-5.15 → pyro5-5.16}/MANIFEST.in +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/api.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/callcontext.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/compatibility/Pyro4.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/compatibility/__init__.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/configure.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/core.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/errors.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/nsc.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/protocol.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/serializers.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/socketutil.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/svr_existingconn.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/svr_multiplex.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/svr_threads.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/utils/__init__.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/utils/echoserver.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5/utils/httpgateway.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/SOURCES.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/dependency_links.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/requires.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/top_level.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/zip-safe +0 -0
- {Pyro5-5.15 → pyro5-5.16}/certs/client_cert.pem +0 -0
- {Pyro5-5.15 → pyro5-5.16}/certs/client_key.pem +0 -0
- {Pyro5-5.15 → pyro5-5.16}/certs/readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/certs/server_cert.pem +0 -0
- {Pyro5-5.15 → pyro5-5.16}/certs/server_key.pem +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/Makefile +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/make.bat +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/_static/css/customize.css +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/_static/flammable.png +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/_static/pyro-large.png +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/_static/pyro.png +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/_static/tf_pyrotaunt.png +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/api.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/callcontext.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/client.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/compatibility.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/config.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/core.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/echoserver.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/errors.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/httpgateway.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/nameserver.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/protocol.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/server.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/socketserver.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api/socketutil.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/api.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/commandline.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/conf.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/config.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/docutils.conf +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/errors.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/index.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/install.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/license.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/nameserver.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/pyrolite.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/security.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/docs/source/tutorials.rst +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/attributes/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/attributes/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/attributes/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoproxy/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoproxy/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoproxy/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoproxy/thingy.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoreconnect/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoreconnect/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoreconnect/clientNS.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoreconnect/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoreconnect/serverNS.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoretry/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoretry/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/autoretry/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/banks/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/banks/banks.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/banks/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/banks/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/batchedcalls/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/batchedcalls/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/batchedcalls/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/benchmark/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/benchmark/bench.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/benchmark/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/benchmark/connections.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/benchmark/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/client/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/client/customdata.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/dispatcher/dispatcher.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/listeners/customdata.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/listeners/listener.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/listeners/main.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/callback/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/callback/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/callback/client2.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/callback/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/callback/server2.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/callcontext/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/callcontext/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/callcontext/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/chatbox/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/chatbox/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/chatbox/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/circular/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/circular/chain.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/circular/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/circular/servA.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/circular/servB.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/circular/servC.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/custom-serialization/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/custom-serialization/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/custom-serialization/mycustomclasses.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/custom-serialization/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/diffie-hellman/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/diffie-hellman/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/diffie-hellman/diffiehellman.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/diffie-hellman/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/disconnects/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/disconnects/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/disconnects/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing/dispatcher.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing/worker.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing/workitem.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing2/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing2/alice.zip +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing2/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing2/servers.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing3/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing3/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing3/worker.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/client_asciizoom.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/client_graphics.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/launch_servers.sh +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/normal.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/normal_graphics.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/echoserver/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/echoserver/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/eventloop/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/eventloop/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/eventloop/server_multiplexed.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/eventloop/server_threads.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/exceptions/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/exceptions/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/exceptions/excep.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/exceptions/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/filetransfer/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/filetransfer/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/filetransfer/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/gui_eventloop/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/gui_eventloop/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/gui_eventloop/gui_nothreads.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/gui_eventloop/gui_threads.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/handshake/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/handshake/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/handshake/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/http/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/http/client.js +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/http/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/hugetransfer/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/hugetransfer/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/hugetransfer/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/instancemode/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/instancemode/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/instancemode/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/maxsize/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/maxsize/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/manytopics_publisher.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/manytopics_subscriber.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/messagebus/__init__.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/messagebus/messagebus.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/messagebus/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/publisher.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/subscriber.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/subscriber_manual_consume.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/nameserverstress/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/nameserverstress/stress.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/nonameserver/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/nonameserver/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/nonameserver/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/ns-metadata/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/ns-metadata/example.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/ns-metadata/resources.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/oneway/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/oneway/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/oneway/client2.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/oneway/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/oneway/server2.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/privilege-separation/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/privilege-separation/drop_privs_client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/privilege-separation/drop_privs_server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/privilege-separation/elevated_client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/privilege-separation/elevated_server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/resourcetracking/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/resourcetracking/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/resourcetracking/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/robots/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/robots/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/robots/gameserver.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/robots/remote.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/robots/robot.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/servertypes/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/servertypes/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/servertypes/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/shoppingcart/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/shoppingcart/clients.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/shoppingcart/shoppingcart.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/shoppingcart/shopserver.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/socketpair/pair-fork.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/socketpair/pair-thread.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/socketpair/readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/ssl/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/ssl/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/ssl/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase1/stockmarket.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase1/viewer.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase2/stockmarket.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase2/viewer.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase3/stockmarket.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase3/viewer.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/streaming/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/thirdpartylib/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/thirdpartylib/awesome_thirdparty_library.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/thirdpartylib/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/thirdpartylib/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/thirdpartylib/server2.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/threadproxysharing/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/threadproxysharing/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/timeout/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/timeout/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/timeout/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/timezones/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/timezones/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/timezones/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/unixdomainsock/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/unixdomainsock/abstract_namespace_server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/unixdomainsock/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/unixdomainsock/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/usersession/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/usersession/client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/usersession/database.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/usersession/server.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/Readme.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase1/person.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase1/visit.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase1/warehouse.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase2/person.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase2/visit.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase2/warehouse.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase3/person.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase3/visit.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase3/warehouse.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/mypy.ini +0 -0
- {Pyro5-5.15 → pyro5-5.16}/requirements.txt +0 -0
- {Pyro5-5.15 → pyro5-5.16}/setup.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/support.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_api.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_client.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_core.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_echoserver.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_errors.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_httpgateway.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_naming.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_protocol.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_pyro4compat.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_serialize.py +0 -0
- {Pyro5-5.15 → pyro5-5.16}/tests/test_server_timeout.py +0 -0
- {Pyro5-5.15 → 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,16 +1,14 @@
|
|
|
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
|
|
7
7
|
Author-email: irmen@razorvine.net
|
|
8
8
|
License: MIT
|
|
9
9
|
Keywords: distributed objects,RPC,remote method call,IPC
|
|
10
|
-
Platform: UNKNOWN
|
|
11
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
12
11
|
Classifier: Intended Audience :: Developers
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
12
|
Classifier: Natural Language :: English
|
|
15
13
|
Classifier: Natural Language :: Dutch
|
|
16
14
|
Classifier: Operating System :: OS Independent
|
|
@@ -22,6 +20,8 @@ Classifier: Topic :: System :: Networking
|
|
|
22
20
|
Requires-Python: >=3.7
|
|
23
21
|
Description-Content-Type: text/x-rst
|
|
24
22
|
License-File: LICENSE
|
|
23
|
+
Requires-Dist: serpent>=1.41
|
|
24
|
+
Dynamic: license-file
|
|
25
25
|
|
|
26
26
|
Pyro5
|
|
27
27
|
=====
|
|
@@ -34,6 +34,8 @@ Pyro5
|
|
|
34
34
|
.. image:: https://anaconda.org/conda-forge/pyro5/badges/version.svg
|
|
35
35
|
:target: https://anaconda.org/conda-forge/pyro5
|
|
36
36
|
|
|
37
|
+
**Project status: super low maintenance mode. Not really worked on anymore, only reported bugs will be looked at.**
|
|
38
|
+
|
|
37
39
|
|
|
38
40
|
Info
|
|
39
41
|
----
|
|
@@ -60,7 +62,7 @@ New code should use Pyro5 if at all possible.
|
|
|
60
62
|
Features
|
|
61
63
|
--------
|
|
62
64
|
|
|
63
|
-
- 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
|
|
64
66
|
- works between different system architectures and operating systems.
|
|
65
67
|
- able to communicate between different Python versions transparently.
|
|
66
68
|
- defaults to a safe serializer (`serpent <https://pypi.python.org/pypi/serpent>`_) that supports many Python data types.
|
|
@@ -87,5 +89,3 @@ Features
|
|
|
87
89
|
- large amount of unit tests and high test coverage.
|
|
88
90
|
- reliable and established: built upon more than 20 years of existing Pyro history, with ongoing support and development.
|
|
89
91
|
|
|
90
|
-
|
|
91
|
-
|
|
@@ -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
|
|
|
@@ -1,16 +1,14 @@
|
|
|
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
|
|
7
7
|
Author-email: irmen@razorvine.net
|
|
8
8
|
License: MIT
|
|
9
9
|
Keywords: distributed objects,RPC,remote method call,IPC
|
|
10
|
-
Platform: UNKNOWN
|
|
11
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
12
11
|
Classifier: Intended Audience :: Developers
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
12
|
Classifier: Natural Language :: English
|
|
15
13
|
Classifier: Natural Language :: Dutch
|
|
16
14
|
Classifier: Operating System :: OS Independent
|
|
@@ -22,6 +20,8 @@ Classifier: Topic :: System :: Networking
|
|
|
22
20
|
Requires-Python: >=3.7
|
|
23
21
|
Description-Content-Type: text/x-rst
|
|
24
22
|
License-File: LICENSE
|
|
23
|
+
Requires-Dist: serpent>=1.41
|
|
24
|
+
Dynamic: license-file
|
|
25
25
|
|
|
26
26
|
Pyro5
|
|
27
27
|
=====
|
|
@@ -34,6 +34,8 @@ Pyro5
|
|
|
34
34
|
.. image:: https://anaconda.org/conda-forge/pyro5/badges/version.svg
|
|
35
35
|
:target: https://anaconda.org/conda-forge/pyro5
|
|
36
36
|
|
|
37
|
+
**Project status: super low maintenance mode. Not really worked on anymore, only reported bugs will be looked at.**
|
|
38
|
+
|
|
37
39
|
|
|
38
40
|
Info
|
|
39
41
|
----
|
|
@@ -60,7 +62,7 @@ New code should use Pyro5 if at all possible.
|
|
|
60
62
|
Features
|
|
61
63
|
--------
|
|
62
64
|
|
|
63
|
-
- 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
|
|
64
66
|
- works between different system architectures and operating systems.
|
|
65
67
|
- able to communicate between different Python versions transparently.
|
|
66
68
|
- defaults to a safe serializer (`serpent <https://pypi.python.org/pypi/serpent>`_) that supports many Python data types.
|
|
@@ -87,5 +89,3 @@ Features
|
|
|
87
89
|
- large amount of unit tests and high test coverage.
|
|
88
90
|
- reliable and established: built upon more than 20 years of existing Pyro history, with ongoing support and development.
|
|
89
91
|
|
|
90
|
-
|
|
91
|
-
|
|
@@ -9,6 +9,8 @@ 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
|
+
**Project status: super low maintenance mode. Not really worked on anymore, only reported bugs will be looked at.**
|
|
13
|
+
|
|
12
14
|
|
|
13
15
|
Info
|
|
14
16
|
----
|
|
@@ -35,7 +37,7 @@ New code should use Pyro5 if at all possible.
|
|
|
35
37
|
Features
|
|
36
38
|
--------
|
|
37
39
|
|
|
38
|
-
- 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
|
|
39
41
|
- works between different system architectures and operating systems.
|
|
40
42
|
- able to communicate between different Python versions transparently.
|
|
41
43
|
- defaults to a safe serializer (`serpent <https://pypi.python.org/pypi/serpent>`_) that supports many Python data types.
|
|
@@ -2,6 +2,15 @@
|
|
|
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
|
+
|
|
5
14
|
**Pyro 5.15**
|
|
6
15
|
|
|
7
16
|
- removed Python 3.7 from the support list (it is EOL). Now supported on Python 3.8 or newer.
|
|
@@ -125,9 +125,7 @@ For normal usage, there's not a single line of Pyro specific code once you have
|
|
|
125
125
|
Accessing remote attributes
|
|
126
126
|
===========================
|
|
127
127
|
You can access exposed attributes of your remote objects directly via the proxy.
|
|
128
|
-
If you try to access an undefined or unexposed attribute, the proxy will raise an AttributeError stating the problem
|
|
129
|
-
Note that direct remote attribute access only works if the metadata feature is enabled (``METADATA`` config item, enabled by default).
|
|
130
|
-
::
|
|
128
|
+
If you try to access an undefined or unexposed attribute, the proxy will raise an AttributeError stating the problem::
|
|
131
129
|
|
|
132
130
|
import Pyro5.api
|
|
133
131
|
|
|
@@ -358,6 +356,8 @@ because the remote generator has been discarded in the meantime.
|
|
|
358
356
|
Lingering can be disabled completely by setting the value to 0, then all remote generators from a proxy will
|
|
359
357
|
immediately be discarded in the server if the proxy gets disconnected or closed.
|
|
360
358
|
|
|
359
|
+
Remote properties can also be iterators or generators.
|
|
360
|
+
|
|
361
361
|
There are several examples that use the remote iterator feature. Have a look at the
|
|
362
362
|
`streaming <https://github.com/irmen/Pyro5/tree/master/examples/streaming>`_ ,
|
|
363
363
|
`stockquotes <https://github.com/irmen/Pyro5/tree/master/examples/stockquotes>`_ or the
|
|
@@ -119,7 +119,7 @@ What has been changed since Pyro4
|
|
|
119
119
|
|
|
120
120
|
If you're familiar with Pyro4, most of the things are the same in Pyro5. These are the changes though:
|
|
121
121
|
|
|
122
|
-
- Supported on Python 3.
|
|
122
|
+
- Supported on Python 3.9 or newer.
|
|
123
123
|
- the Pyro5 API is redesigned and this library is not compatible with Pyro4 code (although everything should be familiar):
|
|
124
124
|
|
|
125
125
|
- Pyro5 is the new package name
|
|
@@ -41,7 +41,10 @@ It lets you mark the following items to be available for remote access:
|
|
|
41
41
|
- properties (these will be available as remote attributes on the proxy) It's not possible to expose a 'private' property
|
|
42
42
|
(name starting with underscore). You can't expose attributes directly. It is required to provide a @property for them
|
|
43
43
|
and decorate that with ``@expose``, if you want to provide a remotely accessible attribute.
|
|
44
|
-
- classes as a whole (exposing a class has the effect of exposing every nonprivate method and property of the class automatically)
|
|
44
|
+
- classes as a whole (exposing a class has the effect of exposing every nonprivate method and property of the class automatically).
|
|
45
|
+
*Note*: only the direct members of the class are exposed. If it's part of a class hierarchy, the members of the base class(es) are *not*
|
|
46
|
+
automatically exposed as well - you'll still have to ``@expose`` those explicitly. This is to avoid making
|
|
47
|
+
stuff remotely accessible by accident.
|
|
45
48
|
|
|
46
49
|
Anything that isn't decorated with ``@expose`` is not remotely accessible.
|
|
47
50
|
|
|
@@ -379,6 +379,11 @@ These errors are caused by Numpy datatypes not being recognised by Pyro's serial
|
|
|
379
379
|
would require a mapping to the appropriate Java or .NET type)
|
|
380
380
|
|
|
381
381
|
|
|
382
|
+
.. sidebar:: msgpack + Numpy
|
|
383
|
+
|
|
384
|
+
*msgpack-numpy* (https://pypi.org/project/msgpack-numpy/) 'provides encoding and decoding routines that enable the serialization and deserialization of numerical and array data types provided by numpy using the highly efficient msgpack format'.
|
|
385
|
+
Pyro5 supports msgpack as serializer, so using that together with this library may solve the Numpy data serialization issues.
|
|
386
|
+
|
|
382
387
|
If you still want to use numpy with Pyro, you'll have to convert the data to standard Python datatypes before using them in Pyro.
|
|
383
388
|
So instead of just ``na = numpy.array(...); return na;``, use this instead: ``return na.tolist()``.
|
|
384
389
|
Or perhaps even ``return array.array('i', na)`` (serpent understands ``array.array`` just fine).
|
|
@@ -35,6 +35,14 @@ class Streamer(object):
|
|
|
35
35
|
yield a
|
|
36
36
|
a, b = b, a + b
|
|
37
37
|
|
|
38
|
+
@property
|
|
39
|
+
def prop_iter(self):
|
|
40
|
+
return iter([1,2,3,4,5,6,7,8,9,10])
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def prop_generator(self):
|
|
44
|
+
return (x for x in range(10))
|
|
45
|
+
|
|
38
46
|
|
|
39
47
|
serve({
|
|
40
48
|
Streamer: "example.streamer"
|
|
@@ -182,12 +182,24 @@ class TestDaemon:
|
|
|
182
182
|
assert not(hasattr(o1, "_pyroId"))
|
|
183
183
|
assert not(hasattr(o1, "_pyroDaemon"))
|
|
184
184
|
o1._pyroId = "FOOBAR"
|
|
185
|
-
|
|
186
|
-
d.register(o1)
|
|
187
|
-
assert str(x.value) == "object or class already has a Pyro id"
|
|
185
|
+
d.register(o1)
|
|
188
186
|
o1._pyroId = ""
|
|
189
187
|
d.register(o1) # with empty-string _pyroId register should work
|
|
190
188
|
|
|
189
|
+
def testRegisterInstanceAndClass(self):
|
|
190
|
+
with Pyro5.server.Daemon(port=0) as d:
|
|
191
|
+
o1 = MyObj("object1")
|
|
192
|
+
o2 = MyObj("object2")
|
|
193
|
+
d.register(MyObj)
|
|
194
|
+
d.register(o1)
|
|
195
|
+
d.register(o2)
|
|
196
|
+
with pytest.raises(DaemonError) as x:
|
|
197
|
+
d.register(o2)
|
|
198
|
+
assert str(x.value) == "object or class already has a Pyro id"
|
|
199
|
+
with pytest.raises(DaemonError) as x:
|
|
200
|
+
d.register(MyObj)
|
|
201
|
+
assert str(x.value) == "object or class already has a Pyro id"
|
|
202
|
+
|
|
191
203
|
def testRegisterTwiceForced(self):
|
|
192
204
|
with Pyro5.server.Daemon(port=0) as d:
|
|
193
205
|
o1 = MyObj("object1")
|
|
@@ -278,7 +278,7 @@ class TestServerOnce:
|
|
|
278
278
|
assert p._pyroAttrs == set()
|
|
279
279
|
assert p._pyroMethods == set()
|
|
280
280
|
assert p._pyroOneway == set()
|
|
281
|
-
# connecting it should obtain metadata
|
|
281
|
+
# connecting it should obtain metadata
|
|
282
282
|
p._pyroBind()
|
|
283
283
|
assert p._pyroAttrs == {'value', 'dictionary'}
|
|
284
284
|
assert p._pyroMethods == {'echo', 'getDict', 'divide', 'nonserializableException', 'ping', 'oneway_delay', 'delayAndId', 'delay', 'testargs',
|
|
@@ -299,7 +299,7 @@ class TestServerOnce:
|
|
|
299
299
|
# read attributes
|
|
300
300
|
with Pyro5.client.Proxy(self.objectUri) as p:
|
|
301
301
|
# unconnected proxy still has empty metadata.
|
|
302
|
-
# but, as soon as an attribute is used, the metadata is obtained
|
|
302
|
+
# but, as soon as an attribute is used, the metadata is obtained
|
|
303
303
|
a = p.value
|
|
304
304
|
assert a == 12345
|
|
305
305
|
a = p.multiply
|
|
@@ -56,10 +56,15 @@ class TestSocketutil:
|
|
|
56
56
|
|
|
57
57
|
def testGetInterface(self):
|
|
58
58
|
addr = socketutil.get_interface("localhost")
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
if addr.version == 6:
|
|
60
|
+
assert str(addr).startswith("::1")
|
|
61
|
+
assert str(addr.ip) == "::1"
|
|
62
|
+
assert str(addr.network).startswith("::1")
|
|
63
|
+
else:
|
|
64
|
+
assert addr.version == 4
|
|
65
|
+
assert str(addr).startswith("127.")
|
|
66
|
+
assert str(addr.ip).startswith("127.0")
|
|
67
|
+
assert str(addr.network).startswith("127.0")
|
|
63
68
|
if has_ipv6:
|
|
64
69
|
addr = socketutil.get_interface("::1")
|
|
65
70
|
assert addr.version == 6
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|