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.
Files changed (302) hide show
  1. {Pyro5-5.15 → pyro5-5.16}/.github/workflows/main-ci.yml +3 -3
  2. {Pyro5-5.15 → pyro5-5.16}/Makefile +2 -5
  3. {Pyro5-5.15 → pyro5-5.16}/PKG-INFO +7 -7
  4. {Pyro5-5.15 → pyro5-5.16}/Pyro5/__init__.py +1 -1
  5. {Pyro5-5.15 → pyro5-5.16}/Pyro5/client.py +1 -1
  6. {Pyro5-5.15 → pyro5-5.16}/Pyro5/nameserver.py +3 -2
  7. {Pyro5-5.15 → pyro5-5.16}/Pyro5/server.py +15 -3
  8. {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/PKG-INFO +7 -7
  9. {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/entry_points.txt +0 -1
  10. {Pyro5-5.15 → pyro5-5.16}/Readme.rst +3 -1
  11. {Pyro5-5.15 → pyro5-5.16}/docs/source/changelog.rst +9 -0
  12. {Pyro5-5.15 → pyro5-5.16}/docs/source/clientcode.rst +3 -3
  13. {Pyro5-5.15 → pyro5-5.16}/docs/source/intro.rst +1 -1
  14. {Pyro5-5.15 → pyro5-5.16}/docs/source/servercode.rst +4 -1
  15. {Pyro5-5.15 → pyro5-5.16}/docs/source/tipstricks.rst +5 -0
  16. {Pyro5-5.15 → pyro5-5.16}/examples/streaming/client.py +4 -0
  17. {Pyro5-5.15 → pyro5-5.16}/examples/streaming/server.py +8 -0
  18. {Pyro5-5.15 → pyro5-5.16}/setup.cfg +0 -1
  19. {Pyro5-5.15 → pyro5-5.16}/test-requirements.txt +1 -0
  20. {Pyro5-5.15 → pyro5-5.16}/tests/test_daemon.py +15 -3
  21. {Pyro5-5.15 → pyro5-5.16}/tests/test_server.py +2 -2
  22. {Pyro5-5.15 → pyro5-5.16}/tests/test_socketutil.py +9 -4
  23. {Pyro5-5.15 → pyro5-5.16}/tox.ini +1 -1
  24. {Pyro5-5.15 → pyro5-5.16}/.gitattributes +0 -0
  25. {Pyro5-5.15 → pyro5-5.16}/LICENSE +0 -0
  26. {Pyro5-5.15 → pyro5-5.16}/MANIFEST.in +0 -0
  27. {Pyro5-5.15 → pyro5-5.16}/Pyro5/api.py +0 -0
  28. {Pyro5-5.15 → pyro5-5.16}/Pyro5/callcontext.py +0 -0
  29. {Pyro5-5.15 → pyro5-5.16}/Pyro5/compatibility/Pyro4.py +0 -0
  30. {Pyro5-5.15 → pyro5-5.16}/Pyro5/compatibility/__init__.py +0 -0
  31. {Pyro5-5.15 → pyro5-5.16}/Pyro5/configure.py +0 -0
  32. {Pyro5-5.15 → pyro5-5.16}/Pyro5/core.py +0 -0
  33. {Pyro5-5.15 → pyro5-5.16}/Pyro5/errors.py +0 -0
  34. {Pyro5-5.15 → pyro5-5.16}/Pyro5/nsc.py +0 -0
  35. {Pyro5-5.15 → pyro5-5.16}/Pyro5/protocol.py +0 -0
  36. {Pyro5-5.15 → pyro5-5.16}/Pyro5/serializers.py +0 -0
  37. {Pyro5-5.15 → pyro5-5.16}/Pyro5/socketutil.py +0 -0
  38. {Pyro5-5.15 → pyro5-5.16}/Pyro5/svr_existingconn.py +0 -0
  39. {Pyro5-5.15 → pyro5-5.16}/Pyro5/svr_multiplex.py +0 -0
  40. {Pyro5-5.15 → pyro5-5.16}/Pyro5/svr_threads.py +0 -0
  41. {Pyro5-5.15 → pyro5-5.16}/Pyro5/utils/__init__.py +0 -0
  42. {Pyro5-5.15 → pyro5-5.16}/Pyro5/utils/echoserver.py +0 -0
  43. {Pyro5-5.15 → pyro5-5.16}/Pyro5/utils/httpgateway.py +0 -0
  44. {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/SOURCES.txt +0 -0
  45. {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/dependency_links.txt +0 -0
  46. {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/requires.txt +0 -0
  47. {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/top_level.txt +0 -0
  48. {Pyro5-5.15 → pyro5-5.16}/Pyro5.egg-info/zip-safe +0 -0
  49. {Pyro5-5.15 → pyro5-5.16}/certs/client_cert.pem +0 -0
  50. {Pyro5-5.15 → pyro5-5.16}/certs/client_key.pem +0 -0
  51. {Pyro5-5.15 → pyro5-5.16}/certs/readme.txt +0 -0
  52. {Pyro5-5.15 → pyro5-5.16}/certs/server_cert.pem +0 -0
  53. {Pyro5-5.15 → pyro5-5.16}/certs/server_key.pem +0 -0
  54. {Pyro5-5.15 → pyro5-5.16}/docs/Makefile +0 -0
  55. {Pyro5-5.15 → pyro5-5.16}/docs/make.bat +0 -0
  56. {Pyro5-5.15 → pyro5-5.16}/docs/source/_static/css/customize.css +0 -0
  57. {Pyro5-5.15 → pyro5-5.16}/docs/source/_static/flammable.png +0 -0
  58. {Pyro5-5.15 → pyro5-5.16}/docs/source/_static/pyro-large.png +0 -0
  59. {Pyro5-5.15 → pyro5-5.16}/docs/source/_static/pyro.png +0 -0
  60. {Pyro5-5.15 → pyro5-5.16}/docs/source/_static/tf_pyrotaunt.png +0 -0
  61. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/api.rst +0 -0
  62. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/callcontext.rst +0 -0
  63. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/client.rst +0 -0
  64. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/compatibility.rst +0 -0
  65. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/config.rst +0 -0
  66. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/core.rst +0 -0
  67. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/echoserver.rst +0 -0
  68. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/errors.rst +0 -0
  69. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/httpgateway.rst +0 -0
  70. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/nameserver.rst +0 -0
  71. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/protocol.rst +0 -0
  72. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/server.rst +0 -0
  73. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/socketserver.rst +0 -0
  74. {Pyro5-5.15 → pyro5-5.16}/docs/source/api/socketutil.rst +0 -0
  75. {Pyro5-5.15 → pyro5-5.16}/docs/source/api.rst +0 -0
  76. {Pyro5-5.15 → pyro5-5.16}/docs/source/commandline.rst +0 -0
  77. {Pyro5-5.15 → pyro5-5.16}/docs/source/conf.py +0 -0
  78. {Pyro5-5.15 → pyro5-5.16}/docs/source/config.rst +0 -0
  79. {Pyro5-5.15 → pyro5-5.16}/docs/source/docutils.conf +0 -0
  80. {Pyro5-5.15 → pyro5-5.16}/docs/source/errors.rst +0 -0
  81. {Pyro5-5.15 → pyro5-5.16}/docs/source/index.rst +0 -0
  82. {Pyro5-5.15 → pyro5-5.16}/docs/source/install.rst +0 -0
  83. {Pyro5-5.15 → pyro5-5.16}/docs/source/license.rst +0 -0
  84. {Pyro5-5.15 → pyro5-5.16}/docs/source/nameserver.rst +0 -0
  85. {Pyro5-5.15 → pyro5-5.16}/docs/source/pyrolite.rst +0 -0
  86. {Pyro5-5.15 → pyro5-5.16}/docs/source/security.rst +0 -0
  87. {Pyro5-5.15 → pyro5-5.16}/docs/source/tutorials.rst +0 -0
  88. {Pyro5-5.15 → pyro5-5.16}/examples/attributes/Readme.txt +0 -0
  89. {Pyro5-5.15 → pyro5-5.16}/examples/attributes/client.py +0 -0
  90. {Pyro5-5.15 → pyro5-5.16}/examples/attributes/server.py +0 -0
  91. {Pyro5-5.15 → pyro5-5.16}/examples/autoproxy/Readme.txt +0 -0
  92. {Pyro5-5.15 → pyro5-5.16}/examples/autoproxy/client.py +0 -0
  93. {Pyro5-5.15 → pyro5-5.16}/examples/autoproxy/server.py +0 -0
  94. {Pyro5-5.15 → pyro5-5.16}/examples/autoproxy/thingy.py +0 -0
  95. {Pyro5-5.15 → pyro5-5.16}/examples/autoreconnect/Readme.txt +0 -0
  96. {Pyro5-5.15 → pyro5-5.16}/examples/autoreconnect/client.py +0 -0
  97. {Pyro5-5.15 → pyro5-5.16}/examples/autoreconnect/clientNS.py +0 -0
  98. {Pyro5-5.15 → pyro5-5.16}/examples/autoreconnect/server.py +0 -0
  99. {Pyro5-5.15 → pyro5-5.16}/examples/autoreconnect/serverNS.py +0 -0
  100. {Pyro5-5.15 → pyro5-5.16}/examples/autoretry/Readme.txt +0 -0
  101. {Pyro5-5.15 → pyro5-5.16}/examples/autoretry/client.py +0 -0
  102. {Pyro5-5.15 → pyro5-5.16}/examples/autoretry/server.py +0 -0
  103. {Pyro5-5.15 → pyro5-5.16}/examples/banks/Readme.txt +0 -0
  104. {Pyro5-5.15 → pyro5-5.16}/examples/banks/banks.py +0 -0
  105. {Pyro5-5.15 → pyro5-5.16}/examples/banks/client.py +0 -0
  106. {Pyro5-5.15 → pyro5-5.16}/examples/banks/server.py +0 -0
  107. {Pyro5-5.15 → pyro5-5.16}/examples/batchedcalls/Readme.txt +0 -0
  108. {Pyro5-5.15 → pyro5-5.16}/examples/batchedcalls/client.py +0 -0
  109. {Pyro5-5.15 → pyro5-5.16}/examples/batchedcalls/server.py +0 -0
  110. {Pyro5-5.15 → pyro5-5.16}/examples/benchmark/Readme.txt +0 -0
  111. {Pyro5-5.15 → pyro5-5.16}/examples/benchmark/bench.py +0 -0
  112. {Pyro5-5.15 → pyro5-5.16}/examples/benchmark/client.py +0 -0
  113. {Pyro5-5.15 → pyro5-5.16}/examples/benchmark/connections.py +0 -0
  114. {Pyro5-5.15 → pyro5-5.16}/examples/benchmark/server.py +0 -0
  115. {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/Readme.txt +0 -0
  116. {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/client/client.py +0 -0
  117. {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/client/customdata.py +0 -0
  118. {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/dispatcher/dispatcher.py +0 -0
  119. {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/listeners/customdata.py +0 -0
  120. {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/listeners/listener.py +0 -0
  121. {Pyro5-5.15 → pyro5-5.16}/examples/blob-dispatch/listeners/main.py +0 -0
  122. {Pyro5-5.15 → pyro5-5.16}/examples/callback/Readme.txt +0 -0
  123. {Pyro5-5.15 → pyro5-5.16}/examples/callback/client.py +0 -0
  124. {Pyro5-5.15 → pyro5-5.16}/examples/callback/client2.py +0 -0
  125. {Pyro5-5.15 → pyro5-5.16}/examples/callback/server.py +0 -0
  126. {Pyro5-5.15 → pyro5-5.16}/examples/callback/server2.py +0 -0
  127. {Pyro5-5.15 → pyro5-5.16}/examples/callcontext/Readme.txt +0 -0
  128. {Pyro5-5.15 → pyro5-5.16}/examples/callcontext/client.py +0 -0
  129. {Pyro5-5.15 → pyro5-5.16}/examples/callcontext/server.py +0 -0
  130. {Pyro5-5.15 → pyro5-5.16}/examples/chatbox/Readme.txt +0 -0
  131. {Pyro5-5.15 → pyro5-5.16}/examples/chatbox/client.py +0 -0
  132. {Pyro5-5.15 → pyro5-5.16}/examples/chatbox/server.py +0 -0
  133. {Pyro5-5.15 → pyro5-5.16}/examples/circular/Readme.txt +0 -0
  134. {Pyro5-5.15 → pyro5-5.16}/examples/circular/chain.py +0 -0
  135. {Pyro5-5.15 → pyro5-5.16}/examples/circular/client.py +0 -0
  136. {Pyro5-5.15 → pyro5-5.16}/examples/circular/servA.py +0 -0
  137. {Pyro5-5.15 → pyro5-5.16}/examples/circular/servB.py +0 -0
  138. {Pyro5-5.15 → pyro5-5.16}/examples/circular/servC.py +0 -0
  139. {Pyro5-5.15 → pyro5-5.16}/examples/custom-serialization/Readme.txt +0 -0
  140. {Pyro5-5.15 → pyro5-5.16}/examples/custom-serialization/client.py +0 -0
  141. {Pyro5-5.15 → pyro5-5.16}/examples/custom-serialization/mycustomclasses.py +0 -0
  142. {Pyro5-5.15 → pyro5-5.16}/examples/custom-serialization/server.py +0 -0
  143. {Pyro5-5.15 → pyro5-5.16}/examples/diffie-hellman/Readme.txt +0 -0
  144. {Pyro5-5.15 → pyro5-5.16}/examples/diffie-hellman/client.py +0 -0
  145. {Pyro5-5.15 → pyro5-5.16}/examples/diffie-hellman/diffiehellman.py +0 -0
  146. {Pyro5-5.15 → pyro5-5.16}/examples/diffie-hellman/server.py +0 -0
  147. {Pyro5-5.15 → pyro5-5.16}/examples/disconnects/Readme.txt +0 -0
  148. {Pyro5-5.15 → pyro5-5.16}/examples/disconnects/client.py +0 -0
  149. {Pyro5-5.15 → pyro5-5.16}/examples/disconnects/server.py +0 -0
  150. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing/Readme.txt +0 -0
  151. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing/client.py +0 -0
  152. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing/dispatcher.py +0 -0
  153. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing/worker.py +0 -0
  154. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing/workitem.py +0 -0
  155. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing2/Readme.txt +0 -0
  156. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing2/alice.zip +0 -0
  157. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing2/client.py +0 -0
  158. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing2/servers.py +0 -0
  159. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing3/Readme.txt +0 -0
  160. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing3/client.py +0 -0
  161. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-computing3/worker.py +0 -0
  162. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/Readme.txt +0 -0
  163. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/client_asciizoom.py +0 -0
  164. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/client_graphics.py +0 -0
  165. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/launch_servers.sh +0 -0
  166. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/normal.py +0 -0
  167. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/normal_graphics.py +0 -0
  168. {Pyro5-5.15 → pyro5-5.16}/examples/distributed-mandelbrot/server.py +0 -0
  169. {Pyro5-5.15 → pyro5-5.16}/examples/echoserver/Readme.txt +0 -0
  170. {Pyro5-5.15 → pyro5-5.16}/examples/echoserver/client.py +0 -0
  171. {Pyro5-5.15 → pyro5-5.16}/examples/eventloop/Readme.txt +0 -0
  172. {Pyro5-5.15 → pyro5-5.16}/examples/eventloop/client.py +0 -0
  173. {Pyro5-5.15 → pyro5-5.16}/examples/eventloop/server_multiplexed.py +0 -0
  174. {Pyro5-5.15 → pyro5-5.16}/examples/eventloop/server_threads.py +0 -0
  175. {Pyro5-5.15 → pyro5-5.16}/examples/exceptions/Readme.txt +0 -0
  176. {Pyro5-5.15 → pyro5-5.16}/examples/exceptions/client.py +0 -0
  177. {Pyro5-5.15 → pyro5-5.16}/examples/exceptions/excep.py +0 -0
  178. {Pyro5-5.15 → pyro5-5.16}/examples/exceptions/server.py +0 -0
  179. {Pyro5-5.15 → pyro5-5.16}/examples/filetransfer/Readme.txt +0 -0
  180. {Pyro5-5.15 → pyro5-5.16}/examples/filetransfer/client.py +0 -0
  181. {Pyro5-5.15 → pyro5-5.16}/examples/filetransfer/server.py +0 -0
  182. {Pyro5-5.15 → pyro5-5.16}/examples/gui_eventloop/Readme.txt +0 -0
  183. {Pyro5-5.15 → pyro5-5.16}/examples/gui_eventloop/client.py +0 -0
  184. {Pyro5-5.15 → pyro5-5.16}/examples/gui_eventloop/gui_nothreads.py +0 -0
  185. {Pyro5-5.15 → pyro5-5.16}/examples/gui_eventloop/gui_threads.py +0 -0
  186. {Pyro5-5.15 → pyro5-5.16}/examples/handshake/Readme.txt +0 -0
  187. {Pyro5-5.15 → pyro5-5.16}/examples/handshake/client.py +0 -0
  188. {Pyro5-5.15 → pyro5-5.16}/examples/handshake/server.py +0 -0
  189. {Pyro5-5.15 → pyro5-5.16}/examples/http/Readme.txt +0 -0
  190. {Pyro5-5.15 → pyro5-5.16}/examples/http/client.js +0 -0
  191. {Pyro5-5.15 → pyro5-5.16}/examples/http/client.py +0 -0
  192. {Pyro5-5.15 → pyro5-5.16}/examples/hugetransfer/Readme.txt +0 -0
  193. {Pyro5-5.15 → pyro5-5.16}/examples/hugetransfer/client.py +0 -0
  194. {Pyro5-5.15 → pyro5-5.16}/examples/hugetransfer/server.py +0 -0
  195. {Pyro5-5.15 → pyro5-5.16}/examples/instancemode/Readme.txt +0 -0
  196. {Pyro5-5.15 → pyro5-5.16}/examples/instancemode/client.py +0 -0
  197. {Pyro5-5.15 → pyro5-5.16}/examples/instancemode/server.py +0 -0
  198. {Pyro5-5.15 → pyro5-5.16}/examples/maxsize/Readme.txt +0 -0
  199. {Pyro5-5.15 → pyro5-5.16}/examples/maxsize/client.py +0 -0
  200. {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/Readme.txt +0 -0
  201. {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/manytopics_publisher.py +0 -0
  202. {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/manytopics_subscriber.py +0 -0
  203. {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/messagebus/__init__.py +0 -0
  204. {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/messagebus/messagebus.py +0 -0
  205. {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/messagebus/server.py +0 -0
  206. {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/publisher.py +0 -0
  207. {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/subscriber.py +0 -0
  208. {Pyro5-5.15 → pyro5-5.16}/examples/messagebus/subscriber_manual_consume.py +0 -0
  209. {Pyro5-5.15 → pyro5-5.16}/examples/nameserverstress/Readme.txt +0 -0
  210. {Pyro5-5.15 → pyro5-5.16}/examples/nameserverstress/stress.py +0 -0
  211. {Pyro5-5.15 → pyro5-5.16}/examples/nonameserver/Readme.txt +0 -0
  212. {Pyro5-5.15 → pyro5-5.16}/examples/nonameserver/client.py +0 -0
  213. {Pyro5-5.15 → pyro5-5.16}/examples/nonameserver/server.py +0 -0
  214. {Pyro5-5.15 → pyro5-5.16}/examples/ns-metadata/Readme.txt +0 -0
  215. {Pyro5-5.15 → pyro5-5.16}/examples/ns-metadata/example.py +0 -0
  216. {Pyro5-5.15 → pyro5-5.16}/examples/ns-metadata/resources.py +0 -0
  217. {Pyro5-5.15 → pyro5-5.16}/examples/oneway/Readme.txt +0 -0
  218. {Pyro5-5.15 → pyro5-5.16}/examples/oneway/client.py +0 -0
  219. {Pyro5-5.15 → pyro5-5.16}/examples/oneway/client2.py +0 -0
  220. {Pyro5-5.15 → pyro5-5.16}/examples/oneway/server.py +0 -0
  221. {Pyro5-5.15 → pyro5-5.16}/examples/oneway/server2.py +0 -0
  222. {Pyro5-5.15 → pyro5-5.16}/examples/privilege-separation/Readme.txt +0 -0
  223. {Pyro5-5.15 → pyro5-5.16}/examples/privilege-separation/drop_privs_client.py +0 -0
  224. {Pyro5-5.15 → pyro5-5.16}/examples/privilege-separation/drop_privs_server.py +0 -0
  225. {Pyro5-5.15 → pyro5-5.16}/examples/privilege-separation/elevated_client.py +0 -0
  226. {Pyro5-5.15 → pyro5-5.16}/examples/privilege-separation/elevated_server.py +0 -0
  227. {Pyro5-5.15 → pyro5-5.16}/examples/resourcetracking/Readme.txt +0 -0
  228. {Pyro5-5.15 → pyro5-5.16}/examples/resourcetracking/client.py +0 -0
  229. {Pyro5-5.15 → pyro5-5.16}/examples/resourcetracking/server.py +0 -0
  230. {Pyro5-5.15 → pyro5-5.16}/examples/robots/Readme.txt +0 -0
  231. {Pyro5-5.15 → pyro5-5.16}/examples/robots/client.py +0 -0
  232. {Pyro5-5.15 → pyro5-5.16}/examples/robots/gameserver.py +0 -0
  233. {Pyro5-5.15 → pyro5-5.16}/examples/robots/remote.py +0 -0
  234. {Pyro5-5.15 → pyro5-5.16}/examples/robots/robot.py +0 -0
  235. {Pyro5-5.15 → pyro5-5.16}/examples/servertypes/Readme.txt +0 -0
  236. {Pyro5-5.15 → pyro5-5.16}/examples/servertypes/client.py +0 -0
  237. {Pyro5-5.15 → pyro5-5.16}/examples/servertypes/server.py +0 -0
  238. {Pyro5-5.15 → pyro5-5.16}/examples/shoppingcart/Readme.txt +0 -0
  239. {Pyro5-5.15 → pyro5-5.16}/examples/shoppingcart/clients.py +0 -0
  240. {Pyro5-5.15 → pyro5-5.16}/examples/shoppingcart/shoppingcart.py +0 -0
  241. {Pyro5-5.15 → pyro5-5.16}/examples/shoppingcart/shopserver.py +0 -0
  242. {Pyro5-5.15 → pyro5-5.16}/examples/socketpair/pair-fork.py +0 -0
  243. {Pyro5-5.15 → pyro5-5.16}/examples/socketpair/pair-thread.py +0 -0
  244. {Pyro5-5.15 → pyro5-5.16}/examples/socketpair/readme.txt +0 -0
  245. {Pyro5-5.15 → pyro5-5.16}/examples/ssl/Readme.txt +0 -0
  246. {Pyro5-5.15 → pyro5-5.16}/examples/ssl/client.py +0 -0
  247. {Pyro5-5.15 → pyro5-5.16}/examples/ssl/server.py +0 -0
  248. {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/Readme.txt +0 -0
  249. {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase1/stockmarket.py +0 -0
  250. {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase1/viewer.py +0 -0
  251. {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase2/stockmarket.py +0 -0
  252. {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase2/viewer.py +0 -0
  253. {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase3/stockmarket.py +0 -0
  254. {Pyro5-5.15 → pyro5-5.16}/examples/stockquotes/phase3/viewer.py +0 -0
  255. {Pyro5-5.15 → pyro5-5.16}/examples/streaming/Readme.txt +0 -0
  256. {Pyro5-5.15 → pyro5-5.16}/examples/thirdpartylib/Readme.txt +0 -0
  257. {Pyro5-5.15 → pyro5-5.16}/examples/thirdpartylib/awesome_thirdparty_library.py +0 -0
  258. {Pyro5-5.15 → pyro5-5.16}/examples/thirdpartylib/client.py +0 -0
  259. {Pyro5-5.15 → pyro5-5.16}/examples/thirdpartylib/server.py +0 -0
  260. {Pyro5-5.15 → pyro5-5.16}/examples/thirdpartylib/server2.py +0 -0
  261. {Pyro5-5.15 → pyro5-5.16}/examples/threadproxysharing/Readme.txt +0 -0
  262. {Pyro5-5.15 → pyro5-5.16}/examples/threadproxysharing/client.py +0 -0
  263. {Pyro5-5.15 → pyro5-5.16}/examples/timeout/Readme.txt +0 -0
  264. {Pyro5-5.15 → pyro5-5.16}/examples/timeout/client.py +0 -0
  265. {Pyro5-5.15 → pyro5-5.16}/examples/timeout/server.py +0 -0
  266. {Pyro5-5.15 → pyro5-5.16}/examples/timezones/Readme.txt +0 -0
  267. {Pyro5-5.15 → pyro5-5.16}/examples/timezones/client.py +0 -0
  268. {Pyro5-5.15 → pyro5-5.16}/examples/timezones/server.py +0 -0
  269. {Pyro5-5.15 → pyro5-5.16}/examples/unixdomainsock/Readme.txt +0 -0
  270. {Pyro5-5.15 → pyro5-5.16}/examples/unixdomainsock/abstract_namespace_server.py +0 -0
  271. {Pyro5-5.15 → pyro5-5.16}/examples/unixdomainsock/client.py +0 -0
  272. {Pyro5-5.15 → pyro5-5.16}/examples/unixdomainsock/server.py +0 -0
  273. {Pyro5-5.15 → pyro5-5.16}/examples/usersession/Readme.txt +0 -0
  274. {Pyro5-5.15 → pyro5-5.16}/examples/usersession/client.py +0 -0
  275. {Pyro5-5.15 → pyro5-5.16}/examples/usersession/database.py +0 -0
  276. {Pyro5-5.15 → pyro5-5.16}/examples/usersession/server.py +0 -0
  277. {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/Readme.txt +0 -0
  278. {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase1/person.py +0 -0
  279. {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase1/visit.py +0 -0
  280. {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase1/warehouse.py +0 -0
  281. {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase2/person.py +0 -0
  282. {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase2/visit.py +0 -0
  283. {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase2/warehouse.py +0 -0
  284. {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase3/person.py +0 -0
  285. {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase3/visit.py +0 -0
  286. {Pyro5-5.15 → pyro5-5.16}/examples/warehouse/phase3/warehouse.py +0 -0
  287. {Pyro5-5.15 → pyro5-5.16}/mypy.ini +0 -0
  288. {Pyro5-5.15 → pyro5-5.16}/requirements.txt +0 -0
  289. {Pyro5-5.15 → pyro5-5.16}/setup.py +0 -0
  290. {Pyro5-5.15 → pyro5-5.16}/tests/support.py +0 -0
  291. {Pyro5-5.15 → pyro5-5.16}/tests/test_api.py +0 -0
  292. {Pyro5-5.15 → pyro5-5.16}/tests/test_client.py +0 -0
  293. {Pyro5-5.15 → pyro5-5.16}/tests/test_core.py +0 -0
  294. {Pyro5-5.15 → pyro5-5.16}/tests/test_echoserver.py +0 -0
  295. {Pyro5-5.15 → pyro5-5.16}/tests/test_errors.py +0 -0
  296. {Pyro5-5.15 → pyro5-5.16}/tests/test_httpgateway.py +0 -0
  297. {Pyro5-5.15 → pyro5-5.16}/tests/test_naming.py +0 -0
  298. {Pyro5-5.15 → pyro5-5.16}/tests/test_protocol.py +0 -0
  299. {Pyro5-5.15 → pyro5-5.16}/tests/test_pyro4compat.py +0 -0
  300. {Pyro5-5.15 → pyro5-5.16}/tests/test_serialize.py +0 -0
  301. {Pyro5-5.15 → pyro5-5.16}/tests/test_server_timeout.py +0 -0
  302. {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.8', '3.9', '3.10', '3.11', '3.12']
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
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,16 +1,14 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: Pyro5
3
- Version: 5.15
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.8 and newer, and Pypy3
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
-
@@ -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.15"
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
 
@@ -1,16 +1,14 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: Pyro5
3
- Version: 5.15
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.8 and newer, and Pypy3
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
-
@@ -4,4 +4,3 @@ pyro5-echoserver = Pyro5.utils.echoserver:main
4
4
  pyro5-httpgateway = Pyro5.utils.httpgateway:main
5
5
  pyro5-ns = Pyro5.nameserver:main
6
6
  pyro5-nsc = Pyro5.nsc:main
7
-
@@ -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.8 and newer, and Pypy3
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.8 or newer.
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).
@@ -17,3 +17,7 @@ with Pyro5.api.Proxy(uri) as p:
17
17
  print("\nslow generator:")
18
18
  for number in p.slow_generator():
19
19
  print(number)
20
+ print("\nproperty iterator:")
21
+ print(list(p.prop_iter))
22
+ print("\nproperty generator:")
23
+ print(list(p.prop_generator))
@@ -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"
@@ -13,7 +13,6 @@ license_file = LICENSE
13
13
  classifiers =
14
14
  Development Status :: 5 - Production/Stable
15
15
  Intended Audience :: Developers
16
- License :: OSI Approved :: MIT License
17
16
  Natural Language :: English
18
17
  Natural Language :: Dutch
19
18
  Operating System :: OS Independent
@@ -1,3 +1,4 @@
1
+ build
1
2
  serpent>=1.41
2
3
  msgpack>=0.5.2
3
4
  pytest
@@ -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
- with pytest.raises(DaemonError) as x:
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 (as long as METADATA is true)
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 (as long as METADATA is true)
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
- assert addr.version == 4
60
- assert str(addr).startswith("127.")
61
- assert str(addr.ip).startswith("127.0")
62
- assert str(addr.network).startswith("127.0")
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
@@ -1,5 +1,5 @@
1
1
  [tox]
2
- envlist=py38,py39,py310,py311,pypy3
2
+ envlist=py310,py311,py312,py313,py314,pypy3
3
3
 
4
4
  [testenv]
5
5
  deps=
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