meerschaum 2.1.7__tar.gz → 2.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {meerschaum-2.1.7/meerschaum.egg-info → meerschaum-2.2.0}/PKG-INFO +59 -62
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/__main__.py +1 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/arguments/_parser.py +3 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/entry.py +3 -2
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/install.py +7 -3
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/show.py +128 -42
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/sync.py +7 -3
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/__init__.py +24 -14
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/_oauth2.py +4 -4
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/callbacks/dashboard.py +93 -23
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/callbacks/jobs.py +55 -3
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/jobs.py +34 -8
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/keys.py +1 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/pages/dashboard.py +14 -4
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/pipes.py +137 -26
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/plugins.py +25 -9
- meerschaum-2.2.0/meerschaum/api/resources/static/js/xterm.js +2 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/templates/termpage.html +3 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/_login.py +5 -4
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/_plugins.py +6 -3
- meerschaum-2.2.0/meerschaum/config/_dash.py +11 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_default.py +3 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_jobs.py +13 -4
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_paths.py +2 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_sync.py +2 -3
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_version.py +1 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/stack/__init__.py +6 -7
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/stack/grafana/__init__.py +1 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/static/__init__.py +4 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/__init__.py +2 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/_plugins.py +2 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/SQLConnector.py +4 -2
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/_create_engine.py +9 -9
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/_instance.py +3 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/_pipes.py +54 -38
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/_plugins.py +0 -2
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/_sql.py +7 -9
- meerschaum-2.2.0/meerschaum/core/User/_User.py +224 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/User/__init__.py +1 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/plugins/_Plugin.py +12 -3
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/plugins/__init__.py +23 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/daemon/Daemon.py +89 -36
- meerschaum-2.2.0/meerschaum/utils/daemon/FileDescriptorInterceptor.py +140 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/daemon/RotatingFile.py +130 -14
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/daemon/__init__.py +3 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/dtypes/__init__.py +9 -5
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/packages/__init__.py +21 -5
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/packages/_packages.py +18 -20
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/process.py +13 -10
- meerschaum-2.2.0/meerschaum/utils/schedule.py +311 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/threading.py +1 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/typing.py +1 -1
- {meerschaum-2.1.7 → meerschaum-2.2.0/meerschaum.egg-info}/PKG-INFO +59 -62
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum.egg-info/SOURCES.txt +2 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum.egg-info/requires.txt +60 -63
- {meerschaum-2.1.7 → meerschaum-2.2.0}/setup.py +10 -8
- {meerschaum-2.1.7 → meerschaum-2.2.0}/tests/test_sync.py +11 -2
- meerschaum-2.1.7/meerschaum/api/resources/static/js/xterm.js +0 -2
- meerschaum-2.1.7/meerschaum/core/User/_User.py +0 -82
- meerschaum-2.1.7/meerschaum/utils/schedule.py +0 -65
- {meerschaum-2.1.7 → meerschaum-2.2.0}/LICENSE +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/NOTICE +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/README.md +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/arguments/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/arguments/_parse_arguments.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/docs/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/docs/index.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/gui/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/gui/app/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/gui/app/_windows.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/gui/app/actions.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/gui/app/pipes.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/shell/Shell.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/shell/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/shell/resources/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/term/TermPageHandler.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/term/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/_internal/term/tools.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/api.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/bootstrap.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/clear.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/copy.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/deduplicate.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/delete.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/drop.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/edit.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/login.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/os.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/pause.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/python.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/register.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/reload.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/setup.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/sh.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/sql.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/stack.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/start.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/stop.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/tag.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/uninstall.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/upgrade.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/actions/verify.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/_chain.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/_events.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/_websockets.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/actions.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/assets/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/assets/ansi_up.js +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/assets/favicon.ico +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/callbacks/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/callbacks/login.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/callbacks/plugins.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/callbacks/register.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/components.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/connectors.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/graphs.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/pages/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/pages/error.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/pages/login.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/pages/plugins.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/pages/register.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/sync.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/users.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/websockets.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/dash/webterm.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/models/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/models/_interfaces.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/models/_locations.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/models/_metrics.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/models/_pipes.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/css/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/css/dash.css +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/css/styles.css +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/css/xterm.css +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/ico/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/ico/logo.ico +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/js/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/js/action_button.js +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/js/main.js +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/js/terminado.js +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/static/png/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/templates/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/templates/index.html +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/templates/old_index.html +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/resources/templates/secret.html +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/_actions.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/_connectors.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/_index.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/_misc.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/_pipes.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/_users.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/_version.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/routes/_webterm.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/api/tables/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_edit.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_environment.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_formatting.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_patch.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_preprocess.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_read_config.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/_shell.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/resources/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/config/stack/resources/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/Connector.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/APIConnector.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/_actions.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/_fetch.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/_login.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/_misc.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/_pipes.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/_request.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/_uri.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/api/_users.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/parse.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/plugin/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/poll.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/_cli.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/_fetch.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/_uri.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/_users.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/tables/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/tables/types.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/connectors/sql/tools.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_attributes.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_bootstrap.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_clear.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_data.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_deduplicate.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_delete.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_drop.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_dtypes.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_edit.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_fetch.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_register.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_show.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_sync.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Pipe/_verify.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/Plugin/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/core/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/_get_pipes.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/daemon/_names.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/dataframe.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/debug.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/dtypes/sql.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/formatting/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/formatting/_jobs.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/formatting/_pipes.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/formatting/_pprint.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/formatting/_shell.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/interactive.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/misc.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/networking.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/packages/lazy_loader.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/pool.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/prompt.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/sql.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/venv/_Venv.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/venv/__init__.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/warnings.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum/utils/yaml.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum.egg-info/dependency_links.txt +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum.egg-info/entry_points.txt +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum.egg-info/top_level.txt +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/meerschaum.egg-info/zip-safe +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/setup.cfg +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/tests/test_deduplicate.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/tests/test_pipes_dtypes.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/tests/test_sql.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/tests/test_users.py +0 -0
- {meerschaum-2.1.7 → meerschaum-2.2.0}/tests/test_verify.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: meerschaum
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.2.0
|
4
4
|
Summary: Sync Time-Series Pipes with Meerschaum
|
5
5
|
Home-page: https://meerschaum.io
|
6
6
|
Author: Bennett Meares
|
@@ -42,40 +42,40 @@ Requires-Dist: colorama>=0.4.3; extra == "formatting"
|
|
42
42
|
Requires-Dist: rich>=13.4.2; extra == "formatting"
|
43
43
|
Requires-Dist: more-termcolor>=1.1.3; extra == "formatting"
|
44
44
|
Requires-Dist: humanfriendly>=10.0.0; extra == "formatting"
|
45
|
-
Provides-Extra:
|
46
|
-
Requires-Dist: wheel>=0.34.2; extra == "
|
47
|
-
Requires-Dist: setuptools>=63.3.0; extra == "
|
48
|
-
Requires-Dist: PyYAML>=5.3.1; extra == "
|
49
|
-
Requires-Dist: pip>=22.0.4; extra == "
|
50
|
-
Requires-Dist: update-checker>=0.18.0; extra == "
|
51
|
-
Requires-Dist: semver>=3.0.0; extra == "
|
52
|
-
Requires-Dist: pathspec>=0.9.0; extra == "
|
53
|
-
Requires-Dist: python-dateutil>=2.7.5; extra == "
|
54
|
-
Requires-Dist: requests>=2.23.0; extra == "
|
55
|
-
Requires-Dist: binaryornot>=0.4.4; extra == "
|
56
|
-
Requires-Dist: pyvim>=3.0.2; extra == "
|
57
|
-
Requires-Dist: aiofiles>=0.6.0; extra == "
|
58
|
-
Requires-Dist: packaging>=21.3.0; extra == "
|
59
|
-
Requires-Dist: prompt-toolkit>=3.0.39; extra == "
|
60
|
-
Requires-Dist: more-itertools>=8.7.0; extra == "
|
61
|
-
Requires-Dist: python-daemon>=0.2.3; extra == "
|
62
|
-
Requires-Dist: fasteners>=0.18.0; extra == "
|
63
|
-
Requires-Dist: psutil>=5.8.0; extra == "
|
64
|
-
Requires-Dist:
|
65
|
-
Requires-Dist: dill>=0.3.3; extra == "
|
66
|
-
Requires-Dist: virtualenv>=20.1.0; extra == "
|
67
|
-
Requires-Dist:
|
45
|
+
Provides-Extra: core
|
46
|
+
Requires-Dist: wheel>=0.34.2; extra == "core"
|
47
|
+
Requires-Dist: setuptools>=63.3.0; extra == "core"
|
48
|
+
Requires-Dist: PyYAML>=5.3.1; extra == "core"
|
49
|
+
Requires-Dist: pip>=22.0.4; extra == "core"
|
50
|
+
Requires-Dist: update-checker>=0.18.0; extra == "core"
|
51
|
+
Requires-Dist: semver>=3.0.0; extra == "core"
|
52
|
+
Requires-Dist: pathspec>=0.9.0; extra == "core"
|
53
|
+
Requires-Dist: python-dateutil>=2.7.5; extra == "core"
|
54
|
+
Requires-Dist: requests>=2.23.0; extra == "core"
|
55
|
+
Requires-Dist: binaryornot>=0.4.4; extra == "core"
|
56
|
+
Requires-Dist: pyvim>=3.0.2; extra == "core"
|
57
|
+
Requires-Dist: aiofiles>=0.6.0; extra == "core"
|
58
|
+
Requires-Dist: packaging>=21.3.0; extra == "core"
|
59
|
+
Requires-Dist: prompt-toolkit>=3.0.39; extra == "core"
|
60
|
+
Requires-Dist: more-itertools>=8.7.0; extra == "core"
|
61
|
+
Requires-Dist: python-daemon>=0.2.3; extra == "core"
|
62
|
+
Requires-Dist: fasteners>=0.18.0; extra == "core"
|
63
|
+
Requires-Dist: psutil>=5.8.0; extra == "core"
|
64
|
+
Requires-Dist: watchfiles>=0.21.0; extra == "core"
|
65
|
+
Requires-Dist: dill>=0.3.3; extra == "core"
|
66
|
+
Requires-Dist: virtualenv>=20.1.0; extra == "core"
|
67
|
+
Requires-Dist: APScheduler>=4.0.0a5; extra == "core"
|
68
68
|
Provides-Extra: drivers
|
69
69
|
Requires-Dist: cryptography>=38.0.1; extra == "drivers"
|
70
|
-
Requires-Dist:
|
70
|
+
Requires-Dist: psycopg[binary]>=3.1.18; extra == "drivers"
|
71
71
|
Requires-Dist: PyMySQL>=0.9.0; extra == "drivers"
|
72
72
|
Requires-Dist: aiomysql>=0.0.21; extra == "drivers"
|
73
73
|
Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "drivers"
|
74
|
-
Requires-Dist: duckdb
|
74
|
+
Requires-Dist: duckdb<0.10.3; extra == "drivers"
|
75
75
|
Requires-Dist: duckdb-engine>=0.9.2; extra == "drivers"
|
76
|
-
Provides-Extra: drivers
|
77
|
-
Requires-Dist: pyodbc>=4.0.30; extra == "drivers"
|
78
|
-
Requires-Dist: cx_Oracle>=8.3.0; extra == "drivers"
|
76
|
+
Provides-Extra: drivers-extras
|
77
|
+
Requires-Dist: pyodbc>=4.0.30; extra == "drivers-extras"
|
78
|
+
Requires-Dist: cx_Oracle>=8.3.0; extra == "drivers-extras"
|
79
79
|
Provides-Extra: cli
|
80
80
|
Requires-Dist: pgcli>=3.1.0; extra == "cli"
|
81
81
|
Requires-Dist: mycli>=1.23.2; extra == "cli"
|
@@ -83,10 +83,10 @@ Requires-Dist: litecli>=1.5.0; extra == "cli"
|
|
83
83
|
Requires-Dist: mssql-cli>=1.0.0; extra == "cli"
|
84
84
|
Requires-Dist: gadwall>=0.2.0; extra == "cli"
|
85
85
|
Provides-Extra: stack
|
86
|
-
Requires-Dist: docker-compose>=1.
|
86
|
+
Requires-Dist: docker-compose>=1.29.2; extra == "stack"
|
87
87
|
Provides-Extra: build
|
88
|
-
Requires-Dist: cx_Freeze>=
|
89
|
-
Requires-Dist: pyinstaller
|
88
|
+
Requires-Dist: cx_Freeze>=7.0.0; extra == "build"
|
89
|
+
Requires-Dist: pyinstaller>6.6.0; extra == "build"
|
90
90
|
Provides-Extra: dev-tools
|
91
91
|
Requires-Dist: twine>=3.2.0; extra == "dev-tools"
|
92
92
|
Requires-Dist: tuna>=0.5.3; extra == "dev-tools"
|
@@ -95,6 +95,7 @@ Requires-Dist: mypy>=0.812.0; extra == "dev-tools"
|
|
95
95
|
Requires-Dist: pytest>=6.2.2; extra == "dev-tools"
|
96
96
|
Requires-Dist: pytest-xdist>=3.2.1; extra == "dev-tools"
|
97
97
|
Requires-Dist: heartrate>=0.2.1; extra == "dev-tools"
|
98
|
+
Requires-Dist: build>=1.2.1; extra == "dev-tools"
|
98
99
|
Provides-Extra: setup
|
99
100
|
Provides-Extra: docs
|
100
101
|
Requires-Dist: mkdocs>=1.1.2; extra == "docs"
|
@@ -119,8 +120,8 @@ Requires-Dist: importlib-metadata>=4.12.0; extra == "extras"
|
|
119
120
|
Provides-Extra: sql
|
120
121
|
Requires-Dist: numpy>=1.18.5; extra == "sql"
|
121
122
|
Requires-Dist: pandas[parquet]>=2.0.1; extra == "sql"
|
122
|
-
Requires-Dist: pyarrow>=
|
123
|
-
Requires-Dist: dask>=
|
123
|
+
Requires-Dist: pyarrow>=16.1.0; extra == "sql"
|
124
|
+
Requires-Dist: dask[dataframe]>=2024.5.1; extra == "sql"
|
124
125
|
Requires-Dist: pytz; extra == "sql"
|
125
126
|
Requires-Dist: joblib>=0.17.0; extra == "sql"
|
126
127
|
Requires-Dist: SQLAlchemy>=2.0.5; extra == "sql"
|
@@ -128,11 +129,11 @@ Requires-Dist: databases>=0.4.0; extra == "sql"
|
|
128
129
|
Requires-Dist: aiosqlite>=0.16.0; extra == "sql"
|
129
130
|
Requires-Dist: asyncpg>=0.21.0; extra == "sql"
|
130
131
|
Requires-Dist: cryptography>=38.0.1; extra == "sql"
|
131
|
-
Requires-Dist:
|
132
|
+
Requires-Dist: psycopg[binary]>=3.1.18; extra == "sql"
|
132
133
|
Requires-Dist: PyMySQL>=0.9.0; extra == "sql"
|
133
134
|
Requires-Dist: aiomysql>=0.0.21; extra == "sql"
|
134
135
|
Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "sql"
|
135
|
-
Requires-Dist: duckdb
|
136
|
+
Requires-Dist: duckdb<0.10.3; extra == "sql"
|
136
137
|
Requires-Dist: duckdb-engine>=0.9.2; extra == "sql"
|
137
138
|
Requires-Dist: wheel>=0.34.2; extra == "sql"
|
138
139
|
Requires-Dist: setuptools>=63.3.0; extra == "sql"
|
@@ -152,10 +153,10 @@ Requires-Dist: more-itertools>=8.7.0; extra == "sql"
|
|
152
153
|
Requires-Dist: python-daemon>=0.2.3; extra == "sql"
|
153
154
|
Requires-Dist: fasteners>=0.18.0; extra == "sql"
|
154
155
|
Requires-Dist: psutil>=5.8.0; extra == "sql"
|
155
|
-
Requires-Dist:
|
156
|
+
Requires-Dist: watchfiles>=0.21.0; extra == "sql"
|
156
157
|
Requires-Dist: dill>=0.3.3; extra == "sql"
|
157
158
|
Requires-Dist: virtualenv>=20.1.0; extra == "sql"
|
158
|
-
Requires-Dist:
|
159
|
+
Requires-Dist: APScheduler>=4.0.0a5; extra == "sql"
|
159
160
|
Provides-Extra: dash
|
160
161
|
Requires-Dist: Flask-Compress>=1.10.1; extra == "dash"
|
161
162
|
Requires-Dist: dash>=2.6.2; extra == "dash"
|
@@ -166,20 +167,18 @@ Requires-Dist: dash-daq>=0.5.0; extra == "dash"
|
|
166
167
|
Requires-Dist: terminado>=0.12.1; extra == "dash"
|
167
168
|
Requires-Dist: tornado>=6.1.0; extra == "dash"
|
168
169
|
Provides-Extra: api
|
169
|
-
Requires-Dist: uvicorn[standard]>=0.
|
170
|
-
Requires-Dist: gunicorn>=
|
170
|
+
Requires-Dist: uvicorn[standard]>=0.29.0; extra == "api"
|
171
|
+
Requires-Dist: gunicorn>=22.0.0; extra == "api"
|
171
172
|
Requires-Dist: python-dotenv>=0.20.0; extra == "api"
|
172
173
|
Requires-Dist: websockets>=11.0.3; extra == "api"
|
173
|
-
Requires-Dist: fastapi>=0.
|
174
|
-
Requires-Dist: passlib>=1.7.4; extra == "api"
|
174
|
+
Requires-Dist: fastapi>=0.111.0; extra == "api"
|
175
175
|
Requires-Dist: fastapi-login>=1.7.2; extra == "api"
|
176
|
-
Requires-Dist: python-multipart>=0.0.
|
177
|
-
Requires-Dist: pydantic<2.0.0; extra == "api"
|
176
|
+
Requires-Dist: python-multipart>=0.0.9; extra == "api"
|
178
177
|
Requires-Dist: httpx>=0.24.1; extra == "api"
|
179
178
|
Requires-Dist: numpy>=1.18.5; extra == "api"
|
180
179
|
Requires-Dist: pandas[parquet]>=2.0.1; extra == "api"
|
181
|
-
Requires-Dist: pyarrow>=
|
182
|
-
Requires-Dist: dask>=
|
180
|
+
Requires-Dist: pyarrow>=16.1.0; extra == "api"
|
181
|
+
Requires-Dist: dask[dataframe]>=2024.5.1; extra == "api"
|
183
182
|
Requires-Dist: pytz; extra == "api"
|
184
183
|
Requires-Dist: joblib>=0.17.0; extra == "api"
|
185
184
|
Requires-Dist: SQLAlchemy>=2.0.5; extra == "api"
|
@@ -187,11 +186,11 @@ Requires-Dist: databases>=0.4.0; extra == "api"
|
|
187
186
|
Requires-Dist: aiosqlite>=0.16.0; extra == "api"
|
188
187
|
Requires-Dist: asyncpg>=0.21.0; extra == "api"
|
189
188
|
Requires-Dist: cryptography>=38.0.1; extra == "api"
|
190
|
-
Requires-Dist:
|
189
|
+
Requires-Dist: psycopg[binary]>=3.1.18; extra == "api"
|
191
190
|
Requires-Dist: PyMySQL>=0.9.0; extra == "api"
|
192
191
|
Requires-Dist: aiomysql>=0.0.21; extra == "api"
|
193
192
|
Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "api"
|
194
|
-
Requires-Dist: duckdb
|
193
|
+
Requires-Dist: duckdb<0.10.3; extra == "api"
|
195
194
|
Requires-Dist: duckdb-engine>=0.9.2; extra == "api"
|
196
195
|
Requires-Dist: wheel>=0.34.2; extra == "api"
|
197
196
|
Requires-Dist: setuptools>=63.3.0; extra == "api"
|
@@ -211,10 +210,10 @@ Requires-Dist: more-itertools>=8.7.0; extra == "api"
|
|
211
210
|
Requires-Dist: python-daemon>=0.2.3; extra == "api"
|
212
211
|
Requires-Dist: fasteners>=0.18.0; extra == "api"
|
213
212
|
Requires-Dist: psutil>=5.8.0; extra == "api"
|
214
|
-
Requires-Dist:
|
213
|
+
Requires-Dist: watchfiles>=0.21.0; extra == "api"
|
215
214
|
Requires-Dist: dill>=0.3.3; extra == "api"
|
216
215
|
Requires-Dist: virtualenv>=20.1.0; extra == "api"
|
217
|
-
Requires-Dist:
|
216
|
+
Requires-Dist: APScheduler>=4.0.0a5; extra == "api"
|
218
217
|
Requires-Dist: pprintpp>=0.4.0; extra == "api"
|
219
218
|
Requires-Dist: asciitree>=0.3.3; extra == "api"
|
220
219
|
Requires-Dist: typing-extensions>=4.7.1; extra == "api"
|
@@ -258,24 +257,24 @@ Requires-Dist: more-itertools>=8.7.0; extra == "full"
|
|
258
257
|
Requires-Dist: python-daemon>=0.2.3; extra == "full"
|
259
258
|
Requires-Dist: fasteners>=0.18.0; extra == "full"
|
260
259
|
Requires-Dist: psutil>=5.8.0; extra == "full"
|
261
|
-
Requires-Dist:
|
260
|
+
Requires-Dist: watchfiles>=0.21.0; extra == "full"
|
262
261
|
Requires-Dist: dill>=0.3.3; extra == "full"
|
263
262
|
Requires-Dist: virtualenv>=20.1.0; extra == "full"
|
264
|
-
Requires-Dist:
|
263
|
+
Requires-Dist: APScheduler>=4.0.0a5; extra == "full"
|
265
264
|
Requires-Dist: cryptography>=38.0.1; extra == "full"
|
266
|
-
Requires-Dist:
|
265
|
+
Requires-Dist: psycopg[binary]>=3.1.18; extra == "full"
|
267
266
|
Requires-Dist: PyMySQL>=0.9.0; extra == "full"
|
268
267
|
Requires-Dist: aiomysql>=0.0.21; extra == "full"
|
269
268
|
Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "full"
|
270
|
-
Requires-Dist: duckdb
|
269
|
+
Requires-Dist: duckdb<0.10.3; extra == "full"
|
271
270
|
Requires-Dist: duckdb-engine>=0.9.2; extra == "full"
|
272
271
|
Requires-Dist: toga>=0.3.0-dev29; extra == "full"
|
273
272
|
Requires-Dist: pywebview>=3.6.3; extra == "full"
|
274
273
|
Requires-Dist: pycparser>=2.21.0; extra == "full"
|
275
274
|
Requires-Dist: numpy>=1.18.5; extra == "full"
|
276
275
|
Requires-Dist: pandas[parquet]>=2.0.1; extra == "full"
|
277
|
-
Requires-Dist: pyarrow>=
|
278
|
-
Requires-Dist: dask>=
|
276
|
+
Requires-Dist: pyarrow>=16.1.0; extra == "full"
|
277
|
+
Requires-Dist: dask[dataframe]>=2024.5.1; extra == "full"
|
279
278
|
Requires-Dist: pytz; extra == "full"
|
280
279
|
Requires-Dist: joblib>=0.17.0; extra == "full"
|
281
280
|
Requires-Dist: SQLAlchemy>=2.0.5; extra == "full"
|
@@ -290,15 +289,13 @@ Requires-Dist: dash-extensions>=1.0.4; extra == "full"
|
|
290
289
|
Requires-Dist: dash-daq>=0.5.0; extra == "full"
|
291
290
|
Requires-Dist: terminado>=0.12.1; extra == "full"
|
292
291
|
Requires-Dist: tornado>=6.1.0; extra == "full"
|
293
|
-
Requires-Dist: uvicorn[standard]>=0.
|
294
|
-
Requires-Dist: gunicorn>=
|
292
|
+
Requires-Dist: uvicorn[standard]>=0.29.0; extra == "full"
|
293
|
+
Requires-Dist: gunicorn>=22.0.0; extra == "full"
|
295
294
|
Requires-Dist: python-dotenv>=0.20.0; extra == "full"
|
296
295
|
Requires-Dist: websockets>=11.0.3; extra == "full"
|
297
|
-
Requires-Dist: fastapi>=0.
|
298
|
-
Requires-Dist: passlib>=1.7.4; extra == "full"
|
296
|
+
Requires-Dist: fastapi>=0.111.0; extra == "full"
|
299
297
|
Requires-Dist: fastapi-login>=1.7.2; extra == "full"
|
300
|
-
Requires-Dist: python-multipart>=0.0.
|
301
|
-
Requires-Dist: pydantic<2.0.0; extra == "full"
|
298
|
+
Requires-Dist: python-multipart>=0.0.9; extra == "full"
|
302
299
|
Requires-Dist: httpx>=0.24.1; extra == "full"
|
303
300
|
|
304
301
|
<img src="https://meerschaum.io/assets/banner_1920x320.png" alt="Meerschaum banner" style="width: 100%"/>
|
@@ -346,6 +346,9 @@ groups['misc'].add_argument(
|
|
346
346
|
groups['misc'].add_argument(
|
347
347
|
'--nopretty', action="store_true", help="Print elements without 'pretty' formatting"
|
348
348
|
)
|
349
|
+
groups['misc'].add_argument(
|
350
|
+
'--skip-deps', action="store_true", help="Skip dependencies when installing plugins.",
|
351
|
+
)
|
349
352
|
groups['misc'].add_argument(
|
350
353
|
'-P', '--params', type=string_to_dict, help=(
|
351
354
|
"Parameters dictionary in JSON format or simple format. " +
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#! /usr/bin/env python
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
# vim:fenc=utf-8
|
4
|
+
# type: ignore
|
4
5
|
|
5
6
|
"""
|
6
7
|
The entry point for launching Meerschaum actions.
|
@@ -48,7 +49,7 @@ def entry(sysargs: Optional[List[str]] = None) -> SuccessTuple:
|
|
48
49
|
|
49
50
|
if args.get('schedule', None):
|
50
51
|
from meerschaum.utils.schedule import schedule_function
|
51
|
-
return schedule_function(entry_with_args,
|
52
|
+
return schedule_function(entry_with_args, **args)
|
52
53
|
return entry_with_args(**args)
|
53
54
|
|
54
55
|
|
@@ -61,7 +62,7 @@ def entry_with_args(
|
|
61
62
|
"""
|
62
63
|
import sys
|
63
64
|
from meerschaum.plugins import Plugin
|
64
|
-
from meerschaum.actions import
|
65
|
+
from meerschaum.actions import get_action, get_main_action_name
|
65
66
|
from meerschaum._internal.arguments import remove_leading_action
|
66
67
|
from meerschaum.utils.venv import Venv, active_venvs, deactivate_venv
|
67
68
|
if kw.get('trace', None):
|
@@ -54,6 +54,7 @@ def _complete_install(
|
|
54
54
|
def _install_plugins(
|
55
55
|
action: Optional[List[str]] = None,
|
56
56
|
repository: Optional[str] = None,
|
57
|
+
skip_deps: bool = False,
|
57
58
|
force: bool = False,
|
58
59
|
debug: bool = False,
|
59
60
|
**kw: Any
|
@@ -87,11 +88,14 @@ def _install_plugins(
|
|
87
88
|
|
88
89
|
repo_connector = parse_repo_keys(repository)
|
89
90
|
|
90
|
-
successes = {}
|
91
91
|
for name in action:
|
92
92
|
info(f"Installing plugin '{name}' from Meerschaum repository '{repo_connector}'...")
|
93
|
-
success, msg = repo_connector.install_plugin(
|
94
|
-
|
93
|
+
success, msg = repo_connector.install_plugin(
|
94
|
+
name,
|
95
|
+
force = force,
|
96
|
+
skip_deps = skip_deps,
|
97
|
+
debug = debug,
|
98
|
+
)
|
95
99
|
print_tuple((success, msg))
|
96
100
|
|
97
101
|
reload_plugins(debug=debug)
|
@@ -41,6 +41,7 @@ def show(
|
|
41
41
|
'jobs' : _show_jobs,
|
42
42
|
'logs' : _show_logs,
|
43
43
|
'tags' : _show_tags,
|
44
|
+
'schedules' : _show_schedules,
|
44
45
|
}
|
45
46
|
return choose_subaction(action, show_options, **kw)
|
46
47
|
|
@@ -577,6 +578,7 @@ def _show_logs(
|
|
577
578
|
`show logs myjob myotherjob`
|
578
579
|
"""
|
579
580
|
import os, pathlib, random, asyncio
|
581
|
+
from datetime import datetime, timezone
|
580
582
|
from meerschaum.utils.packages import attempt_import, import_rich
|
581
583
|
from meerschaum.utils.daemon import get_filtered_daemons, Daemon
|
582
584
|
from meerschaum.utils.warnings import warn, info
|
@@ -587,72 +589,106 @@ def _show_logs(
|
|
587
589
|
if not ANSI:
|
588
590
|
info = print
|
589
591
|
colors = get_config('jobs', 'logs', 'colors')
|
592
|
+
timestamp_format = get_config('jobs', 'logs', 'timestamps', 'format')
|
593
|
+
follow_timestamp_format = get_config('jobs', 'logs', 'timestamps', 'follow_format')
|
590
594
|
daemons = get_filtered_daemons(action)
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
+
now = datetime.now(timezone.utc)
|
596
|
+
now_str = now.strftime(timestamp_format)
|
597
|
+
now_follow_str = now.strftime(follow_timestamp_format)
|
598
|
+
|
599
|
+
def build_buffer_spaces(daemons) -> Dict[str, str]:
|
600
|
+
max_len_id = max(len(d.daemon_id) for d in daemons) if daemons else 0
|
601
|
+
buffer_len = max(
|
602
|
+
get_config('jobs', 'logs', 'min_buffer_len'),
|
603
|
+
max_len_id
|
604
|
+
)
|
595
605
|
return {
|
596
|
-
d.daemon_id: ''.join([' ' for i in range(
|
606
|
+
d.daemon_id: ''.join([' ' for i in range(buffer_len - len(d.daemon_id))])
|
597
607
|
for d in daemons
|
598
608
|
}
|
599
609
|
|
600
|
-
def
|
610
|
+
def build_job_colors(daemons, _old_job_colors = None) -> Dict[str, str]:
|
601
611
|
return {d.daemon_id: colors[i % len(colors)] for i, d in enumerate(daemons)}
|
602
612
|
|
603
|
-
|
604
|
-
|
613
|
+
buffer_spaces = build_buffer_spaces(daemons)
|
614
|
+
job_colors = build_job_colors(daemons)
|
605
615
|
|
606
|
-
def
|
607
|
-
nonlocal
|
608
|
-
if daemon_id not in
|
616
|
+
def get_buffer_spaces(daemon_id):
|
617
|
+
nonlocal buffer_spaces, daemons
|
618
|
+
if daemon_id not in buffer_spaces:
|
609
619
|
d = Daemon(daemon_id=daemon_id)
|
610
620
|
if d not in daemons:
|
611
621
|
daemons = get_filtered_daemons(action)
|
612
|
-
|
613
|
-
return
|
622
|
+
buffer_spaces = build_buffer_spaces(daemons)
|
623
|
+
return buffer_spaces[daemon_id] or ' '
|
614
624
|
|
615
|
-
def
|
616
|
-
nonlocal
|
617
|
-
if daemon_id not in
|
625
|
+
def get_job_colors(daemon_id):
|
626
|
+
nonlocal job_colors, daemons
|
627
|
+
if daemon_id not in job_colors:
|
618
628
|
d = Daemon(daemon_id=daemon_id)
|
619
629
|
if d not in daemons:
|
620
630
|
daemons = get_filtered_daemons(action)
|
621
|
-
|
622
|
-
return
|
631
|
+
job_colors = build_job_colors(daemons)
|
632
|
+
return job_colors[daemon_id]
|
623
633
|
|
624
|
-
def
|
625
|
-
|
634
|
+
def follow_pretty_print():
|
635
|
+
watchfiles = attempt_import('watchfiles')
|
626
636
|
rich = import_rich()
|
627
637
|
rich_text = attempt_import('rich.text')
|
628
|
-
|
638
|
+
watch_daemon_ids = {d.daemon_id: d for d in daemons}
|
629
639
|
info("Watching log files...")
|
630
640
|
|
631
|
-
|
641
|
+
previous_line_timestamp = None
|
642
|
+
def print_job_line(daemon, line):
|
643
|
+
nonlocal previous_line_timestamp
|
644
|
+
date_prefix_str = line[:len(now_str)]
|
645
|
+
try:
|
646
|
+
line_timestamp = datetime.strptime(date_prefix_str, timestamp_format)
|
647
|
+
previous_line_timestamp = line_timestamp
|
648
|
+
except Exception as e:
|
649
|
+
line_timestamp = None
|
650
|
+
if line_timestamp:
|
651
|
+
line = line[(len(now_str) + 3):]
|
652
|
+
else:
|
653
|
+
line_timestamp = previous_line_timestamp
|
654
|
+
|
655
|
+
if len(line) == 0 or line == '\n':
|
656
|
+
return
|
657
|
+
|
632
658
|
text = rich_text.Text(daemon.daemon_id)
|
633
|
-
|
634
|
-
|
635
|
-
+ (
|
659
|
+
line_prefix = (
|
660
|
+
get_buffer_spaces(daemon.daemon_id)
|
661
|
+
+ (line_timestamp.strftime(follow_timestamp_format) if line_timestamp else '')
|
662
|
+
+ ' | '
|
636
663
|
)
|
664
|
+
text.append(line_prefix + (line[:-1] if line[-1] == '\n' else line))
|
637
665
|
if ANSI:
|
638
666
|
text.stylize(
|
639
|
-
|
667
|
+
get_job_colors(daemon.daemon_id),
|
640
668
|
0,
|
641
|
-
len(daemon.daemon_id) + len(
|
669
|
+
len(daemon.daemon_id) + len(line_prefix)
|
642
670
|
)
|
643
671
|
get_console().print(text)
|
644
672
|
|
645
673
|
|
646
|
-
def
|
674
|
+
def print_log_lines(daemon):
|
647
675
|
for line in daemon.readlines():
|
648
|
-
|
676
|
+
print_job_line(daemon, line)
|
649
677
|
|
650
|
-
def
|
678
|
+
def seek_back_offset(d) -> bool:
|
651
679
|
if d.log_offset_path.exists():
|
652
680
|
d.log_offset_path.unlink()
|
653
681
|
|
654
682
|
latest_subfile_path = d.rotating_log.get_latest_subfile_path()
|
655
683
|
latest_subfile_index = d.rotating_log.get_latest_subfile_index()
|
684
|
+
|
685
|
+
### Sometimes the latest file is empty.
|
686
|
+
if os.stat(latest_subfile_path).st_size == 0 and latest_subfile_index > 0:
|
687
|
+
latest_subfile_index -= 1
|
688
|
+
latest_subfile_path = d.rotating_log.get_subfile_path_from_index(
|
689
|
+
latest_subfile_index
|
690
|
+
)
|
691
|
+
|
656
692
|
with open(latest_subfile_path, 'r', encoding='utf-8') as f:
|
657
693
|
latest_lines = f.readlines()
|
658
694
|
|
@@ -672,12 +708,12 @@ def _show_logs(
|
|
672
708
|
for d in daemons
|
673
709
|
}
|
674
710
|
for d in daemons:
|
675
|
-
|
676
|
-
|
711
|
+
seek_back_offset(d)
|
712
|
+
print_log_lines(d)
|
677
713
|
|
678
714
|
_quit = False
|
679
|
-
|
680
|
-
|
715
|
+
def watch_logs():
|
716
|
+
for changes in watchfiles.watch(LOGS_RESOURCES_PATH):
|
681
717
|
if _quit:
|
682
718
|
return
|
683
719
|
for change in changes:
|
@@ -688,7 +724,7 @@ def _show_logs(
|
|
688
724
|
if not file_path.exists():
|
689
725
|
continue
|
690
726
|
daemon_id = file_path.name.split('.log')[0]
|
691
|
-
if daemon_id not in
|
727
|
+
if daemon_id not in watch_daemon_ids and action:
|
692
728
|
continue
|
693
729
|
try:
|
694
730
|
daemon = Daemon(daemon_id=daemon_id)
|
@@ -697,22 +733,21 @@ def _show_logs(
|
|
697
733
|
warn(f"Seeing new logs for non-existent job '{daemon_id}'.", stack=False)
|
698
734
|
|
699
735
|
if daemon is not None:
|
700
|
-
|
736
|
+
print_log_lines(daemon)
|
701
737
|
|
702
|
-
loop = asyncio.new_event_loop()
|
703
738
|
try:
|
704
|
-
|
705
|
-
except KeyboardInterrupt:
|
739
|
+
watch_logs()
|
740
|
+
except KeyboardInterrupt as ki:
|
706
741
|
_quit = True
|
707
742
|
|
708
|
-
def
|
743
|
+
def print_nopretty_log_text():
|
709
744
|
for d in daemons:
|
710
745
|
log_text = d.log_text
|
711
746
|
print(d.daemon_id)
|
712
747
|
print(log_text)
|
713
748
|
|
714
|
-
|
715
|
-
|
749
|
+
print_log_text = follow_pretty_print if not nopretty else print_nopretty_log_text
|
750
|
+
print_log_text()
|
716
751
|
|
717
752
|
return True, "Success"
|
718
753
|
|
@@ -817,6 +852,57 @@ def _show_tags(
|
|
817
852
|
return True, "Success"
|
818
853
|
|
819
854
|
|
855
|
+
def _show_schedules(
|
856
|
+
action: Optional[List[str]] = None,
|
857
|
+
nopretty: bool = False,
|
858
|
+
**kwargs: Any
|
859
|
+
) -> SuccessTuple:
|
860
|
+
"""
|
861
|
+
Print the upcoming timestamps according to the given schedule.
|
862
|
+
|
863
|
+
Examples:
|
864
|
+
show schedule 'daily starting 00:00'
|
865
|
+
show schedule 'every 12 hours and mon-fri starting 2024-01-01'
|
866
|
+
"""
|
867
|
+
from meerschaum.utils.schedule import parse_schedule
|
868
|
+
from meerschaum.utils.misc import is_int
|
869
|
+
from meerschaum.utils.formatting import print_options
|
870
|
+
if not action:
|
871
|
+
return False, "Provide a schedule to be parsed."
|
872
|
+
schedule = action[0]
|
873
|
+
default_num_timestamps = 5
|
874
|
+
num_timestamps_str = action[1] if len(action) >= 2 else str(default_num_timestamps)
|
875
|
+
num_timestamps = (
|
876
|
+
int(num_timestamps_str)
|
877
|
+
if is_int(num_timestamps_str)
|
878
|
+
else default_num_timestamps
|
879
|
+
)
|
880
|
+
try:
|
881
|
+
trigger = parse_schedule(schedule)
|
882
|
+
except ValueError as e:
|
883
|
+
return False, str(e)
|
884
|
+
|
885
|
+
next_datetimes = []
|
886
|
+
for _ in range(num_timestamps):
|
887
|
+
try:
|
888
|
+
next_dt = trigger.next()
|
889
|
+
next_datetimes.append(next_dt)
|
890
|
+
except Exception as e:
|
891
|
+
break
|
892
|
+
|
893
|
+
print_options(
|
894
|
+
next_datetimes,
|
895
|
+
num_cols = 1,
|
896
|
+
nopretty = nopretty,
|
897
|
+
header = (
|
898
|
+
f"Next {min(num_timestamps, len(next_datetimes))} timestamps "
|
899
|
+
+ f"for schedule '{schedule}':"
|
900
|
+
),
|
901
|
+
)
|
902
|
+
|
903
|
+
return True, "Success"
|
904
|
+
|
905
|
+
|
820
906
|
|
821
907
|
### NOTE: This must be the final statement of the module.
|
822
908
|
### Any subactions added below these lines will not
|
@@ -453,16 +453,20 @@ def _wrap_pipe(
|
|
453
453
|
return False, msg
|
454
454
|
return True, "Success"
|
455
455
|
|
456
|
-
|
456
|
+
pre_hook_results, post_hook_results = [], []
|
457
457
|
def apply_hooks(is_pre_sync: bool):
|
458
458
|
_sync_hooks = (_pre_sync_hooks if is_pre_sync else _post_sync_hooks)
|
459
|
+
_hook_results = (pre_hook_results if is_pre_sync else post_hook_results)
|
459
460
|
for module_name, sync_hooks in _sync_hooks.items():
|
460
461
|
plugin_name = module_name.split('.')[-1] if module_name.startswith('plugins.') else None
|
461
462
|
for sync_hook in sync_hooks:
|
462
463
|
hook_result = pool.apply_async(call_sync_hook, (plugin_name, sync_hook))
|
463
|
-
|
464
|
+
_hook_results.append(hook_result)
|
464
465
|
|
465
466
|
apply_hooks(True)
|
467
|
+
for hook_result in pre_hook_results:
|
468
|
+
hook_success, hook_msg = hook_result.get()
|
469
|
+
mrsm.pprint((hook_success, hook_msg))
|
466
470
|
|
467
471
|
try:
|
468
472
|
with Venv(get_connector_plugin(pipe.connector), debug=debug):
|
@@ -480,7 +484,7 @@ def _wrap_pipe(
|
|
480
484
|
'sync_complete_timestamp': datetime.now(timezone.utc),
|
481
485
|
})
|
482
486
|
apply_hooks(False)
|
483
|
-
for hook_result in
|
487
|
+
for hook_result in post_hook_results:
|
484
488
|
hook_success, hook_msg = hook_result.get()
|
485
489
|
mrsm.pprint((hook_success, hook_msg))
|
486
490
|
|