runtimepy 5.15.8__tar.gz → 5.16.0__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.
- {runtimepy-5.15.8/runtimepy.egg-info → runtimepy-5.16.0}/PKG-INFO +22 -23
- {runtimepy-5.15.8 → runtimepy-5.16.0}/README.md +18 -19
- {runtimepy-5.15.8 → runtimepy-5.16.0}/pyproject.toml +1 -1
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/__init__.py +2 -2
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/codec/protocol/receiver.py +7 -1
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/commands/arbiter.py +3 -4
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/css/main.css +2 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/message/interface.py +5 -1
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/base.py +13 -4
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/info.py +13 -6
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/connection.py +2 -1
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/websocket/connection.py +1 -3
- {runtimepy-5.15.8 → runtimepy-5.16.0/runtimepy.egg-info}/PKG-INFO +22 -23
- {runtimepy-5.15.8 → runtimepy-5.16.0}/LICENSE +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/__main__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/app.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/array.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/base.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/command/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/command/parser.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/command/processor.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/command/result.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/create.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/file.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/sample.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/environment/telemetry.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/event/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/event/header.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/channel/registry.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/codec/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/codec/protocol/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/codec/protocol/base.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/codec/protocol/json.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/codec/system/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/commands/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/commands/all.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/commands/common.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/commands/mtu.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/commands/server.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/commands/task.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/commands/tftp.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/commands/tui.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/control/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/control/env/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/control/source.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/control/step.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/404.md +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/base.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/browser.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/css/bootstrap_extra.css +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/css/font.css +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/dummy_load.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/factories.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/favicon.ico +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/DataConnection.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/JsonConnection.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/audio.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/App.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/ChannelTable.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/DataConnection.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/JsonConnection.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/OverlayManager.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/Plot.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/PlotDrawer.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/PlotManager.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/PlotModalManager.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/PointBuffer.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/PointManager.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/TabFilter.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/TabInterface.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/UnitSystem.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/WindowHashManager.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/classes/WorkerInterface.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/events.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/init.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/main.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/markdown_page.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/sample.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/tab/env.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/tab/sound.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/third-party/webgl-debug.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/unused/pyodide.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/util.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/js/worker.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/md/Connection.md +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/md/PeriodicTask.md +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/md/RuntimeStruct.md +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/md/RuntimepyPeer.md +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/md/SinusoidTask.md +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/sample_telemetry.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/BitFields.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/Button.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/Channel.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/ChannelCommand.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/ChannelRegistry.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/ClientConnectionConfig.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/ConnectionArbiterConfig.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/EnumRegistry.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/FindFile.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/PeerProcessConfig.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/RuntimeEnum.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/ServerConnectionConfig.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/StructConfig.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/TaskConfig.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/TwoTupleArray.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/channel_controls.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/has_buttons.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/has_config.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/has_factory.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/has_markdown.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/has_name.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/has_request_flag.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/schemas/has_views.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/server.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/server_base.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/server_dev.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/css/bootstrap-icons.min.css +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/css/bootstrap.min.css +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/css/fonts/bootstrap-icons.woff +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/css/fonts/bootstrap-icons.woff2 +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/js/bootstrap.bundle.min.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/js/webglplot.umd.min.js +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/png/chip-circle-bootstrap/1024x1024.png +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/png/chip-circle-bootstrap/128x128.png +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/png/chip-circle-bootstrap/16x16.png +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/png/chip-circle-bootstrap/1920x1920.png +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/png/chip-circle-bootstrap/24x24.png +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/png/chip-circle-bootstrap/256x256.png +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/png/chip-circle-bootstrap/32x32.png +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/png/chip-circle-bootstrap/512x512.png +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/png/chip-circle-bootstrap/64x64.png +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/svg/chip-circle-bootstrap.svg +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/svg/outline-dark.svg +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/svg/outline-light.svg +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/woff2/CascadiaCode-Bold.woff2 +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/woff2/CascadiaCode-BoldItalic.woff2 +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/woff2/CascadiaCode-Italic.woff2 +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/woff2/CascadiaCode-Regular.woff2 +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/woff2/CascadiaMono-Bold.woff2 +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/woff2/CascadiaMono-BoldItalic.woff2 +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/woff2/CascadiaMono-Italic.woff2 +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/woff2/CascadiaMono-Regular.woff2 +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/static/woff2/README.md +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/data/tftp_server.yaml +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/dev_requirements.txt +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/entry.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/enum/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/enum/registry.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/enum/types.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/mapping.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/message/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/message/handlers.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/message/types.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/metrics/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/metrics/channel.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/metrics/connection.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/metrics/task.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/mixins/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/mixins/async_command.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/mixins/enum.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/mixins/environment.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/mixins/finalize.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/mixins/logging.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/mixins/psutil.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/mixins/regex.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/mixins/trig.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/apps/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/config/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/config/codec.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/config/util.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/factory/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/factory/connection.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/factory/task.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/housekeeping/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/imports/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/imports/util.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/result.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/struct/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/task.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/tcp/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/tcp/json.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/udp.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/arbiter/websocket.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/backoff.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/factories/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/html/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/html/arbiter.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/html/bootstrap/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/html/bootstrap/elements.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/html/bootstrap/tabs.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/http/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/http/common.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/http/header.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/http/request_target.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/http/response.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/http/state.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/http/version.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/manager.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/mixin.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/mtu.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/base.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/create.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/elements.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/env/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/env/modal.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/env/settings.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/env/tab/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/env/tab/base.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/env/tab/controls.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/env/tab/html.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/env/tab/message.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/env/widgets.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/files.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/landing_page.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/placeholder.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/pyodide.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/sound.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/app/tab.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/html.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/json.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/markdown.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/mux.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/struct/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/websocket/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/server/websocket/state.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/ssl.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/stream/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/stream/base.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/stream/json/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/stream/string.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/tcp/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/tcp/connection.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/tcp/create.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/tcp/http/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/tcp/protocol.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/tcp/scpi/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/tcp/telnet/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/tcp/telnet/codes.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/tcp/telnet/np_05b.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/udp/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/udp/connection.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/udp/create.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/udp/protocol.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/udp/queue.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/udp/tftp/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/udp/tftp/base.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/udp/tftp/endpoint.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/udp/tftp/enums.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/udp/tftp/io.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/util.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/net/websocket/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/noise/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/array/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/base.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/bool.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/byte_order.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/evaluation.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/field/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/field/fields.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/field/manager/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/field/manager/base.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/float.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/int.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/scaling.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/serializable/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/serializable/base.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/serializable/fixed.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/serializable/framer.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/serializable/prefixed.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/string.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/types/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/types/base.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/types/bool.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/types/bounds.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/types/float.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/primitives/types/int.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/py.typed +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/registry/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/registry/bool.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/registry/item.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/registry/name.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/requirements.txt +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/sample/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/sample/peer.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/sample/program.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/schemas.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/struct/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/subprocess/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/subprocess/interface.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/subprocess/peer.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/subprocess/program.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/subprocess/protocol.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/task/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/task/asynchronous.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/task/basic/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/task/basic/manager.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/task/basic/periodic.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/task/sample.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/task/trig/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/telemetry/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/telemetry/sample.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/tui/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/tui/channels/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/tui/cursor.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/tui/mixin.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/tui/mock.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/tui/task.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/ui/__init__.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/ui/button.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/ui/controls.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy/util.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy.egg-info/SOURCES.txt +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy.egg-info/dependency_links.txt +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy.egg-info/entry_points.txt +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy.egg-info/requires.txt +3 -3
- {runtimepy-5.15.8 → runtimepy-5.16.0}/runtimepy.egg-info/top_level.txt +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/setup.cfg +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/setup.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/tests/test_entry.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/tests/test_mapping.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/tests/test_resources.py +0 -0
- {runtimepy-5.15.8 → runtimepy-5.16.0}/tests/test_util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: runtimepy
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.16.0
|
|
4
4
|
Summary: A framework for implementing Python services.
|
|
5
5
|
Home-page: https://github.com/libre-embedded/runtimepy
|
|
6
6
|
Author: Libre Embedded
|
|
@@ -17,11 +17,11 @@ Classifier: Development Status :: 5 - Production/Stable
|
|
|
17
17
|
Requires-Python: >=3.12
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
|
-
Requires-Dist: psutil
|
|
21
|
-
Requires-Dist: vcorelib>=3.6.4
|
|
22
20
|
Requires-Dist: svgen>=0.8.0
|
|
23
|
-
Requires-Dist: websockets
|
|
24
21
|
Requires-Dist: aiofiles
|
|
22
|
+
Requires-Dist: vcorelib>=3.6.4
|
|
23
|
+
Requires-Dist: psutil
|
|
24
|
+
Requires-Dist: websockets
|
|
25
25
|
Provides-Extra: test
|
|
26
26
|
Requires-Dist: pylint; extra == "test"
|
|
27
27
|
Requires-Dist: flake8; extra == "test"
|
|
@@ -51,11 +51,11 @@ Dynamic: requires-python
|
|
|
51
51
|
=====================================
|
|
52
52
|
generator=datazen
|
|
53
53
|
version=3.2.3
|
|
54
|
-
hash=
|
|
54
|
+
hash=ebb0bba9899d4baf7ce73b082f5e384e
|
|
55
55
|
=====================================
|
|
56
56
|
-->
|
|
57
57
|
|
|
58
|
-
# runtimepy ([5.
|
|
58
|
+
# runtimepy ([5.16.0](https://pypi.org/project/runtimepy/))
|
|
59
59
|
|
|
60
60
|
[](https://pypi.org/project/runtimepy/)
|
|
61
61
|

|
|
@@ -89,7 +89,7 @@ This package is tested on the following platforms:
|
|
|
89
89
|
# Command-line Options
|
|
90
90
|
|
|
91
91
|
```
|
|
92
|
-
$ ./venv3.
|
|
92
|
+
$ ./venv3.13/bin/runtimepy -h
|
|
93
93
|
|
|
94
94
|
usage: runtimepy [-h] [--version] [-v] [-q] [--curses] [--no-uvloop] [-C DIR]
|
|
95
95
|
{arbiter,mtu,server,task,tftp,tui,noop} ...
|
|
@@ -103,7 +103,7 @@ options:
|
|
|
103
103
|
-q, --quiet set to reduce output
|
|
104
104
|
--curses whether or not to use curses.wrapper when starting
|
|
105
105
|
--no-uvloop whether or not to disable uvloop as event loop driver
|
|
106
|
-
-C
|
|
106
|
+
-C, --dir DIR execute from a specific directory
|
|
107
107
|
|
|
108
108
|
commands:
|
|
109
109
|
{arbiter,mtu,server,task,tftp,tui,noop}
|
|
@@ -123,7 +123,7 @@ commands:
|
|
|
123
123
|
### `arbiter`
|
|
124
124
|
|
|
125
125
|
```
|
|
126
|
-
$ ./venv3.
|
|
126
|
+
$ ./venv3.13/bin/runtimepy arbiter -h
|
|
127
127
|
|
|
128
128
|
usage: runtimepy arbiter [-h] [-i] [-w] [--no-poller] configs [configs ...]
|
|
129
129
|
|
|
@@ -144,7 +144,7 @@ options:
|
|
|
144
144
|
### `mtu`
|
|
145
145
|
|
|
146
146
|
```
|
|
147
|
-
$ ./venv3.
|
|
147
|
+
$ ./venv3.13/bin/runtimepy mtu -h
|
|
148
148
|
|
|
149
149
|
usage: runtimepy mtu [-h] [--probe-size PROBE_SIZE] [--fallback FALLBACK] [-t]
|
|
150
150
|
destination [destination ...]
|
|
@@ -165,7 +165,7 @@ options:
|
|
|
165
165
|
### `server`
|
|
166
166
|
|
|
167
167
|
```
|
|
168
|
-
$ ./venv3.
|
|
168
|
+
$ ./venv3.13/bin/runtimepy server -h
|
|
169
169
|
|
|
170
170
|
usage: runtimepy server [-h] [-i] [-w] [--no-poller] [--cafile CAFILE]
|
|
171
171
|
[--capath CAPATH] [--cadata CADATA]
|
|
@@ -191,7 +191,7 @@ options:
|
|
|
191
191
|
--certfile CERTFILE passed directly to instantiation
|
|
192
192
|
--keyfile KEYFILE passed directly to instantiation
|
|
193
193
|
--host HOST host address to listen on (default: '0.0.0.0')
|
|
194
|
-
-p
|
|
194
|
+
-p, --port PORT port to listen on (default: 0)
|
|
195
195
|
-u, --udp whether or not this is a UDP-based server (otherwise
|
|
196
196
|
it must be a TCP-based server)
|
|
197
197
|
-l, --loopback if true a client of the same connection type is added
|
|
@@ -201,7 +201,7 @@ options:
|
|
|
201
201
|
### `task`
|
|
202
202
|
|
|
203
203
|
```
|
|
204
|
-
$ ./venv3.
|
|
204
|
+
$ ./venv3.13/bin/runtimepy task -h
|
|
205
205
|
|
|
206
206
|
usage: runtimepy task [-h] [-i] [-w] [--no-poller] [-r RATE]
|
|
207
207
|
factory [configs ...]
|
|
@@ -218,14 +218,14 @@ options:
|
|
|
218
218
|
ensure that a 'wait_for_stop' application method is
|
|
219
219
|
run last
|
|
220
220
|
--no-poller don't run a connection-metrics poller task
|
|
221
|
-
-r
|
|
221
|
+
-r, --rate RATE rate (in Hz) that the task should run (default: 10)
|
|
222
222
|
|
|
223
223
|
```
|
|
224
224
|
|
|
225
225
|
### `tftp`
|
|
226
226
|
|
|
227
227
|
```
|
|
228
|
-
$ ./venv3.
|
|
228
|
+
$ ./venv3.13/bin/runtimepy tftp -h
|
|
229
229
|
|
|
230
230
|
usage: runtimepy tftp [-h] [-p PORT] [-m MODE] [-t TIMEOUT] [-r REEMIT]
|
|
231
231
|
{read,write} host our_file [their_file]
|
|
@@ -238,28 +238,27 @@ positional arguments:
|
|
|
238
238
|
|
|
239
239
|
options:
|
|
240
240
|
-h, --help show this help message and exit
|
|
241
|
-
-p
|
|
242
|
-
-m
|
|
243
|
-
-t
|
|
241
|
+
-p, --port PORT port to message (default: 69)
|
|
242
|
+
-m, --mode MODE tftp mode to use (default: octet)
|
|
243
|
+
-t, --timeout TIMEOUT
|
|
244
244
|
timeout for each step
|
|
245
|
-
-r
|
|
246
|
-
transmit period for each step
|
|
245
|
+
-r, --reemit REEMIT transmit period for each step
|
|
247
246
|
|
|
248
247
|
```
|
|
249
248
|
|
|
250
249
|
### `tui`
|
|
251
250
|
|
|
252
251
|
```
|
|
253
|
-
$ ./venv3.
|
|
252
|
+
$ ./venv3.13/bin/runtimepy tui -h
|
|
254
253
|
|
|
255
254
|
usage: runtimepy tui [-h] [-i ITERATIONS] [-r RATE]
|
|
256
255
|
|
|
257
256
|
options:
|
|
258
257
|
-h, --help show this help message and exit
|
|
259
|
-
-i
|
|
258
|
+
-i, --iterations ITERATIONS
|
|
260
259
|
maximum number of program iterations (if greater than
|
|
261
260
|
zero, default: 0)
|
|
262
|
-
-r
|
|
261
|
+
-r, --rate RATE frequency (in Hz) to run the interface (default: 60.0
|
|
263
262
|
Hz)
|
|
264
263
|
|
|
265
264
|
```
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
=====================================
|
|
3
3
|
generator=datazen
|
|
4
4
|
version=3.2.3
|
|
5
|
-
hash=
|
|
5
|
+
hash=ebb0bba9899d4baf7ce73b082f5e384e
|
|
6
6
|
=====================================
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
|
-
# runtimepy ([5.
|
|
9
|
+
# runtimepy ([5.16.0](https://pypi.org/project/runtimepy/))
|
|
10
10
|
|
|
11
11
|
[](https://pypi.org/project/runtimepy/)
|
|
12
12
|

|
|
@@ -40,7 +40,7 @@ This package is tested on the following platforms:
|
|
|
40
40
|
# Command-line Options
|
|
41
41
|
|
|
42
42
|
```
|
|
43
|
-
$ ./venv3.
|
|
43
|
+
$ ./venv3.13/bin/runtimepy -h
|
|
44
44
|
|
|
45
45
|
usage: runtimepy [-h] [--version] [-v] [-q] [--curses] [--no-uvloop] [-C DIR]
|
|
46
46
|
{arbiter,mtu,server,task,tftp,tui,noop} ...
|
|
@@ -54,7 +54,7 @@ options:
|
|
|
54
54
|
-q, --quiet set to reduce output
|
|
55
55
|
--curses whether or not to use curses.wrapper when starting
|
|
56
56
|
--no-uvloop whether or not to disable uvloop as event loop driver
|
|
57
|
-
-C
|
|
57
|
+
-C, --dir DIR execute from a specific directory
|
|
58
58
|
|
|
59
59
|
commands:
|
|
60
60
|
{arbiter,mtu,server,task,tftp,tui,noop}
|
|
@@ -74,7 +74,7 @@ commands:
|
|
|
74
74
|
### `arbiter`
|
|
75
75
|
|
|
76
76
|
```
|
|
77
|
-
$ ./venv3.
|
|
77
|
+
$ ./venv3.13/bin/runtimepy arbiter -h
|
|
78
78
|
|
|
79
79
|
usage: runtimepy arbiter [-h] [-i] [-w] [--no-poller] configs [configs ...]
|
|
80
80
|
|
|
@@ -95,7 +95,7 @@ options:
|
|
|
95
95
|
### `mtu`
|
|
96
96
|
|
|
97
97
|
```
|
|
98
|
-
$ ./venv3.
|
|
98
|
+
$ ./venv3.13/bin/runtimepy mtu -h
|
|
99
99
|
|
|
100
100
|
usage: runtimepy mtu [-h] [--probe-size PROBE_SIZE] [--fallback FALLBACK] [-t]
|
|
101
101
|
destination [destination ...]
|
|
@@ -116,7 +116,7 @@ options:
|
|
|
116
116
|
### `server`
|
|
117
117
|
|
|
118
118
|
```
|
|
119
|
-
$ ./venv3.
|
|
119
|
+
$ ./venv3.13/bin/runtimepy server -h
|
|
120
120
|
|
|
121
121
|
usage: runtimepy server [-h] [-i] [-w] [--no-poller] [--cafile CAFILE]
|
|
122
122
|
[--capath CAPATH] [--cadata CADATA]
|
|
@@ -142,7 +142,7 @@ options:
|
|
|
142
142
|
--certfile CERTFILE passed directly to instantiation
|
|
143
143
|
--keyfile KEYFILE passed directly to instantiation
|
|
144
144
|
--host HOST host address to listen on (default: '0.0.0.0')
|
|
145
|
-
-p
|
|
145
|
+
-p, --port PORT port to listen on (default: 0)
|
|
146
146
|
-u, --udp whether or not this is a UDP-based server (otherwise
|
|
147
147
|
it must be a TCP-based server)
|
|
148
148
|
-l, --loopback if true a client of the same connection type is added
|
|
@@ -152,7 +152,7 @@ options:
|
|
|
152
152
|
### `task`
|
|
153
153
|
|
|
154
154
|
```
|
|
155
|
-
$ ./venv3.
|
|
155
|
+
$ ./venv3.13/bin/runtimepy task -h
|
|
156
156
|
|
|
157
157
|
usage: runtimepy task [-h] [-i] [-w] [--no-poller] [-r RATE]
|
|
158
158
|
factory [configs ...]
|
|
@@ -169,14 +169,14 @@ options:
|
|
|
169
169
|
ensure that a 'wait_for_stop' application method is
|
|
170
170
|
run last
|
|
171
171
|
--no-poller don't run a connection-metrics poller task
|
|
172
|
-
-r
|
|
172
|
+
-r, --rate RATE rate (in Hz) that the task should run (default: 10)
|
|
173
173
|
|
|
174
174
|
```
|
|
175
175
|
|
|
176
176
|
### `tftp`
|
|
177
177
|
|
|
178
178
|
```
|
|
179
|
-
$ ./venv3.
|
|
179
|
+
$ ./venv3.13/bin/runtimepy tftp -h
|
|
180
180
|
|
|
181
181
|
usage: runtimepy tftp [-h] [-p PORT] [-m MODE] [-t TIMEOUT] [-r REEMIT]
|
|
182
182
|
{read,write} host our_file [their_file]
|
|
@@ -189,28 +189,27 @@ positional arguments:
|
|
|
189
189
|
|
|
190
190
|
options:
|
|
191
191
|
-h, --help show this help message and exit
|
|
192
|
-
-p
|
|
193
|
-
-m
|
|
194
|
-
-t
|
|
192
|
+
-p, --port PORT port to message (default: 69)
|
|
193
|
+
-m, --mode MODE tftp mode to use (default: octet)
|
|
194
|
+
-t, --timeout TIMEOUT
|
|
195
195
|
timeout for each step
|
|
196
|
-
-r
|
|
197
|
-
transmit period for each step
|
|
196
|
+
-r, --reemit REEMIT transmit period for each step
|
|
198
197
|
|
|
199
198
|
```
|
|
200
199
|
|
|
201
200
|
### `tui`
|
|
202
201
|
|
|
203
202
|
```
|
|
204
|
-
$ ./venv3.
|
|
203
|
+
$ ./venv3.13/bin/runtimepy tui -h
|
|
205
204
|
|
|
206
205
|
usage: runtimepy tui [-h] [-i ITERATIONS] [-r RATE]
|
|
207
206
|
|
|
208
207
|
options:
|
|
209
208
|
-h, --help show this help message and exit
|
|
210
|
-
-i
|
|
209
|
+
-i, --iterations ITERATIONS
|
|
211
210
|
maximum number of program iterations (if greater than
|
|
212
211
|
zero, default: 0)
|
|
213
|
-
-r
|
|
212
|
+
-r, --rate RATE frequency (in Hz) to run the interface (default: 60.0
|
|
214
213
|
Hz)
|
|
215
214
|
|
|
216
215
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# =====================================
|
|
2
2
|
# generator=datazen
|
|
3
3
|
# version=3.2.3
|
|
4
|
-
# hash=
|
|
4
|
+
# hash=d903df789fdb4c76fdf462319413ca2c
|
|
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.
|
|
13
|
+
VERSION = "5.16.0"
|
|
14
14
|
|
|
15
15
|
# runtimepy-specific content.
|
|
16
16
|
METRICS_NAME = "metrics"
|
|
@@ -21,6 +21,10 @@ NonStructHandler = Callable[[BytesIO], bool]
|
|
|
21
21
|
NON_STRUCT_ID = 0
|
|
22
22
|
|
|
23
23
|
|
|
24
|
+
def null_struct_handler(_: Protocol) -> None:
|
|
25
|
+
"""Takes no action."""
|
|
26
|
+
|
|
27
|
+
|
|
24
28
|
class StructReceiver(LoggerMixin):
|
|
25
29
|
"""A class for sending and receiving struct messages."""
|
|
26
30
|
|
|
@@ -44,7 +48,9 @@ class StructReceiver(LoggerMixin):
|
|
|
44
48
|
assert self.non_struct_handler is None
|
|
45
49
|
self.non_struct_handler = handler
|
|
46
50
|
|
|
47
|
-
def add_handler(
|
|
51
|
+
def add_handler(
|
|
52
|
+
self, identifier: int, handler: StructHandler = null_struct_handler
|
|
53
|
+
) -> None:
|
|
48
54
|
"""Add a struct message handler."""
|
|
49
55
|
|
|
50
56
|
assert identifier not in self.handlers
|
|
@@ -30,7 +30,9 @@ async def entry(
|
|
|
30
30
|
|
|
31
31
|
await arbiter.load_configs(args.configs, wait_for_stop=args.wait_for_stop)
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
if args.init_only:
|
|
34
|
+
stop_sig.set()
|
|
35
|
+
return await arbiter.app(clear_stop_sig=not args.init_only)
|
|
34
36
|
|
|
35
37
|
|
|
36
38
|
def app(args: _Namespace) -> int:
|
|
@@ -38,9 +40,6 @@ def app(args: _Namespace) -> int:
|
|
|
38
40
|
|
|
39
41
|
stop_sig = _asyncio.Event()
|
|
40
42
|
|
|
41
|
-
if args.init_only:
|
|
42
|
-
stop_sig.set()
|
|
43
|
-
|
|
44
43
|
result = _run_handle_stop(
|
|
45
44
|
stop_sig,
|
|
46
45
|
entry(stop_sig, args, window=args.window),
|
|
@@ -342,7 +342,11 @@ class JsonMessageInterface:
|
|
|
342
342
|
target = self.targets.evaluate(key)
|
|
343
343
|
if target:
|
|
344
344
|
assert target.data is not None
|
|
345
|
-
|
|
345
|
+
( # pylint: disable=unpacking-non-sequence
|
|
346
|
+
key,
|
|
347
|
+
handler,
|
|
348
|
+
kind,
|
|
349
|
+
) = target.data
|
|
346
350
|
|
|
347
351
|
# Use target resolution data (if any) as a base.
|
|
348
352
|
with_sub_data = copy(
|
|
@@ -237,9 +237,10 @@ class BaseConnectionArbiter(_NamespaceMixin, _LoggerMixin, TuiMixin):
|
|
|
237
237
|
self._register_connection(value, key)
|
|
238
238
|
|
|
239
239
|
# Ensure connections are all initialized.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
240
|
+
with self.log_time("Connection initialization", reminder=True):
|
|
241
|
+
await _asyncio.gather(
|
|
242
|
+
*(x.initialized.wait() for x in self._connections.values())
|
|
243
|
+
)
|
|
243
244
|
|
|
244
245
|
async def _build_structs(self, info: AppInfo) -> None:
|
|
245
246
|
"""Build structs."""
|
|
@@ -362,6 +363,7 @@ class BaseConnectionArbiter(_NamespaceMixin, _LoggerMixin, TuiMixin):
|
|
|
362
363
|
app: NetworkApplicationlike = None,
|
|
363
364
|
check_connections: bool = True,
|
|
364
365
|
config: _JsonObject = None,
|
|
366
|
+
clear_stop_sig: bool = True,
|
|
365
367
|
) -> int:
|
|
366
368
|
"""
|
|
367
369
|
Ensures connections are given a chance to initialize, run the
|
|
@@ -372,6 +374,9 @@ class BaseConnectionArbiter(_NamespaceMixin, _LoggerMixin, TuiMixin):
|
|
|
372
374
|
info: Optional[AppInfo] = None
|
|
373
375
|
|
|
374
376
|
try:
|
|
377
|
+
if clear_stop_sig:
|
|
378
|
+
self.stop_sig.clear()
|
|
379
|
+
|
|
375
380
|
async with _AsyncExitStack() as stack:
|
|
376
381
|
result, info = await self._main(
|
|
377
382
|
stack,
|
|
@@ -462,6 +467,7 @@ class BaseConnectionArbiter(_NamespaceMixin, _LoggerMixin, TuiMixin):
|
|
|
462
467
|
app: NetworkApplicationlike = None,
|
|
463
468
|
check_connections: bool = True,
|
|
464
469
|
config: _JsonObject = None,
|
|
470
|
+
clear_stop_sig: bool = False,
|
|
465
471
|
) -> int:
|
|
466
472
|
"""
|
|
467
473
|
Run the application alongside the connection manager and server tasks.
|
|
@@ -472,7 +478,10 @@ class BaseConnectionArbiter(_NamespaceMixin, _LoggerMixin, TuiMixin):
|
|
|
472
478
|
|
|
473
479
|
# Run application.
|
|
474
480
|
result = await self._entry(
|
|
475
|
-
app=app,
|
|
481
|
+
app=app,
|
|
482
|
+
check_connections=check_connections,
|
|
483
|
+
config=config,
|
|
484
|
+
clear_stop_sig=clear_stop_sig,
|
|
476
485
|
)
|
|
477
486
|
|
|
478
487
|
# Shutdown any pending tasks.
|
|
@@ -69,7 +69,10 @@ class RuntimeStruct(RuntimeStructBase):
|
|
|
69
69
|
final_poll = False
|
|
70
70
|
|
|
71
71
|
def init_env(self) -> None:
|
|
72
|
-
"""Initialize this
|
|
72
|
+
"""Initialize this environment."""
|
|
73
|
+
|
|
74
|
+
async def async_init_env(self) -> None:
|
|
75
|
+
"""Initialize this environment."""
|
|
73
76
|
|
|
74
77
|
@contextmanager
|
|
75
78
|
def _final_poll(self) -> _Iterator[None]:
|
|
@@ -101,14 +104,18 @@ class RuntimeStruct(RuntimeStructBase):
|
|
|
101
104
|
if ProtocolFactory in factory.__bases__:
|
|
102
105
|
self.recv = factory.singleton()
|
|
103
106
|
byte_order = self.recv.byte_order
|
|
104
|
-
|
|
107
|
+
if self.config.get("control", True):
|
|
108
|
+
with self.env.names_pushed("rx"):
|
|
109
|
+
self.env.register_protocol(self.recv, False)
|
|
110
|
+
|
|
111
|
+
self.send = factory.instance()
|
|
112
|
+
with self.env.names_pushed("tx"):
|
|
113
|
+
self.env.register_protocol(self.send, True)
|
|
114
|
+
else:
|
|
105
115
|
self.env.register_protocol(self.recv, False)
|
|
106
116
|
|
|
107
|
-
self.send = factory.instance()
|
|
108
|
-
with self.env.names_pushed("tx"):
|
|
109
|
-
self.env.register_protocol(self.send, True)
|
|
110
|
-
|
|
111
117
|
self.init_env()
|
|
118
|
+
await self.async_init_env()
|
|
112
119
|
self.update_byte_order(byte_order, **kwargs)
|
|
113
120
|
|
|
114
121
|
def update_byte_order(self, byte_order: ByteOrder, **kwargs) -> None:
|
|
@@ -43,6 +43,7 @@ class Connection(
|
|
|
43
43
|
byte_order: ByteOrder = DEFAULT_BYTE_ORDER
|
|
44
44
|
|
|
45
45
|
default_auto_restart = False
|
|
46
|
+
ignore_stop_sig = False
|
|
46
47
|
|
|
47
48
|
def __init__(
|
|
48
49
|
self,
|
|
@@ -300,7 +301,7 @@ class Connection(
|
|
|
300
301
|
)
|
|
301
302
|
|
|
302
303
|
# Allow a stop signal to also disable the connection.
|
|
303
|
-
if stop_sig is not None:
|
|
304
|
+
if stop_sig is not None and not self.ignore_stop_sig:
|
|
304
305
|
self._tasks.append(_asyncio.create_task(self._wait_sig(stop_sig)))
|
|
305
306
|
|
|
306
307
|
self.exited.clear()
|
|
@@ -104,9 +104,7 @@ class WebsocketConnection(Connection):
|
|
|
104
104
|
|
|
105
105
|
async def _send_binay_message(self, data: BinaryMessage) -> None:
|
|
106
106
|
"""Send a binary message."""
|
|
107
|
-
await self._handle_connection_closed(
|
|
108
|
-
self.protocol.send(data), # type: ignore
|
|
109
|
-
)
|
|
107
|
+
await self._handle_connection_closed(self.protocol.send(data))
|
|
110
108
|
self.metrics.tx.increment(len(data))
|
|
111
109
|
|
|
112
110
|
async def close(self) -> None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: runtimepy
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.16.0
|
|
4
4
|
Summary: A framework for implementing Python services.
|
|
5
5
|
Home-page: https://github.com/libre-embedded/runtimepy
|
|
6
6
|
Author: Libre Embedded
|
|
@@ -17,11 +17,11 @@ Classifier: Development Status :: 5 - Production/Stable
|
|
|
17
17
|
Requires-Python: >=3.12
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
|
-
Requires-Dist: psutil
|
|
21
|
-
Requires-Dist: vcorelib>=3.6.4
|
|
22
20
|
Requires-Dist: svgen>=0.8.0
|
|
23
|
-
Requires-Dist: websockets
|
|
24
21
|
Requires-Dist: aiofiles
|
|
22
|
+
Requires-Dist: vcorelib>=3.6.4
|
|
23
|
+
Requires-Dist: psutil
|
|
24
|
+
Requires-Dist: websockets
|
|
25
25
|
Provides-Extra: test
|
|
26
26
|
Requires-Dist: pylint; extra == "test"
|
|
27
27
|
Requires-Dist: flake8; extra == "test"
|
|
@@ -51,11 +51,11 @@ Dynamic: requires-python
|
|
|
51
51
|
=====================================
|
|
52
52
|
generator=datazen
|
|
53
53
|
version=3.2.3
|
|
54
|
-
hash=
|
|
54
|
+
hash=ebb0bba9899d4baf7ce73b082f5e384e
|
|
55
55
|
=====================================
|
|
56
56
|
-->
|
|
57
57
|
|
|
58
|
-
# runtimepy ([5.
|
|
58
|
+
# runtimepy ([5.16.0](https://pypi.org/project/runtimepy/))
|
|
59
59
|
|
|
60
60
|
[](https://pypi.org/project/runtimepy/)
|
|
61
61
|

|
|
@@ -89,7 +89,7 @@ This package is tested on the following platforms:
|
|
|
89
89
|
# Command-line Options
|
|
90
90
|
|
|
91
91
|
```
|
|
92
|
-
$ ./venv3.
|
|
92
|
+
$ ./venv3.13/bin/runtimepy -h
|
|
93
93
|
|
|
94
94
|
usage: runtimepy [-h] [--version] [-v] [-q] [--curses] [--no-uvloop] [-C DIR]
|
|
95
95
|
{arbiter,mtu,server,task,tftp,tui,noop} ...
|
|
@@ -103,7 +103,7 @@ options:
|
|
|
103
103
|
-q, --quiet set to reduce output
|
|
104
104
|
--curses whether or not to use curses.wrapper when starting
|
|
105
105
|
--no-uvloop whether or not to disable uvloop as event loop driver
|
|
106
|
-
-C
|
|
106
|
+
-C, --dir DIR execute from a specific directory
|
|
107
107
|
|
|
108
108
|
commands:
|
|
109
109
|
{arbiter,mtu,server,task,tftp,tui,noop}
|
|
@@ -123,7 +123,7 @@ commands:
|
|
|
123
123
|
### `arbiter`
|
|
124
124
|
|
|
125
125
|
```
|
|
126
|
-
$ ./venv3.
|
|
126
|
+
$ ./venv3.13/bin/runtimepy arbiter -h
|
|
127
127
|
|
|
128
128
|
usage: runtimepy arbiter [-h] [-i] [-w] [--no-poller] configs [configs ...]
|
|
129
129
|
|
|
@@ -144,7 +144,7 @@ options:
|
|
|
144
144
|
### `mtu`
|
|
145
145
|
|
|
146
146
|
```
|
|
147
|
-
$ ./venv3.
|
|
147
|
+
$ ./venv3.13/bin/runtimepy mtu -h
|
|
148
148
|
|
|
149
149
|
usage: runtimepy mtu [-h] [--probe-size PROBE_SIZE] [--fallback FALLBACK] [-t]
|
|
150
150
|
destination [destination ...]
|
|
@@ -165,7 +165,7 @@ options:
|
|
|
165
165
|
### `server`
|
|
166
166
|
|
|
167
167
|
```
|
|
168
|
-
$ ./venv3.
|
|
168
|
+
$ ./venv3.13/bin/runtimepy server -h
|
|
169
169
|
|
|
170
170
|
usage: runtimepy server [-h] [-i] [-w] [--no-poller] [--cafile CAFILE]
|
|
171
171
|
[--capath CAPATH] [--cadata CADATA]
|
|
@@ -191,7 +191,7 @@ options:
|
|
|
191
191
|
--certfile CERTFILE passed directly to instantiation
|
|
192
192
|
--keyfile KEYFILE passed directly to instantiation
|
|
193
193
|
--host HOST host address to listen on (default: '0.0.0.0')
|
|
194
|
-
-p
|
|
194
|
+
-p, --port PORT port to listen on (default: 0)
|
|
195
195
|
-u, --udp whether or not this is a UDP-based server (otherwise
|
|
196
196
|
it must be a TCP-based server)
|
|
197
197
|
-l, --loopback if true a client of the same connection type is added
|
|
@@ -201,7 +201,7 @@ options:
|
|
|
201
201
|
### `task`
|
|
202
202
|
|
|
203
203
|
```
|
|
204
|
-
$ ./venv3.
|
|
204
|
+
$ ./venv3.13/bin/runtimepy task -h
|
|
205
205
|
|
|
206
206
|
usage: runtimepy task [-h] [-i] [-w] [--no-poller] [-r RATE]
|
|
207
207
|
factory [configs ...]
|
|
@@ -218,14 +218,14 @@ options:
|
|
|
218
218
|
ensure that a 'wait_for_stop' application method is
|
|
219
219
|
run last
|
|
220
220
|
--no-poller don't run a connection-metrics poller task
|
|
221
|
-
-r
|
|
221
|
+
-r, --rate RATE rate (in Hz) that the task should run (default: 10)
|
|
222
222
|
|
|
223
223
|
```
|
|
224
224
|
|
|
225
225
|
### `tftp`
|
|
226
226
|
|
|
227
227
|
```
|
|
228
|
-
$ ./venv3.
|
|
228
|
+
$ ./venv3.13/bin/runtimepy tftp -h
|
|
229
229
|
|
|
230
230
|
usage: runtimepy tftp [-h] [-p PORT] [-m MODE] [-t TIMEOUT] [-r REEMIT]
|
|
231
231
|
{read,write} host our_file [their_file]
|
|
@@ -238,28 +238,27 @@ positional arguments:
|
|
|
238
238
|
|
|
239
239
|
options:
|
|
240
240
|
-h, --help show this help message and exit
|
|
241
|
-
-p
|
|
242
|
-
-m
|
|
243
|
-
-t
|
|
241
|
+
-p, --port PORT port to message (default: 69)
|
|
242
|
+
-m, --mode MODE tftp mode to use (default: octet)
|
|
243
|
+
-t, --timeout TIMEOUT
|
|
244
244
|
timeout for each step
|
|
245
|
-
-r
|
|
246
|
-
transmit period for each step
|
|
245
|
+
-r, --reemit REEMIT transmit period for each step
|
|
247
246
|
|
|
248
247
|
```
|
|
249
248
|
|
|
250
249
|
### `tui`
|
|
251
250
|
|
|
252
251
|
```
|
|
253
|
-
$ ./venv3.
|
|
252
|
+
$ ./venv3.13/bin/runtimepy tui -h
|
|
254
253
|
|
|
255
254
|
usage: runtimepy tui [-h] [-i ITERATIONS] [-r RATE]
|
|
256
255
|
|
|
257
256
|
options:
|
|
258
257
|
-h, --help show this help message and exit
|
|
259
|
-
-i
|
|
258
|
+
-i, --iterations ITERATIONS
|
|
260
259
|
maximum number of program iterations (if greater than
|
|
261
260
|
zero, default: 0)
|
|
262
|
-
-r
|
|
261
|
+
-r, --rate RATE frequency (in Hz) to run the interface (default: 60.0
|
|
263
262
|
Hz)
|
|
264
263
|
|
|
265
264
|
```
|
|
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
|