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.
Files changed (309) hide show
  1. {Pyro5-5.14 → pyro5-5.16}/.github/workflows/main-ci.yml +3 -3
  2. {Pyro5-5.14 → pyro5-5.16}/Makefile +3 -6
  3. {Pyro5-5.14 → pyro5-5.16}/PKG-INFO +8 -14
  4. {Pyro5-5.14 → pyro5-5.16}/Pyro5/__init__.py +1 -1
  5. {Pyro5-5.14 → pyro5-5.16}/Pyro5/client.py +1 -1
  6. {Pyro5-5.14 → pyro5-5.16}/Pyro5/nameserver.py +3 -2
  7. {Pyro5-5.14 → pyro5-5.16}/Pyro5/server.py +15 -3
  8. {Pyro5-5.14 → pyro5-5.16}/Pyro5/utils/httpgateway.py +36 -32
  9. {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/PKG-INFO +8 -14
  10. {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/SOURCES.txt +0 -3
  11. {Pyro5-5.14 → pyro5-5.16}/Readme.rst +2 -6
  12. pyro5-5.16/certs/client_cert.pem +23 -0
  13. pyro5-5.16/certs/client_key.pem +28 -0
  14. pyro5-5.16/certs/server_cert.pem +23 -0
  15. pyro5-5.16/certs/server_key.pem +28 -0
  16. {Pyro5-5.14 → pyro5-5.16}/docs/source/changelog.rst +18 -0
  17. {Pyro5-5.14 → pyro5-5.16}/docs/source/clientcode.rst +23 -16
  18. {Pyro5-5.14 → pyro5-5.16}/docs/source/errors.rst +1 -1
  19. {Pyro5-5.14 → pyro5-5.16}/docs/source/intro.rst +8 -4
  20. {Pyro5-5.14 → pyro5-5.16}/docs/source/nameserver.rst +3 -3
  21. {Pyro5-5.14 → pyro5-5.16}/docs/source/security.rst +2 -2
  22. {Pyro5-5.14 → pyro5-5.16}/docs/source/servercode.rst +14 -9
  23. {Pyro5-5.14 → pyro5-5.16}/docs/source/tipstricks.rst +19 -12
  24. {Pyro5-5.14 → pyro5-5.16}/examples/callback/client2.py +3 -3
  25. {Pyro5-5.14 → pyro5-5.16}/examples/ssl/client.py +1 -1
  26. {Pyro5-5.14 → pyro5-5.16}/examples/ssl/server.py +1 -1
  27. {Pyro5-5.14 → pyro5-5.16}/examples/streaming/client.py +4 -0
  28. {Pyro5-5.14 → pyro5-5.16}/examples/streaming/server.py +8 -0
  29. {Pyro5-5.14 → pyro5-5.16}/setup.cfg +5 -6
  30. {Pyro5-5.14 → pyro5-5.16}/test-requirements.txt +1 -0
  31. {Pyro5-5.14 → pyro5-5.16}/tests/test_daemon.py +15 -3
  32. {Pyro5-5.14 → pyro5-5.16}/tests/test_naming.py +10 -0
  33. {Pyro5-5.14 → pyro5-5.16}/tests/test_server.py +2 -2
  34. {Pyro5-5.14 → pyro5-5.16}/tests/test_socketutil.py +11 -4
  35. {Pyro5-5.14 → pyro5-5.16}/tox.ini +1 -1
  36. Pyro5-5.14/.lgtm.yml +0 -4
  37. Pyro5-5.14/certs/client_cert.pem +0 -23
  38. Pyro5-5.14/certs/client_key.pem +0 -28
  39. Pyro5-5.14/certs/server_cert.pem +0 -23
  40. Pyro5-5.14/certs/server_key.pem +0 -28
  41. Pyro5-5.14/examples/test/client.py +0 -22
  42. Pyro5-5.14/examples/test/server.py +0 -43
  43. {Pyro5-5.14 → pyro5-5.16}/.gitattributes +0 -0
  44. {Pyro5-5.14 → pyro5-5.16}/LICENSE +0 -0
  45. {Pyro5-5.14 → pyro5-5.16}/MANIFEST.in +0 -0
  46. {Pyro5-5.14 → pyro5-5.16}/Pyro5/api.py +0 -0
  47. {Pyro5-5.14 → pyro5-5.16}/Pyro5/callcontext.py +0 -0
  48. {Pyro5-5.14 → pyro5-5.16}/Pyro5/compatibility/Pyro4.py +0 -0
  49. {Pyro5-5.14 → pyro5-5.16}/Pyro5/compatibility/__init__.py +0 -0
  50. {Pyro5-5.14 → pyro5-5.16}/Pyro5/configure.py +0 -0
  51. {Pyro5-5.14 → pyro5-5.16}/Pyro5/core.py +0 -0
  52. {Pyro5-5.14 → pyro5-5.16}/Pyro5/errors.py +0 -0
  53. {Pyro5-5.14 → pyro5-5.16}/Pyro5/nsc.py +0 -0
  54. {Pyro5-5.14 → pyro5-5.16}/Pyro5/protocol.py +0 -0
  55. {Pyro5-5.14 → pyro5-5.16}/Pyro5/serializers.py +0 -0
  56. {Pyro5-5.14 → pyro5-5.16}/Pyro5/socketutil.py +0 -0
  57. {Pyro5-5.14 → pyro5-5.16}/Pyro5/svr_existingconn.py +0 -0
  58. {Pyro5-5.14 → pyro5-5.16}/Pyro5/svr_multiplex.py +0 -0
  59. {Pyro5-5.14 → pyro5-5.16}/Pyro5/svr_threads.py +0 -0
  60. {Pyro5-5.14 → pyro5-5.16}/Pyro5/utils/__init__.py +0 -0
  61. {Pyro5-5.14 → pyro5-5.16}/Pyro5/utils/echoserver.py +0 -0
  62. {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/dependency_links.txt +0 -0
  63. {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/entry_points.txt +0 -0
  64. {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/requires.txt +0 -0
  65. {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/top_level.txt +0 -0
  66. {Pyro5-5.14 → pyro5-5.16}/Pyro5.egg-info/zip-safe +0 -0
  67. {Pyro5-5.14 → pyro5-5.16}/certs/readme.txt +0 -0
  68. {Pyro5-5.14 → pyro5-5.16}/docs/Makefile +0 -0
  69. {Pyro5-5.14 → pyro5-5.16}/docs/make.bat +0 -0
  70. {Pyro5-5.14 → pyro5-5.16}/docs/source/_static/css/customize.css +0 -0
  71. {Pyro5-5.14 → pyro5-5.16}/docs/source/_static/flammable.png +0 -0
  72. {Pyro5-5.14 → pyro5-5.16}/docs/source/_static/pyro-large.png +0 -0
  73. {Pyro5-5.14 → pyro5-5.16}/docs/source/_static/pyro.png +0 -0
  74. {Pyro5-5.14 → pyro5-5.16}/docs/source/_static/tf_pyrotaunt.png +0 -0
  75. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/api.rst +0 -0
  76. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/callcontext.rst +0 -0
  77. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/client.rst +0 -0
  78. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/compatibility.rst +0 -0
  79. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/config.rst +0 -0
  80. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/core.rst +0 -0
  81. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/echoserver.rst +0 -0
  82. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/errors.rst +0 -0
  83. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/httpgateway.rst +0 -0
  84. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/nameserver.rst +0 -0
  85. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/protocol.rst +0 -0
  86. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/server.rst +0 -0
  87. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/socketserver.rst +0 -0
  88. {Pyro5-5.14 → pyro5-5.16}/docs/source/api/socketutil.rst +0 -0
  89. {Pyro5-5.14 → pyro5-5.16}/docs/source/api.rst +0 -0
  90. {Pyro5-5.14 → pyro5-5.16}/docs/source/commandline.rst +0 -0
  91. {Pyro5-5.14 → pyro5-5.16}/docs/source/conf.py +0 -0
  92. {Pyro5-5.14 → pyro5-5.16}/docs/source/config.rst +0 -0
  93. {Pyro5-5.14 → pyro5-5.16}/docs/source/docutils.conf +0 -0
  94. {Pyro5-5.14 → pyro5-5.16}/docs/source/index.rst +0 -0
  95. {Pyro5-5.14 → pyro5-5.16}/docs/source/install.rst +0 -0
  96. {Pyro5-5.14 → pyro5-5.16}/docs/source/license.rst +0 -0
  97. {Pyro5-5.14 → pyro5-5.16}/docs/source/pyrolite.rst +0 -0
  98. {Pyro5-5.14 → pyro5-5.16}/docs/source/tutorials.rst +0 -0
  99. {Pyro5-5.14 → pyro5-5.16}/examples/attributes/Readme.txt +0 -0
  100. {Pyro5-5.14 → pyro5-5.16}/examples/attributes/client.py +0 -0
  101. {Pyro5-5.14 → pyro5-5.16}/examples/attributes/server.py +0 -0
  102. {Pyro5-5.14 → pyro5-5.16}/examples/autoproxy/Readme.txt +0 -0
  103. {Pyro5-5.14 → pyro5-5.16}/examples/autoproxy/client.py +0 -0
  104. {Pyro5-5.14 → pyro5-5.16}/examples/autoproxy/server.py +0 -0
  105. {Pyro5-5.14 → pyro5-5.16}/examples/autoproxy/thingy.py +0 -0
  106. {Pyro5-5.14 → pyro5-5.16}/examples/autoreconnect/Readme.txt +0 -0
  107. {Pyro5-5.14 → pyro5-5.16}/examples/autoreconnect/client.py +0 -0
  108. {Pyro5-5.14 → pyro5-5.16}/examples/autoreconnect/clientNS.py +0 -0
  109. {Pyro5-5.14 → pyro5-5.16}/examples/autoreconnect/server.py +0 -0
  110. {Pyro5-5.14 → pyro5-5.16}/examples/autoreconnect/serverNS.py +0 -0
  111. {Pyro5-5.14 → pyro5-5.16}/examples/autoretry/Readme.txt +0 -0
  112. {Pyro5-5.14 → pyro5-5.16}/examples/autoretry/client.py +0 -0
  113. {Pyro5-5.14 → pyro5-5.16}/examples/autoretry/server.py +0 -0
  114. {Pyro5-5.14 → pyro5-5.16}/examples/banks/Readme.txt +0 -0
  115. {Pyro5-5.14 → pyro5-5.16}/examples/banks/banks.py +0 -0
  116. {Pyro5-5.14 → pyro5-5.16}/examples/banks/client.py +0 -0
  117. {Pyro5-5.14 → pyro5-5.16}/examples/banks/server.py +0 -0
  118. {Pyro5-5.14 → pyro5-5.16}/examples/batchedcalls/Readme.txt +0 -0
  119. {Pyro5-5.14 → pyro5-5.16}/examples/batchedcalls/client.py +0 -0
  120. {Pyro5-5.14 → pyro5-5.16}/examples/batchedcalls/server.py +0 -0
  121. {Pyro5-5.14 → pyro5-5.16}/examples/benchmark/Readme.txt +0 -0
  122. {Pyro5-5.14 → pyro5-5.16}/examples/benchmark/bench.py +0 -0
  123. {Pyro5-5.14 → pyro5-5.16}/examples/benchmark/client.py +0 -0
  124. {Pyro5-5.14 → pyro5-5.16}/examples/benchmark/connections.py +0 -0
  125. {Pyro5-5.14 → pyro5-5.16}/examples/benchmark/server.py +0 -0
  126. {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/Readme.txt +0 -0
  127. {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/client/client.py +0 -0
  128. {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/client/customdata.py +0 -0
  129. {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/dispatcher/dispatcher.py +0 -0
  130. {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/listeners/customdata.py +0 -0
  131. {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/listeners/listener.py +0 -0
  132. {Pyro5-5.14 → pyro5-5.16}/examples/blob-dispatch/listeners/main.py +0 -0
  133. {Pyro5-5.14 → pyro5-5.16}/examples/callback/Readme.txt +0 -0
  134. {Pyro5-5.14 → pyro5-5.16}/examples/callback/client.py +0 -0
  135. {Pyro5-5.14 → pyro5-5.16}/examples/callback/server.py +0 -0
  136. {Pyro5-5.14 → pyro5-5.16}/examples/callback/server2.py +0 -0
  137. {Pyro5-5.14 → pyro5-5.16}/examples/callcontext/Readme.txt +0 -0
  138. {Pyro5-5.14 → pyro5-5.16}/examples/callcontext/client.py +0 -0
  139. {Pyro5-5.14 → pyro5-5.16}/examples/callcontext/server.py +0 -0
  140. {Pyro5-5.14 → pyro5-5.16}/examples/chatbox/Readme.txt +0 -0
  141. {Pyro5-5.14 → pyro5-5.16}/examples/chatbox/client.py +0 -0
  142. {Pyro5-5.14 → pyro5-5.16}/examples/chatbox/server.py +0 -0
  143. {Pyro5-5.14 → pyro5-5.16}/examples/circular/Readme.txt +0 -0
  144. {Pyro5-5.14 → pyro5-5.16}/examples/circular/chain.py +0 -0
  145. {Pyro5-5.14 → pyro5-5.16}/examples/circular/client.py +0 -0
  146. {Pyro5-5.14 → pyro5-5.16}/examples/circular/servA.py +0 -0
  147. {Pyro5-5.14 → pyro5-5.16}/examples/circular/servB.py +0 -0
  148. {Pyro5-5.14 → pyro5-5.16}/examples/circular/servC.py +0 -0
  149. {Pyro5-5.14 → pyro5-5.16}/examples/custom-serialization/Readme.txt +0 -0
  150. {Pyro5-5.14 → pyro5-5.16}/examples/custom-serialization/client.py +0 -0
  151. {Pyro5-5.14 → pyro5-5.16}/examples/custom-serialization/mycustomclasses.py +0 -0
  152. {Pyro5-5.14 → pyro5-5.16}/examples/custom-serialization/server.py +0 -0
  153. {Pyro5-5.14 → pyro5-5.16}/examples/diffie-hellman/Readme.txt +0 -0
  154. {Pyro5-5.14 → pyro5-5.16}/examples/diffie-hellman/client.py +0 -0
  155. {Pyro5-5.14 → pyro5-5.16}/examples/diffie-hellman/diffiehellman.py +0 -0
  156. {Pyro5-5.14 → pyro5-5.16}/examples/diffie-hellman/server.py +0 -0
  157. {Pyro5-5.14 → pyro5-5.16}/examples/disconnects/Readme.txt +0 -0
  158. {Pyro5-5.14 → pyro5-5.16}/examples/disconnects/client.py +0 -0
  159. {Pyro5-5.14 → pyro5-5.16}/examples/disconnects/server.py +0 -0
  160. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing/Readme.txt +0 -0
  161. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing/client.py +0 -0
  162. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing/dispatcher.py +0 -0
  163. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing/worker.py +0 -0
  164. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing/workitem.py +0 -0
  165. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing2/Readme.txt +0 -0
  166. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing2/alice.zip +0 -0
  167. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing2/client.py +0 -0
  168. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing2/servers.py +0 -0
  169. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing3/Readme.txt +0 -0
  170. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing3/client.py +0 -0
  171. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-computing3/worker.py +0 -0
  172. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/Readme.txt +0 -0
  173. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/client_asciizoom.py +0 -0
  174. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/client_graphics.py +0 -0
  175. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/launch_servers.sh +0 -0
  176. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/normal.py +0 -0
  177. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/normal_graphics.py +0 -0
  178. {Pyro5-5.14 → pyro5-5.16}/examples/distributed-mandelbrot/server.py +0 -0
  179. {Pyro5-5.14 → pyro5-5.16}/examples/echoserver/Readme.txt +0 -0
  180. {Pyro5-5.14 → pyro5-5.16}/examples/echoserver/client.py +0 -0
  181. {Pyro5-5.14 → pyro5-5.16}/examples/eventloop/Readme.txt +0 -0
  182. {Pyro5-5.14 → pyro5-5.16}/examples/eventloop/client.py +0 -0
  183. {Pyro5-5.14 → pyro5-5.16}/examples/eventloop/server_multiplexed.py +0 -0
  184. {Pyro5-5.14 → pyro5-5.16}/examples/eventloop/server_threads.py +0 -0
  185. {Pyro5-5.14 → pyro5-5.16}/examples/exceptions/Readme.txt +0 -0
  186. {Pyro5-5.14 → pyro5-5.16}/examples/exceptions/client.py +0 -0
  187. {Pyro5-5.14 → pyro5-5.16}/examples/exceptions/excep.py +0 -0
  188. {Pyro5-5.14 → pyro5-5.16}/examples/exceptions/server.py +0 -0
  189. {Pyro5-5.14 → pyro5-5.16}/examples/filetransfer/Readme.txt +0 -0
  190. {Pyro5-5.14 → pyro5-5.16}/examples/filetransfer/client.py +0 -0
  191. {Pyro5-5.14 → pyro5-5.16}/examples/filetransfer/server.py +0 -0
  192. {Pyro5-5.14 → pyro5-5.16}/examples/gui_eventloop/Readme.txt +0 -0
  193. {Pyro5-5.14 → pyro5-5.16}/examples/gui_eventloop/client.py +0 -0
  194. {Pyro5-5.14 → pyro5-5.16}/examples/gui_eventloop/gui_nothreads.py +0 -0
  195. {Pyro5-5.14 → pyro5-5.16}/examples/gui_eventloop/gui_threads.py +0 -0
  196. {Pyro5-5.14 → pyro5-5.16}/examples/handshake/Readme.txt +0 -0
  197. {Pyro5-5.14 → pyro5-5.16}/examples/handshake/client.py +0 -0
  198. {Pyro5-5.14 → pyro5-5.16}/examples/handshake/server.py +0 -0
  199. {Pyro5-5.14 → pyro5-5.16}/examples/http/Readme.txt +0 -0
  200. {Pyro5-5.14 → pyro5-5.16}/examples/http/client.js +0 -0
  201. {Pyro5-5.14 → pyro5-5.16}/examples/http/client.py +0 -0
  202. {Pyro5-5.14 → pyro5-5.16}/examples/hugetransfer/Readme.txt +0 -0
  203. {Pyro5-5.14 → pyro5-5.16}/examples/hugetransfer/client.py +0 -0
  204. {Pyro5-5.14 → pyro5-5.16}/examples/hugetransfer/server.py +0 -0
  205. {Pyro5-5.14 → pyro5-5.16}/examples/instancemode/Readme.txt +0 -0
  206. {Pyro5-5.14 → pyro5-5.16}/examples/instancemode/client.py +0 -0
  207. {Pyro5-5.14 → pyro5-5.16}/examples/instancemode/server.py +0 -0
  208. {Pyro5-5.14 → pyro5-5.16}/examples/maxsize/Readme.txt +0 -0
  209. {Pyro5-5.14 → pyro5-5.16}/examples/maxsize/client.py +0 -0
  210. {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/Readme.txt +0 -0
  211. {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/manytopics_publisher.py +0 -0
  212. {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/manytopics_subscriber.py +0 -0
  213. {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/messagebus/__init__.py +0 -0
  214. {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/messagebus/messagebus.py +0 -0
  215. {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/messagebus/server.py +0 -0
  216. {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/publisher.py +0 -0
  217. {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/subscriber.py +0 -0
  218. {Pyro5-5.14 → pyro5-5.16}/examples/messagebus/subscriber_manual_consume.py +0 -0
  219. {Pyro5-5.14 → pyro5-5.16}/examples/nameserverstress/Readme.txt +0 -0
  220. {Pyro5-5.14 → pyro5-5.16}/examples/nameserverstress/stress.py +0 -0
  221. {Pyro5-5.14 → pyro5-5.16}/examples/nonameserver/Readme.txt +0 -0
  222. {Pyro5-5.14 → pyro5-5.16}/examples/nonameserver/client.py +0 -0
  223. {Pyro5-5.14 → pyro5-5.16}/examples/nonameserver/server.py +0 -0
  224. {Pyro5-5.14 → pyro5-5.16}/examples/ns-metadata/Readme.txt +0 -0
  225. {Pyro5-5.14 → pyro5-5.16}/examples/ns-metadata/example.py +0 -0
  226. {Pyro5-5.14 → pyro5-5.16}/examples/ns-metadata/resources.py +0 -0
  227. {Pyro5-5.14 → pyro5-5.16}/examples/oneway/Readme.txt +0 -0
  228. {Pyro5-5.14 → pyro5-5.16}/examples/oneway/client.py +0 -0
  229. {Pyro5-5.14 → pyro5-5.16}/examples/oneway/client2.py +0 -0
  230. {Pyro5-5.14 → pyro5-5.16}/examples/oneway/server.py +0 -0
  231. {Pyro5-5.14 → pyro5-5.16}/examples/oneway/server2.py +0 -0
  232. {Pyro5-5.14 → pyro5-5.16}/examples/privilege-separation/Readme.txt +0 -0
  233. {Pyro5-5.14 → pyro5-5.16}/examples/privilege-separation/drop_privs_client.py +0 -0
  234. {Pyro5-5.14 → pyro5-5.16}/examples/privilege-separation/drop_privs_server.py +0 -0
  235. {Pyro5-5.14 → pyro5-5.16}/examples/privilege-separation/elevated_client.py +0 -0
  236. {Pyro5-5.14 → pyro5-5.16}/examples/privilege-separation/elevated_server.py +0 -0
  237. {Pyro5-5.14 → pyro5-5.16}/examples/resourcetracking/Readme.txt +0 -0
  238. {Pyro5-5.14 → pyro5-5.16}/examples/resourcetracking/client.py +0 -0
  239. {Pyro5-5.14 → pyro5-5.16}/examples/resourcetracking/server.py +0 -0
  240. {Pyro5-5.14 → pyro5-5.16}/examples/robots/Readme.txt +0 -0
  241. {Pyro5-5.14 → pyro5-5.16}/examples/robots/client.py +0 -0
  242. {Pyro5-5.14 → pyro5-5.16}/examples/robots/gameserver.py +0 -0
  243. {Pyro5-5.14 → pyro5-5.16}/examples/robots/remote.py +0 -0
  244. {Pyro5-5.14 → pyro5-5.16}/examples/robots/robot.py +0 -0
  245. {Pyro5-5.14 → pyro5-5.16}/examples/servertypes/Readme.txt +0 -0
  246. {Pyro5-5.14 → pyro5-5.16}/examples/servertypes/client.py +0 -0
  247. {Pyro5-5.14 → pyro5-5.16}/examples/servertypes/server.py +0 -0
  248. {Pyro5-5.14 → pyro5-5.16}/examples/shoppingcart/Readme.txt +0 -0
  249. {Pyro5-5.14 → pyro5-5.16}/examples/shoppingcart/clients.py +0 -0
  250. {Pyro5-5.14 → pyro5-5.16}/examples/shoppingcart/shoppingcart.py +0 -0
  251. {Pyro5-5.14 → pyro5-5.16}/examples/shoppingcart/shopserver.py +0 -0
  252. {Pyro5-5.14 → pyro5-5.16}/examples/socketpair/pair-fork.py +0 -0
  253. {Pyro5-5.14 → pyro5-5.16}/examples/socketpair/pair-thread.py +0 -0
  254. {Pyro5-5.14 → pyro5-5.16}/examples/socketpair/readme.txt +0 -0
  255. {Pyro5-5.14 → pyro5-5.16}/examples/ssl/Readme.txt +0 -0
  256. {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/Readme.txt +0 -0
  257. {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase1/stockmarket.py +0 -0
  258. {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase1/viewer.py +0 -0
  259. {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase2/stockmarket.py +0 -0
  260. {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase2/viewer.py +0 -0
  261. {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase3/stockmarket.py +0 -0
  262. {Pyro5-5.14 → pyro5-5.16}/examples/stockquotes/phase3/viewer.py +0 -0
  263. {Pyro5-5.14 → pyro5-5.16}/examples/streaming/Readme.txt +0 -0
  264. {Pyro5-5.14 → pyro5-5.16}/examples/thirdpartylib/Readme.txt +0 -0
  265. {Pyro5-5.14 → pyro5-5.16}/examples/thirdpartylib/awesome_thirdparty_library.py +0 -0
  266. {Pyro5-5.14 → pyro5-5.16}/examples/thirdpartylib/client.py +0 -0
  267. {Pyro5-5.14 → pyro5-5.16}/examples/thirdpartylib/server.py +0 -0
  268. {Pyro5-5.14 → pyro5-5.16}/examples/thirdpartylib/server2.py +0 -0
  269. {Pyro5-5.14 → pyro5-5.16}/examples/threadproxysharing/Readme.txt +0 -0
  270. {Pyro5-5.14 → pyro5-5.16}/examples/threadproxysharing/client.py +0 -0
  271. {Pyro5-5.14 → pyro5-5.16}/examples/timeout/Readme.txt +0 -0
  272. {Pyro5-5.14 → pyro5-5.16}/examples/timeout/client.py +0 -0
  273. {Pyro5-5.14 → pyro5-5.16}/examples/timeout/server.py +0 -0
  274. {Pyro5-5.14 → pyro5-5.16}/examples/timezones/Readme.txt +0 -0
  275. {Pyro5-5.14 → pyro5-5.16}/examples/timezones/client.py +0 -0
  276. {Pyro5-5.14 → pyro5-5.16}/examples/timezones/server.py +0 -0
  277. {Pyro5-5.14 → pyro5-5.16}/examples/unixdomainsock/Readme.txt +0 -0
  278. {Pyro5-5.14 → pyro5-5.16}/examples/unixdomainsock/abstract_namespace_server.py +0 -0
  279. {Pyro5-5.14 → pyro5-5.16}/examples/unixdomainsock/client.py +0 -0
  280. {Pyro5-5.14 → pyro5-5.16}/examples/unixdomainsock/server.py +0 -0
  281. {Pyro5-5.14 → pyro5-5.16}/examples/usersession/Readme.txt +0 -0
  282. {Pyro5-5.14 → pyro5-5.16}/examples/usersession/client.py +0 -0
  283. {Pyro5-5.14 → pyro5-5.16}/examples/usersession/database.py +0 -0
  284. {Pyro5-5.14 → pyro5-5.16}/examples/usersession/server.py +0 -0
  285. {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/Readme.txt +0 -0
  286. {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase1/person.py +0 -0
  287. {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase1/visit.py +0 -0
  288. {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase1/warehouse.py +0 -0
  289. {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase2/person.py +0 -0
  290. {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase2/visit.py +0 -0
  291. {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase2/warehouse.py +0 -0
  292. {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase3/person.py +0 -0
  293. {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase3/visit.py +0 -0
  294. {Pyro5-5.14 → pyro5-5.16}/examples/warehouse/phase3/warehouse.py +0 -0
  295. {Pyro5-5.14 → pyro5-5.16}/mypy.ini +0 -0
  296. {Pyro5-5.14 → pyro5-5.16}/requirements.txt +0 -0
  297. {Pyro5-5.14 → pyro5-5.16}/setup.py +0 -0
  298. {Pyro5-5.14 → pyro5-5.16}/tests/support.py +0 -0
  299. {Pyro5-5.14 → pyro5-5.16}/tests/test_api.py +0 -0
  300. {Pyro5-5.14 → pyro5-5.16}/tests/test_client.py +0 -0
  301. {Pyro5-5.14 → pyro5-5.16}/tests/test_core.py +0 -0
  302. {Pyro5-5.14 → pyro5-5.16}/tests/test_echoserver.py +0 -0
  303. {Pyro5-5.14 → pyro5-5.16}/tests/test_errors.py +0 -0
  304. {Pyro5-5.14 → pyro5-5.16}/tests/test_httpgateway.py +0 -0
  305. {Pyro5-5.14 → pyro5-5.16}/tests/test_protocol.py +0 -0
  306. {Pyro5-5.14 → pyro5-5.16}/tests/test_pyro4compat.py +0 -0
  307. {Pyro5-5.14 → pyro5-5.16}/tests/test_serialize.py +0 -0
  308. {Pyro5-5.14 → pyro5-5.16}/tests/test_server_timeout.py +0 -0
  309. {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.7', '3.8', '3.9', '3.10', '3.11.0-rc.2']
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@v2
25
+ uses: actions/checkout@v4
26
26
  - name: Set up Python
27
- uses: actions/setup-python@v2
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, install, clean, test"
5
+ @echo "targets: dist, docs, upload, clean, test"
6
6
 
7
7
  docs:
8
- $(PYTHON) setup.py build_sphinx
8
+ sphinx-build docs/source build/docs
9
9
 
10
10
  dist:
11
- $(PYTHON) setup.py sdist bdist_wheel
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
1
+ Metadata-Version: 2.4
2
2
  Name: Pyro5
3
- Version: 5.14
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.7
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.2
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
- .. image:: https://img.shields.io/lgtm/grade/python/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
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.7 and newer, and Pypy3
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.
@@ -4,7 +4,7 @@ Pyro package. Some generic init stuff to set up logging etc.
4
4
  Pyro - Python Remote Objects. Copyright by Irmen de Jong (irmen@razorvine.net).
5
5
  """
6
6
 
7
- __version__ = "5.14"
7
+ __version__ = "5.16"
8
8
  __author__ = "Irmen de Jong"
9
9
 
10
10
 
@@ -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 %r doesn't expose any methods or attributes. Did you forget setting @expose on them?" % type(obj))
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
- raise errors.DaemonError("object or class already has a Pyro id")
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] = (obj_or_class if not weak else weakref.ref(obj_or_class))
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 cgi
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
- $.ajax({{
99
- url: name+"/"+method,
100
- type: "GET",
101
- data: params,
102
- dataType: "json",
103
- // headers: {{ "X-Pyro-Correlation-Id": "11112222-1111-2222-3333-222244449999" }},
104
- // headers: {{ "X-Pyro-Gateway-Key": "secret-key" }},
105
- // headers: {{ "X-Pyro-Options": "oneway" }},
106
- beforeSend: function(xhr, settings) {{
107
- $("#pyro_call").text(settings.type+" "+settings.url);
108
- }},
109
- error: function(xhr, status, error) {{
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="Pyro.NameServer/$meta" onclick="pyro_call('Pyro.NameServer','$meta'); return false;">Pyro.NameServer/$meta</a>
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="Pyro.NameServer/list" onclick="pyro_call('Pyro.NameServer','list'); return false;">Pyro.NameServer/list</a>
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="Pyro.NameServer/list?prefix=test."
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="Pyro.NameServer/lookup?name=Pyro.NameServer"
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="Pyro.NameServer/lookup?name=test.echoserver"
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="test.echoserver/error" onclick="pyro_call('test.echoserver','error'); return false;">test.echoserver/error</a>
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="test.echoserver/echo?message=Hi there, browser script!"
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 = " &nbsp; ".join(proxy._pyroMethods) or "-"
184
188
  attributes = [
185
- "<a href=\"{name}/{attribute}\" onclick=\"pyro_call('{name}','{attribute}'); return false;\">{attribute}</a>"
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=\"{name}/$meta\" onclick=\"pyro_call('{name}','$meta'); "
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(cgi.parse(environ['wsgi.input'], environ))
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 cgi-parsed parameter dictionary into a dict where the values that
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
1
+ Metadata-Version: 2.4
2
2
  Name: Pyro5
3
- Version: 5.14
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.7
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.2
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
- .. image:: https://img.shields.io/lgtm/grade/python/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
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.7 and newer, and Pypy3
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
- .. image:: https://img.shields.io/lgtm/grade/python/g/irmen/Pyro5.svg?logo=lgtm&logoWidth=18
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.7 and newer, and Pypy3
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