runtimepy 5.6.0__tar.gz → 5.6.2__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 (280) hide show
  1. {runtimepy-5.6.0/runtimepy.egg-info → runtimepy-5.6.2}/PKG-INFO +13 -6
  2. {runtimepy-5.6.0 → runtimepy-5.6.2}/README.md +11 -4
  3. {runtimepy-5.6.0 → runtimepy-5.6.2}/pyproject.toml +1 -1
  4. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/__init__.py +2 -2
  5. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/App.js +33 -0
  6. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/PlotDrawer.js +7 -1
  7. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/PlotModalManager.js +3 -1
  8. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/WindowHashManager.js +17 -2
  9. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/init.js +12 -0
  10. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/worker.js +18 -3
  11. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/env/__init__.py +2 -2
  12. runtimepy-5.6.2/runtimepy/net/server/app/env/settings.py +59 -0
  13. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/tcp/connection.py +1 -5
  14. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/util.py +11 -2
  15. {runtimepy-5.6.0 → runtimepy-5.6.2/runtimepy.egg-info}/PKG-INFO +13 -6
  16. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy.egg-info/SOURCES.txt +1 -0
  17. {runtimepy-5.6.0 → runtimepy-5.6.2}/LICENSE +0 -0
  18. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/__main__.py +0 -0
  19. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/app.py +0 -0
  20. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/__init__.py +0 -0
  21. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/__init__.py +0 -0
  22. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/array.py +0 -0
  23. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/base.py +0 -0
  24. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/command/__init__.py +0 -0
  25. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/command/parser.py +0 -0
  26. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/command/processor.py +0 -0
  27. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/command/result.py +0 -0
  28. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/create.py +0 -0
  29. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/file.py +0 -0
  30. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/sample.py +0 -0
  31. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/environment/telemetry.py +0 -0
  32. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/event/__init__.py +0 -0
  33. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/event/header.py +0 -0
  34. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/channel/registry.py +0 -0
  35. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/codec/__init__.py +0 -0
  36. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/codec/protocol/__init__.py +0 -0
  37. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/codec/protocol/base.py +0 -0
  38. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/codec/protocol/json.py +0 -0
  39. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/codec/system/__init__.py +0 -0
  40. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/commands/__init__.py +0 -0
  41. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/commands/all.py +0 -0
  42. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/commands/arbiter.py +0 -0
  43. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/commands/common.py +0 -0
  44. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/commands/mtu.py +0 -0
  45. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/commands/server.py +0 -0
  46. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/commands/task.py +0 -0
  47. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/commands/tftp.py +0 -0
  48. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/commands/tui.py +0 -0
  49. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/control/__init__.py +0 -0
  50. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/control/env/__init__.py +0 -0
  51. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/control/source.py +0 -0
  52. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/control/step.py +0 -0
  53. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/browser.yaml +0 -0
  54. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/css/bootstrap_extra.css +0 -0
  55. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/css/main.css +0 -0
  56. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/dummy_load.yaml +0 -0
  57. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/factories.yaml +0 -0
  58. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/favicon.ico +0 -0
  59. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/DataConnection.js +0 -0
  60. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/JsonConnection.js +0 -0
  61. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/audio.js +0 -0
  62. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/ChannelTable.js +0 -0
  63. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/DataConnection.js +0 -0
  64. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/JsonConnection.js +0 -0
  65. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/OverlayManager.js +0 -0
  66. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/Plot.js +0 -0
  67. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/PlotManager.js +0 -0
  68. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/PointBuffer.js +0 -0
  69. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/PointManager.js +0 -0
  70. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/TabFilter.js +0 -0
  71. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/TabInterface.js +0 -0
  72. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/UnitSystem.js +0 -0
  73. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/classes/WorkerInterface.js +0 -0
  74. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/events.js +0 -0
  75. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/main.js +0 -0
  76. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/tab/env.js +0 -0
  77. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/tab/sound.js +0 -0
  78. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/third-party/webgl-debug.js +0 -0
  79. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/unused/pyodide.js +0 -0
  80. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/js/util.js +0 -0
  81. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/sample_telemetry.yaml +0 -0
  82. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/BitFields.yaml +0 -0
  83. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/Channel.yaml +0 -0
  84. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/ChannelCommand.yaml +0 -0
  85. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/ChannelRegistry.yaml +0 -0
  86. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/ClientConnectionConfig.yaml +0 -0
  87. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/ConnectionArbiterConfig.yaml +0 -0
  88. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/EnumRegistry.yaml +0 -0
  89. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/FindFile.yaml +0 -0
  90. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/PeerProcessConfig.yaml +0 -0
  91. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/RuntimeEnum.yaml +0 -0
  92. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/ServerConnectionConfig.yaml +0 -0
  93. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/StructConfig.yaml +0 -0
  94. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/TaskConfig.yaml +0 -0
  95. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/channel_controls.yaml +0 -0
  96. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/has_config.yaml +0 -0
  97. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/has_factory.yaml +0 -0
  98. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/has_name.yaml +0 -0
  99. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/schemas/has_request_flag.yaml +0 -0
  100. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/server.yaml +0 -0
  101. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/server_base.yaml +0 -0
  102. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/server_dev.yaml +0 -0
  103. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/data/tftp_server.yaml +0 -0
  104. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/dev_requirements.txt +0 -0
  105. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/entry.py +0 -0
  106. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/enum/__init__.py +0 -0
  107. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/enum/registry.py +0 -0
  108. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/enum/types.py +0 -0
  109. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/mapping.py +0 -0
  110. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/message/__init__.py +0 -0
  111. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/message/handlers.py +0 -0
  112. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/message/interface.py +0 -0
  113. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/message/types.py +0 -0
  114. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/metrics/__init__.py +0 -0
  115. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/metrics/channel.py +0 -0
  116. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/metrics/connection.py +0 -0
  117. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/metrics/task.py +0 -0
  118. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/mixins/__init__.py +0 -0
  119. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/mixins/async_command.py +0 -0
  120. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/mixins/enum.py +0 -0
  121. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/mixins/environment.py +0 -0
  122. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/mixins/finalize.py +0 -0
  123. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/mixins/logging.py +0 -0
  124. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/mixins/psutil.py +0 -0
  125. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/mixins/regex.py +0 -0
  126. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/mixins/trig.py +0 -0
  127. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/__init__.py +0 -0
  128. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/apps/__init__.py +0 -0
  129. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/__init__.py +0 -0
  130. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/base.py +0 -0
  131. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/config/__init__.py +0 -0
  132. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/config/codec.py +0 -0
  133. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/config/util.py +0 -0
  134. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/factory/__init__.py +0 -0
  135. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/factory/connection.py +0 -0
  136. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/factory/task.py +0 -0
  137. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/housekeeping/__init__.py +0 -0
  138. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/imports/__init__.py +0 -0
  139. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/imports/util.py +0 -0
  140. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/info.py +0 -0
  141. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/result.py +0 -0
  142. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/struct/__init__.py +0 -0
  143. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/task.py +0 -0
  144. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/tcp/__init__.py +0 -0
  145. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/tcp/json.py +0 -0
  146. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/udp.py +0 -0
  147. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/arbiter/websocket.py +0 -0
  148. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/backoff.py +0 -0
  149. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/connection.py +0 -0
  150. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/factories/__init__.py +0 -0
  151. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/http/__init__.py +0 -0
  152. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/http/common.py +0 -0
  153. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/http/header.py +0 -0
  154. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/http/request_target.py +0 -0
  155. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/http/response.py +0 -0
  156. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/http/state.py +0 -0
  157. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/http/version.py +0 -0
  158. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/manager.py +0 -0
  159. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/mixin.py +0 -0
  160. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/mtu.py +0 -0
  161. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/__init__.py +0 -0
  162. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/__init__.py +0 -0
  163. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/base.py +0 -0
  164. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/bootstrap/__init__.py +0 -0
  165. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/bootstrap/elements.py +0 -0
  166. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/bootstrap/tabs.py +0 -0
  167. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/create.py +0 -0
  168. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/elements.py +0 -0
  169. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/env/modal.py +0 -0
  170. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/env/tab/__init__.py +0 -0
  171. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/env/tab/base.py +0 -0
  172. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/env/tab/controls.py +0 -0
  173. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/env/tab/html.py +0 -0
  174. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/env/tab/message.py +0 -0
  175. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/env/widgets.py +0 -0
  176. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/files.py +0 -0
  177. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/landing_page.py +0 -0
  178. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/placeholder.py +0 -0
  179. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/pyodide.py +0 -0
  180. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/sound.py +0 -0
  181. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/app/tab.py +0 -0
  182. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/html.py +0 -0
  183. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/json.py +0 -0
  184. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/struct/__init__.py +0 -0
  185. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/websocket/__init__.py +0 -0
  186. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/server/websocket/state.py +0 -0
  187. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/ssl.py +0 -0
  188. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/stream/__init__.py +0 -0
  189. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/stream/base.py +0 -0
  190. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/stream/json/__init__.py +0 -0
  191. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/stream/string.py +0 -0
  192. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/tcp/__init__.py +0 -0
  193. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/tcp/create.py +0 -0
  194. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/tcp/http/__init__.py +0 -0
  195. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/tcp/protocol.py +0 -0
  196. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/tcp/scpi/__init__.py +0 -0
  197. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/tcp/telnet/__init__.py +0 -0
  198. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/tcp/telnet/codes.py +0 -0
  199. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/tcp/telnet/np_05b.py +0 -0
  200. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/udp/__init__.py +0 -0
  201. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/udp/connection.py +0 -0
  202. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/udp/create.py +0 -0
  203. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/udp/protocol.py +0 -0
  204. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/udp/queue.py +0 -0
  205. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/udp/tftp/__init__.py +0 -0
  206. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/udp/tftp/base.py +0 -0
  207. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/udp/tftp/endpoint.py +0 -0
  208. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/udp/tftp/enums.py +0 -0
  209. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/udp/tftp/io.py +0 -0
  210. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/websocket/__init__.py +0 -0
  211. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/net/websocket/connection.py +0 -0
  212. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/noise/__init__.py +0 -0
  213. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/__init__.py +0 -0
  214. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/array/__init__.py +0 -0
  215. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/base.py +0 -0
  216. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/bool.py +0 -0
  217. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/byte_order.py +0 -0
  218. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/evaluation.py +0 -0
  219. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/field/__init__.py +0 -0
  220. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/field/fields.py +0 -0
  221. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/field/manager/__init__.py +0 -0
  222. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/field/manager/base.py +0 -0
  223. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/float.py +0 -0
  224. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/int.py +0 -0
  225. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/scaling.py +0 -0
  226. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/serializable/__init__.py +0 -0
  227. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/serializable/base.py +0 -0
  228. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/serializable/fixed.py +0 -0
  229. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/serializable/framer.py +0 -0
  230. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/serializable/prefixed.py +0 -0
  231. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/string.py +0 -0
  232. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/types/__init__.py +0 -0
  233. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/types/base.py +0 -0
  234. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/types/bool.py +0 -0
  235. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/types/bounds.py +0 -0
  236. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/types/float.py +0 -0
  237. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/primitives/types/int.py +0 -0
  238. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/py.typed +0 -0
  239. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/registry/__init__.py +0 -0
  240. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/registry/bool.py +0 -0
  241. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/registry/item.py +0 -0
  242. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/registry/name.py +0 -0
  243. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/requirements.txt +0 -0
  244. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/sample/__init__.py +0 -0
  245. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/sample/peer.py +0 -0
  246. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/sample/program.py +0 -0
  247. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/schemas.py +0 -0
  248. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/struct/__init__.py +0 -0
  249. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/subprocess/__init__.py +0 -0
  250. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/subprocess/interface.py +0 -0
  251. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/subprocess/peer.py +0 -0
  252. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/subprocess/program.py +0 -0
  253. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/subprocess/protocol.py +0 -0
  254. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/task/__init__.py +0 -0
  255. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/task/asynchronous.py +0 -0
  256. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/task/basic/__init__.py +0 -0
  257. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/task/basic/manager.py +0 -0
  258. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/task/basic/periodic.py +0 -0
  259. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/task/sample.py +0 -0
  260. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/task/trig/__init__.py +0 -0
  261. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/telemetry/__init__.py +0 -0
  262. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/telemetry/sample.py +0 -0
  263. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/tui/__init__.py +0 -0
  264. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/tui/channels/__init__.py +0 -0
  265. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/tui/cursor.py +0 -0
  266. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/tui/mixin.py +0 -0
  267. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/tui/mock.py +0 -0
  268. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/tui/task.py +0 -0
  269. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/ui/__init__.py +0 -0
  270. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/ui/controls.py +0 -0
  271. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy/util.py +0 -0
  272. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy.egg-info/dependency_links.txt +0 -0
  273. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy.egg-info/entry_points.txt +0 -0
  274. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy.egg-info/requires.txt +1 -1
  275. {runtimepy-5.6.0 → runtimepy-5.6.2}/runtimepy.egg-info/top_level.txt +0 -0
  276. {runtimepy-5.6.0 → runtimepy-5.6.2}/setup.cfg +0 -0
  277. {runtimepy-5.6.0 → runtimepy-5.6.2}/setup.py +0 -0
  278. {runtimepy-5.6.0 → runtimepy-5.6.2}/tests/test_entry.py +0 -0
  279. {runtimepy-5.6.0 → runtimepy-5.6.2}/tests/test_mapping.py +0 -0
  280. {runtimepy-5.6.0 → runtimepy-5.6.2}/tests/test_resources.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: runtimepy
