runtimepy 5.4.2__tar.gz → 5.4.4__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 (272) hide show
  1. {runtimepy-5.4.2/runtimepy.egg-info → runtimepy-5.4.4}/PKG-INFO +4 -4
  2. {runtimepy-5.4.2 → runtimepy-5.4.4}/README.md +2 -2
  3. {runtimepy-5.4.2 → runtimepy-5.4.4}/pyproject.toml +1 -1
  4. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/__init__.py +2 -2
  5. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/commands/tftp.py +3 -4
  6. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/css/bootstrap_extra.css +4 -0
  7. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/env/tab/html.py +4 -2
  8. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/udp/tftp/__init__.py +14 -0
  9. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/udp/tftp/base.py +12 -5
  10. {runtimepy-5.4.2 → runtimepy-5.4.4/runtimepy.egg-info}/PKG-INFO +4 -4
  11. {runtimepy-5.4.2 → runtimepy-5.4.4}/LICENSE +0 -0
  12. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/__main__.py +0 -0
  13. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/app.py +0 -0
  14. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/__init__.py +0 -0
  15. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/__init__.py +0 -0
  16. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/array.py +0 -0
  17. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/base.py +0 -0
  18. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/command/__init__.py +0 -0
  19. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/command/parser.py +0 -0
  20. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/command/processor.py +0 -0
  21. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/command/result.py +0 -0
  22. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/create.py +0 -0
  23. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/file.py +0 -0
  24. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/sample.py +0 -0
  25. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/environment/telemetry.py +0 -0
  26. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/event/__init__.py +0 -0
  27. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/event/header.py +0 -0
  28. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/channel/registry.py +0 -0
  29. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/codec/__init__.py +0 -0
  30. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/codec/protocol/__init__.py +0 -0
  31. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/codec/protocol/base.py +0 -0
  32. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/codec/protocol/json.py +0 -0
  33. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/codec/system/__init__.py +0 -0
  34. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/commands/__init__.py +0 -0
  35. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/commands/all.py +0 -0
  36. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/commands/arbiter.py +0 -0
  37. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/commands/common.py +0 -0
  38. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/commands/server.py +0 -0
  39. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/commands/task.py +0 -0
  40. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/commands/tui.py +0 -0
  41. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/control/__init__.py +0 -0
  42. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/control/env/__init__.py +0 -0
  43. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/control/source.py +0 -0
  44. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/control/step.py +0 -0
  45. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/browser.yaml +0 -0
  46. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/css/main.css +0 -0
  47. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/dummy_load.yaml +0 -0
  48. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/factories.yaml +0 -0
  49. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/favicon.ico +0 -0
  50. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/DataConnection.js +0 -0
  51. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/JsonConnection.js +0 -0
  52. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/audio.js +0 -0
  53. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/App.js +0 -0
  54. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/ChannelTable.js +0 -0
  55. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/DataConnection.js +0 -0
  56. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/JsonConnection.js +0 -0
  57. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/OverlayManager.js +0 -0
  58. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/Plot.js +0 -0
  59. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/PlotDrawer.js +0 -0
  60. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/PlotManager.js +0 -0
  61. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/PlotModalManager.js +0 -0
  62. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/PointBuffer.js +0 -0
  63. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/PointManager.js +0 -0
  64. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/TabFilter.js +0 -0
  65. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/TabInterface.js +0 -0
  66. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/UnitSystem.js +0 -0
  67. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/WindowHashManager.js +0 -0
  68. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/classes/WorkerInterface.js +0 -0
  69. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/events.js +0 -0
  70. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/init.js +0 -0
  71. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/main.js +0 -0
  72. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/tab/env.js +0 -0
  73. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/tab/sound.js +0 -0
  74. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/third-party/webgl-debug.js +0 -0
  75. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/unused/pyodide.js +0 -0
  76. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/util.js +0 -0
  77. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/js/worker.js +0 -0
  78. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/BitFields.yaml +0 -0
  79. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/Channel.yaml +0 -0
  80. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/ChannelCommand.yaml +0 -0
  81. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/ChannelRegistry.yaml +0 -0
  82. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/ClientConnectionConfig.yaml +0 -0
  83. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/ConnectionArbiterConfig.yaml +0 -0
  84. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/EnumRegistry.yaml +0 -0
  85. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/FindFile.yaml +0 -0
  86. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/PeerProcessConfig.yaml +0 -0
  87. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/RuntimeEnum.yaml +0 -0
  88. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/ServerConnectionConfig.yaml +0 -0
  89. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/StructConfig.yaml +0 -0
  90. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/TaskConfig.yaml +0 -0
  91. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/channel_controls.yaml +0 -0
  92. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/has_config.yaml +0 -0
  93. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/has_factory.yaml +0 -0
  94. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/has_name.yaml +0 -0
  95. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/schemas/has_request_flag.yaml +0 -0
  96. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/server.yaml +0 -0
  97. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/server_base.yaml +0 -0
  98. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/server_dev.yaml +0 -0
  99. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/data/tftp_server.yaml +0 -0
  100. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/dev_requirements.txt +0 -0
  101. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/entry.py +0 -0
  102. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/enum/__init__.py +0 -0
  103. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/enum/registry.py +0 -0
  104. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/enum/types.py +0 -0
  105. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/mapping.py +0 -0
  106. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/message/__init__.py +0 -0
  107. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/message/handlers.py +0 -0
  108. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/message/interface.py +0 -0
  109. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/message/types.py +0 -0
  110. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/metrics/__init__.py +0 -0
  111. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/metrics/channel.py +0 -0
  112. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/metrics/connection.py +0 -0
  113. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/metrics/task.py +0 -0
  114. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/mixins/__init__.py +0 -0
  115. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/mixins/async_command.py +0 -0
  116. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/mixins/enum.py +0 -0
  117. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/mixins/environment.py +0 -0
  118. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/mixins/finalize.py +0 -0
  119. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/mixins/logging.py +0 -0
  120. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/mixins/psutil.py +0 -0
  121. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/mixins/regex.py +0 -0
  122. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/mixins/trig.py +0 -0
  123. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/__init__.py +0 -0
  124. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/apps/__init__.py +0 -0
  125. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/__init__.py +0 -0
  126. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/base.py +0 -0
  127. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/config/__init__.py +0 -0
  128. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/config/codec.py +0 -0
  129. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/config/util.py +0 -0
  130. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/factory/__init__.py +0 -0
  131. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/factory/connection.py +0 -0
  132. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/factory/task.py +0 -0
  133. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/housekeeping/__init__.py +0 -0
  134. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/imports/__init__.py +0 -0
  135. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/imports/util.py +0 -0
  136. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/info.py +0 -0
  137. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/result.py +0 -0
  138. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/task.py +0 -0
  139. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/tcp/__init__.py +0 -0
  140. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/tcp/json.py +0 -0
  141. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/udp.py +0 -0
  142. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/arbiter/websocket.py +0 -0
  143. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/backoff.py +0 -0
  144. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/connection.py +0 -0
  145. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/factories/__init__.py +0 -0
  146. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/http/__init__.py +0 -0
  147. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/http/common.py +0 -0
  148. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/http/header.py +0 -0
  149. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/http/request_target.py +0 -0
  150. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/http/response.py +0 -0
  151. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/http/state.py +0 -0
  152. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/http/version.py +0 -0
  153. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/manager.py +0 -0
  154. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/mixin.py +0 -0
  155. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/__init__.py +0 -0
  156. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/__init__.py +0 -0
  157. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/base.py +0 -0
  158. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/bootstrap/__init__.py +0 -0
  159. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/bootstrap/elements.py +0 -0
  160. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/bootstrap/tabs.py +0 -0
  161. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/create.py +0 -0
  162. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/elements.py +0 -0
  163. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/env/__init__.py +0 -0
  164. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/env/modal.py +0 -0
  165. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/env/tab/__init__.py +0 -0
  166. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/env/tab/base.py +0 -0
  167. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/env/tab/controls.py +0 -0
  168. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/env/tab/message.py +0 -0
  169. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/env/widgets.py +0 -0
  170. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/files.py +0 -0
  171. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/landing_page.py +0 -0
  172. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/placeholder.py +0 -0
  173. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/pyodide.py +0 -0
  174. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/sound.py +0 -0
  175. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/app/tab.py +0 -0
  176. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/html.py +0 -0
  177. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/json.py +0 -0
  178. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/struct/__init__.py +0 -0
  179. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/websocket/__init__.py +0 -0
  180. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/server/websocket/state.py +0 -0
  181. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/stream/__init__.py +0 -0
  182. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/stream/base.py +0 -0
  183. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/stream/json/__init__.py +0 -0
  184. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/stream/string.py +0 -0
  185. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/tcp/__init__.py +0 -0
  186. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/tcp/connection.py +0 -0
  187. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/tcp/create.py +0 -0
  188. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/tcp/http/__init__.py +0 -0
  189. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/tcp/protocol.py +0 -0
  190. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/tcp/scpi/__init__.py +0 -0
  191. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/tcp/telnet/__init__.py +0 -0
  192. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/tcp/telnet/codes.py +0 -0
  193. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/tcp/telnet/np_05b.py +0 -0
  194. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/udp/__init__.py +0 -0
  195. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/udp/connection.py +0 -0
  196. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/udp/create.py +0 -0
  197. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/udp/protocol.py +0 -0
  198. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/udp/queue.py +0 -0
  199. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/udp/tftp/endpoint.py +0 -0
  200. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/udp/tftp/enums.py +0 -0
  201. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/udp/tftp/io.py +0 -0
  202. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/util.py +0 -0
  203. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/websocket/__init__.py +0 -0
  204. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/net/websocket/connection.py +0 -0
  205. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/noise/__init__.py +0 -0
  206. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/__init__.py +0 -0
  207. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/array/__init__.py +0 -0
  208. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/base.py +0 -0
  209. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/bool.py +0 -0
  210. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/byte_order.py +0 -0
  211. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/evaluation.py +0 -0
  212. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/field/__init__.py +0 -0
  213. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/field/fields.py +0 -0
  214. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/field/manager/__init__.py +0 -0
  215. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/field/manager/base.py +0 -0
  216. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/float.py +0 -0
  217. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/int.py +0 -0
  218. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/scaling.py +0 -0
  219. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/serializable/__init__.py +0 -0
  220. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/serializable/base.py +0 -0
  221. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/serializable/fixed.py +0 -0
  222. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/serializable/prefixed.py +0 -0
  223. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/string.py +0 -0
  224. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/types/__init__.py +0 -0
  225. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/types/base.py +0 -0
  226. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/types/bool.py +0 -0
  227. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/types/bounds.py +0 -0
  228. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/types/float.py +0 -0
  229. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/primitives/types/int.py +0 -0
  230. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/py.typed +0 -0
  231. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/registry/__init__.py +0 -0
  232. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/registry/bool.py +0 -0
  233. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/registry/item.py +0 -0
  234. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/registry/name.py +0 -0
  235. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/requirements.txt +0 -0
  236. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/sample/__init__.py +0 -0
  237. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/sample/peer.py +0 -0
  238. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/sample/program.py +0 -0
  239. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/schemas.py +0 -0
  240. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/struct/__init__.py +0 -0
  241. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/subprocess/__init__.py +0 -0
  242. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/subprocess/interface.py +0 -0
  243. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/subprocess/peer.py +0 -0
  244. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/subprocess/program.py +0 -0
  245. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/subprocess/protocol.py +0 -0
  246. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/task/__init__.py +0 -0
  247. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/task/asynchronous.py +0 -0
  248. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/task/basic/__init__.py +0 -0
  249. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/task/basic/manager.py +0 -0
  250. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/task/basic/periodic.py +0 -0
  251. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/task/sample.py +0 -0
  252. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/task/trig/__init__.py +0 -0
  253. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/telemetry/__init__.py +0 -0
  254. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/tui/__init__.py +0 -0
  255. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/tui/channels/__init__.py +0 -0
  256. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/tui/cursor.py +0 -0
  257. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/tui/mixin.py +0 -0
  258. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/tui/mock.py +0 -0
  259. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/tui/task.py +0 -0
  260. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/ui/__init__.py +0 -0
  261. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/ui/controls.py +0 -0
  262. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy/util.py +0 -0
  263. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy.egg-info/SOURCES.txt +0 -0
  264. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy.egg-info/dependency_links.txt +0 -0
  265. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy.egg-info/entry_points.txt +0 -0
  266. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy.egg-info/requires.txt +1 -1
  267. {runtimepy-5.4.2 → runtimepy-5.4.4}/runtimepy.egg-info/top_level.txt +0 -0
  268. {runtimepy-5.4.2 → runtimepy-5.4.4}/setup.cfg +0 -0
  269. {runtimepy-5.4.2 → runtimepy-5.4.4}/setup.py +0 -0
  270. {runtimepy-5.4.2 → runtimepy-5.4.4}/tests/test_entry.py +0 -0
  271. {runtimepy-5.4.2 → runtimepy-5.4.4}/tests/test_mapping.py +0 -0
  272. {runtimepy-5.4.2 → runtimepy-5.4.4}/tests/test_resources.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: runtimepy
