meerschaum 3.0.0rc4__tar.gz → 3.0.0rc6__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.
- {meerschaum-3.0.0rc4/meerschaum.egg-info → meerschaum-3.0.0rc6}/PKG-INFO +3 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/arguments/_parser.py +5 -1
- meerschaum-3.0.0rc6/meerschaum/_internal/cli/__init__.py +6 -0
- meerschaum-3.0.0rc6/meerschaum/_internal/cli/daemons.py +103 -0
- meerschaum-3.0.0rc6/meerschaum/_internal/cli/entry.py +184 -0
- meerschaum-3.0.0rc6/meerschaum/_internal/cli/workers.py +406 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/docs/index.py +1 -2
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/entry.py +43 -7
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/Shell.py +59 -10
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/static.py +3 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/__init__.py +2 -2
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/attach.py +1 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/register.py +13 -7
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/reload.py +11 -4
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/restart.py +14 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/show.py +8 -3
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/start.py +111 -4
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/stop.py +35 -2
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/sync.py +6 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/__init__.py +25 -6
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/_oauth2.py +47 -4
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/jobs.py +3 -2
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/login.py +10 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/register.py +9 -2
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/models/_pipes.py +7 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_login.py +73 -5
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_pipes.py +6 -4
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/__init__.py +20 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_default.py +23 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_environment.py +40 -20
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_paths.py +3 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_version.py +1 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/stack/__init__.py +3 -4
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/_Connector.py +1 -2
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/__init__.py +0 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_pipes.py +7 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/_plugins.py +9 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/_tokens.py +20 -3
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/_users.py +8 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_pipes.py +86 -77
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_users.py +8 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/_ValkeyConnector.py +3 -3
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/_pipes.py +7 -5
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/__init__.py +45 -71
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_attributes.py +66 -90
- meerschaum-3.0.0rc6/meerschaum/core/Pipe/_cache.py +555 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_clear.py +0 -11
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_data.py +0 -50
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_deduplicate.py +0 -13
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_delete.py +12 -21
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_drop.py +11 -23
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_dtypes.py +1 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_index.py +8 -14
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_sync.py +12 -18
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/User/_User.py +1 -2
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/jobs/_Job.py +105 -28
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/jobs/systemd.py +0 -2
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/Daemon.py +174 -32
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/FileDescriptorInterceptor.py +0 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/RotatingFile.py +63 -36
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/StdinFile.py +44 -13
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/__init__.py +17 -3
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/debug.py +34 -4
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/dtypes/__init__.py +5 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/formatting/__init__.py +4 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/formatting/_jobs.py +1 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/formatting/_pipes.py +47 -46
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/formatting/_shell.py +12 -6
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/misc.py +40 -38
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/packages/_packages.py +1 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/pipes.py +33 -5
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/process.py +1 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/prompt.py +13 -5
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/sql.py +12 -2
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/threading.py +42 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/venv/__init__.py +2 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/warnings.py +19 -13
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6/meerschaum.egg-info}/PKG-INFO +3 -1
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum.egg-info/SOURCES.txt +5 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum.egg-info/requires.txt +2 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/LICENSE +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/MANIFEST.in +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/NOTICE +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/README.md +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/__main__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/arguments/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/arguments/_parse_arguments.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/docs/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/resources/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/shell/updates.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/term/TermPageHandler.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/term/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/_internal/term/tools.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/api.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/bootstrap.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/clear.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/copy.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/deduplicate.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/delete.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/drop.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/edit.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/index.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/install.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/login.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/os.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/pause.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/python.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/setup.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/sh.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/sql.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/stack.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/tag.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/uninstall.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/upgrade.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/actions/verify.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/_chain.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/_chunks.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/_events.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/_exceptions.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/_tokens.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/_websockets.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/ansi_up.js +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/favicon.ico +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/custom.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/dashboard.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/pipes.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/plugins.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/settings/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/settings/password_reset.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/callbacks/tokens.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/components.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/connectors.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/graphs.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/jobs.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/keys.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/dashboard.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/error.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/jobs.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/login.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/pipes.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/plugins.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/register.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/settings/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/settings/password_reset.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pages/tokens.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/pipes.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/plugins.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/sessions.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/sync.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/tokens.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/users.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/websockets.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/dash/webterm.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/models/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/models/_actions.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/models/_tokens.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/dash.css +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/styles.css +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/css/xterm.css +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/ico/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/ico/logo.ico +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/js/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/js/action_button.js +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/js/main.js +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/js/terminado.js +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/js/xterm.js +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/static/png/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/templates/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/templates/index.html +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/templates/old_index.html +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/templates/secret.html +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/resources/templates/termpage.html +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_actions.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_connectors.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_index.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_jobs.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_misc.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_plugins.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_tokens.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_users.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_version.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/routes/_webterm.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/api/tables/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_dash.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_edit.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_formatting.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_jobs.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_patch.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_preprocess.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_read_config.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_shell.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/_sync.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/paths.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/resources/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/stack/grafana/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/stack/resources/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/config/static.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_APIConnector.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_actions.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_fetch.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_jobs.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_login.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_misc.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_plugins.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_request.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_tokens.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_uri.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/api/_users.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/_InstanceConnector.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/instance/_pipes.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/parse.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/plugin/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/poll.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_SQLConnector.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_cli.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_create_engine.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_fetch.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_instance.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_plugins.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_sql.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/_uri.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/tables/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/tables/types.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/sql/tools.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/_fetch.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/_plugins.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/connectors/valkey/_users.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_bootstrap.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_copy.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_edit.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_fetch.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_register.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_show.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Pipe/_verify.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Plugin/_Plugin.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Plugin/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Token/_Token.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/Token/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/User/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/core/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/jobs/_Executor.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/jobs/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/models/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/models/pipes.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/models/tokens.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/models/users.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/plugins/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/plugins/bootstrap.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/_get_pipes.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/daemon/_names.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/dataframe.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/dtypes/sql.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/formatting/_pprint.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/interactive.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/networking.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/packages/__init__.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/packages/lazy_loader.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/pool.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/schedule.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/typing.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/venv/_Venv.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum/utils/yaml.py +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum.egg-info/dependency_links.txt +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum.egg-info/entry_points.txt +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum.egg-info/top_level.txt +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/meerschaum.egg-info/zip-safe +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/pyproject.toml +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/setup.cfg +0 -0
- {meerschaum-3.0.0rc4 → meerschaum-3.0.0rc6}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: meerschaum
|
3
|
-
Version: 3.0.
|
3
|
+
Version: 3.0.0rc6
|
4
4
|
Summary: Sync Time-Series Pipes with Meerschaum
|
5
5
|
Author-email: Bennett Meares <bennett.meares@gmail.com>
|
6
6
|
Maintainer-email: Bennett Meares <bennett.meares@gmail.com>
|
@@ -192,6 +192,7 @@ Requires-Dist: python-multipart>=0.0.20; extra == "api"
|
|
192
192
|
Requires-Dist: httpx>=0.28.1; extra == "api"
|
193
193
|
Requires-Dist: httpcore>=1.0.9; extra == "api"
|
194
194
|
Requires-Dist: valkey>=6.1.0; extra == "api"
|
195
|
+
Requires-Dist: python-jose>=3.5.0; extra == "api"
|
195
196
|
Requires-Dist: numpy>=2.3.1; extra == "api"
|
196
197
|
Requires-Dist: pandas[parquet]>=2.3.1; extra == "api"
|
197
198
|
Requires-Dist: pyarrow>=20.0.0; extra == "api"
|
@@ -337,6 +338,7 @@ Requires-Dist: python-multipart>=0.0.20; extra == "full"
|
|
337
338
|
Requires-Dist: httpx>=0.28.1; extra == "full"
|
338
339
|
Requires-Dist: httpcore>=1.0.9; extra == "full"
|
339
340
|
Requires-Dist: valkey>=6.1.0; extra == "full"
|
341
|
+
Requires-Dist: python-jose>=3.5.0; extra == "full"
|
340
342
|
Dynamic: license-file
|
341
343
|
Dynamic: provides-extra
|
342
344
|
|
@@ -377,7 +377,7 @@ groups['sync'].add_argument(
|
|
377
377
|
groups['sync'].add_argument(
|
378
378
|
'--cache', action='store_true',
|
379
379
|
help=(
|
380
|
-
"
|
380
|
+
"Sync pipes' metadata to disk."
|
381
381
|
)
|
382
382
|
)
|
383
383
|
|
@@ -508,3 +508,7 @@ groups['misc'].add_argument(
|
|
508
508
|
+ "Default behavior is to only allow recognized actions."
|
509
509
|
)
|
510
510
|
)
|
511
|
+
groups['misc'].add_argument(
|
512
|
+
'--no-daemon', action='store_true',
|
513
|
+
help="Do not use the Meerschaum CLI daemon to execute the action.",
|
514
|
+
)
|
@@ -0,0 +1,103 @@
|
|
1
|
+
#! /usr/bin/env python3
|
2
|
+
# vim:fenc=utf-8
|
3
|
+
|
4
|
+
"""
|
5
|
+
Define the CLI daemons utilities.
|
6
|
+
"""
|
7
|
+
|
8
|
+
import os
|
9
|
+
import threading
|
10
|
+
import pathlib
|
11
|
+
from typing import Optional, List
|
12
|
+
|
13
|
+
import meerschaum as mrsm
|
14
|
+
|
15
|
+
|
16
|
+
def get_cli_daemon(ix: Optional[int] = None):
|
17
|
+
"""
|
18
|
+
Get the CLI daemon.
|
19
|
+
"""
|
20
|
+
from meerschaum._internal.cli.workers import ActionWorker
|
21
|
+
ix = ix if ix is not None else get_available_cli_daemon_ix()
|
22
|
+
return ActionWorker(ix)
|
23
|
+
|
24
|
+
|
25
|
+
def get_cli_lock_path(ix: int) -> pathlib.Path:
|
26
|
+
"""
|
27
|
+
Return the path to a CLI daemon's lock file.
|
28
|
+
"""
|
29
|
+
from meerschaum.config.paths import CLI_RESOURCES_PATH
|
30
|
+
return CLI_RESOURCES_PATH / f"ix-{ix}.lock"
|
31
|
+
|
32
|
+
|
33
|
+
def get_cli_session_id() -> str:
|
34
|
+
"""
|
35
|
+
Return the session ID to use for the current process and thread.
|
36
|
+
"""
|
37
|
+
return f"{os.getpid()}.{threading.current_thread().ident}"
|
38
|
+
|
39
|
+
|
40
|
+
def get_available_cli_daemon_ix() -> int:
|
41
|
+
"""
|
42
|
+
Return the index for an available CLI daemon.
|
43
|
+
"""
|
44
|
+
max_ix = mrsm.get_config('system', 'cli', 'max_daemons') - 1
|
45
|
+
ix = 0
|
46
|
+
while True:
|
47
|
+
lock_path = get_cli_lock_path(ix)
|
48
|
+
if not lock_path.exists():
|
49
|
+
return ix
|
50
|
+
|
51
|
+
ix += 1
|
52
|
+
if ix > max_ix:
|
53
|
+
raise EnvironmentError("Too many CLI daemons are running.")
|
54
|
+
|
55
|
+
|
56
|
+
def get_existing_cli_daemon_indices() -> List[int]:
|
57
|
+
"""
|
58
|
+
Return a list of the existing CLI daemons.
|
59
|
+
"""
|
60
|
+
from meerschaum.utils.daemon import get_daemon_ids
|
61
|
+
daemon_ids = [daemon_id for daemon_id in get_daemon_ids() if daemon_id.startswith('.cli.')]
|
62
|
+
indices = []
|
63
|
+
|
64
|
+
for daemon_id in daemon_ids:
|
65
|
+
try:
|
66
|
+
ix = int(daemon_id[len('.cli.'):])
|
67
|
+
indices.append(ix)
|
68
|
+
except Exception:
|
69
|
+
pass
|
70
|
+
|
71
|
+
return indices
|
72
|
+
|
73
|
+
|
74
|
+
def get_existing_cli_daemons() -> 'List[ActionWorker]':
|
75
|
+
"""
|
76
|
+
Return a list of the existing CLI daemons.
|
77
|
+
"""
|
78
|
+
from meerschaum._internal.cli.workers import ActionWorker
|
79
|
+
indices = get_existing_cli_daemon_indices()
|
80
|
+
return [
|
81
|
+
ActionWorker(ix)
|
82
|
+
for ix in indices
|
83
|
+
]
|
84
|
+
|
85
|
+
|
86
|
+
def _get_cli_session_dir_path(session_id: str) -> pathlib.Path:
|
87
|
+
"""
|
88
|
+
Return the path to the file handles for the CLI session.
|
89
|
+
"""
|
90
|
+
from meerschaum.config.paths import CLI_RESOURCES_PATH
|
91
|
+
return CLI_RESOURCES_PATH / session_id
|
92
|
+
|
93
|
+
|
94
|
+
def _get_cli_stream_path(
|
95
|
+
session_id: str,
|
96
|
+
action_id: str,
|
97
|
+
stream: str = 'stdout',
|
98
|
+
) -> pathlib.Path:
|
99
|
+
"""
|
100
|
+
Return the file path for the stdout / stderr file stream.
|
101
|
+
"""
|
102
|
+
session_dir_path = _get_cli_session_dir_path(session_id)
|
103
|
+
return session_dir_path / f'{action_id}.{stream}'
|
@@ -0,0 +1,184 @@
|
|
1
|
+
#! /usr/bin/env python3
|
2
|
+
# vim:fenc=utf-8
|
3
|
+
|
4
|
+
"""
|
5
|
+
Define the CLI daemon entrypoint.
|
6
|
+
"""
|
7
|
+
|
8
|
+
import os
|
9
|
+
import time
|
10
|
+
import uuid
|
11
|
+
import shlex
|
12
|
+
import shutil
|
13
|
+
import traceback
|
14
|
+
import signal
|
15
|
+
from typing import Optional, Dict, List, Any, Union
|
16
|
+
|
17
|
+
import meerschaum as mrsm
|
18
|
+
|
19
|
+
|
20
|
+
def entry_with_daemon(
|
21
|
+
sysargs: Optional[List[str]] = None,
|
22
|
+
_patch_args: Optional[Dict[str, Any]] = None,
|
23
|
+
_use_cli_daemon: bool = True,
|
24
|
+
_session_id: Optional[str] = None,
|
25
|
+
) -> mrsm.SuccessTuple:
|
26
|
+
"""
|
27
|
+
Parse arguments and launch a Meerschaum action.
|
28
|
+
|
29
|
+
Returns
|
30
|
+
-------
|
31
|
+
A `SuccessTuple` indicating success.
|
32
|
+
"""
|
33
|
+
from meerschaum._internal.entry import entry_without_daemon
|
34
|
+
from meerschaum._internal.cli.workers import ActionWorker
|
35
|
+
from meerschaum._internal.cli.daemons import (
|
36
|
+
get_available_cli_daemon_ix,
|
37
|
+
get_cli_session_id,
|
38
|
+
)
|
39
|
+
daemon_is_ready = True
|
40
|
+
|
41
|
+
found_acceptable_prefix = False
|
42
|
+
found_unacceptable_prefix = False
|
43
|
+
allowed_prefixes = mrsm.get_config('system', 'cli', 'allowed_prefixes')
|
44
|
+
disallowed_prefixes = mrsm.get_config('system', 'cli', 'disallowed_prefixes')
|
45
|
+
refresh_seconds = mrsm.get_config('system', 'cli', 'refresh_seconds')
|
46
|
+
sysargs_str = sysargs if isinstance(sysargs, str) else shlex.join(sysargs or [])
|
47
|
+
|
48
|
+
for prefix in allowed_prefixes:
|
49
|
+
if sysargs_str.startswith(prefix) or prefix == '*':
|
50
|
+
found_acceptable_prefix = True
|
51
|
+
break
|
52
|
+
|
53
|
+
for prefix in disallowed_prefixes:
|
54
|
+
if sysargs_str.startswith(prefix) or prefix == '*':
|
55
|
+
found_unacceptable_prefix = True
|
56
|
+
break
|
57
|
+
|
58
|
+
if not found_acceptable_prefix or found_unacceptable_prefix:
|
59
|
+
daemon_is_ready = False
|
60
|
+
|
61
|
+
try:
|
62
|
+
daemon_ix = get_available_cli_daemon_ix() if daemon_is_ready else -1
|
63
|
+
except EnvironmentError as e:
|
64
|
+
from meerschaum.utils.warnings import warn
|
65
|
+
warn(e, stack=False)
|
66
|
+
daemon_ix = -1
|
67
|
+
daemon_is_ready = False
|
68
|
+
|
69
|
+
worker = ActionWorker(daemon_ix, refresh_seconds=refresh_seconds) if daemon_ix != -1 else None
|
70
|
+
if worker and worker.lock_path.exists():
|
71
|
+
daemon_is_ready = False
|
72
|
+
|
73
|
+
start_success, start_msg = (
|
74
|
+
worker.job.start()
|
75
|
+
if worker and daemon_is_ready
|
76
|
+
else (False, "Lock exists.")
|
77
|
+
)
|
78
|
+
|
79
|
+
if not start_success:
|
80
|
+
daemon_is_ready = False
|
81
|
+
|
82
|
+
if start_success and worker:
|
83
|
+
start = time.perf_counter()
|
84
|
+
while (time.perf_counter() - start) < 3:
|
85
|
+
if worker.is_ready():
|
86
|
+
break
|
87
|
+
time.sleep(refresh_seconds)
|
88
|
+
|
89
|
+
if not daemon_is_ready or worker is None:
|
90
|
+
return entry_without_daemon(sysargs, _patch_args=_patch_args)
|
91
|
+
|
92
|
+
session_id = _session_id or get_cli_session_id()
|
93
|
+
action_id = uuid.uuid4().hex
|
94
|
+
|
95
|
+
terminal_size = shutil.get_terminal_size()
|
96
|
+
env = {
|
97
|
+
**{
|
98
|
+
'LINES': str(terminal_size.lines),
|
99
|
+
'COLUMNS': str(terminal_size.columns),
|
100
|
+
},
|
101
|
+
**dict(os.environ),
|
102
|
+
}
|
103
|
+
|
104
|
+
worker.write_input_data({
|
105
|
+
'session_id': session_id,
|
106
|
+
'action_id': action_id,
|
107
|
+
'sysargs': sysargs,
|
108
|
+
'patch_args': _patch_args,
|
109
|
+
'env': env,
|
110
|
+
})
|
111
|
+
|
112
|
+
accepted = False
|
113
|
+
exit_data = None
|
114
|
+
worker_data = None
|
115
|
+
|
116
|
+
while not accepted:
|
117
|
+
state = worker.read_output_data().get('state', None)
|
118
|
+
if state == 'accepted':
|
119
|
+
accepted = True
|
120
|
+
break
|
121
|
+
|
122
|
+
time.sleep(refresh_seconds)
|
123
|
+
|
124
|
+
try:
|
125
|
+
log = worker.job.daemon.rotating_log
|
126
|
+
worker.job.monitor_logs(
|
127
|
+
stop_on_exit=True,
|
128
|
+
callback_function=worker.monitor_callback,
|
129
|
+
_log=log,
|
130
|
+
_wait_if_stopped=False,
|
131
|
+
)
|
132
|
+
worker_data = worker.read_output_data()
|
133
|
+
except KeyboardInterrupt:
|
134
|
+
exit_data = {
|
135
|
+
'session_id': session_id,
|
136
|
+
'action_id': action_id,
|
137
|
+
'signal': signal.SIGINT,
|
138
|
+
'traceback': traceback.format_exc(),
|
139
|
+
'success': True,
|
140
|
+
'message': 'Exiting due to keyboard interrupt.',
|
141
|
+
}
|
142
|
+
except Exception as e:
|
143
|
+
exit_data = {
|
144
|
+
'session_id': session_id,
|
145
|
+
'action_id': action_id,
|
146
|
+
'signal': signal.SIGINT,
|
147
|
+
'traceback': traceback.format_exc(),
|
148
|
+
'success': False,
|
149
|
+
'message': f'Encountered exception: {e}',
|
150
|
+
}
|
151
|
+
except SystemExit:
|
152
|
+
exit_data = {
|
153
|
+
'session_id': session_id,
|
154
|
+
'action_id': action_id,
|
155
|
+
'signal': signal.SIGTERM,
|
156
|
+
'traceback': traceback.format_exc(),
|
157
|
+
'success': True,
|
158
|
+
'message': 'Exiting on SIGTERM.',
|
159
|
+
}
|
160
|
+
except BrokenPipeError:
|
161
|
+
return False, "Connection to daemon is broken."
|
162
|
+
|
163
|
+
if exit_data:
|
164
|
+
exit_success = bool(exit_data['success'])
|
165
|
+
exit_signal = exit_data['signal']
|
166
|
+
worker.send_signal(exit_signal)
|
167
|
+
try:
|
168
|
+
worker.job.monitor_logs(
|
169
|
+
stop_on_exit=True,
|
170
|
+
callback_function=worker.monitor_callback,
|
171
|
+
_wait_if_stopped=False,
|
172
|
+
_log=log,
|
173
|
+
)
|
174
|
+
except (KeyboardInterrupt, SystemExit):
|
175
|
+
worker.send_signal(signal.SIGTERM)
|
176
|
+
worker_data = worker.read_output_data()
|
177
|
+
|
178
|
+
if not exit_success:
|
179
|
+
print(exit_data['traceback'])
|
180
|
+
|
181
|
+
worker.write_input_data({'increment': True})
|
182
|
+
success = (worker_data or {}).get('success', False)
|
183
|
+
message = (worker_data or {}).get('message', "Failed to retrieve message from CLI worker.")
|
184
|
+
return success, message
|