3
- Version: 5.6.0
3
+ Version: 5.6.2
4
4
  Summary: A framework for implementing Python services.
5
5
  Home-page: https://github.com/vkottler/runtimepy
6
6
  Author: Vaughn Kottler
@@ -17,10 +17,10 @@ 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: psutil
21
20
  Requires-Dist: websockets
22
21
  Requires-Dist: svgen>=0.6.8
23
22
  Requires-Dist: vcorelib>=3.3.1
23
+ Requires-Dist: psutil
24
24
  Provides-Extra: test
25
25
  Requires-Dist: pylint; extra == "test"
26
26
  Requires-Dist: flake8; 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=cd04f0ce079f8c60bc93c7f1d098316b
47
+ hash=9f2d1e2482b007a02c8b96d7f36d557d
48
48
  =====================================
49
49
  -->
50
50
 
51
- # runtimepy ([5.6.0](https://pypi.org/project/runtimepy/))
51
+ # runtimepy ([5.6.2](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)
@@ -165,8 +165,10 @@ options:
165
165
  ```
166
166
  $ ./venv3.12/bin/runtimepy server -h
167
167
 
168
- usage: runtimepy server [-h] [-i] [-w] [--no-poller] [--host HOST] [-p PORT]
169
- [-u] [-l]
168
+ usage: runtimepy server [-h] [-i] [-w] [--no-poller] [--cafile CAFILE]
169
+ [--capath CAPATH] [--cadata CADATA]
170
+ [--certfile CERTFILE] [--keyfile KEYFILE]
171
+ [--host HOST] [-p PORT] [-u] [-l]
170
172
  factory [configs ...]
171
173
 
172
174
  positional arguments:
@@ -181,6 +183,11 @@ options:
181
183
  ensure that a 'wait_for_stop' application method is
182
184
  run last
183
185
  --no-poller don't run a connection-metrics poller task
186
+ --cafile CAFILE passed directly to instantiation
187
+ --capath CAPATH passed directly to instantiation
188
+ --cadata CADATA passed directly to instantiation
189
+ --certfile CERTFILE passed directly to instantiation
190
+ --keyfile KEYFILE passed directly to instantiation
184
191
  --host HOST host address to listen on (default: '0.0.0.0')
185
192
  -p PORT, --port PORT port to listen on (default: 0)
186
193
  -u, --udp whether or not this is a UDP-based server (otherwise
@@ -2,11 +2,11 @@
2
2
  =====================================
3
3
  generator=datazen
4
4
  version=3.1.4
5
- hash=cd04f0ce079f8c60bc93c7f1d098316b
5
+ hash=9f2d1e2482b007a02c8b96d7f36d557d
6
6
  =====================================
7
7
  -->
8
8
 
9
- # runtimepy ([5.6.0](https://pypi.org/project/runtimepy/))
9
+ # runtimepy ([5.6.2](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)
@@ -123,8 +123,10 @@ options:
123
123
  ```