3
- Version: 5.4.2
3
+ Version: 5.4.4
4
4
  Summary: A framework for implementing Python services.
5
5
  Home-page: https://github.com/vkottler/runtimepy
6
6
  Author: Vaughn Kottler
@@ -17,9 +17,9 @@ Classifier: License :: OSI Approved :: MIT License
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: vcorelib>=3.3.1
21
20
  Requires-Dist: websockets
22
21
  Requires-Dist: psutil
22
+ Requires-Dist: vcorelib>=3.3.1
23
23
  Requires-Dist: svgen>=0.6.8
24
24
  Provides-Extra: test
25
25
  Requires-Dist: pylint; extra == "test"
@@ -44,11 +44,11 @@ Requires-Dist: uvloop; (sys_platform != "win32" and sys_platform != "cygwin") an
44
44
  =====================================
45
45
  generator=datazen
46
46
  version=3.1.4
47
- hash=4f8a71a6066638ed1a90f375188f0578
47
+ hash=dbac0e58214ea7e4abbe7161a3c64749
48
48
  =====================================
49
49
  -->
50
50
 
51
- # runtimepy ([5.4.2](https://pypi.org/project/runtimepy/))
51
+ # runtimepy ([5.4.4](https://pypi.org/project/runtimepy/))
52
52
 
