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

|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
=====================================
|
|
3
3
|
generator=datazen
|
|
4
4
|
version=3.2.3
|
|
5
|
-
hash=
|
|
5
|
+
hash=ed2f5b3731ba189c4a3ec2f2252b622e
|
|
6
6
|
=====================================
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
|
-
# runtimepy ([5.15.
|
|
9
|
+
# runtimepy ([5.15.3](https://pypi.org/project/runtimepy/))
|
|
10
10
|
|
|
11
11
|
[](https://pypi.org/project/runtimepy/)
|
|
12
12
|

|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# =====================================
|
|
2
2
|
# generator=datazen
|
|
3
3
|
# version=3.2.3
|
|
4
|
-
# hash=
|
|
4
|
+
# hash=f5155e85b2694b012648fdbe9c12b1cd
|
|
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.15.
|
|
13
|
+
VERSION = "5.15.3"
|
|
14
14
|
|
|
15
15
|
# runtimepy-specific content.
|
|
16
16
|
METRICS_NAME = "metrics"
|
|
@@ -12,7 +12,9 @@ from typing import Any, Iterator, Optional, cast
|
|
|
12
12
|
|
|
13
13
|
# third-party
|
|
14
14
|
from vcorelib import DEFAULT_ENCODING
|
|
15
|
+
from vcorelib.dict import GenericStrDict
|
|
15
16
|
from vcorelib.io import ARBITER, JsonObject
|
|
17
|
+
from vcorelib.io.bus import BUS
|
|
16
18
|
from vcorelib.logging import DEFAULT_TIME_FORMAT, LoggerMixin
|
|
17
19
|
from vcorelib.math import default_time_ns, nano_str
|
|
18
20
|
from vcorelib.names import name_search
|
|
@@ -25,6 +27,7 @@ from runtimepy.channel.environment.command.processor import (
|
|
|
25
27
|
CommandHook,
|
|
26
28
|
EnvironmentMap,
|
|
27
29
|
)
|
|
30
|
+
from runtimepy.channel.environment.command.result import CommandResult
|
|
28
31
|
from runtimepy.channel.registry import ParsedEvent
|
|
29
32
|
from runtimepy.mapping import DEFAULT_PATTERN
|
|
30
33
|
|
|
@@ -243,6 +246,38 @@ GLOBAL = GlobalEnvironment()
|
|
|
243
246
|
ENVIRONMENTS = GLOBAL
|
|
244
247
|
|
|
245
248
|
|
|
249
|
+
def global_command(env: str, value: str) -> Optional[CommandResult]:
|
|
250
|
+
"""Handle a global command."""
|
|
251
|
+
|
|
252
|
+
result = None
|
|
253
|
+
if env in GLOBAL:
|
|
254
|
+
result = GLOBAL[env].command(value)
|
|
255
|
+
else:
|
|
256
|
+
GLOBAL.logger.error(
|
|
257
|
+
"Couldn't run command env='%s' value='%s'.", env, value
|
|
258
|
+
)
|
|
259
|
+
return result
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
def global_commands(*cmds: tuple[str, str]) -> None:
|
|
263
|
+
"""Handle a global command."""
|
|
264
|
+
for env, value in cmds:
|
|
265
|
+
global_command(env, value)
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
async def global_command_bus(payload: GenericStrDict) -> None:
|
|
269
|
+
"""Handle a bus message."""
|
|
270
|
+
|
|
271
|
+
if "env" in payload and "value" in payload:
|
|
272
|
+
global_command(payload["env"], payload["value"])
|
|
273
|
+
elif "cmds" in payload:
|
|
274
|
+
global_commands(*payload["cmds"])
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
BUS.register_ro("command", global_command_bus)
|
|
278
|
+
BUS.register_ro("cmd", global_command_bus)
|
|
279
|
+
|
|
280
|
+
|
|
246
281
|
def clear_env() -> None:
|
|
247
282
|
"""Reset the global environment mapping."""
|
|
248
283
|
GLOBAL.clear()
|
|
@@ -26,6 +26,16 @@ properties:
|
|
|
26
26
|
items:
|
|
27
27
|
$ref: package://runtimepy/schemas/StructConfig.yaml
|
|
28
28
|
|
|
29
|
+
commands:
|
|
30
|
+
type: array
|
|
31
|
+
items:
|
|
32
|
+
type: array
|
|
33
|
+
minItems: 2
|
|
34
|
+
maxItems: 2
|
|
35
|
+
items:
|
|
36
|
+
- type: string
|
|
37
|
+
- type: string
|
|
38
|
+
|
|
29
39
|
tasks:
|
|
30
40
|
type: array
|
|
31
41
|
items:
|
|
@@ -26,6 +26,7 @@ from vcorelib.namespace import NamespaceMixin as _NamespaceMixin
|
|
|
26
26
|
from runtimepy.channel.environment.command import (
|
|
27
27
|
clear_env,
|
|
28
28
|
env_json_data,
|
|
29
|
+
global_commands,
|
|
29
30
|
register_env,
|
|
30
31
|
)
|
|
31
32
|
from runtimepy.net.arbiter.housekeeping import housekeeping
|
|
@@ -145,6 +146,8 @@ class BaseConnectionArbiter(_NamespaceMixin, _LoggerMixin, TuiMixin):
|
|
|
145
146
|
# A copy of named port mappings (loaded via external config).
|
|
146
147
|
self._ports: dict[str, int] = {}
|
|
147
148
|
|
|
149
|
+
self._commands: list[tuple[str, str]] = []
|
|
150
|
+
|
|
148
151
|
self._init()
|
|
149
152
|
|
|
150
153
|
def _init(self) -> None:
|
|
@@ -318,6 +321,11 @@ class BaseConnectionArbiter(_NamespaceMixin, _LoggerMixin, TuiMixin):
|
|
|
318
321
|
|
|
319
322
|
# Run initialization methods.
|
|
320
323
|
result = await self._run_apps_list(self._inits, info)
|
|
324
|
+
|
|
325
|
+
# Run commands.
|
|
326
|
+
await _asyncio.sleep(0)
|
|
327
|
+
global_commands(*self._commands)
|
|
328
|
+
|
|
321
329
|
if result == 0:
|
|
322
330
|
# Get application methods.
|
|
323
331
|
apps = self._apps
|
|
@@ -245,5 +245,8 @@ class ConfigConnectionArbiter(_ImportConnectionArbiter):
|
|
|
245
245
|
assert "root" not in config.config, config.config
|
|
246
246
|
config.config["root"] = root
|
|
247
247
|
|
|
248
|
+
# Register commands.
|
|
249
|
+
self._commands = config.commands
|
|
250
|
+
|
|
248
251
|
|
|
249
252
|
ConfigConnectionArbiter.add_search_package(PKG_NAME)
|
|
@@ -71,6 +71,11 @@ class ConnectionArbiterConfig(_RuntimepyDictCodec):
|
|
|
71
71
|
|
|
72
72
|
self.directory = _Path(str(data.get("directory", ".")))
|
|
73
73
|
|
|
74
|
+
self.commands: list[tuple[str, str]] = data.get( # type: ignore
|
|
75
|
+
"commands",
|
|
76
|
+
[],
|
|
77
|
+
)
|
|
78
|
+
|
|
74
79
|
def asdict(self) -> _JsonObject:
|
|
75
80
|
"""Obtain a dictionary representing this instance."""
|
|
76
81
|
return self.data
|
|
@@ -18,7 +18,7 @@ from vcorelib.paths import Pathlike, find_file, normalize
|
|
|
18
18
|
|
|
19
19
|
# internal
|
|
20
20
|
from runtimepy import DEFAULT_EXT, PKG_NAME
|
|
21
|
-
from runtimepy.channel.environment.command import GLOBAL
|
|
21
|
+
from runtimepy.channel.environment.command import GLOBAL, global_command
|
|
22
22
|
from runtimepy.net.html import full_markdown_page
|
|
23
23
|
from runtimepy.net.http.header import RequestHeader
|
|
24
24
|
from runtimepy.net.http.request_target import PathMaybeQuery
|
|
@@ -270,17 +270,22 @@ class RuntimepyServerConnection(HttpConnection):
|
|
|
270
270
|
response_data["success"] = False
|
|
271
271
|
response_data["message"] = "No command executed."
|
|
272
272
|
|
|
273
|
-
|
|
273
|
+
def cmd_usage() -> None:
|
|
274
|
+
"""Set usage information for the response."""
|
|
274
275
|
response_data["usage"] = (
|
|
275
276
|
"/<environment (arg0)>/<arg1>[/.../<argN>]"
|
|
276
277
|
)
|
|
277
278
|
response_data["environments"] = list(GLOBAL)
|
|
278
279
|
|
|
279
|
-
|
|
280
|
+
if args:
|
|
281
|
+
result = global_command(args[0], " ".join(args[1:]))
|
|
282
|
+
if result is None:
|
|
283
|
+
cmd_usage()
|
|
284
|
+
else:
|
|
285
|
+
response_data["success"] = result.success
|
|
286
|
+
response_data["message"] = str(result)
|
|
280
287
|
else:
|
|
281
|
-
|
|
282
|
-
response_data["success"] = result.success
|
|
283
|
-
response_data["message"] = str(result)
|
|
288
|
+
cmd_usage()
|
|
284
289
|
|
|
285
290
|
# Send response.
|
|
286
291
|
encode_json(stream, response, response_data)
|
|
@@ -7,6 +7,7 @@ from collections import defaultdict
|
|
|
7
7
|
from typing import Optional
|
|
8
8
|
|
|
9
9
|
# third-party
|
|
10
|
+
from vcorelib.io.bus import BUS
|
|
10
11
|
from vcorelib.math import RateLimiter, metrics_time_ns, to_nanos
|
|
11
12
|
|
|
12
13
|
# internal
|
|
@@ -93,6 +94,11 @@ class RuntimepyWebsocketConnection(WebsocketJsonMessageConnection):
|
|
|
93
94
|
async def ui_handler(outbox: JsonMessage, inbox: JsonMessage) -> None:
|
|
94
95
|
"""A simple loopback handler."""
|
|
95
96
|
|
|
97
|
+
# Handle bus messages.
|
|
98
|
+
if "bus" in inbox:
|
|
99
|
+
await BUS.send_ro("ui", inbox["bus"])
|
|
100
|
+
return
|
|
101
|
+
|
|
96
102
|
# Handle frame messages.
|
|
97
103
|
if "time" in inbox:
|
|
98
104
|
# Poll UI state.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: runtimepy
|
|
3
|
-
Version: 5.15.
|
|
3
|
+
Version: 5.15.3
|
|
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,9 +17,9 @@ 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: vcorelib>=3.6.2
|
|
21
|
-
Requires-Dist: svgen>=0.8.0
|
|
22
20
|
Requires-Dist: websockets
|
|
21
|
+
Requires-Dist: vcorelib>=3.6.3
|
|
22
|
+
Requires-Dist: svgen>=0.8.0
|
|
23
23
|
Requires-Dist: aiofiles
|
|
24
24
|
Requires-Dist: psutil
|
|
25
25
|
Provides-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=ed2f5b3731ba189c4a3ec2f2252b622e
|
|
55
55
|
=====================================
|
|
56
56
|
-->
|
|
57
57
|
|
|
58
|
-
# runtimepy ([5.15.
|
|
58
|
+
# runtimepy ([5.15.3](https://pypi.org/project/runtimepy/))
|
|
59
59
|
|
|
60
60
|
[](https://pypi.org/project/runtimepy/)
|
|
61
61
|

|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{runtimepy-5.15.1 → runtimepy-5.15.3}/runtimepy/data/static/png/chip-circle-bootstrap/1024x1024.png
RENAMED
|
File without changes
|
{runtimepy-5.15.1 → runtimepy-5.15.3}/runtimepy/data/static/png/chip-circle-bootstrap/128x128.png
RENAMED
|
File without changes
|
{runtimepy-5.15.1 → runtimepy-5.15.3}/runtimepy/data/static/png/chip-circle-bootstrap/16x16.png
RENAMED
|
File without changes
|
{runtimepy-5.15.1 → runtimepy-5.15.3}/runtimepy/data/static/png/chip-circle-bootstrap/1920x1920.png
RENAMED
|
File without changes
|
{runtimepy-5.15.1 → runtimepy-5.15.3}/runtimepy/data/static/png/chip-circle-bootstrap/24x24.png
RENAMED
|
File without changes
|