124
124
  $ ./venv3.12/bin/runtimepy server -h
125
125
 
126
- usage: runtimepy server [-h] [-i] [-w] [--no-poller] [--host HOST] [-p PORT]
127
- [-u] [-l]
126
+ usage: runtimepy server [-h] [-i] [-w] [--no-poller] [--cafile CAFILE]
127
+ [--capath CAPATH] [--cadata CADATA]
128
+ [--certfile CERTFILE] [--keyfile KEYFILE]
129
+ [--host HOST] [-p PORT] [-u] [-l]
128
130
  factory [configs ...]
129
131
 
130
132
  positional arguments:
@@ -139,6 +141,11 @@ options:
139
141
  ensure that a 'wait_for_stop' application method is
140
142
  run last
141
143
  --no-poller don't run a connection-metrics poller task
144
+ --cafile CAFILE passed directly to instantiation
145
+ --capath CAPATH passed directly to instantiation
146
+ --cadata CADATA passed directly to instantiation
147
+ --certfile CERTFILE passed directly to instantiation
148
+ --keyfile KEYFILE passed directly to instantiation
142
149
  --host HOST host address to listen on (default: '0.0.0.0')
143
150
  -p PORT, --port PORT port to listen on (default: 0)
144
151
  -u, --udp whether or not this is a UDP-based server (otherwise
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta:__legacy__"
4
4
 
5
5
  [project]
6
6
  name = "runtimepy"
7
- version = "5.6.0"
7
+ version = "5.6.2"
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=6c21c41096ed57b6c6469232c97787cd
4
+ # hash=1235bf277e55d05b2d6ff7a71b906c20
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.6.0"
13
+ VERSION = "5.6.2"
14
14
 
15
15
  # runtimepy-specific content.
16
16
  METRICS_NAME = "metrics"
@@ -53,6 +53,12 @@ class App {
53
53
  this.switchTab(hash.tab);
54
54
  }
55
55
 
56
+ /* Handle settings controls. */
57
+ loadSettings();
58
+
59
+ /* Handle individual settings. */
60
+ this.handleInitialMinTxPeriod();
61
+
56
62
  startMainLoop();
57
63
  }