53
53
  [![python](https://img.shields.io/pypi/pyversions/runtimepy.svg)](https://pypi.org/project/runtimepy/)
54
54
  ![Build Status](https://github.com/vkottler/runtimepy/workflows/Python%20Package/badge.svg)
@@ -2,11 +2,11 @@
2
2
  =====================================
3
3
  generator=datazen
4
4
  version=3.1.4
5
- hash=4f8a71a6066638ed1a90f375188f0578
5
+ hash=dbac0e58214ea7e4abbe7161a3c64749
6
6
  =====================================
7
7
  -->
8
8
 
9
- # runtimepy ([5.4.2](https://pypi.org/project/runtimepy/))
9
+ # runtimepy ([5.4.4](https://pypi.org/project/runtimepy/))
10
10
 
11
11
  [![python](https://img.shields.io/pypi/pyversions/runtimepy.svg)](https://pypi.org/project/runtimepy/)
12
12
  ![Build Status](https://github.com/vkottler/runtimepy/workflows/Python%20Package/badge.svg)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta:__legacy__"
4
4
 
5
5
  [project]
6
6
  name = "runtimepy"
7
- version = "5.4.2"
7
+ version = "5.4.4"
8
8
  description = "A framework for implementing Python services."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,7 +1,7 @@
1
1
  # =====================================
2
2
  # generator=datazen
3
3
  # version=3.1.4
4
- # hash=e6970089f5f2935c496cb3e9bb06b774
4
+ # hash=5a37b52aedb2af82fb174fbea8ce0c1f
5
5
  # =====================================
6
6
 
7
7
  """
@@ -10,7 +10,7 @@ Useful defaults and other package metadata.
10
10
 
11
11
  DESCRIPTION = "A framework for implementing Python services."
12
12
  PKG_NAME = "runtimepy"
13
- VERSION = "5.4.2"
13
+ VERSION = "5.4.4"
14
14
 
15
15
  # runtimepy-specific content.
16
16
  METRICS_NAME = "metrics"
@@ -8,13 +8,12 @@ import asyncio
8
8
  from pathlib import Path
9
9
  from socket import getaddrinfo
10
10
 
11
- from vcorelib.args import CommandFunction
12
-
13
11
  # third-party
12
+ from vcorelib.args import CommandFunction
14
13
  from vcorelib.asyncio import run_handle_stop
15
14
 
16
15
  # internal
17
- from runtimepy.net.udp.tftp import tftp_read, tftp_write
16
+ from runtimepy.net.udp.tftp import TFTP_PORT, tftp_read, tftp_write
18
17
  from runtimepy.net.udp.tftp.base import DEFAULT_TIMEOUT_S, REEMIT_PERIOD_S
19
18
  from runtimepy.net.udp.tftp.enums import DEFAULT_MODE
20
19
 
@@ -53,7 +52,7 @@ def add_tftp_cmd(parser: argparse.ArgumentParser) -> CommandFunction:
53
52
  "-p",
54
53
  "--port",
55
54
  type=int,
56
- default=69,
55
+ default=TFTP_PORT,
57
56
  help="port to message (default: %(default)s)",
58
57
  )
59
58
 
@@ -40,6 +40,10 @@
40
40
  width: auto;
41
41
  }
42
42
 
43
+ .table-container {
44
+ overflow-x: scroll;
45
+ }
46
+
43
47
  .channel-column {
44
48
  overflow-y: scroll;
45
49
  overflow-x: hidden;
@@ -134,7 +134,9 @@ class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
134
134
  def channel_table(self, parent: Element) -> None:
135
135
  """Create the channel table."""
136
136
 
137
- table = div(tag="table", parent=parent)
137
+ table = div(
138
+ tag="table", parent=div(parent=parent, class_str="table-container")
139
+ )
138
140
  table.add_class("table", TEXT)
139
141
 
140
142
  header = div(tag="thead", parent=table)
@@ -248,7 +250,7 @@ class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
248
250
  # table doesn't take up full vertical space, few channels).
249
251
  under_construction(
250
252
  vert_container,
251
- class_str="border-start border-end",
253
+ class_str="border-start border-top border-end",
252
254
  note="unused space",
253
255
  )
254
256
 
@@ -21,6 +21,7 @@ from runtimepy.net.udp.tftp.base import (
21
21
  DEFAULT_TIMEOUT_S,
22
22
  REEMIT_PERIOD_S,
23
23
  BaseTftpConnection,
24
+ TftpErrorHandler,
24
25
  )
25
26
  from runtimepy.net.udp.tftp.enums import DEFAULT_MODE
26
27
  from runtimepy.util import PossiblePath, as_path
@@ -194,6 +195,9 @@ class TftpConnection(BaseTftpConnection):
194
195
  return result
195
196
 
196
197
 
198
+ TFTP_PORT = 69
199
+
200
+
197
201
  @asynccontextmanager
198
202
  async def tftp(
199
203
  addr: Union[IpHost, tuple[str, int]],
@@ -201,6 +205,7 @@ async def tftp(
201
205
  connection_kwargs: dict[str, Any] = None,
202
206
  timeout_s: float = DEFAULT_TIMEOUT_S,
203
207
  reemit_period_s: float = REEMIT_PERIOD_S,
208
+ error_handler: TftpErrorHandler = None,
204
209
  ) -> AsyncIterator[TftpConnection]:
205
210
  """Use a tftp connection as a managed context."""
206
211
 
@@ -215,6 +220,11 @@ async def tftp(
215
220
  conn = await TftpConnection.create_connection(
216
221
  remote_addr=(addr.name, addr.port), **connection_kwargs
217
222
  )
223
+
224
+ # Add error handlers.
225
+ if error_handler is not None:
226
+ conn.error_handlers.append(error_handler)
227
+
218
228
  async with conn.process_then_disable(**process_kwargs):
219
229
  # Set parameters.
220
230
  conn.endpoint_timeout.value = timeout_s
@@ -232,6 +242,7 @@ async def tftp_write(
232
242
  connection_kwargs: dict[str, Any] = None,
233
243
  timeout_s: float = DEFAULT_TIMEOUT_S,
234
244
  reemit_period_s: float = REEMIT_PERIOD_S,
245
+ error_handler: TftpErrorHandler = None,
235
246
  ) -> bool:
236
247
  """Attempt to perform a tftp write."""
237
248
 
@@ -241,6 +252,7 @@ async def tftp_write(
241
252
  connection_kwargs=connection_kwargs,
242
253
  timeout_s=timeout_s,
243
254
  reemit_period_s=reemit_period_s,
255
+ error_handler=error_handler,
244
256
  ) as conn:
245
257
  # Perform tftp interaction.
246
258
  result = await conn.request_write(
@@ -259,6 +271,7 @@ async def tftp_read(
259
271
  connection_kwargs: dict[str, Any] = None,
260
272
  timeout_s: float = DEFAULT_TIMEOUT_S,
261
273
  reemit_period_s: float = REEMIT_PERIOD_S,
274
+ error_handler: TftpErrorHandler = None,
262
275
  ) -> bool:
263
276
  """Attempt to perform a tftp read."""
264
277
 
@@ -268,6 +281,7 @@ async def tftp_read(
268
281
  connection_kwargs=connection_kwargs,
269
282
  timeout_s=timeout_s,
270
283
  reemit_period_s=reemit_period_s,
284
+ error_handler=error_handler,
271
285
  ) as conn:
272
286
  result = await conn.request_read(
273
287
  destination, filename, mode=mode, addr=addr
@@ -8,7 +8,7 @@ from contextlib import AsyncExitStack
8
8
  from io import BytesIO
9
9
  import logging
10
10
  from pathlib import Path
11
- from typing import BinaryIO, Union
11
+ from typing import BinaryIO, Callable, Union
12
12
 
13
13
  # third-party
14
14
  from vcorelib.math import metrics_time_ns
@@ -30,6 +30,8 @@ from runtimepy.primitives import Double, Uint16
30
30
  REEMIT_PERIOD_S = 0.20
31
31
  DEFAULT_TIMEOUT_S = 1.0
32
32
 
33
+ TftpErrorHandler = Callable[[TftpErrorCode, str, tuple[str, int]], None]
34
+
33
35
 
34
36
  class BaseTftpConnection(UdpConnection):
35
37
  """A class implementing a basic tftp interface."""
@@ -73,6 +75,7 @@ class BaseTftpConnection(UdpConnection):
73
75
 
74
76
  self.error_code = Uint16(time_source=metrics_time_ns)
75
77
  self.env.channel("error_code", self.error_code, enum="TftpErrorCode")
78
+ self.error_handlers: list[TftpErrorHandler] = []
76
79
 
77
80
  self.endpoint_period = Double(value=REEMIT_PERIOD_S)
78
81
  self.env.channel(
@@ -346,10 +349,14 @@ class BaseTftpConnection(UdpConnection):
346
349
  """Handle an error message."""
347
350
 
348
351
  # Update underlying primitive.
349
- error_code = self.error_code.from_stream(stream)
350
- self.endpoint(addr).handle_error(
351
- TftpErrorCode(error_code), stream.read().decode()
352
- )
352
+ error_code = TftpErrorCode(self.error_code.from_stream(stream))
353
+ message = stream.read().decode()
354
+
355
+ # Call extra error handlers.
356
+ for handler in self.error_handlers:
357
+ handler(error_code, message, addr)
358
+
359
+ self.endpoint(addr).handle_error(error_code, message)
353
360
 
354
361
  async def process_datagram(
355
362
  self, data: bytes, addr: tuple[str, int]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: runtimepy
3
- Version: 5.4.2
3
+ Version: 5.4.4
4
4
  Summary: A framework for implementing Python services.
5
5
  Home-page: https://github.com/vkottler/runtimepy
6
6
  Author: Vaughn Kottler
@@ -17,9 +17,9 @@ Classifier: License :: OSI Approved :: MIT License
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: vcorelib>=3.3.1
21
20
  Requires-Dist: websockets
22
21
  Requires-Dist: psutil
22
+ Requires-Dist: vcorelib>=3.3.1
23
23
  Requires-Dist: svgen>=0.6.8
24
24
  Provides-Extra: test
25
25
  Requires-Dist: pylint; extra == "test"
@@ -44,11 +44,11 @@ Requires-Dist: uvloop; (sys_platform != "win32" and sys_platform != "cygwin") an
44
44
  =====================================
45
45
  generator=datazen
46
46
  version=3.1.4
47
- hash=4f8a71a6066638ed1a90f375188f0578
47
+ hash=dbac0e58214ea7e4abbe7161a3c64749
48
48
  =====================================
49
49
  -->
50
50
 
51
- # runtimepy ([5.4.2](https://pypi.org/project/runtimepy/))
51
+ # runtimepy ([5.4.4](https://pypi.org/project/runtimepy/))
52
52
 
53
53
  [![python](https://img.shields.io/pypi/pyversions/runtimepy.svg)](https://pypi.org/project/runtimepy/)
54
54
  ![Build Status](https://github.com/vkottler/runtimepy/workflows/Python%20Package/badge.svg)
File without changes
File without changes
File without changes