meerschaum 1.5.7__tar.gz → 1.5.18__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-1.5.7/meerschaum.egg-info → meerschaum-1.5.18}/PKG-INFO +1 -3
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/__init__.py +14 -3
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/arguments/_parse_arguments.py +2 -1
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/arguments/_parser.py +7 -7
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/entry.py +17 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/bootstrap.py +29 -16
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/edit.py +5 -1
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/register.py +3 -3
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/callbacks/register.py +8 -3
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_default.py +1 -8
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_version.py +1 -1
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/static/__init__.py +4 -2
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/Connector.py +92 -27
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/__init__.py +40 -35
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/APIConnector.py +1 -1
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_pipes.py +9 -1
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/poll.py +6 -6
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/SQLConnector.py +22 -9
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/_cli.py +5 -1
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/_create_engine.py +11 -10
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/_fetch.py +38 -6
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/_pipes.py +168 -78
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/_plugins.py +37 -26
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/_sql.py +132 -39
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/_users.py +27 -34
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/tables/__init__.py +4 -1
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/__init__.py +4 -4
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_attributes.py +18 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_bootstrap.py +4 -6
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_data.py +127 -3
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_drop.py +3 -1
- meerschaum-1.5.18/meerschaum/core/Pipe/_dtypes.py +102 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_fetch.py +21 -8
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_show.py +12 -4
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_sync.py +189 -29
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/plugins/__init__.py +38 -34
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/daemon/Daemon.py +5 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/misc.py +267 -14
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/packages/__init__.py +85 -55
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/packages/_packages.py +7 -9
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/process.py +11 -7
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/sql.py +16 -7
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/typing.py +6 -1
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/venv/__init__.py +1 -26
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/warnings.py +8 -5
- {meerschaum-1.5.7 → meerschaum-1.5.18/meerschaum.egg-info}/PKG-INFO +1 -3
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum.egg-info/SOURCES.txt +0 -4
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum.egg-info/requires.txt +24 -27
- {meerschaum-1.5.7 → meerschaum-1.5.18}/setup.py +0 -1
- meerschaum-1.5.7/meerschaum/connectors/mqtt/MQTTConnector.py +0 -59
- meerschaum-1.5.7/meerschaum/connectors/mqtt/__init__.py +0 -9
- meerschaum-1.5.7/meerschaum/connectors/mqtt/_fetch.py +0 -88
- meerschaum-1.5.7/meerschaum/connectors/mqtt/_subscribe.py +0 -138
- meerschaum-1.5.7/meerschaum/core/Pipe/_dtypes.py +0 -194
- {meerschaum-1.5.7 → meerschaum-1.5.18}/LICENSE +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/NOTICE +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/README.md +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/__main__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/arguments/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/docs/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/docs/index.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/gui/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/gui/app/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/gui/app/_windows.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/gui/app/actions.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/gui/app/pipes.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/shell/Shell.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/shell/ShellCompleter.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/shell/ValidAutoSuggest.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/shell/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/shell/resources/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/term/TermPageHandler.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/term/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/_internal/term/tools.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/api.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/clear.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/copy.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/delete.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/drop.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/install.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/login.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/os.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/python.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/reload.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/setup.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/sh.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/show.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/sql.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/stack.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/start.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/stop.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/sync.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/uninstall.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/upgrade.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/actions/verify.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/_chain.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/_events.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/_oauth2.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/_websockets.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/actions.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/assets/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/assets/ansi_up.js +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/assets/banner_1920x320.png +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/assets/favicon.ico +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/assets/logo_48x48.png +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/assets/logo_500x500.png +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/callbacks/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/callbacks/dashboard.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/callbacks/login.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/callbacks/plugins.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/components.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/connectors.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/graphs.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/jobs.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/keys.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/pages/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/pages/dashboard.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/pages/error.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/pages/login.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/pages/plugins.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/pages/register.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/pipes.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/plugins.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/sync.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/users.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/dash/websockets.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/models/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/models/_interfaces.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/models/_locations.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/models/_metrics.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/models/_pipes.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/css/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/css/bootstrap.min.css +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/css/dash.css +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/css/dbc_dark.css +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/css/styles.css +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/ico/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/ico/logo.ico +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/js/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/js/action_button.js +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/js/main.js +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/static/png/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/templates/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/templates/index.html +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/templates/old_index.html +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/templates/secret.html +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/resources/templates/termpage.html +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/routes/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/routes/_actions.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/routes/_connectors.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/routes/_index.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/routes/_login.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/routes/_misc.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/routes/_pipes.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/routes/_plugins.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/routes/_users.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/routes/_version.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/api/tables/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_edit.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_environment.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_formatting.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_jobs.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_patch.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_paths.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_preprocess.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_read_config.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_shell.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/_sync.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/resources/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/stack/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/stack/grafana/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/stack/mosquitto/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/stack/mosquitto/resources/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/config/stack/resources/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_actions.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_delete.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_fetch.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_get.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_login.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_misc.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_patch.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_plugins.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_post.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_uri.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/api/_users.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/parse.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/plugin/PluginConnector.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/plugin/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/_uri.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/tables/types.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/connectors/sql/tools.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_clear.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_delete.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_edit.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Pipe/_register.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/Plugin/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/User/_User.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/User/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/core/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/plugins/_Plugin.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/daemon/Log.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/daemon/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/daemon/_names.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/debug.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/formatting/__init__.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/formatting/_jobs.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/formatting/_pipes.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/formatting/_pprint.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/formatting/_shell.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/get_pipes.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/interactive.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/networking.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/packages/lazy_loader.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/pool.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/prompt.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/schedule.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/threading.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/venv/_Venv.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum/utils/yaml.py +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum.egg-info/dependency_links.txt +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum.egg-info/entry_points.txt +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum.egg-info/top_level.txt +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/meerschaum.egg-info/zip-safe +0 -0
- {meerschaum-1.5.7 → meerschaum-1.5.18}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: meerschaum
|
3
|
-
Version: 1.5.
|
3
|
+
Version: 1.5.18
|
4
4
|
Summary: Sync Time-Series Pipes with Meerschaum
|
5
5
|
Home-page: https://meerschaum.io
|
6
6
|
Author: Bennett Meares
|
@@ -20,7 +20,6 @@ Classifier: Operating System :: POSIX :: Linux
|
|
20
20
|
Classifier: Operating System :: Microsoft :: Windows
|
21
21
|
Classifier: Operating System :: MacOS
|
22
22
|
Classifier: Programming Language :: SQL
|
23
|
-
Classifier: Programming Language :: Python :: 3.7
|
24
23
|
Classifier: Programming Language :: Python :: 3.8
|
25
24
|
Classifier: Programming Language :: Python :: 3.9
|
26
25
|
Classifier: Programming Language :: Python :: 3.10
|
@@ -33,7 +32,6 @@ Provides-Extra: required
|
|
33
32
|
Provides-Extra: minimal
|
34
33
|
Provides-Extra: formatting
|
35
34
|
Provides-Extra: _required
|
36
|
-
Provides-Extra: iot
|
37
35
|
Provides-Extra: drivers
|
38
36
|
Provides-Extra: _drivers
|
39
37
|
Provides-Extra: cli
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# vim:fenc=utf-8
|
4
4
|
|
5
5
|
"""
|
6
|
-
Copyright
|
6
|
+
Copyright 2023 Bennett Meares
|
7
7
|
|
8
8
|
Licensed under the Apache License, Version 2.0 (the "License");
|
9
9
|
you may not use this file except in compliance with the License.
|
@@ -22,9 +22,20 @@ from meerschaum.core.Pipe import Pipe
|
|
22
22
|
from meerschaum.plugins import Plugin
|
23
23
|
from meerschaum.utils import get_pipes
|
24
24
|
from meerschaum.utils.venv import Venv
|
25
|
+
from meerschaum.utils.formatting import pprint
|
25
26
|
from meerschaum._internal.docs import index as __doc__
|
26
27
|
from meerschaum.connectors import get_connector
|
27
|
-
from meerschaum.config import __version__
|
28
|
+
from meerschaum.config import __version__, get_config
|
29
|
+
from meerschaum.utils.packages import attempt_import
|
28
30
|
|
29
31
|
__pdoc__ = {'gui': False, 'api': False, 'core': False,}
|
30
|
-
__all__ = (
|
32
|
+
__all__ = (
|
33
|
+
"Pipe",
|
34
|
+
"get_pipes",
|
35
|
+
"get_connector",
|
36
|
+
"Plugin",
|
37
|
+
"Venv",
|
38
|
+
"Plugin",
|
39
|
+
"pprint",
|
40
|
+
"attempt_import",
|
41
|
+
)
|
@@ -96,11 +96,12 @@ def parse_arguments(sysargs: List[str]) -> Dict[str, Any]:
|
|
96
96
|
args_dict['text'] = shlex.join(sysargs)
|
97
97
|
except Exception as _e:
|
98
98
|
args_dict['text'] = ' '.join(sysargs)
|
99
|
+
args_dict[STATIC_CONFIG['system']['arguments']['failure_key']] = e
|
99
100
|
unknown = []
|
100
101
|
|
101
102
|
false_flags = [arg for arg, val in args_dict.items() if val is False]
|
102
103
|
for arg in false_flags:
|
103
|
-
args_dict.pop(arg, None)
|
104
|
+
_ = args_dict.pop(arg, None)
|
104
105
|
|
105
106
|
args_dict['sysargs'] = sysargs
|
106
107
|
args_dict['filtered_sysargs'] = filtered_sysargs
|
@@ -11,12 +11,17 @@ import sys
|
|
11
11
|
import argparse, json
|
12
12
|
from meerschaum.utils.typing import Union, Dict, List, Any, Tuple, Callable
|
13
13
|
from meerschaum.utils.misc import string_to_dict
|
14
|
+
from meerschaum.utils.warnings import error
|
14
15
|
|
16
|
+
class InvalidArgumentException(Exception):
|
17
|
+
"""
|
18
|
+
Raised when argparse failes to parse arguments.
|
19
|
+
"""
|
15
20
|
|
16
21
|
_original_argparse_error = argparse.ArgumentParser.error
|
17
22
|
_original_argparse_parse_known_args = argparse.ArgumentParser.parse_known_args
|
18
|
-
def _new_argparse_error(
|
19
|
-
|
23
|
+
def _new_argparse_error(message: str):
|
24
|
+
error(message, InvalidArgumentException, stack=False)
|
20
25
|
|
21
26
|
class ArgumentParser(argparse.ArgumentParser):
|
22
27
|
"""Override the built-in `argparse` error handling."""
|
@@ -229,11 +234,6 @@ groups['sync'].add_argument(
|
|
229
234
|
"Specify the chunksize for syncing and retrieving data. Defaults to 900."
|
230
235
|
),
|
231
236
|
)
|
232
|
-
groups['sync'].add_argument(
|
233
|
-
'--sync-chunks', action='store_true',
|
234
|
-
help="Sync chunks while fetching data instead of waiting until all have arrived. " +
|
235
|
-
"Similar to --async. WARNING! This can be very dangerous when used with --async.",
|
236
|
-
)
|
237
237
|
groups['sync'].add_argument(
|
238
238
|
'--skip-check-existing', '--allow-duplicates', action='store_true',
|
239
239
|
help = (
|
@@ -23,12 +23,29 @@ def entry(sysargs: Optional[List[str]] = None) -> SuccessTuple:
|
|
23
23
|
|
24
24
|
"""
|
25
25
|
from meerschaum._internal.arguments import parse_arguments
|
26
|
+
from meerschaum.config.static import STATIC_CONFIG
|
26
27
|
if sysargs is None:
|
27
28
|
sysargs = []
|
28
29
|
if not isinstance(sysargs, list):
|
29
30
|
import shlex
|
30
31
|
sysargs = shlex.split(sysargs)
|
31
32
|
args = parse_arguments(sysargs)
|
33
|
+
argparse_exception = args.get(
|
34
|
+
STATIC_CONFIG['system']['arguments']['failure_key'],
|
35
|
+
None,
|
36
|
+
)
|
37
|
+
if argparse_exception is not None:
|
38
|
+
args_text = args.get('text', '')
|
39
|
+
if not args_text.startswith('show arguments'):
|
40
|
+
return (
|
41
|
+
False,
|
42
|
+
(
|
43
|
+
"Invalid arguments:"
|
44
|
+
+ (f"\n{args_text}" if args_text else '')
|
45
|
+
+ f"\n {argparse_exception}"
|
46
|
+
)
|
47
|
+
)
|
48
|
+
|
32
49
|
if args.get('schedule', None):
|
33
50
|
from meerschaum.utils.schedule import schedule_function
|
34
51
|
return schedule_function(entry_with_args, args['schedule'], **args)
|
@@ -234,7 +234,7 @@ def _bootstrap_connectors(
|
|
234
234
|
|
235
235
|
"""
|
236
236
|
from meerschaum.connectors.parse import is_valid_connector_keys
|
237
|
-
from meerschaum.connectors import connectors, get_connector
|
237
|
+
from meerschaum.connectors import connectors, get_connector, types, custom_types
|
238
238
|
from meerschaum.utils.prompt import prompt, yes_no, choose
|
239
239
|
from meerschaum.config import get_config
|
240
240
|
from meerschaum.config._edit import write_config
|
@@ -258,11 +258,12 @@ def _bootstrap_connectors(
|
|
258
258
|
try:
|
259
259
|
_type = choose(
|
260
260
|
(
|
261
|
-
'Please choose a connector type.\n'
|
262
|
-
'For more information on connectors,
|
261
|
+
'Please choose a connector type.\n'
|
262
|
+
+ 'For more information on connectors, '
|
263
|
+
+ 'please visit https://meerschaum.io/reference/connectors'
|
263
264
|
),
|
264
265
|
sorted(list(connectors)),
|
265
|
-
default='sql'
|
266
|
+
default = 'sql'
|
266
267
|
)
|
267
268
|
except KeyboardInterrupt:
|
268
269
|
return abort_tuple
|
@@ -270,10 +271,12 @@ def _bootstrap_connectors(
|
|
270
271
|
if _clear:
|
271
272
|
clear_screen(debug=debug)
|
272
273
|
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
274
|
+
existing_labels = get_config('meerschaum', 'connectors', _type, warn=False) or []
|
275
|
+
_label_choices = sorted([
|
276
|
+
label
|
277
|
+
for label in existing_labels
|
278
|
+
if label != 'default' and label is not None
|
279
|
+
])
|
277
280
|
new_connector_label = 'New connector'
|
278
281
|
_label_choices.append(new_connector_label)
|
279
282
|
while True:
|
@@ -281,9 +284,14 @@ def _bootstrap_connectors(
|
|
281
284
|
_label = prompt(f"New label for '{_type}' connector:")
|
282
285
|
except KeyboardInterrupt:
|
283
286
|
return abort_tuple
|
284
|
-
if _label in
|
287
|
+
if _label in existing_labels:
|
285
288
|
warn(f"Connector '{_type}:{_label}' already exists.", stack=False)
|
286
|
-
overwrite = yes_no(
|
289
|
+
overwrite = yes_no(
|
290
|
+
f"Do you want to overwrite connector '{_type}:{_label}'?",
|
291
|
+
default = 'n',
|
292
|
+
yes = yes,
|
293
|
+
noask = noask,
|
294
|
+
)
|
287
295
|
if not overwrite and not force:
|
288
296
|
return False, f"No changes made to connector configuration."
|
289
297
|
break
|
@@ -292,14 +300,19 @@ def _bootstrap_connectors(
|
|
292
300
|
else:
|
293
301
|
break
|
294
302
|
|
303
|
+
cls = types.get(_type)
|
304
|
+
cls_required_attrs = getattr(cls, 'REQUIRED_ATTRIBUTES', [])
|
305
|
+
type_attributes = connector_attributes.get(_type, {'required': cls_required_attrs})
|
306
|
+
|
295
307
|
new_attributes = {}
|
296
|
-
if 'flavors' in
|
308
|
+
if 'flavors' in type_attributes:
|
297
309
|
try:
|
298
310
|
flavor = choose(
|
299
311
|
f"Flavor for connector '{_type}:{_label}':",
|
300
|
-
sorted(list(
|
312
|
+
sorted(list(type_attributes['flavors'])),
|
301
313
|
default = (
|
302
|
-
'timescaledb'
|
314
|
+
'timescaledb'
|
315
|
+
if 'timescaledb' in type_attributes['flavors']
|
303
316
|
else None
|
304
317
|
)
|
305
318
|
)
|
@@ -307,10 +320,10 @@ def _bootstrap_connectors(
|
|
307
320
|
return abort_tuple
|
308
321
|
new_attributes['flavor'] = flavor
|
309
322
|
required = sorted(list(connector_attributes[_type]['flavors'][flavor]['requirements']))
|
310
|
-
default =
|
323
|
+
default = type_attributes['flavors'][flavor].get('defaults', {})
|
311
324
|
else:
|
312
|
-
required = sorted(list(
|
313
|
-
default =
|
325
|
+
required = sorted(list(type_attributes.get('required', {})))
|
326
|
+
default = type_attributes.get('default', {})
|
314
327
|
info(
|
315
328
|
f"Please answer the following questions to configure the new connector '{_type}:{_label}'."
|
316
329
|
+ '\n' + "Press [Ctrl + C] to skip."
|
@@ -203,6 +203,7 @@ def _edit_users(
|
|
203
203
|
from meerschaum.utils.prompt import prompt, yes_no, get_password, get_email
|
204
204
|
from meerschaum.utils.misc import edit_file
|
205
205
|
from meerschaum.config._paths import USERS_CACHE_RESOURCES_PATH
|
206
|
+
from meerschaum.config.static import STATIC_CONFIG
|
206
207
|
from meerschaum.utils.yaml import yaml
|
207
208
|
import os, pathlib
|
208
209
|
instance_connector = parse_instance_keys(mrsm_instance)
|
@@ -214,7 +215,10 @@ def _edit_users(
|
|
214
215
|
### Change the password
|
215
216
|
password = ''
|
216
217
|
if yes_no(f"Change the password for user '{username}'?", default='n', yes=yes, noask=noask):
|
217
|
-
password = get_password(
|
218
|
+
password = get_password(
|
219
|
+
username,
|
220
|
+
minimum_length = STATIC_CONFIG['users']['min_password_length'],
|
221
|
+
)
|
218
222
|
|
219
223
|
## Make an admin
|
220
224
|
_type = ''
|
@@ -256,7 +256,7 @@ def _register_users(
|
|
256
256
|
Register a new user to a Meerschaum instance.
|
257
257
|
"""
|
258
258
|
from meerschaum.config import get_config
|
259
|
-
from meerschaum.config.static import
|
259
|
+
from meerschaum.config.static import STATIC_CONFIG
|
260
260
|
from meerschaum import get_connector
|
261
261
|
from meerschaum.connectors.parse import parse_instance_keys
|
262
262
|
from meerschaum.utils.debug import dprint
|
@@ -274,7 +274,7 @@ def _register_users(
|
|
274
274
|
### filter out existing users
|
275
275
|
nonregistered_users = []
|
276
276
|
for username in action:
|
277
|
-
min_len =
|
277
|
+
min_len = STATIC_CONFIG['users']['min_username_length']
|
278
278
|
if len(username) < min_len:
|
279
279
|
warn(
|
280
280
|
f"Username '{username}' is too short (less than {min_len} characters). Skipping...",
|
@@ -296,7 +296,7 @@ def _register_users(
|
|
296
296
|
username = _user.username
|
297
297
|
password = get_password(
|
298
298
|
username,
|
299
|
-
minimum_length =
|
299
|
+
minimum_length = STATIC_CONFIG['users']['min_password_length']
|
300
300
|
)
|
301
301
|
email = get_email(username, allow_omit=True)
|
302
302
|
except Exception as e:
|
@@ -12,7 +12,7 @@ from meerschaum.api.dash import dash_app, debug, active_sessions
|
|
12
12
|
from dash.dependencies import Input, Output, State, ALL, MATCH
|
13
13
|
from dash.exceptions import PreventUpdate
|
14
14
|
from meerschaum.core import User
|
15
|
-
from meerschaum.config.static import
|
15
|
+
from meerschaum.config.static import STATIC_CONFIG
|
16
16
|
from meerschaum.utils.packages import attempt_import
|
17
17
|
dash = attempt_import('dash', check_update=CHECK_UPDATE)
|
18
18
|
from fastapi.exceptions import HTTPException
|
@@ -24,7 +24,7 @@ from fastapi.exceptions import HTTPException
|
|
24
24
|
def validate_username(username):
|
25
25
|
if not username:
|
26
26
|
raise PreventUpdate
|
27
|
-
valid = (len(username) >=
|
27
|
+
valid = (len(username) >= STATIC_CONFIG['users']['min_username_length'])
|
28
28
|
if not valid:
|
29
29
|
return valid, not valid
|
30
30
|
conn = get_api_connector()
|
@@ -40,7 +40,7 @@ def validate_username(username):
|
|
40
40
|
def validate_password(password):
|
41
41
|
if not password:
|
42
42
|
raise PreventUpdate
|
43
|
-
valid = (len(password) >=
|
43
|
+
valid = (len(password) >= STATIC_CONFIG['users']['min_password_length'])
|
44
44
|
return valid, not valid
|
45
45
|
|
46
46
|
@dash_app.callback(
|
@@ -75,6 +75,11 @@ def register_button_click(
|
|
75
75
|
form_class = 'form-control'
|
76
76
|
from meerschaum.api.routes._login import login
|
77
77
|
conn = get_api_connector()
|
78
|
+
if not username or not password:
|
79
|
+
success, msg = False, "Invalid username or password."
|
80
|
+
form_class += ' is-invalid'
|
81
|
+
return {}, form_class, dash.no_update
|
82
|
+
|
78
83
|
user = User(username, password, email=email, instance=conn)
|
79
84
|
user_id = conn.get_user_id(user, debug=debug)
|
80
85
|
if user_id is not None:
|
@@ -51,13 +51,6 @@ default_meerschaum_config = {
|
|
51
51
|
'protocol' : 'https',
|
52
52
|
},
|
53
53
|
},
|
54
|
-
'mqtt' : {
|
55
|
-
'default' : connector_attributes['mqtt']['default'],
|
56
|
-
'main' : {
|
57
|
-
'host' : 'localhost',
|
58
|
-
'port' : 1883,
|
59
|
-
},
|
60
|
-
},
|
61
54
|
},
|
62
55
|
}
|
63
56
|
default_system_config = {
|
@@ -66,7 +59,7 @@ default_system_config = {
|
|
66
59
|
'pandas' : 'pandas',
|
67
60
|
},
|
68
61
|
'sql' : {
|
69
|
-
'chunksize' :
|
62
|
+
'chunksize' : 100000,
|
70
63
|
'poolclass' : 'sqlalchemy.pool.QueuePool',
|
71
64
|
'create_engine' : {
|
72
65
|
'method' : 'multi',
|
@@ -57,6 +57,7 @@ STATIC_CONFIG = {
|
|
57
57
|
']'
|
58
58
|
),
|
59
59
|
'underscore_standin': '<UNDERSCORE>', ### Temporary replacement for parsing.
|
60
|
+
'failure_key': '_argparse_exception',
|
60
61
|
},
|
61
62
|
'urls': {
|
62
63
|
'get-pip.py': 'https://bootstrap.pypa.io/get-pip.py',
|
@@ -88,9 +89,9 @@ STATIC_CONFIG = {
|
|
88
89
|
'default': 'pbkdf2_sha256',
|
89
90
|
'pbkdf2_sha256__default_rounds': 30000,
|
90
91
|
},
|
91
|
-
'min_username_length':
|
92
|
+
'min_username_length': 1,
|
92
93
|
'max_username_length': 26,
|
93
|
-
'min_password_length':
|
94
|
+
'min_password_length': 1,
|
94
95
|
},
|
95
96
|
'plugins': {
|
96
97
|
'repo_separator': '@',
|
@@ -101,6 +102,7 @@ STATIC_CONFIG = {
|
|
101
102
|
'dtypes': {
|
102
103
|
'min_ratio_columns_changed_for_full_astype': 0.5,
|
103
104
|
},
|
105
|
+
'exists_timeout_seconds': 5.0,
|
104
106
|
},
|
105
107
|
'setup': {
|
106
108
|
'name': 'meerschaum',
|
@@ -3,9 +3,7 @@
|
|
3
3
|
# vim:fenc=utf-8
|
4
4
|
|
5
5
|
"""
|
6
|
-
|
7
|
-
Consult implemented child classes like SQLConnector, APIConnector, MQTTConnector, or
|
8
|
-
PluginConnector for further details.
|
6
|
+
Define the parent `Connector` class.
|
9
7
|
"""
|
10
8
|
|
11
9
|
from __future__ import annotations
|
@@ -13,6 +11,11 @@ import abc
|
|
13
11
|
import copy
|
14
12
|
from meerschaum.utils.typing import Iterable, Optional, Any, Union, List, Dict
|
15
13
|
|
14
|
+
class InvalidAttributesError(Exception):
|
15
|
+
"""
|
16
|
+
Raised when the incorrect attributes are set in the Connector.
|
17
|
+
"""
|
18
|
+
|
16
19
|
class Connector(metaclass=abc.ABCMeta):
|
17
20
|
"""
|
18
21
|
The base connector class to hold connection attributes,
|
@@ -27,16 +30,10 @@ class Connector(metaclass=abc.ABCMeta):
|
|
27
30
|
Parameters
|
28
31
|
----------
|
29
32
|
type: str
|
30
|
-
The type of the
|
31
|
-
Supported values are 'sql', 'api', 'mqtt', 'plugin'.
|
33
|
+
The `type` of the connector (e.g. `sql`, `api`, `plugin`).
|
32
34
|
|
33
35
|
label: str
|
34
|
-
The label for the
|
35
|
-
|
36
|
-
pandas: str
|
37
|
-
Custom pandas implementation name.
|
38
|
-
E.g. May change to modin.pandas.
|
39
|
-
**NOTE:** This is experimental!
|
36
|
+
The `label` for the connector.
|
40
37
|
|
41
38
|
Run `mrsm edit config` and to edit connectors in the YAML file:
|
42
39
|
|
@@ -51,22 +48,40 @@ class Connector(metaclass=abc.ABCMeta):
|
|
51
48
|
"""
|
52
49
|
self._original_dict = copy.deepcopy(self.__dict__)
|
53
50
|
self._set_attributes(type=type, label=label, **kw)
|
51
|
+
self.verify_attributes(getattr(self, 'REQUIRED_ATTRIBUTES', None))
|
54
52
|
|
55
53
|
def _reset_attributes(self):
|
56
54
|
self.__dict__ = self._original_dict
|
57
55
|
|
58
56
|
def _set_attributes(
|
59
57
|
self,
|
60
|
-
|
61
|
-
label: str = "main",
|
62
|
-
pandas: Optional[str] = None,
|
58
|
+
*args,
|
63
59
|
inherit_default: bool = True,
|
64
60
|
**kw: Any
|
65
61
|
):
|
62
|
+
from meerschaum.config.static import STATIC_CONFIG
|
66
63
|
from meerschaum.utils.warnings import error
|
64
|
+
|
65
|
+
self._attributes = {}
|
66
|
+
|
67
|
+
default_label = STATIC_CONFIG['connectors']['default_label']
|
68
|
+
|
69
|
+
### NOTE: Support the legacy method of explicitly passing the type.
|
70
|
+
label = kw.get('label', None)
|
71
|
+
if label is None:
|
72
|
+
if len(args) == 2:
|
73
|
+
label = args[1]
|
74
|
+
elif len(args) == 0:
|
75
|
+
label = None
|
76
|
+
else:
|
77
|
+
label = args[0]
|
78
|
+
|
67
79
|
if label == 'default':
|
68
|
-
error(
|
69
|
-
|
80
|
+
error(
|
81
|
+
f"Label cannot be 'default'. Did you mean '{default_label}'?",
|
82
|
+
InvalidAttributesError,
|
83
|
+
)
|
84
|
+
self.__dict__['label'] = label
|
70
85
|
|
71
86
|
from meerschaum.config import get_config
|
72
87
|
conn_configs = copy.deepcopy(get_config('meerschaum', 'connectors'))
|
@@ -77,19 +92,22 @@ class Connector(metaclass=abc.ABCMeta):
|
|
77
92
|
inherit_from = 'default'
|
78
93
|
if self.type in conn_configs and inherit_from in conn_configs[self.type]:
|
79
94
|
_inherit_dict = copy.deepcopy(conn_configs[self.type][inherit_from])
|
80
|
-
self.
|
95
|
+
self._attributes.update(_inherit_dict)
|
81
96
|
|
82
|
-
### load user config into self.
|
97
|
+
### load user config into self._attributes
|
83
98
|
if self.type in conn_configs and self.label in conn_configs[self.type]:
|
84
|
-
self.
|
99
|
+
self._attributes.update(conn_configs[self.type][self.label])
|
85
100
|
|
86
|
-
### load system config into self.
|
101
|
+
### load system config into self._sys_config
|
87
102
|
### (deep copy so future Connectors don't inherit changes)
|
88
103
|
if self.type in connector_config:
|
89
|
-
self.
|
104
|
+
self._sys_config = copy.deepcopy(connector_config[self.type])
|
90
105
|
|
91
106
|
### add additional arguments or override configuration
|
92
|
-
self.
|
107
|
+
self._attributes.update(kw)
|
108
|
+
|
109
|
+
### finally, update __dict__ with _attributes.
|
110
|
+
self.__dict__.update(self._attributes)
|
93
111
|
|
94
112
|
|
95
113
|
def verify_attributes(
|
@@ -131,19 +149,66 @@ class Connector(metaclass=abc.ABCMeta):
|
|
131
149
|
if len(missing_attributes) > 0:
|
132
150
|
error(
|
133
151
|
(
|
134
|
-
"
|
135
|
-
+ f"'{self.type}:{self.label}'
|
136
|
-
+ "in the configuration file (open with `mrsm edit config`) or as arguments "
|
137
|
-
+ "for the Connector.\n\n"
|
138
|
-
+ f"Missing {items_str(list(missing_attributes))}."
|
152
|
+
f"Missing {items_str(list(missing_attributes))} "
|
153
|
+
+ f"for connector '{self.type}:{self.label}'."
|
139
154
|
),
|
155
|
+
InvalidAttributesError,
|
140
156
|
silent = True,
|
141
157
|
stack = False
|
142
158
|
)
|
143
159
|
|
144
160
|
|
145
161
|
def __str__(self):
|
162
|
+
"""
|
163
|
+
When cast to a string, return type:label.
|
164
|
+
"""
|
146
165
|
return f"{self.type}:{self.label}"
|
147
166
|
|
148
167
|
def __repr__(self):
|
168
|
+
"""
|
169
|
+
Represent the connector as type:label.
|
170
|
+
"""
|
149
171
|
return str(self)
|
172
|
+
|
173
|
+
@property
|
174
|
+
def meta(self) -> Dict[str, Any]:
|
175
|
+
"""
|
176
|
+
Return the keys needed to reconstruct this Connector.
|
177
|
+
"""
|
178
|
+
_meta = {
|
179
|
+
key: value
|
180
|
+
for key, value in self.__dict__.items()
|
181
|
+
if not str(key).startswith('_')
|
182
|
+
}
|
183
|
+
_meta.update({
|
184
|
+
'type': self.type,
|
185
|
+
'label': self.label,
|
186
|
+
})
|
187
|
+
return _meta
|
188
|
+
|
189
|
+
|
190
|
+
@property
|
191
|
+
def type(self) -> str:
|
192
|
+
"""
|
193
|
+
Return the type for this connector.
|
194
|
+
"""
|
195
|
+
_type = self.__dict__.get('type', None)
|
196
|
+
if _type is None:
|
197
|
+
import re
|
198
|
+
_type = re.sub(r'connector$', '', self.__class__.__name__.lower())
|
199
|
+
self.__dict__['type'] = _type
|
200
|
+
return _type
|
201
|
+
|
202
|
+
|
203
|
+
@property
|
204
|
+
def label(self) -> str:
|
205
|
+
"""
|
206
|
+
Return the label for this connector.
|
207
|
+
"""
|
208
|
+
_label = self.__dict__.get('label', None)
|
209
|
+
if _label is None:
|
210
|
+
from meerschaum.config.static import STATIC_CONFIG
|
211
|
+
_label = STATIC_CONFIG['connectors']['default_label']
|
212
|
+
self.__dict__['label'] = _label
|
213
|
+
return _label
|
214
|
+
|