58
64
  }, {once : true});
@@ -62,6 +68,33 @@ class App {
62
68
 
63
69
  bootstrap_init();
64
70
  }
71
+
72
+ handleInitialMinTxPeriod() {
73
+ if ("min-tx-period-ms" in settings) {
74
+ /* Set up event handle. */
75
+ setupCursorContext(settings["min-tx-period-ms"], (elem, down, move,
76
+ up) => {
77
+ setupCursorMove(
78
+ elem, down, move, up,
79
+ (event) => { this.updateMinTxPeriod(Number(event.target.value)); });
80
+ });
81
+
82
+ /* Set slider to correct value. */
83
+ settings["min-tx-period-ms"].value = hash.minTxPeriod;
84
+ settings["min-tx-period-ms"].title = hash.minTxPeriod;
85
+ }
86
+
87
+ this.updateMinTxPeriod();
88
+ }
89
+
90
+ updateMinTxPeriod(value) {
91
+ if (value || value === 0) {
92
+ hash.setMinTxPeriod(value);
93
+ settings["min-tx-period-ms"].title = value;
94
+ }
95
+ this.worker.postMessage(
96
+ {"event" : {"worker" : {"min-tx-period-ms" : hash.minTxPeriod}}});
97
+ }
65
98
  }
66
99
 
