meerschaum 2.2.0rc3__tar.gz → 2.2.1__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.2.0rc3/meerschaum.egg-info → meerschaum-2.2.1}/PKG-INFO +35 -35
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/entry.py +36 -11
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/show.py +2 -2
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/__init__.py +8 -3
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/_oauth2.py +4 -4
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/callbacks/dashboard.py +3 -3
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/keys.py +1 -1
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/pages/dashboard.py +14 -4
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_jobs.py +5 -2
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_version.py +1 -1
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/__init__.py +8 -1
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/_cli.py +7 -1
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/_pipes.py +7 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/daemon/Daemon.py +4 -3
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/daemon/RotatingFile.py +8 -2
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/packages/_packages.py +6 -7
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/schedule.py +9 -2
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1/meerschaum.egg-info}/PKG-INFO +35 -35
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum.egg-info/requires.txt +36 -36
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/LICENSE +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/NOTICE +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/README.md +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/__main__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/arguments/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/arguments/_parse_arguments.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/arguments/_parser.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/docs/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/docs/index.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/gui/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/gui/app/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/gui/app/_windows.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/gui/app/actions.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/gui/app/pipes.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/shell/Shell.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/shell/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/shell/resources/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/term/TermPageHandler.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/term/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/_internal/term/tools.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/api.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/bootstrap.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/clear.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/copy.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/deduplicate.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/delete.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/drop.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/edit.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/install.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/login.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/os.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/pause.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/python.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/register.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/reload.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/setup.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/sh.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/sql.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/stack.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/start.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/stop.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/sync.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/tag.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/uninstall.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/upgrade.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/actions/verify.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/_chain.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/_events.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/_websockets.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/actions.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/assets/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/assets/ansi_up.js +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/assets/favicon.ico +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/callbacks/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/callbacks/jobs.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/callbacks/login.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/callbacks/plugins.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/callbacks/register.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/components.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/connectors.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/graphs.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/jobs.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/pages/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/pages/error.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/pages/login.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/pages/plugins.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/pages/register.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/pipes.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/plugins.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/sync.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/users.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/websockets.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/dash/webterm.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/models/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/models/_interfaces.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/models/_locations.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/models/_metrics.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/models/_pipes.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/css/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/css/dash.css +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/css/styles.css +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/css/xterm.css +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/ico/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/ico/logo.ico +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/js/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/js/action_button.js +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/js/main.js +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/js/terminado.js +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/js/xterm.js +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/static/png/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/templates/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/templates/index.html +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/templates/old_index.html +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/templates/secret.html +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/resources/templates/termpage.html +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/_actions.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/_connectors.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/_index.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/_login.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/_misc.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/_pipes.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/_plugins.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/_users.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/_version.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/routes/_webterm.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/api/tables/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_dash.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_default.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_edit.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_environment.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_formatting.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_patch.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_paths.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_preprocess.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_read_config.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_shell.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/_sync.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/resources/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/stack/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/stack/grafana/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/stack/resources/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/config/static/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/Connector.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/APIConnector.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/_actions.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/_fetch.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/_login.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/_misc.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/_pipes.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/_plugins.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/_request.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/_uri.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/api/_users.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/parse.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/plugin/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/poll.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/SQLConnector.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/_create_engine.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/_fetch.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/_instance.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/_plugins.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/_sql.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/_uri.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/_users.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/tables/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/tables/types.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/connectors/sql/tools.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_attributes.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_bootstrap.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_clear.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_data.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_deduplicate.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_delete.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_drop.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_dtypes.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_edit.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_fetch.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_register.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_show.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_sync.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Pipe/_verify.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/Plugin/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/User/_User.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/User/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/core/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/plugins/_Plugin.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/plugins/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/_get_pipes.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/daemon/FileDescriptorInterceptor.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/daemon/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/daemon/_names.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/dataframe.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/debug.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/dtypes/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/dtypes/sql.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/formatting/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/formatting/_jobs.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/formatting/_pipes.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/formatting/_pprint.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/formatting/_shell.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/interactive.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/misc.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/networking.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/packages/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/packages/lazy_loader.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/pool.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/process.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/prompt.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/sql.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/threading.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/typing.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/venv/_Venv.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/venv/__init__.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/warnings.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum/utils/yaml.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum.egg-info/SOURCES.txt +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum.egg-info/dependency_links.txt +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum.egg-info/entry_points.txt +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum.egg-info/top_level.txt +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/meerschaum.egg-info/zip-safe +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/setup.cfg +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/setup.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/tests/test_deduplicate.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/tests/test_pipes_dtypes.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/tests/test_sql.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/tests/test_sync.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/tests/test_users.py +0 -0
- {meerschaum-2.2.0rc3 → meerschaum-2.2.1}/tests/test_verify.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: meerschaum
|
3
|
-
Version: 2.2.
|
3
|
+
Version: 2.2.1
|
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: watchfiles>=0.21.0; extra == "
|
65
|
-
Requires-Dist: dill>=0.3.3; extra == "
|
66
|
-
Requires-Dist: virtualenv>=20.1.0; extra == "
|
67
|
-
Requires-Dist: APScheduler>=4.0.0a5; extra == "
|
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
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
|
75
|
-
Requires-Dist: duckdb-engine>=0.
|
76
|
-
Provides-Extra: drivers
|
77
|
-
Requires-Dist: pyodbc>=4.0.30; extra == "drivers"
|
78
|
-
Requires-Dist: cx_Oracle>=8.3.0; extra == "drivers"
|
74
|
+
Requires-Dist: duckdb>=1.0.0; extra == "drivers"
|
75
|
+
Requires-Dist: duckdb-engine>=0.13.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"
|
@@ -133,8 +133,8 @@ Requires-Dist: psycopg[binary]>=3.1.18; extra == "sql"
|
|
133
133
|
Requires-Dist: PyMySQL>=0.9.0; extra == "sql"
|
134
134
|
Requires-Dist: aiomysql>=0.0.21; extra == "sql"
|
135
135
|
Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "sql"
|
136
|
-
Requires-Dist: duckdb
|
137
|
-
Requires-Dist: duckdb-engine>=0.
|
136
|
+
Requires-Dist: duckdb>=1.0.0; extra == "sql"
|
137
|
+
Requires-Dist: duckdb-engine>=0.13.0; extra == "sql"
|
138
138
|
Requires-Dist: wheel>=0.34.2; extra == "sql"
|
139
139
|
Requires-Dist: setuptools>=63.3.0; extra == "sql"
|
140
140
|
Requires-Dist: PyYAML>=5.3.1; extra == "sql"
|
@@ -190,8 +190,8 @@ Requires-Dist: psycopg[binary]>=3.1.18; extra == "api"
|
|
190
190
|
Requires-Dist: PyMySQL>=0.9.0; extra == "api"
|
191
191
|
Requires-Dist: aiomysql>=0.0.21; extra == "api"
|
192
192
|
Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "api"
|
193
|
-
Requires-Dist: duckdb
|
194
|
-
Requires-Dist: duckdb-engine>=0.
|
193
|
+
Requires-Dist: duckdb>=1.0.0; extra == "api"
|
194
|
+
Requires-Dist: duckdb-engine>=0.13.0; extra == "api"
|
195
195
|
Requires-Dist: wheel>=0.34.2; extra == "api"
|
196
196
|
Requires-Dist: setuptools>=63.3.0; extra == "api"
|
197
197
|
Requires-Dist: PyYAML>=5.3.1; extra == "api"
|
@@ -266,8 +266,8 @@ Requires-Dist: psycopg[binary]>=3.1.18; extra == "full"
|
|
266
266
|
Requires-Dist: PyMySQL>=0.9.0; extra == "full"
|
267
267
|
Requires-Dist: aiomysql>=0.0.21; extra == "full"
|
268
268
|
Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "full"
|
269
|
-
Requires-Dist: duckdb
|
270
|
-
Requires-Dist: duckdb-engine>=0.
|
269
|
+
Requires-Dist: duckdb>=1.0.0; extra == "full"
|
270
|
+
Requires-Dist: duckdb-engine>=0.13.0; extra == "full"
|
271
271
|
Requires-Dist: toga>=0.3.0-dev29; extra == "full"
|
272
272
|
Requires-Dist: pywebview>=3.6.3; extra == "full"
|
273
273
|
Requires-Dist: pycparser>=2.21.0; extra == "full"
|
@@ -47,9 +47,9 @@ def entry(sysargs: Optional[List[str]] = None) -> SuccessTuple:
|
|
47
47
|
)
|
48
48
|
)
|
49
49
|
|
50
|
-
if args.get('schedule', None):
|
51
|
-
from meerschaum.utils.schedule import schedule_function
|
52
|
-
return schedule_function(entry_with_args, **args)
|
50
|
+
# if args.get('schedule', None):
|
51
|
+
# from meerschaum.utils.schedule import schedule_function
|
52
|
+
# return schedule_function(entry_with_args, **args)
|
53
53
|
return entry_with_args(**args)
|
54
54
|
|
55
55
|
|
@@ -61,7 +61,7 @@ def entry_with_args(
|
|
61
61
|
Use `_entry()` for parsing sysargs before executing.
|
62
62
|
"""
|
63
63
|
import sys
|
64
|
-
|
64
|
+
import functools
|
65
65
|
from meerschaum.actions import get_action, get_main_action_name
|
66
66
|
from meerschaum._internal.arguments import remove_leading_action
|
67
67
|
from meerschaum.utils.venv import Venv, active_venvs, deactivate_venv
|
@@ -88,10 +88,41 @@ def entry_with_args(
|
|
88
88
|
action_function.__module__.startswith('plugins.')
|
89
89
|
) else None
|
90
90
|
)
|
91
|
-
|
91
|
+
|
92
|
+
skip_schedule = False
|
93
|
+
if (
|
94
|
+
kw['action']
|
95
|
+
and kw['action'][0] == 'start'
|
96
|
+
and kw['action'][1] in ('job', 'jobs')
|
97
|
+
):
|
98
|
+
skip_schedule = True
|
92
99
|
|
93
100
|
kw['action'] = remove_leading_action(kw['action'], _actions=_actions)
|
94
101
|
|
102
|
+
do_action = functools.partial(_do_action_wrapper, action_function, plugin_name, **kw)
|
103
|
+
if kw.get('schedule', None) and not skip_schedule:
|
104
|
+
from meerschaum.utils.schedule import schedule_function
|
105
|
+
from meerschaum.utils.misc import interval_str
|
106
|
+
import time
|
107
|
+
from datetime import timedelta
|
108
|
+
start_time = time.perf_counter()
|
109
|
+
schedule_function(do_action, **kw)
|
110
|
+
delta = timedelta(seconds=(time.perf_counter() - start_time))
|
111
|
+
result = True, f"Exited scheduler after {interval_str(delta)}."
|
112
|
+
else:
|
113
|
+
result = do_action()
|
114
|
+
|
115
|
+
### Clean up stray virtual environments.
|
116
|
+
for venv in [venv for venv in active_venvs]:
|
117
|
+
deactivate_venv(venv, debug=kw.get('debug', False), force=True)
|
118
|
+
|
119
|
+
return result
|
120
|
+
|
121
|
+
|
122
|
+
def _do_action_wrapper(action_function, plugin_name, **kw):
|
123
|
+
from meerschaum.plugins import Plugin
|
124
|
+
from meerschaum.utils.venv import Venv, active_venvs, deactivate_venv
|
125
|
+
plugin = Plugin(plugin_name) if plugin_name else None
|
95
126
|
with Venv(plugin, debug=kw.get('debug', False)):
|
96
127
|
action_name = ' '.join(action_function.__name__.split('_') + kw.get('action', []))
|
97
128
|
try:
|
@@ -111,14 +142,8 @@ def entry_with_args(
|
|
111
142
|
)
|
112
143
|
except KeyboardInterrupt:
|
113
144
|
result = False, f"Cancelled action `{action_name}`."
|
114
|
-
|
115
|
-
### Clean up stray virtual environments.
|
116
|
-
for venv in [venv for venv in active_venvs]:
|
117
|
-
deactivate_venv(venv, debug=kw.get('debug', False), force=True)
|
118
|
-
|
119
145
|
return result
|
120
146
|
|
121
|
-
|
122
147
|
_shells = []
|
123
148
|
_shell = None
|
124
149
|
def get_shell(
|
@@ -589,8 +589,8 @@ def _show_logs(
|
|
589
589
|
if not ANSI:
|
590
590
|
info = print
|
591
591
|
colors = get_config('jobs', 'logs', 'colors')
|
592
|
-
timestamp_format = get_config('jobs', 'logs', '
|
593
|
-
follow_timestamp_format = get_config('jobs', 'logs', '
|
592
|
+
timestamp_format = get_config('jobs', 'logs', 'timestamps', 'format')
|
593
|
+
follow_timestamp_format = get_config('jobs', 'logs', 'timestamps', 'follow_format')
|
594
594
|
daemons = get_filtered_daemons(action)
|
595
595
|
now = datetime.now(timezone.utc)
|
596
596
|
now_str = now.strftime(timestamp_format)
|
@@ -46,14 +46,19 @@ endpoints = STATIC_CONFIG['api']['endpoints']
|
|
46
46
|
lazy = False,
|
47
47
|
check_update = CHECK_UPDATE,
|
48
48
|
)
|
49
|
-
|
50
|
-
|
49
|
+
(
|
50
|
+
typing_extensions,
|
51
|
+
uvicorn_workers,
|
52
|
+
) = attempt_import(
|
53
|
+
'typing_extensions',
|
54
|
+
'uvicorn.workers',
|
55
|
+
lazy = False,
|
56
|
+
check_update = CHECK_UPDATE,
|
51
57
|
venv = None,
|
52
58
|
)
|
53
59
|
from meerschaum.api._chain import check_allow_chaining, DISALLOW_CHAINING_MESSAGE
|
54
60
|
uvicorn_config_path = API_UVICORN_RESOURCES_PATH / SERVER_ID / 'config.json'
|
55
61
|
|
56
|
-
uvicorn_workers = attempt_import('uvicorn.workers', venv=None, check_update=CHECK_UPDATE)
|
57
62
|
uvicorn_config = None
|
58
63
|
sys_config = get_config('system', 'api')
|
59
64
|
permissions_config = get_config('system', 'api', 'permissions')
|
@@ -7,11 +7,11 @@ Define JWT authorization here.
|
|
7
7
|
"""
|
8
8
|
|
9
9
|
import os
|
10
|
-
from meerschaum.api import app, endpoints
|
10
|
+
from meerschaum.api import app, endpoints, CHECK_UPDATE
|
11
11
|
from meerschaum.utils.packages import attempt_import
|
12
|
-
fastapi = attempt_import('fastapi', lazy=False)
|
13
|
-
fastapi_responses = attempt_import('fastapi.responses', lazy=False)
|
14
|
-
fastapi_login = attempt_import('fastapi_login')
|
12
|
+
fastapi = attempt_import('fastapi', lazy=False, check_update=CHECK_UPDATE)
|
13
|
+
fastapi_responses = attempt_import('fastapi.responses', lazy=False, check_update=CHECK_UPDATE)
|
14
|
+
fastapi_login = attempt_import('fastapi_login', check_update=CHECK_UPDATE)
|
15
15
|
|
16
16
|
LoginManager = fastapi_login.LoginManager
|
17
17
|
def generate_secret_key() -> str:
|
@@ -713,11 +713,11 @@ def download_pipe_csv(n_clicks):
|
|
713
713
|
pipe = pipe_from_ctx(ctx, 'n_clicks')
|
714
714
|
if pipe is None:
|
715
715
|
raise PreventUpdate
|
716
|
-
filename = str(pipe.target) + '.csv'
|
717
716
|
bounds = pipe.get_chunk_bounds(bounded=True, debug=debug)
|
718
|
-
begin,
|
717
|
+
begin, end = bounds[-1]
|
718
|
+
filename = str(pipe.target) + f" {begin} - {end}.csv"
|
719
719
|
try:
|
720
|
-
df = pipe.get_data(begin=begin, end=
|
720
|
+
df = pipe.get_data(begin=begin, end=end, debug=debug)
|
721
721
|
except Exception as e:
|
722
722
|
df = None
|
723
723
|
if df is not None:
|
@@ -11,12 +11,22 @@ from meerschaum.config import __doc__ as doc, get_config
|
|
11
11
|
from meerschaum.utils.misc import get_connector_labels
|
12
12
|
from meerschaum.utils.packages import attempt_import, import_html, import_dcc, import_pandas
|
13
13
|
from meerschaum.api import endpoints, CHECK_UPDATE
|
14
|
-
|
15
|
-
|
14
|
+
(
|
15
|
+
dex,
|
16
|
+
px,
|
17
|
+
daq,
|
18
|
+
dbc,
|
19
|
+
) = attempt_import(
|
20
|
+
'dash_extensions',
|
21
|
+
'plotly.express',
|
22
|
+
'dash_daq',
|
23
|
+
'dash_bootstrap_components',
|
24
|
+
lazy = False,
|
25
|
+
warn = False,
|
26
|
+
check_update = CHECK_UPDATE,
|
27
|
+
)
|
16
28
|
html, dcc = import_html(check_update=CHECK_UPDATE), import_dcc(check_update=CHECK_UPDATE)
|
17
29
|
pd = import_pandas(check_update=CHECK_UPDATE)
|
18
|
-
px = attempt_import('plotly.express', warn=False, check_update=CHECK_UPDATE)
|
19
|
-
daq = attempt_import('dash_daq', warn=False, check_update=CHECK_UPDATE)
|
20
30
|
|
21
31
|
from meerschaum.api.dash.components import (
|
22
32
|
go_button,
|
@@ -14,13 +14,16 @@ default_jobs_config = {
|
|
14
14
|
'columns': 70,
|
15
15
|
},
|
16
16
|
'logs': {
|
17
|
+
'timestamps': {
|
18
|
+
'enabled': True,
|
19
|
+
'format': '%Y-%m-%d %H:%M',
|
20
|
+
'follow_format': '%H:%M',
|
21
|
+
},
|
17
22
|
'num_files_to_keep': 5,
|
18
23
|
'max_file_size': 100_000,
|
19
24
|
'lines_to_show': 30,
|
20
25
|
'refresh_files_seconds': 5,
|
21
26
|
'min_buffer_len': 5,
|
22
|
-
'timestamp_format': '%Y-%m-%d %H:%M',
|
23
|
-
'follow_timestamp_format': '%H:%M',
|
24
27
|
'colors': [
|
25
28
|
'cyan',
|
26
29
|
'magenta',
|
@@ -23,7 +23,14 @@ from meerschaum.connectors.sql.SQLConnector import SQLConnector
|
|
23
23
|
from meerschaum.connectors.api.APIConnector import APIConnector
|
24
24
|
from meerschaum.connectors.sql._create_engine import flavor_configs as sql_flavor_configs
|
25
25
|
|
26
|
-
__all__ = (
|
26
|
+
__all__ = (
|
27
|
+
"Connector",
|
28
|
+
"SQLConnector",
|
29
|
+
"APIConnector",
|
30
|
+
"get_connector",
|
31
|
+
"is_connected",
|
32
|
+
"poll",
|
33
|
+
)
|
27
34
|
|
28
35
|
### store connectors partitioned by
|
29
36
|
### type, label for reuse
|
@@ -42,9 +42,13 @@ def cli(
|
|
42
42
|
env = copy.deepcopy(dict(os.environ))
|
43
43
|
env[f'MRSM_SQL_{self.label.upper()}'] = json.dumps(self.meta)
|
44
44
|
cli_code = (
|
45
|
+
"import sys\n"
|
45
46
|
"import meerschaum as mrsm\n"
|
46
47
|
f"conn = mrsm.get_connector('sql:{self.label}')\n"
|
47
|
-
|
48
|
+
"success, msg = conn._cli_exit()\n"
|
49
|
+
"mrsm.pprint((success, msg))\n"
|
50
|
+
"if not success:\n"
|
51
|
+
" raise Exception(msg)"
|
48
52
|
)
|
49
53
|
try:
|
50
54
|
_ = venv_exec(cli_code, venv=None, debug=debug, capture_output=False)
|
@@ -91,6 +95,8 @@ def _cli_exit(
|
|
91
95
|
cli_arg_str = self.DATABASE_URL
|
92
96
|
if self.flavor in ('sqlite', 'duckdb'):
|
93
97
|
cli_arg_str = str(self.database)
|
98
|
+
if cli_arg_str.startswith('postgresql+psycopg://'):
|
99
|
+
cli_arg_str = cli_arg_str.replace('postgresql+psycopg://', 'postgresql://')
|
94
100
|
|
95
101
|
### Define the script to execute to launch the CLI.
|
96
102
|
### The `mssqlcli` script is manually written to avoid telemetry
|
@@ -385,6 +385,9 @@ def get_create_index_queries(
|
|
385
385
|
-------
|
386
386
|
A dictionary of column names mapping to lists of queries.
|
387
387
|
"""
|
388
|
+
### NOTE: Due to recent breaking changes in DuckDB, indices don't behave properly.
|
389
|
+
if self.flavor == 'duckdb':
|
390
|
+
return {}
|
388
391
|
from meerschaum.utils.sql import (
|
389
392
|
sql_item_name,
|
390
393
|
get_distinct_col_count,
|
@@ -554,6 +557,9 @@ def get_drop_index_queries(
|
|
554
557
|
-------
|
555
558
|
A dictionary of column names mapping to lists of queries.
|
556
559
|
"""
|
560
|
+
### NOTE: Due to breaking changes within DuckDB, indices must be skipped.
|
561
|
+
if self.flavor == 'duckdb':
|
562
|
+
return {}
|
557
563
|
if not pipe.exists(debug=debug):
|
558
564
|
return {}
|
559
565
|
from meerschaum.utils.sql import sql_item_name, table_exists, hypertable_queries
|
@@ -763,6 +769,7 @@ def get_pipe_data(
|
|
763
769
|
if typ == 'numeric' and col in dtypes
|
764
770
|
]
|
765
771
|
kw['coerce_float'] = kw.get('coerce_float', (len(numeric_columns) == 0))
|
772
|
+
|
766
773
|
df = self.read(
|
767
774
|
query,
|
768
775
|
dtype = dtypes,
|
@@ -684,8 +684,8 @@ class Daemon:
|
|
684
684
|
self._rotating_log = RotatingFile(
|
685
685
|
self.log_path,
|
686
686
|
redirect_streams = True,
|
687
|
-
write_timestamps =
|
688
|
-
timestamp_format = get_config('jobs', 'logs', '
|
687
|
+
write_timestamps = get_config('jobs', 'logs', 'timestamps', 'enabled'),
|
688
|
+
timestamp_format = get_config('jobs', 'logs', 'timestamps', 'format'),
|
689
689
|
)
|
690
690
|
return self._rotating_log
|
691
691
|
|
@@ -699,7 +699,8 @@ class Daemon:
|
|
699
699
|
self.rotating_log.file_path,
|
700
700
|
num_files_to_keep = self.rotating_log.num_files_to_keep,
|
701
701
|
max_file_size = self.rotating_log.max_file_size,
|
702
|
-
write_timestamps =
|
702
|
+
write_timestamps = get_config('jobs', 'logs', 'timestamps', 'enabled'),
|
703
|
+
timestamp_format = get_config('jobs', 'logs', 'timestamps', 'format'),
|
703
704
|
)
|
704
705
|
return new_rotating_log.read()
|
705
706
|
|
@@ -272,7 +272,7 @@ class RotatingFile(io.IOBase):
|
|
272
272
|
warn(
|
273
273
|
f"Encountered an issue when redirecting streams:\n{traceback.format_exc()}"
|
274
274
|
)
|
275
|
-
if start_interception:
|
275
|
+
if start_interception and self.write_timestamps:
|
276
276
|
self.start_log_fd_interception()
|
277
277
|
|
278
278
|
create_new_file = (
|
@@ -363,7 +363,7 @@ class RotatingFile(io.IOBase):
|
|
363
363
|
suffix_str = "\n" if self.write_timestamps else ""
|
364
364
|
self.refresh_files(
|
365
365
|
potential_new_len = len(prefix_str + data + suffix_str),
|
366
|
-
start_interception =
|
366
|
+
start_interception = self.write_timestamps,
|
367
367
|
)
|
368
368
|
try:
|
369
369
|
if prefix_str:
|
@@ -591,6 +591,9 @@ class RotatingFile(io.IOBase):
|
|
591
591
|
"""
|
592
592
|
Start the file descriptor monitoring threads.
|
593
593
|
"""
|
594
|
+
if not self.write_timestamps:
|
595
|
+
return
|
596
|
+
|
594
597
|
threads = self.__dict__.get('_interceptor_threads', [])
|
595
598
|
self._stdout_interceptor = FileDescriptorInterceptor(
|
596
599
|
sys.stdout.fileno(),
|
@@ -627,10 +630,13 @@ class RotatingFile(io.IOBase):
|
|
627
630
|
])
|
628
631
|
self.stop_log_fd_interception(unused_only=True)
|
629
632
|
|
633
|
+
|
630
634
|
def stop_log_fd_interception(self, unused_only: bool = False):
|
631
635
|
"""
|
632
636
|
Stop the file descriptor monitoring threads.
|
633
637
|
"""
|
638
|
+
if not self.write_timestamps:
|
639
|
+
return
|
634
640
|
interceptors = self.__dict__.get('_interceptors', [])
|
635
641
|
interceptor_threads = self.__dict__.get('_interceptor_threads', [])
|
636
642
|
|
@@ -30,7 +30,7 @@ packages: Dict[str, Dict[str, str]] = {
|
|
30
30
|
'more_termcolor' : 'more-termcolor>=1.1.3',
|
31
31
|
'humanfriendly' : 'humanfriendly>=10.0.0',
|
32
32
|
},
|
33
|
-
'
|
33
|
+
'core': {
|
34
34
|
'wheel' : 'wheel>=0.34.2',
|
35
35
|
'setuptools' : 'setuptools>=63.3.0',
|
36
36
|
'yaml' : 'PyYAML>=5.3.1',
|
@@ -60,10 +60,10 @@ packages: Dict[str, Dict[str, str]] = {
|
|
60
60
|
'pymysql' : 'PyMySQL>=0.9.0',
|
61
61
|
'aiomysql' : 'aiomysql>=0.0.21',
|
62
62
|
'sqlalchemy_cockroachdb' : 'sqlalchemy-cockroachdb>=2.0.0',
|
63
|
-
'duckdb' : 'duckdb
|
64
|
-
'duckdb_engine' : 'duckdb-engine>=0.
|
63
|
+
'duckdb' : 'duckdb>=1.0.0',
|
64
|
+
'duckdb_engine' : 'duckdb-engine>=0.13.0',
|
65
65
|
},
|
66
|
-
'
|
66
|
+
'drivers-extras': {
|
67
67
|
'pyodbc' : 'pyodbc>=4.0.30',
|
68
68
|
'cx_Oracle' : 'cx_Oracle>=8.3.0',
|
69
69
|
},
|
@@ -130,7 +130,7 @@ packages['sql'] = {
|
|
130
130
|
'asyncpg' : 'asyncpg>=0.21.0',
|
131
131
|
}
|
132
132
|
packages['sql'].update(packages['drivers'])
|
133
|
-
packages['sql'].update(packages['
|
133
|
+
packages['sql'].update(packages['core'])
|
134
134
|
packages['dash'] = {
|
135
135
|
'flask_compress' : 'Flask-Compress>=1.10.1',
|
136
136
|
'dash' : 'dash>=2.6.2',
|
@@ -150,7 +150,6 @@ packages['api'] = {
|
|
150
150
|
'fastapi_login' : 'fastapi-login>=1.7.2',
|
151
151
|
'multipart' : 'python-multipart>=0.0.9',
|
152
152
|
'httpx' : 'httpx>=0.24.1',
|
153
|
-
'websockets' : 'websockets>=11.0.3',
|
154
153
|
}
|
155
154
|
packages['api'].update(packages['sql'])
|
156
155
|
packages['api'].update(packages['formatting'])
|
@@ -170,7 +169,7 @@ def get_install_names():
|
|
170
169
|
install_names[get_install_no_version(_install_name)] = _import_name
|
171
170
|
return install_names
|
172
171
|
|
173
|
-
skip_groups = {'docs', 'build', 'cli', 'dev-tools', 'portable', 'extras', 'stack', '
|
172
|
+
skip_groups = {'docs', 'build', 'cli', 'dev-tools', 'portable', 'extras', 'stack', 'drivers-extras'}
|
174
173
|
full = []
|
175
174
|
_full = {}
|
176
175
|
for group, import_names in packages.items():
|
@@ -99,7 +99,7 @@ def schedule_function(
|
|
99
99
|
apscheduler = mrsm.attempt_import('apscheduler', lazy=False)
|
100
100
|
now = round_time(datetime.now(timezone.utc), timedelta(minutes=1))
|
101
101
|
trigger = parse_schedule(schedule, now=now)
|
102
|
-
_scheduler = apscheduler.AsyncScheduler()
|
102
|
+
_scheduler = apscheduler.AsyncScheduler(identity='mrsm-scheduler')
|
103
103
|
try:
|
104
104
|
loop = asyncio.get_running_loop()
|
105
105
|
except RuntimeError:
|
@@ -107,7 +107,14 @@ def schedule_function(
|
|
107
107
|
|
108
108
|
async def run_scheduler():
|
109
109
|
async with _scheduler:
|
110
|
-
job = await _scheduler.add_schedule(
|
110
|
+
job = await _scheduler.add_schedule(
|
111
|
+
function,
|
112
|
+
trigger,
|
113
|
+
args = args,
|
114
|
+
kwargs = kw,
|
115
|
+
max_running_jobs = 1,
|
116
|
+
conflict_policy = apscheduler.ConflictPolicy.replace,
|
117
|
+
)
|
111
118
|
try:
|
112
119
|
await _scheduler.run_until_stopped()
|
113
120
|
except (KeyboardInterrupt, SystemExit) as e:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: meerschaum
|
3
|
-
Version: 2.2.
|
3
|
+
Version: 2.2.1
|
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: watchfiles>=0.21.0; extra == "
|
65
|
-
Requires-Dist: dill>=0.3.3; extra == "
|
66
|
-
Requires-Dist: virtualenv>=20.1.0; extra == "
|
67
|
-
Requires-Dist: APScheduler>=4.0.0a5; extra == "
|
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
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
|
75
|
-
Requires-Dist: duckdb-engine>=0.
|
76
|
-
Provides-Extra: drivers
|
77
|
-
Requires-Dist: pyodbc>=4.0.30; extra == "drivers"
|
78
|
-
Requires-Dist: cx_Oracle>=8.3.0; extra == "drivers"
|
74
|
+
Requires-Dist: duckdb>=1.0.0; extra == "drivers"
|
75
|
+
Requires-Dist: duckdb-engine>=0.13.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"
|
@@ -133,8 +133,8 @@ Requires-Dist: psycopg[binary]>=3.1.18; extra == "sql"
|
|
133
133
|
Requires-Dist: PyMySQL>=0.9.0; extra == "sql"
|
134
134
|
Requires-Dist: aiomysql>=0.0.21; extra == "sql"
|
135
135
|
Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "sql"
|
136
|
-
Requires-Dist: duckdb
|
137
|
-
Requires-Dist: duckdb-engine>=0.
|
136
|
+
Requires-Dist: duckdb>=1.0.0; extra == "sql"
|
137
|
+
Requires-Dist: duckdb-engine>=0.13.0; extra == "sql"
|
138
138
|
Requires-Dist: wheel>=0.34.2; extra == "sql"
|
139
139
|
Requires-Dist: setuptools>=63.3.0; extra == "sql"
|
140
140
|
Requires-Dist: PyYAML>=5.3.1; extra == "sql"
|
@@ -190,8 +190,8 @@ Requires-Dist: psycopg[binary]>=3.1.18; extra == "api"
|
|
190
190
|
Requires-Dist: PyMySQL>=0.9.0; extra == "api"
|
191
191
|
Requires-Dist: aiomysql>=0.0.21; extra == "api"
|
192
192
|
Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "api"
|
193
|
-
Requires-Dist: duckdb
|
194
|
-
Requires-Dist: duckdb-engine>=0.
|
193
|
+
Requires-Dist: duckdb>=1.0.0; extra == "api"
|
194
|
+
Requires-Dist: duckdb-engine>=0.13.0; extra == "api"
|
195
195
|
Requires-Dist: wheel>=0.34.2; extra == "api"
|
196
196
|
Requires-Dist: setuptools>=63.3.0; extra == "api"
|
197
197
|
Requires-Dist: PyYAML>=5.3.1; extra == "api"
|
@@ -266,8 +266,8 @@ Requires-Dist: psycopg[binary]>=3.1.18; extra == "full"
|
|
266
266
|
Requires-Dist: PyMySQL>=0.9.0; extra == "full"
|
267
267
|
Requires-Dist: aiomysql>=0.0.21; extra == "full"
|
268
268
|
Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "full"
|
269
|
-
Requires-Dist: duckdb
|
270
|
-
Requires-Dist: duckdb-engine>=0.
|
269
|
+
Requires-Dist: duckdb>=1.0.0; extra == "full"
|
270
|
+
Requires-Dist: duckdb-engine>=0.13.0; extra == "full"
|
271
271
|
Requires-Dist: toga>=0.3.0-dev29; extra == "full"
|
272
272
|
Requires-Dist: pywebview>=3.6.3; extra == "full"
|
273
273
|
Requires-Dist: pycparser>=2.21.0; extra == "full"
|