runtimepy 5.7.0__tar.gz → 5.7.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.
- {runtimepy-5.7.0/runtimepy.egg-info → runtimepy-5.7.2}/PKG-INFO +5 -5
- {runtimepy-5.7.0 → runtimepy-5.7.2}/README.md +2 -2
- {runtimepy-5.7.0 → runtimepy-5.7.2}/pyproject.toml +1 -1
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/__init__.py +2 -2
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/css/bootstrap_extra.css +4 -9
- runtimepy-5.7.2/runtimepy/data/css/font.css +47 -0
- runtimepy-5.7.2/runtimepy/data/favicon.ico +0 -0
- runtimepy-5.7.2/runtimepy/data/js/main.js +14 -0
- runtimepy-5.7.2/runtimepy/data/static/svg/chip-circle-bootstrap.svg +22 -0
- runtimepy-5.7.2/runtimepy/data/static/woff2/CascadiaCode-Bold.woff2 +0 -0
- runtimepy-5.7.2/runtimepy/data/static/woff2/CascadiaCode-BoldItalic.woff2 +0 -0
- runtimepy-5.7.2/runtimepy/data/static/woff2/CascadiaCode-Italic.woff2 +0 -0
- runtimepy-5.7.2/runtimepy/data/static/woff2/CascadiaCode-Regular.woff2 +0 -0
- runtimepy-5.7.2/runtimepy/data/static/woff2/CascadiaMono-Bold.woff2 +0 -0
- runtimepy-5.7.2/runtimepy/data/static/woff2/CascadiaMono-BoldItalic.woff2 +0 -0
- runtimepy-5.7.2/runtimepy/data/static/woff2/CascadiaMono-Italic.woff2 +0 -0
- runtimepy-5.7.2/runtimepy/data/static/woff2/CascadiaMono-Regular.woff2 +0 -0
- runtimepy-5.7.2/runtimepy/data/static/woff2/README.md +9 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/__init__.py +40 -6
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/__init__.py +5 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/base.py +2 -3
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/env/tab/html.py +5 -2
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/json.py +2 -1
- runtimepy-5.7.2/runtimepy/util.py +60 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2/runtimepy.egg-info}/PKG-INFO +5 -5
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy.egg-info/SOURCES.txt +11 -0
- runtimepy-5.7.0/runtimepy/data/favicon.ico +0 -0
- runtimepy-5.7.0/runtimepy/data/js/main.js +0 -6
- runtimepy-5.7.0/runtimepy/util.py +0 -18
- {runtimepy-5.7.0 → runtimepy-5.7.2}/LICENSE +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/__main__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/app.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/array.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/base.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/command/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/command/parser.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/command/processor.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/command/result.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/create.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/file.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/sample.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/environment/telemetry.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/event/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/event/header.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/channel/registry.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/codec/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/codec/protocol/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/codec/protocol/base.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/codec/protocol/json.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/codec/system/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/commands/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/commands/all.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/commands/arbiter.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/commands/common.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/commands/mtu.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/commands/server.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/commands/task.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/commands/tftp.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/commands/tui.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/control/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/control/env/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/control/source.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/control/step.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/browser.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/css/main.css +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/dummy_load.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/factories.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/DataConnection.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/JsonConnection.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/audio.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/App.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/ChannelTable.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/DataConnection.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/JsonConnection.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/OverlayManager.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/Plot.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/PlotDrawer.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/PlotManager.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/PlotModalManager.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/PointBuffer.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/PointManager.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/TabFilter.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/TabInterface.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/UnitSystem.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/WindowHashManager.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/classes/WorkerInterface.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/events.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/init.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/tab/env.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/tab/sound.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/third-party/webgl-debug.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/unused/pyodide.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/util.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/js/worker.js +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/md/Connection.md +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/md/PeriodicTask.md +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/md/RuntimeStruct.md +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/md/RuntimepyPeer.md +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/md/SinusoidTask.md +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/sample_telemetry.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/BitFields.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/Channel.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/ChannelCommand.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/ChannelRegistry.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/ClientConnectionConfig.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/ConnectionArbiterConfig.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/EnumRegistry.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/FindFile.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/PeerProcessConfig.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/RuntimeEnum.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/ServerConnectionConfig.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/StructConfig.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/TaskConfig.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/channel_controls.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/has_config.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/has_factory.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/has_markdown.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/has_name.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/schemas/has_request_flag.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/server.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/server_base.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/server_dev.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/data/tftp_server.yaml +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/dev_requirements.txt +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/entry.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/enum/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/enum/registry.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/enum/types.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/mapping.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/message/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/message/handlers.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/message/interface.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/message/types.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/metrics/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/metrics/channel.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/metrics/connection.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/metrics/task.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/mixins/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/mixins/async_command.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/mixins/enum.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/mixins/environment.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/mixins/finalize.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/mixins/logging.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/mixins/psutil.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/mixins/regex.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/mixins/trig.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/apps/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/base.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/config/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/config/codec.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/config/util.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/factory/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/factory/connection.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/factory/task.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/housekeeping/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/imports/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/imports/util.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/info.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/result.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/struct/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/task.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/tcp/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/tcp/json.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/udp.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/arbiter/websocket.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/backoff.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/connection.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/factories/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/http/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/http/common.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/http/header.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/http/request_target.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/http/response.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/http/state.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/http/version.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/manager.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/mixin.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/mtu.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/bootstrap/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/bootstrap/elements.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/bootstrap/tabs.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/create.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/elements.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/env/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/env/modal.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/env/settings.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/env/tab/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/env/tab/base.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/env/tab/controls.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/env/tab/message.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/env/widgets.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/files.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/landing_page.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/placeholder.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/pyodide.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/sound.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/app/tab.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/html.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/struct/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/websocket/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/server/websocket/state.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/ssl.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/stream/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/stream/base.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/stream/json/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/stream/string.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/tcp/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/tcp/connection.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/tcp/create.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/tcp/http/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/tcp/protocol.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/tcp/scpi/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/tcp/telnet/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/tcp/telnet/codes.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/tcp/telnet/np_05b.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/udp/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/udp/connection.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/udp/create.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/udp/protocol.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/udp/queue.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/udp/tftp/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/udp/tftp/base.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/udp/tftp/endpoint.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/udp/tftp/enums.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/udp/tftp/io.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/util.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/websocket/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/net/websocket/connection.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/noise/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/array/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/base.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/bool.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/byte_order.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/evaluation.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/field/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/field/fields.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/field/manager/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/field/manager/base.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/float.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/int.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/scaling.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/serializable/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/serializable/base.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/serializable/fixed.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/serializable/framer.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/serializable/prefixed.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/string.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/types/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/types/base.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/types/bool.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/types/bounds.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/types/float.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/primitives/types/int.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/py.typed +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/registry/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/registry/bool.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/registry/item.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/registry/name.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/requirements.txt +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/sample/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/sample/peer.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/sample/program.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/schemas.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/struct/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/subprocess/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/subprocess/interface.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/subprocess/peer.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/subprocess/program.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/subprocess/protocol.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/task/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/task/asynchronous.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/task/basic/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/task/basic/manager.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/task/basic/periodic.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/task/sample.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/task/trig/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/telemetry/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/telemetry/sample.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/tui/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/tui/channels/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/tui/cursor.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/tui/mixin.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/tui/mock.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/tui/task.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/ui/__init__.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy/ui/controls.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy.egg-info/dependency_links.txt +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy.egg-info/entry_points.txt +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy.egg-info/requires.txt +2 -2
- {runtimepy-5.7.0 → runtimepy-5.7.2}/runtimepy.egg-info/top_level.txt +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/setup.cfg +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/setup.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/tests/test_entry.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/tests/test_mapping.py +0 -0
- {runtimepy-5.7.0 → runtimepy-5.7.2}/tests/test_resources.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: runtimepy
|
|
3
|
-
Version: 5.7.
|
|
3
|
+
Version: 5.7.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,11 +17,11 @@ 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:
|
|
20
|
+
Requires-Dist: psutil
|
|
21
21
|
Requires-Dist: svgen>=0.6.8
|
|
22
22
|
Requires-Dist: websockets
|
|
23
|
+
Requires-Dist: vcorelib>=3.4.2
|
|
23
24
|
Requires-Dist: aiofiles
|
|
24
|
-
Requires-Dist: psutil
|
|
25
25
|
Provides-Extra: test
|
|
26
26
|
Requires-Dist: pylint; extra == "test"
|
|
27
27
|
Requires-Dist: flake8; extra == "test"
|
|
@@ -45,11 +45,11 @@ Requires-Dist: uvloop; (sys_platform != "win32" and sys_platform != "cygwin") an
|
|
|
45
45
|
=====================================
|
|
46
46
|
generator=datazen
|
|
47
47
|
version=3.1.4
|
|
48
|
-
hash=
|
|
48
|
+
hash=618546df79dd7f387faa6f84f9a58c79
|
|
49
49
|
=====================================
|
|
50
50
|
-->
|
|
51
51
|
|
|
52
|
-
# runtimepy ([5.7.
|
|
52
|
+
# runtimepy ([5.7.2](https://pypi.org/project/runtimepy/))
|
|
53
53
|
|
|
54
54
|
[](https://pypi.org/project/runtimepy/)
|
|
55
55
|

|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
=====================================
|
|
3
3
|
generator=datazen
|
|
4
4
|
version=3.1.4
|
|
5
|
-
hash=
|
|
5
|
+
hash=618546df79dd7f387faa6f84f9a58c79
|
|
6
6
|
=====================================
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
|
-
# runtimepy ([5.7.
|
|
9
|
+
# runtimepy ([5.7.2](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.1.4
|
|
4
|
-
# hash=
|
|
4
|
+
# hash=0a0c607a8f78dc35cf48427539c9bafa
|
|
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.7.
|
|
13
|
+
VERSION = "5.7.2"
|
|
14
14
|
|
|
15
15
|
# runtimepy-specific content.
|
|
16
16
|
METRICS_NAME = "metrics"
|
|
@@ -98,13 +98,8 @@ button:hover {
|
|
|
98
98
|
width: 6em;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
/*
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
:root {
|
|
107
|
-
/* Prefer 'Arial' and 'Consolas' at the highest priority. */
|
|
108
|
-
--bs-font-sans-serif: Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
109
|
-
--bs-font-monospace: Consolas, "Liberation Mono", "Courier New", monospace;
|
|
101
|
+
/* Prefer 'CascadiaCode' and 'CascadiaMono' at the highest priority. */
|
|
102
|
+
:root, [data-bs-theme=dark], [data-bs-theme=light] {
|
|
103
|
+
--bs-font-sans-serif: CascadiaCode, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
104
|
+
--bs-font-monospace: CascadiaMono, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
110
105
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: CascadiaCode;
|
|
3
|
+
src: url("/static/woff2/CascadiaCode-Regular.woff2");
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
@font-face {
|
|
7
|
+
font-family: CascadiaCode;
|
|
8
|
+
src: url("/static/woff2/CascadiaCode-Bold.woff2");
|
|
9
|
+
font-weight: bold;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@font-face {
|
|
13
|
+
font-family: CascadiaCode;
|
|
14
|
+
src: url("/static/woff2/CascadiaCode-BoldItalic.woff2");
|
|
15
|
+
font-weight: bold;
|
|
16
|
+
font-style: italic;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@font-face {
|
|
20
|
+
font-family: CascadiaCode;
|
|
21
|
+
src: url("/static/woff2/CascadiaCode-Italic.woff2");
|
|
22
|
+
font-style: italic;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@font-face {
|
|
26
|
+
font-family: CascadiaMono;
|
|
27
|
+
src: url("/static/woff2/CascadiaMono-Regular.woff2");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@font-face {
|
|
31
|
+
font-family: CascadiaMono;
|
|
32
|
+
src: url("/static/woff2/CascadiaMono-Bold.woff2");
|
|
33
|
+
font-weight: bold;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@font-face {
|
|
37
|
+
font-family: CascadiaMono;
|
|
38
|
+
src: url("/static/woff2/CascadiaMono-BoldItalic.woff2");
|
|
39
|
+
font-weight: bold;
|
|
40
|
+
font-style: italic;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@font-face {
|
|
44
|
+
font-family: CascadiaMono;
|
|
45
|
+
src: url("/static/woff2/CascadiaMono-Italic.woff2");
|
|
46
|
+
font-style: italic;
|
|
47
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function changeFileName(urlObj, newFileName) {
|
|
2
|
+
let pathParts = urlObj.pathname.split('/');
|
|
3
|
+
pathParts[pathParts.length - 1] = newFileName;
|
|
4
|
+
return pathParts.join('/');
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/* Load configuration data then run application entry. */
|
|
8
|
+
window.onload = async () => {
|
|
9
|
+
await (
|
|
10
|
+
new App(
|
|
11
|
+
await (await fetch(changeFileName(window.location, "json"))).json(),
|
|
12
|
+
worker))
|
|
13
|
+
.main();
|
|
14
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<circle r="50.0" cx="50.0" cy="50.0" style="fill: #ADB5BD" />
|
|
3
|
+
<rect x="16.666666666666664" y="33.333333333333336" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
4
|
+
<rect x="16.666666666666664" y="45.833333333333336" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
5
|
+
<rect x="16.666666666666664" y="58.333333333333336" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
6
|
+
<rect x="58.33333333333333" y="16.666666666666664" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
7
|
+
<rect x="45.83333333333333" y="16.666666666666664" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
8
|
+
<rect x="33.33333333333333" y="16.666666666666664" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
9
|
+
<rect x="33.333333333333336" y="66.66666666666667" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
10
|
+
<rect x="45.833333333333336" y="66.66666666666667" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
11
|
+
<rect x="58.333333333333336" y="66.66666666666667" width="8.333333333333334" height="16.666666666666668" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
12
|
+
<rect x="66.66666666666667" y="58.33333333333333" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
13
|
+
<rect x="66.66666666666667" y="45.83333333333333" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
14
|
+
<rect x="66.66666666666667" y="33.33333333333333" width="16.666666666666668" height="8.333333333333334" rx="4.166666666666667" ry="4.166666666666667" style="fill: #495057" />
|
|
15
|
+
<rect x="25.0" y="25.0" width="50.0" height="50.0" rx="8.333333333333334" ry="8.333333333333334" style="fill: #212529" />
|
|
16
|
+
<line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="31.25" y1="50.0" x2="40.625" y2="59.375" />
|
|
17
|
+
<line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="31.25" y1="50.0" x2="40.625" y2="40.625" />
|
|
18
|
+
<line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="68.75" y1="50.0" x2="59.375" y2="59.375" />
|
|
19
|
+
<line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="68.75" y1="50.0" x2="59.375" y2="40.625" />
|
|
20
|
+
<line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="45.3125" y1="61.71875" x2="50.0" y2="50.0" />
|
|
21
|
+
<line stroke-linecap="round" style="stroke:#DEE2E6;stroke-width:3.125" x1="54.6875" y1="38.28125" x2="50.0" y2="50.0" />
|
|
22
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# [Cascadia Code](https://github.com/microsoft/cascadia-code)
|
|
2
|
+
|
|
3
|
+
Assets sourced from
|
|
4
|
+
[this release](https://github.com/microsoft/cascadia-code/releases/tag/v2404.23).
|
|
5
|
+
|
|
6
|
+
See also:
|
|
7
|
+
[LICENSE](https://github.com/microsoft/cascadia-code/blob/main/LICENSE).
|
|
8
|
+
|
|
9
|
+
**Fonts are used from release as-is.**
|
|
@@ -3,11 +3,12 @@ A module implementing a server interface for this package.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
# built-in
|
|
6
|
+
import http
|
|
6
7
|
from io import StringIO
|
|
7
8
|
import logging
|
|
8
9
|
import mimetypes
|
|
9
10
|
from pathlib import Path
|
|
10
|
-
from typing import Any, Optional, TextIO
|
|
11
|
+
from typing import Any, Optional, TextIO, Union
|
|
11
12
|
|
|
12
13
|
# third-party
|
|
13
14
|
from vcorelib.io import JsonObject
|
|
@@ -22,6 +23,7 @@ from runtimepy.net.http.response import ResponseHeader
|
|
|
22
23
|
from runtimepy.net.server.html import HtmlApp, HtmlApps, html_handler
|
|
23
24
|
from runtimepy.net.server.json import encode_json, json_handler
|
|
24
25
|
from runtimepy.net.tcp.http import HttpConnection
|
|
26
|
+
from runtimepy.util import normalize_root, path_has_part
|
|
25
27
|
|
|
26
28
|
MIMETYPES_INIT = False
|
|
27
29
|
|
|
@@ -48,6 +50,7 @@ class RuntimepyServerConnection(HttpConnection):
|
|
|
48
50
|
|
|
49
51
|
paths: list[Path]
|
|
50
52
|
class_paths: list[Pathlike] = [Path(), package_data_dir()]
|
|
53
|
+
class_redirect_paths: dict[Path, Union[str, Path]] = {}
|
|
51
54
|
|
|
52
55
|
def add_path(self, path: Pathlike, front: bool = False) -> None:
|
|
53
56
|
"""Add a path."""
|
|
@@ -60,6 +63,19 @@ class RuntimepyServerConnection(HttpConnection):
|
|
|
60
63
|
|
|
61
64
|
self.log_paths()
|
|
62
65
|
|
|
66
|
+
@classmethod
|
|
67
|
+
def add_redirect_path(
|
|
68
|
+
cls, dest: Union[str, Path], *src_parts: Union[str, Path]
|
|
69
|
+
) -> None:
|
|
70
|
+
"""Add a redirect path."""
|
|
71
|
+
|
|
72
|
+
source = normalize_root(*src_parts)
|
|
73
|
+
assert source not in cls.class_redirect_paths, (
|
|
74
|
+
source,
|
|
75
|
+
cls.class_redirect_paths,
|
|
76
|
+
)
|
|
77
|
+
cls.class_redirect_paths[source] = dest
|
|
78
|
+
|
|
63
79
|
def log_paths(self) -> None:
|
|
64
80
|
"""Log search paths."""
|
|
65
81
|
|
|
@@ -90,6 +106,23 @@ class RuntimepyServerConnection(HttpConnection):
|
|
|
90
106
|
with favicon.open("rb") as favicon_fd:
|
|
91
107
|
type(self).favicon_data = favicon_fd.read()
|
|
92
108
|
|
|
109
|
+
def try_redirect(
|
|
110
|
+
self, path: PathMaybeQuery, response: ResponseHeader
|
|
111
|
+
) -> Optional[bytes]:
|
|
112
|
+
"""Try handling any HTTP redirect rules."""
|
|
113
|
+
|
|
114
|
+
result = None
|
|
115
|
+
|
|
116
|
+
curr = Path(path[0])
|
|
117
|
+
if curr in self.class_redirect_paths:
|
|
118
|
+
response["Location"] = str(self.class_redirect_paths[curr])
|
|
119
|
+
response.status = http.HTTPStatus.TEMPORARY_REDIRECT
|
|
120
|
+
|
|
121
|
+
# No data payload, but signal to caller that a response is ready.
|
|
122
|
+
result = bytes()
|
|
123
|
+
|
|
124
|
+
return result
|
|
125
|
+
|
|
93
126
|
def try_file(
|
|
94
127
|
self, path: PathMaybeQuery, response: ResponseHeader
|
|
95
128
|
) -> Optional[bytes]:
|
|
@@ -188,13 +221,14 @@ class RuntimepyServerConnection(HttpConnection):
|
|
|
188
221
|
response["Content-Type"] = "image/x-icon"
|
|
189
222
|
return self.favicon_data
|
|
190
223
|
|
|
191
|
-
# Try serving
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
224
|
+
# Try serving a file and handling redirects.
|
|
225
|
+
for handler in [self.try_redirect, self.try_file]:
|
|
226
|
+
result = handler(request.target.origin_form, response)
|
|
227
|
+
if result is not None:
|
|
228
|
+
return result
|
|
195
229
|
|
|
196
230
|
# Handle raw data queries.
|
|
197
|
-
if path
|
|
231
|
+
if path_has_part(request.target.path):
|
|
198
232
|
json_handler(
|
|
199
233
|
stream,
|
|
200
234
|
request,
|
|
@@ -73,6 +73,11 @@ async def setup(app: AppInfo) -> int:
|
|
|
73
73
|
RuntimepyServerConnection.apps["/app.html"] = web_app
|
|
74
74
|
RuntimepyServerConnection.default_app = web_app
|
|
75
75
|
|
|
76
|
+
# Register redirects.
|
|
77
|
+
redirects: dict[str, str] = app.config_param("http_redirects", {})
|
|
78
|
+
for key, val in redirects.items():
|
|
79
|
+
RuntimepyServerConnection.add_redirect_path(val, key)
|
|
80
|
+
|
|
76
81
|
# Register custom applications.
|
|
77
82
|
for key, app_method in APPS.items():
|
|
78
83
|
app_cfg: dict[str, Any] = app.config_param(key, {})
|
|
@@ -52,10 +52,9 @@ class WebApplication:
|
|
|
52
52
|
def populate(self, document: Html, app: TabPopulater) -> None:
|
|
53
53
|
"""Populate the body element with the application."""
|
|
54
54
|
|
|
55
|
-
#
|
|
55
|
+
# CSS.
|
|
56
|
+
append_kind(document.head, "font", kind="css", tag="style")
|
|
56
57
|
add_bootstrap_css(document.head)
|
|
57
|
-
|
|
58
|
-
# Internal CSS.
|
|
59
58
|
append_kind(
|
|
60
59
|
document.head, "main", "bootstrap_extra", kind="css", tag="style"
|
|
61
60
|
)
|
|
@@ -50,6 +50,9 @@ def create_name_td(parent: Element) -> Element:
|
|
|
50
50
|
return div(tag="td", parent=parent, class_str="p-0 text-nowrap")
|
|
51
51
|
|
|
52
52
|
|
|
53
|
+
COMMANDABLE = "text-info-emphasis"
|
|
54
|
+
|
|
55
|
+
|
|
53
56
|
class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
|
|
54
57
|
"""A channel-environment tab interface."""
|
|
55
58
|
|
|
@@ -67,7 +70,7 @@ class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
|
|
|
67
70
|
|
|
68
71
|
name_elem = div(tag="span", text=name, parent=name_td)
|
|
69
72
|
if chan.commandable:
|
|
70
|
-
name_elem.add_class(
|
|
73
|
+
name_elem.add_class(COMMANDABLE)
|
|
71
74
|
|
|
72
75
|
if description:
|
|
73
76
|
set_tooltip(name_elem, description, placement="left")
|
|
@@ -105,7 +108,7 @@ class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
|
|
|
105
108
|
|
|
106
109
|
name_elem = div(tag="span", text=name, parent=name_td)
|
|
107
110
|
if field.commandable:
|
|
108
|
-
name_elem.add_class(
|
|
111
|
+
name_elem.add_class(COMMANDABLE)
|
|
109
112
|
|
|
110
113
|
if field.description:
|
|
111
114
|
description = field.description
|
|
@@ -13,6 +13,7 @@ from vcorelib.io import ARBITER, JsonObject
|
|
|
13
13
|
# internal
|
|
14
14
|
from runtimepy.net.http.header import RequestHeader
|
|
15
15
|
from runtimepy.net.http.response import ResponseHeader
|
|
16
|
+
from runtimepy.util import parse_path_parts
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
class Encoder(JSONEncoder):
|
|
@@ -94,7 +95,7 @@ def json_handler(
|
|
|
94
95
|
del request_data
|
|
95
96
|
|
|
96
97
|
# Traverse path.
|
|
97
|
-
data = traverse_dict(data, *request.target.path
|
|
98
|
+
data = traverse_dict(data, *parse_path_parts(request.target.path))
|
|
98
99
|
|
|
99
100
|
# Use a convention for indexing data to non-dictionary leaf nodes.
|
|
100
101
|
if not isinstance(data, dict):
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""
|
|
2
|
+
A module implementing package utilities.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
# built-in
|
|
6
|
+
from os import sep
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Iterator, Union
|
|
9
|
+
|
|
10
|
+
# third-party
|
|
11
|
+
from vcorelib.paths import normalize
|
|
12
|
+
|
|
13
|
+
ROOT_PATH = Path(sep)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def normalize_root(*src_parts: Union[str, Path]) -> Path:
|
|
17
|
+
"""Make paths absolute that aren't. Useful for HTTP-request pathing."""
|
|
18
|
+
|
|
19
|
+
result = normalize(*src_parts)
|
|
20
|
+
if not result.is_absolute():
|
|
21
|
+
result = ROOT_PATH.joinpath(result)
|
|
22
|
+
return result
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Identifier:
|
|
26
|
+
"""A simple message indentifier interface."""
|
|
27
|
+
|
|
28
|
+
def __init__(self) -> None:
|
|
29
|
+
"""Initialize this instance."""
|
|
30
|
+
self.curr_id: int = 1
|
|
31
|
+
self.scale = 2
|
|
32
|
+
|
|
33
|
+
def __call__(self) -> int:
|
|
34
|
+
"""Get the next identifier."""
|
|
35
|
+
curr = self.curr_id
|
|
36
|
+
self.curr_id += self.scale
|
|
37
|
+
return curr
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def path_has_part(path: str, key: str = "json") -> bool:
|
|
41
|
+
"""Determine if a key appears as a part of a path."""
|
|
42
|
+
|
|
43
|
+
# Ignore '/' component (intended for URI paths).
|
|
44
|
+
return key in path.split("/")[1:]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def parse_path_parts(path: str, key: str = "json") -> Iterator[str]:
|
|
48
|
+
"""
|
|
49
|
+
Parse a path such that all parts appearing after a possible 'key' appears
|
|
50
|
+
are yielded.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
key_found = False
|
|
54
|
+
|
|
55
|
+
# Ignore '/' component (intended for URI paths).
|
|
56
|
+
for item in path.split("/")[1:]:
|
|
57
|
+
if key_found:
|
|
58
|
+
yield item
|
|
59
|
+
elif item == key:
|
|
60
|
+
key_found = True
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: runtimepy
|
|
3
|
-
Version: 5.7.
|
|
3
|
+
Version: 5.7.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,11 +17,11 @@ 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:
|
|
20
|
+
Requires-Dist: psutil
|
|
21
21
|
Requires-Dist: svgen>=0.6.8
|
|
22
22
|
Requires-Dist: websockets
|
|
23
|
+
Requires-Dist: vcorelib>=3.4.2
|
|
23
24
|
Requires-Dist: aiofiles
|
|
24
|
-
Requires-Dist: psutil
|
|
25
25
|
Provides-Extra: test
|
|
26
26
|
Requires-Dist: pylint; extra == "test"
|
|
27
27
|
Requires-Dist: flake8; extra == "test"
|
|
@@ -45,11 +45,11 @@ Requires-Dist: uvloop; (sys_platform != "win32" and sys_platform != "cygwin") an
|
|
|
45
45
|
=====================================
|
|
46
46
|
generator=datazen
|
|
47
47
|
version=3.1.4
|
|
48
|
-
hash=
|
|
48
|
+
hash=618546df79dd7f387faa6f84f9a58c79
|
|
49
49
|
=====================================
|
|
50
50
|
-->
|
|
51
51
|
|
|
52
|
-
# runtimepy ([5.7.
|
|
52
|
+
# runtimepy ([5.7.2](https://pypi.org/project/runtimepy/))
|
|
53
53
|
|
|
54
54
|
[](https://pypi.org/project/runtimepy/)
|
|
55
55
|

|
|
@@ -61,6 +61,7 @@ runtimepy/data/server_base.yaml
|
|
|
61
61
|
runtimepy/data/server_dev.yaml
|
|
62
62
|
runtimepy/data/tftp_server.yaml
|
|
63
63
|
runtimepy/data/css/bootstrap_extra.css
|
|
64
|
+
runtimepy/data/css/font.css
|
|
64
65
|
runtimepy/data/css/main.css
|
|
65
66
|
runtimepy/data/js/DataConnection.js
|
|
66
67
|
runtimepy/data/js/JsonConnection.js
|
|
@@ -114,6 +115,16 @@ runtimepy/data/schemas/has_factory.yaml
|
|
|
114
115
|
runtimepy/data/schemas/has_markdown.yaml
|
|
115
116
|
runtimepy/data/schemas/has_name.yaml
|
|
116
117
|
runtimepy/data/schemas/has_request_flag.yaml
|
|
118
|
+
runtimepy/data/static/svg/chip-circle-bootstrap.svg
|
|
119
|
+
runtimepy/data/static/woff2/CascadiaCode-Bold.woff2
|
|
120
|
+
runtimepy/data/static/woff2/CascadiaCode-BoldItalic.woff2
|
|
121
|
+
runtimepy/data/static/woff2/CascadiaCode-Italic.woff2
|
|
122
|
+
runtimepy/data/static/woff2/CascadiaCode-Regular.woff2
|
|
123
|
+
runtimepy/data/static/woff2/CascadiaMono-Bold.woff2
|
|
124
|
+
runtimepy/data/static/woff2/CascadiaMono-BoldItalic.woff2
|
|
125
|
+
runtimepy/data/static/woff2/CascadiaMono-Italic.woff2
|
|
126
|
+
runtimepy/data/static/woff2/CascadiaMono-Regular.woff2
|
|
127
|
+
runtimepy/data/static/woff2/README.md
|
|
117
128
|
runtimepy/enum/__init__.py
|
|
118
129
|
runtimepy/enum/registry.py
|
|
119
130
|
runtimepy/enum/types.py
|
|
Binary file
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
A module implementing package utilities.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Identifier:
|
|
7
|
-
"""A simple message indentifier interface."""
|
|
8
|
-
|
|
9
|
-
def __init__(self) -> None:
|
|
10
|
-
"""Initialize this instance."""
|
|
11
|
-
self.curr_id: int = 1
|
|
12
|
-
self.scale = 2
|
|
13
|
-
|
|
14
|
-
def __call__(self) -> int:
|
|
15
|
-
"""Get the next identifier."""
|
|
16
|
-
curr = self.curr_id
|
|
17
|
-
self.curr_id += self.scale
|
|
18
|
-
return curr
|
|
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
|