67
100
  function startMainLoop() {
@@ -152,8 +152,14 @@ class PlotDrawer {
152
152
  }
153
153
  }
154
154
 
155
+ /* Use underlying buffer capacity if it can be queried. */
156
+ let lineDepth = this.canvas.width;
157
+ if (key in this.channels) {
158
+ lineDepth = this.channels[key].buffer.capacity;
159
+ }
160
+
155
161
  this.lines[key] =
156
- new WebglPlotBundle.WebglLine(this.rgbaColors[key], this.canvas.width);
162
+ new WebglPlotBundle.WebglLine(this.rgbaColors[key], lineDepth);
157
163
  }
158
164
 
159
165
  updateLines() {
@@ -6,6 +6,8 @@ class PlotModalManager {
6
6
  this.body = this.container.querySelector(".modal-body");
7
7
  this.footer = this.container.querySelector(".modal-footer");
8
8
 
9
+ this.plotStatus = this.container.querySelector("#plot-status-inner");
10
+
9
11
  this.byEnv = {};
10
12
  }
11
13
 
@@ -34,7 +36,7 @@ class PlotModalManager {
34
36
  }
35
37
  }
36
38
 
37
- this.body.innerHTML = content;
39
+ this.plotStatus.innerHTML = content;
38
40
  }
39
41
  }
40
42
 
@@ -9,6 +9,7 @@ class WindowHashManager {
9
9
  this.channelsShown = true;
10
10
  this.plotChannels = {};
11
11
  this.filters = {};
12
+ this.minTxPeriod = 0.0;
12
13
  }
13
14
 
14
15
  tabClick(event) {
@@ -160,8 +161,13 @@ class WindowHashManager {
160
161
  for (let item of split) {
161
162
  if (item.includes("=")) {
162
163
  let keyVal = item.split("=");
163
- if (keyVal.length == 2 && keyVal[0] == "filter" && keyVal[1]) {
164
- this.updateTabFilter(keyVal[1]);
164
+ if (keyVal.length == 2) {
165
+ if (keyVal[0] == "filter" && keyVal[1]) {
166
+ this.updateTabFilter(keyVal[1]);
167
+ }
168
+ if (keyVal[0] == "min-tx-period-ms") {
169
+ this.minTxPeriod = Number(keyVal[1]);
170
+ }
165
171
  }
166
172
  }
167
173
  }
@@ -176,6 +182,11 @@ class WindowHashManager {
176
182
  return result;
177
183
  }
178
184
 
185
+ setMinTxPeriod(value) {
186
+ this.minTxPeriod = value;
187
+ this.update();
188
+ }
189
+
179
190
  buildHash() {
180
191
  let hash = this.tab;
181
192
 
@@ -189,6 +200,10 @@ class WindowHashManager {
189
200
  hash += ",hide-channels"
190
201
  }
191
202
 
203
+ if (this.minTxPeriod != 0.0) {
204
+ hash += `,min-tx-period-ms=${this.minTxPeriod}`;
205
+ }
206
+
192
207
  for (let tab in tabs) {
193
208
  let firstChan = true;
194
209
 
@@ -46,3 +46,15 @@ function setupCursorMove(elem, down, move, up, handleMove) {
46
46
  function randomHexColor() {
47
47
  return "#" + (Math.random() * 0xFFFFFF << 0).toString(16).padStart(6, "0");
48
48
  }
49
+
50
+ /* Load settings control mappings. */
51
+ let settings = {};
52
+
53
+ function loadSettings() {
54
+ for (const key of ["min-tx-period-ms"]) {
55
+ let elem = document.getElementById(`setting-${key}`);
56
+ if (elem) {
57
+ settings[key] = elem;
58
+ }
59
+ }
60
+ }
@@ -13,11 +13,16 @@ function create_connections(config) {
13
13
 
14
14
  const plots = new PlotManager();
15
15
 
16
+ /* Used to control messaging rate with server. */
17
+ let minTxPeriod = 0.0;
18
+
16
19
  async function message(data) {
17
20
  if ("plot" in data) {
18
21
  /* Forward the 'name' field. */
19
22
  data["plot"]["name"] = data["name"];
20
23
  await plots.handleMessage(data["plot"]);
24
+ } else if ("min-tx-period-ms" in data) {
25
+ minTxPeriod = data["min-tx-period-ms"];
21
26
  } else {
22
27
  console.log(`Message for worker:`);
23
28
  console.log(data);
@@ -38,9 +43,14 @@ async function start(config) {
38
43
  onmessage = async (event) => {
39
44
  /* Handle messages meant for this thread. */
40
45
  if ("event" in event.data && "worker" in event.data["event"]) {
46
+ let data = event.data["event"]["worker"];
47
+
41
48
  /* Forward the 'name' field. */
42
- event.data["event"]["worker"]["name"] = event.data["name"];
43
- await message(event.data["event"]["worker"]);
49
+ if ("name" in event.data) {
50
+ data["name"] = event.data["name"];
51
+ }
52
+
53
+ await message(data);
44
54
  }
45
55
  /* Forward all other messages to the server. */
46
56
  else {
@@ -63,13 +73,18 @@ async function start(config) {
63
73
  /* Tell main thread we're ready to go. */
64
74
  postMessage(0);
65
75
 
76
+ let messageTxTime = 0.0;
77
+
66
78
  /* Set up the main request-animation-frame loop. */
67
79
  function render(time) {
68
80
  /* Render plot. */
69
81
  plots.render(time);
70
82
 
71
83
  /* Keep the server synchronized with frames. */
72
- conns["json"].send_json({"ui" : {"time" : time}});
84
+ if (messageTxTime + minTxPeriod <= time) {
85
+ conns["json"].send_json({"ui" : {"time" : time}});
86
+ messageTxTime = time;
87
+ }
73
88
 
74
89
  requestAnimationFrame(render);
75
90
  }
@@ -11,6 +11,7 @@ from runtimepy.net.arbiter.info import AppInfo
11
11
  from runtimepy.net.server.app.bootstrap.elements import input_box
12
12
  from runtimepy.net.server.app.bootstrap.tabs import TabbedContent
13
13
  from runtimepy.net.server.app.env.modal import Modal
14
+ from runtimepy.net.server.app.env.settings import plot_settings
14
15
  from runtimepy.net.server.app.env.tab import ChannelEnvironmentTab
15
16
  from runtimepy.net.server.app.placeholder import dummy_tabs, under_construction
16
17
  from runtimepy.net.server.app.sound import SoundTab
@@ -85,8 +86,7 @@ def channel_environments(app: AppInfo, tabs: TabbedContent) -> None:
85
86
  )
86
87
 
87
88
  # Plot settings modal.
88
- plot_settings = Modal(tabs, name="plot", icon="graph-up")
89
- under_construction(plot_settings.footer)
89
+ plot_settings(tabs)
90
90
 
91
91
  # Experimental features.
92
92
  if app.config_param("experimental", False):
@@ -0,0 +1,59 @@
1
+ """
2
+ A module implementing an application-settings modal.
3
+ """
4
+
5
+ # third-party
6
+ from svgen.element.html import div
7
+
8
+ # internal
9
+ from runtimepy.net.server.app.bootstrap.elements import flex, slider
10
+ from runtimepy.net.server.app.bootstrap.tabs import TabbedContent
11
+ from runtimepy.net.server.app.env.modal import Modal
12
+ from runtimepy.net.server.app.placeholder import under_construction
13
+
14
+
15
+ def plot_settings(tabs: TabbedContent) -> None:
16
+ """Create the plot settings modal."""
17
+
18
+ modal = Modal(tabs, name="plot", icon="graph-up")
19
+ under_construction(modal.footer)
20
+
21
+ div(tag="h1", text="settings", parent=modal.body)
22
+ div(tag="hr", parent=modal.body)
23
+
24
+ div(tag="h2", text="plot status", parent=modal.body)
25
+ div(id="plot-status-inner", parent=modal.body)
26
+ div(tag="hr", parent=modal.body)
27
+
28
+ div(tag="h2", text="minimum transmit period (ms)", parent=modal.body)
29
+
30
+ div(
31
+ tag="p",
32
+ text=(
33
+ "Can be used to throttle the rate of "
34
+ "client <-> server communication. Use the 'ui' tab's metrics to "
35
+ "determine performance impact. Note that only this browser tab's "
36
+ "messaging rate can be controlled (not other connected clients')."
37
+ ),
38
+ parent=modal.body,
39
+ )
40
+
41
+ container = flex(parent=modal.body)
42
+
43
+ div(
44
+ text="0 ms ('high', run at native refresh rate)",
45
+ parent=container,
46
+ class_str="text-nowrap text-primary",
47
+ )
48
+
49
+ slider(
50
+ 0, 100, 100, parent=container, value=0, id="setting-min-tx-period-ms"
51
+ ).add_class("ms-3 me-3")
52
+
53
+ div(
54
+ text="100 ms ('low', 10 Hz)",
55
+ parent=container,
56
+ class_str="text-nowrap text-primary",
57
+ )
58
+
59
+ div(tag="hr", parent=modal.body)
@@ -167,16 +167,12 @@ class TcpConnection(_Connection, _TransportMixin):
167
167
  )
168
168
  async with server:
169
169
  for socket in server.sockets:
170
- sockname = socket.getsockname()
171
170
  LOG.info(
172
- "Started %s%s server listening on '%s%s' (%s%s:%d).",
171
+ "Started %s%s server listening on '%s%s'.",
173
172
  "secure " if is_ssl else "",
174
173
  cls.log_alias,
175
174
  cls.get_log_prefix(is_ssl=is_ssl),
176
175
  _sockname(socket),
177
- cls.get_log_prefix(is_ssl=is_ssl),
178
- sockname[0] if sockname[0] != "0.0.0.0" else "localhost",
179
- sockname[1],
180
176
  )
181
177
  yield server
182
178
 
@@ -134,15 +134,24 @@ def normalize_host(
134
134
  return IPv6Host(*args) # type: ignore
135
135
 
136
136
 
137
+ USE_FQDN = {"::", "0.0.0.0"}
138
+
139
+
137
140
  @cache
138
141
  def hostname(ip_address: str) -> str:
139
142
  """
140
143
  Attempt to get a string hostname for a string IP address argument that
141
144
  'gethostbyaddr' accepts. Otherwise return the original string
142
145
  """
146
+
143
147
  result = ip_address
144
- with _suppress(_socket.herror, OSError):
145
- result = _socket.gethostbyaddr(ip_address)[0]
148
+
149
+ if ip_address in USE_FQDN:
150
+ result = _socket.getfqdn()
151
+ else:
152
+ with _suppress(_socket.herror, OSError):
153
+ result = _socket.gethostbyaddr(ip_address)[0]
154
+
146
155
  return result
147
156
 
148
157
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: runtimepy
3
- Version: 5.6.0
3
+ Version: 5.6.2
4
4
  Summary: A framework for implementing Python services.
5
5
  Home-page: https://github.com/vkottler/runtimepy
6
6
  Author: Vaughn Kottler
@@ -17,10 +17,10 @@ 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: psutil
21
20
  Requires-Dist: websockets
22
21
  Requires-Dist: svgen>=0.6.8
23
22
  Requires-Dist: vcorelib>=3.3.1
23
+ Requires-Dist: psutil
24
24
  Provides-Extra: test
25
25
  Requires-Dist: pylint; extra == "test"
26
26
  Requires-Dist: flake8; 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=cd04f0ce079f8c60bc93c7f1d098316b
47
+ hash=9f2d1e2482b007a02c8b96d7f36d557d
48
48
  =====================================
49
49
  -->
50
50
 
51
- # runtimepy ([5.6.0](https://pypi.org/project/runtimepy/))
51
+ # runtimepy ([5.6.2](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)
@@ -165,8 +165,10 @@ options:
165
165
  ```
166
166
  $ ./venv3.12/bin/runtimepy server -h
167
167
 
168
- usage: runtimepy server [-h] [-i] [-w] [--no-poller] [--host HOST] [-p PORT]
169
- [-u] [-l]
168
+ usage: runtimepy server [-h] [-i] [-w] [--no-poller] [--cafile CAFILE]
169
+ [--capath CAPATH] [--cadata CADATA]
170
+ [--certfile CERTFILE] [--keyfile KEYFILE]
171
+ [--host HOST] [-p PORT] [-u] [-l]
170
172
  factory [configs ...]
171
173
 
172
174
  positional arguments:
@@ -181,6 +183,11 @@ options:
181
183
  ensure that a 'wait_for_stop' application method is
182
184
  run last
183
185
  --no-poller don't run a connection-metrics poller task
186
+ --cafile CAFILE passed directly to instantiation
187
+ --capath CAPATH passed directly to instantiation
188
+ --cadata CADATA passed directly to instantiation
189
+ --certfile CERTFILE passed directly to instantiation
190
+ --keyfile KEYFILE passed directly to instantiation
184
191
  --host HOST host address to listen on (default: '0.0.0.0')
185
192
  -p PORT, --port PORT port to listen on (default: 0)
186
193
  -u, --udp whether or not this is a UDP-based server (otherwise
@@ -182,6 +182,7 @@ runtimepy/net/server/app/bootstrap/elements.py
182
182
  runtimepy/net/server/app/bootstrap/tabs.py
183
183
  runtimepy/net/server/app/env/__init__.py
184
184
  runtimepy/net/server/app/env/modal.py
185
+ runtimepy/net/server/app/env/settings.py
185
186
  runtimepy/net/server/app/env/widgets.py
186
187
  runtimepy/net/server/app/env/tab/__init__.py
187
188
  runtimepy/net/server/app/env/tab/base.py
File without changes
File without changes