mage-ai 0.8.47__tar.gz → 0.8.49__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.
Potentially problematic release.
This version of mage-ai might be problematic. Click here for more details.
- {mage-ai-0.8.47/mage_ai.egg-info → mage-ai-0.8.49}/PKG-INFO +2 -1
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/DataProviderResource.py +13 -1
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/git/__init__.py +1 -1
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/__init__.py +5 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/__init__.py +68 -8
- mage-ai-0.8.49/mage_ai/data_preparation/models/block/sql/clickhouse.py +38 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/utils.py +4 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/file.py +4 -3
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/pipeline.py +36 -3
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/io_config.yaml +12 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/base.py +1 -0
- mage-ai-0.8.49/mage_ai/io/clickhouse.py +237 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/config.py +19 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/io_config.py +1 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/snowflake.py +0 -1
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/sql.py +4 -1
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/constants.py +1 -1
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/404.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/404.html.html +2 -2
- mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/I2bRLK9B7Lap2LvCicTKv/_buildManifest.js +1 -0
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/2249-50d2156ae3ce5933.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/2249-59feb0a0585ef7c1.js +1 -1
- mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/2407-35c362852abff411.js +1 -0
- mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/2524-ecbe3dd70d06cbe4.js +1 -0
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/3014-26ba07eb6a78e31c.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/3014-a01e16bc067500ad.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/4506-ce5fa63b65f6fa5f.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/4506-a3c53b0033972626.js +1 -1
- mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/4741-5fbecd08232ba3f9.js +1 -0
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/5477-793cd2120261d023.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/5477-b439f211b6146a11.js +1 -1
- mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/5716-c5952e5ca9c8e139.js +1 -0
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/5872-103815a4a043489b.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/5872-1767c45ee6690ae5.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/5896-f84e336fb8877027.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/5896-10a676bcc86978cc.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/6166-5fc2768ef661e7da.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/6166-97cb3cc7d00d645c.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/6532-b0fd357eb359c127.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/6532-5f86e9e1f32adf3a.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/7400-acab00d6265bd4dc.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/7400-033fb12e7c46f62e.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/9832-c8b8970bb522f302.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/9832-f97919376d52e3bf.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-96c89b2a2689f80c.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-8a7b2b707c7038fb.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-294eccc0163c80a1.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-832218136947bf56.js +1 -1
- mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-c48a45cea6df6192.js +1 -0
- mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-dd637dcb042ff771.js +1 -0
- mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-5541c3e13297ddbc.js +1 -0
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-0e6935a2b7f8e1ed.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-caa9fade2bc783b9.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-0e02bcdfcd533830.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-1b44f28966826dbe.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-baf8bb6da01976db.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-44029312dc580504.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-d42158676a75b451.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-9b46466e066d6372.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-4049561456ea2314.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-5f78885afc7758df.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-bebeee2854c734fc.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-43f2c1658cd3d03d.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-b95afd173fb265df.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-8fb53eb8dd0267e1.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-e46a9b03e0fff91a.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-c92351b1a81f7a13.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-6a95567766a1d00e.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-ca76f5938bdff8a7.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-c259bd9d385404fa.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-4e9518882c8730b1.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-0900be641ce4e6ec.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-c46347f0308ab09a.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-25735fdf80f95015.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-45c40fb24c8a5139.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-abfaa2b15eef72a0.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-6e80afa0c9b90cdf.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-5d0c51213b9bba8e.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-12a90f932ff4fc9d.js +1 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-24eb5df948cc9a7e.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-cc54b4d4e5295101.js +1 -1
- mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/test-bd801bde63db7c9e.js +1 -0
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-6ff85ea842bde8c2.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-08774e473ea4a96b.js +1 -1
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/index.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/manage.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipeline-runs.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/settings/account/profile.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/settings/workspace/preferences.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/settings/workspace/sync-data.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/settings/workspace/users.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/settings.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/sign-in.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/terminal.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/test.html +3 -3
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/triggers.html +2 -2
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/utils/output_display.py +1 -3
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/websocket_server.py +0 -1
- {mage-ai-0.8.47 → mage-ai-0.8.49/mage_ai.egg-info}/PKG-INFO +2 -1
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai.egg-info/SOURCES.txt +41 -39
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai.egg-info/requires.txt +4 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/requirements.txt +1 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/setup.py +5 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/2083-78a438dbdc57d1e4.js +0 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/2524-6aeb9419acf5d1b4.js +0 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/4538-8a3c3e47be976ede.js +0 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/4741-acfe40cf3b06659e.js +0 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-e512333242e02c60.js +0 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-774dd41941497640.js +0 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-c6179a9e737009c9.js +0 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/test-85cf18ae78ff535c.js +0 -1
- mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/xTScbs8HLliQCDHzVPx5E/_buildManifest.js +0 -1
- {mage-ai-0.8.47 → mage-ai-0.8.49}/LICENSE +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/MANIFEST.in +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/README.md +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/api_context.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/errors.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/logging.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/middleware.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/monitors/BaseMonitor.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/monitors/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/oauth_scope.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/operations/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/operations/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/operations/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/AutocompleteItemPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/BackfillPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/BasePolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/BlockPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/BlockRunPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/ClusterPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/DataProviderPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/EventRulePolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/ExtensionOptionPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/FileContentPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/FilePolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/FileVersionPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/GitBranchPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/IntegrationDestinationPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/IntegrationSourcePolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/IntegrationSourceStreamPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/KernelPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/LogPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/MonitorStatPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/OutputPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/PipelinePolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/PipelineRunPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/PipelineSchedulePolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/ProjectPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/SecretPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/SessionPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/SyncPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/UserPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/VariablePolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/WidgetPolicy.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/AutocompleteItemPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/BackfillPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/BasePresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/BlockPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/BlockRunPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/ClusterPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/DataProviderPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/EventRulePresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/ExtensionOptionPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/FileContentPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/FilePresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/FileVersionPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/GitBranchPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/IntegrationDestinationPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/IntegrationSourcePresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/IntegrationSourceStreamPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/KernelPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/LogPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/MonitorStatPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/OutputPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/PipelinePresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/PipelineRunPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/PipelineSchedulePresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/ProjectPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/SecretPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/SessionPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/SyncPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/UserPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/VariablePresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/WidgetPresenter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/mixins/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/mixins/users.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/AutocompleteItemResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/BackfillResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/BaseResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/BlockResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/BlockRunResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/ClusterResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/DatabaseResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/EventRuleResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/ExtensionOptionResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/FileContentResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/FileResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/FileVersionResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/GenericResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/GitBranchResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/IntegrationDestinationResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/IntegrationSourceResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/IntegrationSourceStreamResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/KernelResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/LogResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/MonitorStatResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/OutputResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/PipelineResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/PipelineRunResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/PipelineScheduleResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/ProjectResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/Resource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/SecretResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/SessionResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/SyncResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/UserResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/VariableResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/WidgetResource.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/mixins/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/shared/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/shared/collections.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/shared/collective_loaders.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/result_set.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/views.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/authentication/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/authentication/ldap.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/authentication/oauth2.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/authentication/passwords.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/autocomplete/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/autocomplete/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cli/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cli/main.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cli/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/aws/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/aws/ecs_task_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/aws/emr_cluster_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/cluster_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/gcp/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/gcp/cloud_run_service_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/kubernetes/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/kubernetes/workload_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/analysis/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/analysis/calculator.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/analysis/charts.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/analysis/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/clean_column_names.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/fix_syntax_errors.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/impute_values.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/reformat_values.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/remove_collinear_columns.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_high_empty_rate.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_single_value.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/remove_duplicate_rows.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/remove_outliers.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/column_types/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/column_types/column_type_detector.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/column_types/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/data_cleaner.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/estimators/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/estimators/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/estimators/encoders.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/estimators/outlier_removal.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/pipelines/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/pipelines/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/shared/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/shared/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/statistics/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/statistics/calculator.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/action_code.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/column.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/custom_action.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/dependency_resolution.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/helpers.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/row.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/shared.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/spark/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/spark/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/spark/transformers.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/addition.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/constant.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/date_trunc.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/difference.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/distance_between.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/divide.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/formatted_date.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/if_else.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/multiply.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/string_replace.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/string_split.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/substring.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/variable_replacer.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/destinations/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/destinations/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/logger/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/logger/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/sources/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/sources/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/utils/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/utils/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/utils/parsers.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/utils/scheduler.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/decorators.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/block_executor.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/ecs_block_executor.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/executor_factory.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/gcp_cloud_run_block_executor.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/k8s_block_executor.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/pipeline_executor.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/pyspark_block_executor.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/pyspark_pipeline_executor.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/streaming_pipeline_executor.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/gcs_logger_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/logger.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/logger_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/logger_manager_factory.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/s3_logger_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/dbt/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/dbt/utils/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/errors.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/extension/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/extension/block.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/extension/great_expectations.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/extension/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/integration/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/r/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/r/templates/data_exporter.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/r/templates/data_loader.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/r/templates/transformer.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/bigquery.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/mssql.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/mysql.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/postgres.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/redshift.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/snowflake.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/trino.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/utils/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/utils/shared.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/errors.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/pipelines/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/pipelines/integration_pipeline.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/pipelines/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/triggers/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/variable.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/widget/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/widget/charts.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/widget/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/widget/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/preferences.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/repo_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/shared/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/shared/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/shared/secrets.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/shared/stream.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/shared/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/storage/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/storage/base_storage.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/storage/local_storage.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/storage/s3_storage.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/storage/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/sync/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/sync/base_sync.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/sync/git_sync.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/callbacks/default.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/custom/python/default.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/azure_blob_storage.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/bigquery.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/default.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/file.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/google_cloud_storage.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/mysql.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/postgres.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/pyspark/default.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/pyspark/s3.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/r/default.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/redshift.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/s3.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/snowflake.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/streaming/kafka.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/streaming/kinesis.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/streaming/opensearch.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/streaming/s3.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/api.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/azure_blob_storage.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/bigquery.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/default.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/file.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/google_cloud_storage.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/mysql.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/postgres.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/pyspark/default.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/pyspark/s3.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/r/default.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/redshift.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/s3.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/snowflake.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/streaming/azure_event_hub.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/streaming/kafka.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/streaming/kinesis.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/streaming/rabbitmq.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/extensions/great_expectations/default.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/pipeline/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/pipeline/metadata.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/pipeline_execution/emr_bootstrap.sh +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/pipeline_execution/spark_script.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/charts/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/custom/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/data_exporters/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/data_exporters/export_titanic_clean.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/data_loaders/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/data_loaders/load_titanic.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/dbt/profiles.yml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/extensions/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/metadata.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/pipelines/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/metadata.yaml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/requirements.txt +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/scratchpads/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/transformers/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/transformers/fill_in_missing_values.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/utils/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/bigquery.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/default.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/mysql.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/postgres.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/redshift.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/s3.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/snowflake.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/template.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/testable.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/data_warehouse_transformer.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/default.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/default_pyspark.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/default_streaming.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/r/default.r +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/suggestion_fmt.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/action.jinja +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/average.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/clean_column_name.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count_distinct.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/diff.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/first.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/fix_syntax_errors.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/impute.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/last.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/max.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/median.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/min.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/normalize.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/reformat.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove_outliers.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/select.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_down.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_up.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/standardize.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/sum.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/drop_duplicate.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/filter.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/remove.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/sort.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/utils/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/utils/block/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/utils/block/convert_content.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/variable_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/errors/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/errors/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/extensions/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/extensions/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/extensions/great_expectations/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/extensions/great_expectations/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/azure_blob_storage.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/bigquery.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/export_utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/file.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/google_cloud_storage.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/mssql.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/mysql.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/postgres.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/redshift.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/s3.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/trino.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/airflow.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/backfills/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/backfills/service.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/alembic.ini +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/database_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/errors.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/README.md +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/env.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/script.py.mako +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/053ee2c10d85_add_completed_at.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/067326f43bc3_add_variables_to_pipelinerun.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/1a737bdee53b_add_preferences_to_user.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/1d8e65aeefdd_add_settings_to_pipeline_schedule.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/1f9353eddbc6_add_secrets_table.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/2266370f589b_add_indexes_to_pipeline_run.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/26305e46df52_create_backfills_table.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/3fafd217efa7_add_event_matcher_model.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/52ab80005742_add_variables_to_pipeline_schedule.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/5cd59ec4cf1d_add_passed_sla_to_pipeline_run.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/643b6e65e814_add_unique_indexes_on_authentication_.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/6aecc9bc451c_update_schedule_type_enum.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/7ac6fed06918_add_token_column_to_pipeline_schedule_.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/847ea6602d6f_add_upstream_failed_to_block_run_status.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/84de4cdd6126_add_sla_to_pipeline_schedule.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/8971d4cd5b39_add_event_variables_and_metadata_to_.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/97ff9f55a3c0_create_users_oauth2_applications_and_.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/b01be687e537_add_started_at_to_block_run.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/c07a23ff782b_add_initial_tables.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/ec5df57a1c60_add_metrics_to_block_runs.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/models/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/models/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/models/oauth.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/models/schedules.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/models/secrets.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/process.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/execution_process_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/job_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/metrics/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/metrics/pipeline_run.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/monitor/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/monitor/monitor_stats.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/notification/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/notification/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/notification/sender.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/pipeline_scheduler.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/celery_queue.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/process_queue.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/queue.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/queue_factory.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/run_status_checker.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/triggers/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/triggers/event_trigger.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/triggers/loop_time_trigger.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/triggers/time_trigger.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/utils/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/utils/resources.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/sample_datasets/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/sample_datasets/product_purchases.csv +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/sample_datasets/salary_survey.csv +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/sample_datasets/titanic_survival.csv +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/sample_datasets/user_emails.csv +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/active_kernel.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/blocks.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/clusters.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/errors.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/events.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/integration_sources.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/projects.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/triggers.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/v1.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/app.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/client/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/client/mage.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/data/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/data/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/data/models.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/docs_server.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/execution_manager.py +0 -0
- {mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/xTScbs8HLliQCDHzVPx5E → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/I2bRLK9B7Lap2LvCicTKv}/_middlewareManifest.js +0 -0
- {mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/xTScbs8HLliQCDHzVPx5E → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/I2bRLK9B7Lap2LvCicTKv}/_ssgManifest.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/1150.1378afaa474df64a.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/1240.0819f45820d22263.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/1286-a62050b3f897c6be.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/1450.d383f64c169d4278.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/1774-aa51ef1da7217ff9.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2125-0b537dc53fe71b18.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2344-dfe377eef1a29642.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2481.0454a0e25dc7e027.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2508.724531e7f9cf5f36.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2545.8371b39c898ae92b.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/261.0a24b4ece1d29aa1.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/266.e301071d22592682.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2714-1e79e9f2e998b544.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/29107295-989a0767a635d9d5.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3453.992f4b1667e9882c.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3467.38cd0654ba6f788f.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3688-8b5ea6bc36ea7420.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3835.df296b4e4078e985.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3850-6395783d820def1c.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3873.4b3eace753998412.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3898.880191695bb05845.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4042.5e16d36209052351.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4092.536ee541241f4538.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4388.04098706f32e69e7.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/440.3ab77942f659ea0c.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4450.79f14f763d55c63e.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4454.13a2404adecaa39e.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4495-4f0340aa82e0c623.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4776.753ad29fa0a29a4a.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4804-01a10103ebe26ca8.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4883.a5bb0edbf8f3cc8f.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/5008.29c2662ecc2b04c7.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/5104.1edcf4437c471dd4.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/5164.857023e800905b6f.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/5729.0f2748e9e6dab951.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/5824.628653557e904674.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6042.c59010de9e699437.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6085-692d2f784c0504f2.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6115.0c85e507543394ea.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6116.871a682ddf535aca.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6195-d2f77d91834552cc.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6214-fbd3bb34e1f95ff4.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6434.10380ee0968636ba.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6443.7b6d2b4e51018184.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6507.d3a17777d2c294e6.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6958.8f39c585d36737a7.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/7011-81dd8269c4806d26.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/72fdc299.2d5ec188af5d0049.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/739.3d24945544b37e52.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/792.010ca00d79b2112f.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/7947.77be4bec4d47774e.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/7951.fee8b6c27c9ef777.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8018.968bf87c390e3312.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8097.b0345f30a7390c1d.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8180-8de652170ea5ed93.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8256.290ceb269b1ffe26.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/826.75268ee34f93393a.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8277.5003e1d94bb85156.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8762.dff300f86bef8573.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8789-4f858e520d46973b.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8807.a68c69c8fe0a8c01.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8849.db0d50b4d84b09a6.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8901.21d26d5a1ee473fe.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8920.5700e380a2999098.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9258.6c6ef544c701a011.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9307.d4baf7aebbcef1f0.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9361.a0820e3069f5ef74.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9363.6b811b4c86277e07.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9437.a3c32f45cf9ef69b.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9565-28e1c30511c95c2d.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9566.f8bd24768ed14ecb.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9633.40e5056ca1e2b22a.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9785.5ff26cb26d84d6a1.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9855.c4394a68322be9f8.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9927.e82a3e1e21990d77.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/bd1a647f.6050372acaa5cc3c.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/framework-7c365855dab1bf41.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/main-bb0dd5375146d7fd.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-eb08d8e4cfb01405.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/_error-235304e5badb19eb.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/index-e34a68d2f6fe16f2.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]-ca9457e1a6bced4b.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-5dd3b2221e6566e5.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings-d594a66a568306da.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-404d934deb8950d5.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/polyfills-5cd94c89d3acac5f.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/webpack-bc5e4eb2c1ff587c.js +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/css/d1e8e64d0b07af2f.css +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/favicon.ico +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Bold.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Light.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Medium.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Regular.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Retina.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-SemiBold.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/LICENSE.txt +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Black.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Bold.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Italic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Light.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Medium.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Regular.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Thin.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/LICENSE.txt +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/README.txt +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-Italic-VariableFont_wght.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Bold.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-BoldItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLight.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLightItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Italic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Light.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-LightItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Medium.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-MediumItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Regular.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBold.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBoldItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Thin.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ThinItalic.ttf +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/backfill.jpg +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/banner-shape-purple-peach.jpg +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/dashboard-api-key.webp +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/extensions/great_expectations/logo.png +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/extra.jpg +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/monitor.jpg +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/run B.jpg +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/sessions/abstract.png +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/vercel.svg +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/kernel_output_parser.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/kernels.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/logger.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/scheduler_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/server.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/subscriber.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/terminal_server.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/utils/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/utils/frontend_renderer.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/client.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/exceptions.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/server.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/ecs/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/ecs/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/ecs/ecs.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/emr.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/emr_basics.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/launcher.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/resource_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/events/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/events/events.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/s3/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/s3/s3.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/secrets_manager/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/secrets_manager/secrets_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/datadog/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/dbt/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/dbt/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/dbt/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/dbt/dbt.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/email/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/email/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/email/email.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/gcp/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/gcp/cloud_run/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/gcp/cloud_run/cloud_run.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/gcp/cloud_run/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/google_chat/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/google_chat/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/google_chat/google_chat.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/hightouch/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/hightouch/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/hightouch/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/hightouch/hightouch.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/k8s/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/k8s/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/k8s/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/k8s/job_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/metaplane/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/metaplane/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/metaplane/metaplane.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/slack/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/slack/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/slack/slack.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/stitch/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/stitch/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/stitch/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/stitch/stitch.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/teams/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/teams/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/teams/teams.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/tracking/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/tracking/metrics.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/settings/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/array.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/code.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/conversions.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/custom_types.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/dates.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/environments.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/hash.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/http_client.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/io.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/logger.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/multi.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/parsers.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/retry.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/security.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/strings.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/urls.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/amazon_s3.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/kafka.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/kinesis.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/opensearch.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/sink_factory.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/azure_event_hub.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/kafka.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/kinesis.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/rabbitmq.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/source_factory.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/operations/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/operations/base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/operations/test_operations.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/operations/test_sessions.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/operations/test_users.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/base_test.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_clean_column_names.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_fix_syntax_error.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_impute_values.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_reformat_values.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_collinear_columns.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_high_empty_rate.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_single_value.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_duplicate_rows.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_outliers.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/statistics/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/statistics/test_calculator.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/test_column_type_detector.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/shared.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_base.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_column.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_custom_actions.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_helpers.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_row.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_variable_replacer.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/git/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/git/test_git.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/block/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/block/test_sql.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/test_block.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/test_pipeline.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/test_variable.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/test_templates.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/test_variable_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/factory.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/io/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/io/test_config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/io/test_export_utils.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/db/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/db/test_models.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/notification/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/notification/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/notification/test_config.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/notification/test_sender.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/queue/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/queue/test_process_queue.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/test_execution_process_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/test_job_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/test_pipeline_scheduler.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/triggers/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/triggers/test_event_trigger.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/triggers/test_loop_time_trigger.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/aws/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/aws/s3/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/aws/s3/test_s3.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/datadog/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/datadog/test_datadog.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/k8s/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/k8s/test_job_manager.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/shared/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/shared/test_io.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/shared/test_retry.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/shared/test_security.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sinks/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sinks/test_amazon_s3.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sinks/test_kinesis.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sinks/test_opensearch.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sinks/test_sink_factory.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/test_azure_event_hub.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/test_kafka.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/test_kinesis.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/test_rabbitmq.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/test_source_factory.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/test_shared.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/utils/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/utils/code.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/utils/logger/__init__.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/utils/logger/constants.py +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai.egg-info/dependency_links.txt +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai.egg-info/entry_points.txt +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai.egg-info/top_level.txt +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/pyproject.toml +0 -0
- {mage-ai-0.8.47 → mage-ai-0.8.49}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mage-ai
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.49
|
|
4
4
|
Summary: Mage is a tool for building and deploying data pipelines.
|
|
5
5
|
Home-page: https://github.com/mage-ai/mage-ai
|
|
6
6
|
Author: Mage
|
|
@@ -12,6 +12,7 @@ Requires-Python: >=3.6
|
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
Provides-Extra: azure
|
|
14
14
|
Provides-Extra: bigquery
|
|
15
|
+
Provides-Extra: clickhouse
|
|
15
16
|
Provides-Extra: dbt
|
|
16
17
|
Provides-Extra: google-cloud-storage
|
|
17
18
|
Provides-Extra: hdf5
|
|
@@ -8,12 +8,24 @@ import yaml
|
|
|
8
8
|
|
|
9
9
|
DATA_PROVIDERS = [
|
|
10
10
|
DataSource.BIGQUERY,
|
|
11
|
+
DataSource.CLICKHOUSE,
|
|
11
12
|
DataSource.MSSQL,
|
|
12
13
|
DataSource.MYSQL,
|
|
13
14
|
DataSource.POSTGRES,
|
|
14
15
|
DataSource.REDSHIFT,
|
|
15
16
|
DataSource.SNOWFLAKE,
|
|
17
|
+
DataSource.TRINO,
|
|
16
18
|
]
|
|
19
|
+
DATA_PROVIDERS_NAME = {
|
|
20
|
+
DataSource.BIGQUERY: 'BigQuery',
|
|
21
|
+
DataSource.CLICKHOUSE: 'ClickHouse',
|
|
22
|
+
DataSource.MSSQL: 'Microsoft SQL Server',
|
|
23
|
+
DataSource.MYSQL: 'MySQL',
|
|
24
|
+
DataSource.POSTGRES: 'PostgreSQL',
|
|
25
|
+
DataSource.REDSHIFT: 'Redshift',
|
|
26
|
+
DataSource.SNOWFLAKE: 'Snowflake',
|
|
27
|
+
DataSource.TRINO: 'Trino',
|
|
28
|
+
}
|
|
17
29
|
|
|
18
30
|
|
|
19
31
|
class DataProviderResource(GenericResource):
|
|
@@ -27,7 +39,7 @@ class DataProviderResource(GenericResource):
|
|
|
27
39
|
print(exc)
|
|
28
40
|
|
|
29
41
|
collection = [dict(
|
|
30
|
-
id=ds.
|
|
42
|
+
id=DATA_PROVIDERS_NAME[ds.value],
|
|
31
43
|
profiles=[p for p in profiles if p != 'version'],
|
|
32
44
|
value=ds.value,
|
|
33
45
|
) for ds in DATA_PROVIDERS]
|
|
@@ -5,7 +5,6 @@ from mage_ai.orchestration.db.models.oauth import User
|
|
|
5
5
|
from urllib.parse import urlparse
|
|
6
6
|
import asyncio
|
|
7
7
|
import base64
|
|
8
|
-
import git
|
|
9
8
|
import os
|
|
10
9
|
import subprocess
|
|
11
10
|
|
|
@@ -15,6 +14,7 @@ REMOTE_NAME = 'mage-repo'
|
|
|
15
14
|
|
|
16
15
|
class Git:
|
|
17
16
|
def __init__(self, git_config: GitConfig):
|
|
17
|
+
import git
|
|
18
18
|
self.remote_repo_link = git_config.remote_repo_link
|
|
19
19
|
self.repo_path = git_config.repo_path or os.getcwd()
|
|
20
20
|
os.makedirs(self.repo_path, exist_ok=True)
|
|
@@ -655,6 +655,7 @@ class Block:
|
|
|
655
655
|
dynamic_block_uuid: str = None,
|
|
656
656
|
dynamic_upstream_block_uuids: List[str] = None,
|
|
657
657
|
run_settings: Dict = None,
|
|
658
|
+
**kwargs,
|
|
658
659
|
) -> Dict:
|
|
659
660
|
try:
|
|
660
661
|
if not run_all_blocks:
|
|
@@ -685,6 +686,7 @@ class Block:
|
|
|
685
686
|
dynamic_block_index=dynamic_block_index,
|
|
686
687
|
dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
|
|
687
688
|
run_settings=run_settings,
|
|
689
|
+
**kwargs,
|
|
688
690
|
)
|
|
689
691
|
block_output = self.post_process_output(output)
|
|
690
692
|
variable_mapping = dict()
|
|
@@ -867,6 +869,7 @@ class Block:
|
|
|
867
869
|
dynamic_block_index: int = None,
|
|
868
870
|
dynamic_upstream_block_uuids: List[str] = None,
|
|
869
871
|
run_settings: Dict = None,
|
|
872
|
+
**kwargs,
|
|
870
873
|
) -> Dict:
|
|
871
874
|
# Add pipeline uuid and block uuid to global_vars
|
|
872
875
|
global_vars = merge_dict(
|
|
@@ -922,6 +925,7 @@ class Block:
|
|
|
922
925
|
runtime_arguments=runtime_arguments,
|
|
923
926
|
upstream_block_uuids=upstream_block_uuids,
|
|
924
927
|
run_settings=run_settings,
|
|
928
|
+
**kwargs,
|
|
925
929
|
)
|
|
926
930
|
|
|
927
931
|
output_message = dict(output=outputs)
|
|
@@ -942,6 +946,7 @@ class Block:
|
|
|
942
946
|
runtime_arguments: Dict = None,
|
|
943
947
|
upstream_block_uuids: List[str] = None,
|
|
944
948
|
run_settings: Dict = None,
|
|
949
|
+
**kwargs,
|
|
945
950
|
) -> List:
|
|
946
951
|
decorated_functions = []
|
|
947
952
|
test_functions = []
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from mage_ai.data_preparation.models.block import Block
|
|
2
2
|
from mage_ai.data_preparation.models.block.sql import (
|
|
3
3
|
bigquery,
|
|
4
|
+
clickhouse,
|
|
4
5
|
mssql,
|
|
5
6
|
mysql,
|
|
6
7
|
postgres,
|
|
@@ -14,8 +15,12 @@ from mage_ai.data_preparation.models.block.sql.utils.shared import (
|
|
|
14
15
|
)
|
|
15
16
|
from mage_ai.data_preparation.models.constants import BlockType
|
|
16
17
|
from mage_ai.data_preparation.repo_manager import get_repo_path
|
|
17
|
-
from mage_ai.io.base import
|
|
18
|
-
|
|
18
|
+
from mage_ai.io.base import (
|
|
19
|
+
DataSource,
|
|
20
|
+
ExportWritePolicy,
|
|
21
|
+
QUERY_ROW_LIMIT,
|
|
22
|
+
)
|
|
23
|
+
from mage_ai.io.config import ConfigFileLoader, ConfigKey
|
|
19
24
|
from os import path
|
|
20
25
|
from time import sleep
|
|
21
26
|
from typing import Any, Dict, List
|
|
@@ -37,6 +42,7 @@ def execute_sql_code(
|
|
|
37
42
|
global_vars: Dict = None,
|
|
38
43
|
config_file_loader: Any = None,
|
|
39
44
|
configuration: Dict = None,
|
|
45
|
+
test_execution: bool = False,
|
|
40
46
|
) -> List[Any]:
|
|
41
47
|
configuration = configuration if configuration else block.configuration
|
|
42
48
|
use_raw_sql = configuration.get('use_raw_sql')
|
|
@@ -66,6 +72,12 @@ def execute_sql_code(
|
|
|
66
72
|
verbose=BlockType.DATA_EXPORTER == block.type,
|
|
67
73
|
)
|
|
68
74
|
|
|
75
|
+
limit = int(configuration.get('limit') or QUERY_ROW_LIMIT)
|
|
76
|
+
if test_execution:
|
|
77
|
+
limit = min(limit, QUERY_ROW_LIMIT)
|
|
78
|
+
else:
|
|
79
|
+
limit = QUERY_ROW_LIMIT
|
|
80
|
+
|
|
69
81
|
if DataSource.BIGQUERY.value == data_provider:
|
|
70
82
|
from mage_ai.io.bigquery import BigQuery
|
|
71
83
|
|
|
@@ -111,12 +123,54 @@ def execute_sql_code(
|
|
|
111
123
|
try:
|
|
112
124
|
result = loader.load(
|
|
113
125
|
f'SELECT * FROM {database}.{schema}.{table_name}',
|
|
126
|
+
limit=limit,
|
|
114
127
|
verbose=False,
|
|
115
128
|
)
|
|
116
129
|
return [result]
|
|
117
130
|
except Exception as err:
|
|
118
131
|
if '404' not in str(err):
|
|
119
132
|
raise err
|
|
133
|
+
elif DataSource.CLICKHOUSE.value == data_provider:
|
|
134
|
+
from mage_ai.io.clickhouse import ClickHouse
|
|
135
|
+
|
|
136
|
+
loader = ClickHouse.with_config(config_file_loader)
|
|
137
|
+
clickhouse.create_upstream_block_tables(
|
|
138
|
+
loader,
|
|
139
|
+
block,
|
|
140
|
+
configuration=configuration,
|
|
141
|
+
execution_partition=execution_partition,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
query_string = clickhouse.interpolate_input_data(block, query)
|
|
145
|
+
query_string = interpolate_vars(
|
|
146
|
+
query_string, global_vars=global_vars)
|
|
147
|
+
|
|
148
|
+
database = database or 'default'
|
|
149
|
+
|
|
150
|
+
if use_raw_sql:
|
|
151
|
+
return execute_raw_sql(
|
|
152
|
+
loader,
|
|
153
|
+
block,
|
|
154
|
+
query_string,
|
|
155
|
+
configuration=configuration,
|
|
156
|
+
should_query=should_query,
|
|
157
|
+
)
|
|
158
|
+
else:
|
|
159
|
+
loader.export(
|
|
160
|
+
None,
|
|
161
|
+
table_name=table_name,
|
|
162
|
+
database=database,
|
|
163
|
+
query_string=query_string,
|
|
164
|
+
**kwargs_shared,
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
if should_query:
|
|
168
|
+
return [
|
|
169
|
+
loader.load(
|
|
170
|
+
f'SELECT * FROM {database}.{table_name}',
|
|
171
|
+
verbose=False,
|
|
172
|
+
),
|
|
173
|
+
]
|
|
120
174
|
elif DataSource.MSSQL.value == data_provider:
|
|
121
175
|
from mage_ai.io.mssql import MSSQL
|
|
122
176
|
|
|
@@ -155,6 +209,7 @@ def execute_sql_code(
|
|
|
155
209
|
return [
|
|
156
210
|
loader.load(
|
|
157
211
|
f'SELECT * FROM {table_name}',
|
|
212
|
+
limit=limit,
|
|
158
213
|
verbose=False,
|
|
159
214
|
),
|
|
160
215
|
]
|
|
@@ -193,6 +248,7 @@ def execute_sql_code(
|
|
|
193
248
|
return [
|
|
194
249
|
loader.load(
|
|
195
250
|
f'SELECT * FROM {table_name}',
|
|
251
|
+
limit=limit,
|
|
196
252
|
verbose=False,
|
|
197
253
|
),
|
|
198
254
|
]
|
|
@@ -231,6 +287,7 @@ def execute_sql_code(
|
|
|
231
287
|
return [
|
|
232
288
|
loader.load(
|
|
233
289
|
f'SELECT * FROM {schema}.{table_name}',
|
|
290
|
+
limit=limit,
|
|
234
291
|
verbose=False,
|
|
235
292
|
),
|
|
236
293
|
]
|
|
@@ -269,6 +326,7 @@ def execute_sql_code(
|
|
|
269
326
|
return [
|
|
270
327
|
loader.load(
|
|
271
328
|
f'SELECT * FROM {schema}.{table_name}',
|
|
329
|
+
limit=limit,
|
|
272
330
|
verbose=False,
|
|
273
331
|
),
|
|
274
332
|
]
|
|
@@ -316,6 +374,7 @@ def execute_sql_code(
|
|
|
316
374
|
database=database,
|
|
317
375
|
schema=schema,
|
|
318
376
|
table_name=table_name,
|
|
377
|
+
limit=limit,
|
|
319
378
|
verbose=False,
|
|
320
379
|
),
|
|
321
380
|
]
|
|
@@ -344,21 +403,20 @@ def execute_sql_code(
|
|
|
344
403
|
else:
|
|
345
404
|
loader.export(
|
|
346
405
|
None,
|
|
347
|
-
table_name,
|
|
348
|
-
database,
|
|
349
406
|
schema,
|
|
407
|
+
table_name,
|
|
350
408
|
if_exists=export_write_policy,
|
|
351
409
|
query_string=query_string,
|
|
352
410
|
verbose=BlockType.DATA_EXPORTER == block.type,
|
|
353
411
|
)
|
|
354
412
|
|
|
355
413
|
if should_query:
|
|
414
|
+
catalog = config_file_loader[ConfigKey.TRINO_CATALOG]
|
|
415
|
+
|
|
356
416
|
return [
|
|
357
417
|
loader.load(
|
|
358
|
-
f'SELECT * FROM "{
|
|
359
|
-
|
|
360
|
-
schema=schema,
|
|
361
|
-
table_name=table_name,
|
|
418
|
+
f'SELECT * FROM "{catalog}"."{schema}"."{table_name}"',
|
|
419
|
+
limit=limit,
|
|
362
420
|
verbose=False,
|
|
363
421
|
),
|
|
364
422
|
]
|
|
@@ -449,9 +507,11 @@ class SQLBlock(Block):
|
|
|
449
507
|
global_vars=None,
|
|
450
508
|
**kwargs,
|
|
451
509
|
) -> List:
|
|
510
|
+
test_execution = kwargs.get('test_execution')
|
|
452
511
|
return execute_sql_code(
|
|
453
512
|
self,
|
|
454
513
|
custom_code or self.content,
|
|
455
514
|
execution_partition=execution_partition,
|
|
456
515
|
global_vars=global_vars,
|
|
516
|
+
test_execution=test_execution,
|
|
457
517
|
)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from mage_ai.data_preparation.models.block.sql.utils.shared import (
|
|
2
|
+
create_upstream_block_tables as create_upstream_block_tables_orig,
|
|
3
|
+
interpolate_input,
|
|
4
|
+
)
|
|
5
|
+
from mage_ai.io.config import ConfigKey
|
|
6
|
+
from typing import Dict
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def create_upstream_block_tables(
|
|
10
|
+
loader,
|
|
11
|
+
block,
|
|
12
|
+
cascade_on_drop: bool = False,
|
|
13
|
+
configuration: Dict = None,
|
|
14
|
+
execution_partition: str = None,
|
|
15
|
+
cache_upstream_dbt_models: bool = False,
|
|
16
|
+
):
|
|
17
|
+
create_upstream_block_tables_orig(
|
|
18
|
+
loader,
|
|
19
|
+
block,
|
|
20
|
+
cascade_on_drop,
|
|
21
|
+
configuration,
|
|
22
|
+
execution_partition,
|
|
23
|
+
cache_upstream_dbt_models,
|
|
24
|
+
cache_keys=[
|
|
25
|
+
ConfigKey.CLICKHOUSE_DATABASE,
|
|
26
|
+
ConfigKey.CLICKHOUSE_HOST,
|
|
27
|
+
ConfigKey.CLICKHOUSE_PORT,
|
|
28
|
+
],
|
|
29
|
+
no_schema=True,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def interpolate_input_data(block, query):
|
|
34
|
+
return interpolate_input(
|
|
35
|
+
block,
|
|
36
|
+
query,
|
|
37
|
+
lambda db, schema, tn: tn,
|
|
38
|
+
)
|
|
@@ -163,8 +163,10 @@ def create_block_runs_from_dynamic_block(
|
|
|
163
163
|
skip_creating_downstream = True
|
|
164
164
|
break
|
|
165
165
|
|
|
166
|
-
|
|
167
|
-
|
|
166
|
+
down_uuids_as_ancestors = []
|
|
167
|
+
for down in dynamic_ancestor.downstream_blocks:
|
|
168
|
+
if down.uuid in ancestors_uuids and not should_reduce_output(down):
|
|
169
|
+
down_uuids_as_ancestors.append(down.uuid)
|
|
168
170
|
skip_creating_downstream = len(down_uuids_as_ancestors) >= 2
|
|
169
171
|
|
|
170
172
|
# Only create downstream block runs if it doesn’t have dynamically created upstream
|
|
@@ -20,7 +20,7 @@ INACCESSIBLE_DIRS = frozenset(['__pycache__'])
|
|
|
20
20
|
MAX_DEPTH = 30
|
|
21
21
|
MAX_NUMBER_OF_FILE_VERSIONS = int(os.getenv('MAX_NUMBER_OF_FILE_VERSIONS', 100) or 100)
|
|
22
22
|
|
|
23
|
-
PIPELINES_FOLDER_PREFIX = 'pipelines
|
|
23
|
+
PIPELINES_FOLDER_PREFIX = f'pipelines{os.sep}'
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class File:
|
|
@@ -118,8 +118,9 @@ class File:
|
|
|
118
118
|
filename: str,
|
|
119
119
|
) -> Tuple[str, str]:
|
|
120
120
|
return os.path.join(
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
repo_path,
|
|
122
|
+
FILE_VERSIONS_DIR,
|
|
123
|
+
dir_path.replace(repo_path, os.path.join(repo_path, FILE_VERSIONS_DIR)),
|
|
123
124
|
filename,
|
|
124
125
|
)
|
|
125
126
|
|
|
@@ -21,7 +21,7 @@ from mage_ai.data_preparation.templates.utils import copy_template_directory
|
|
|
21
21
|
from mage_ai.data_preparation.variable_manager import VariableManager
|
|
22
22
|
from mage_ai.orchestration.db import db_connection, safe_db_query
|
|
23
23
|
from mage_ai.shared.array import find
|
|
24
|
-
from mage_ai.shared.hash import extract, ignore_keys, merge_dict
|
|
24
|
+
from mage_ai.shared.hash import extract, index_by, ignore_keys, merge_dict
|
|
25
25
|
from mage_ai.shared.io import safe_write, safe_write_async
|
|
26
26
|
from mage_ai.shared.strings import format_enum
|
|
27
27
|
from mage_ai.shared.utils import clean_name
|
|
@@ -674,6 +674,12 @@ class Pipeline:
|
|
|
674
674
|
)
|
|
675
675
|
should_save = True
|
|
676
676
|
|
|
677
|
+
blocks = data.get('blocks', [])
|
|
678
|
+
|
|
679
|
+
if blocks:
|
|
680
|
+
if not should_save and self.__update_block_order(blocks):
|
|
681
|
+
should_save = True
|
|
682
|
+
|
|
677
683
|
if should_save:
|
|
678
684
|
self.save()
|
|
679
685
|
|
|
@@ -682,8 +688,8 @@ class Pipeline:
|
|
|
682
688
|
|
|
683
689
|
arr = []
|
|
684
690
|
|
|
685
|
-
if
|
|
686
|
-
arr.append(('blocks',
|
|
691
|
+
if blocks:
|
|
692
|
+
arr.append(('blocks', blocks, self.blocks_by_uuid))
|
|
687
693
|
if 'widgets' in data:
|
|
688
694
|
arr.append(('widgets', data['widgets'], self.widgets_by_uuid))
|
|
689
695
|
|
|
@@ -778,6 +784,33 @@ class Pipeline:
|
|
|
778
784
|
if should_save_async:
|
|
779
785
|
await self.save_async(widget=widget)
|
|
780
786
|
|
|
787
|
+
def __update_block_order(self, blocks: List[Dict]) -> bool:
|
|
788
|
+
uuids_new = [b['uuid'] for b in blocks]
|
|
789
|
+
uuids_old = [b['uuid'] for b in self.block_configs]
|
|
790
|
+
|
|
791
|
+
min_length = min(len(uuids_new), len(uuids_old))
|
|
792
|
+
|
|
793
|
+
# If there are no blocks or the order has changed
|
|
794
|
+
if min_length == 0 or uuids_new[:min_length] == uuids_old[:min_length]:
|
|
795
|
+
return False
|
|
796
|
+
|
|
797
|
+
block_configs_by_uuids = index_by(lambda x: x['uuid'], self.block_configs)
|
|
798
|
+
|
|
799
|
+
block_configs = []
|
|
800
|
+
blocks_by_uuid = {}
|
|
801
|
+
|
|
802
|
+
for block_uuid in uuids_new:
|
|
803
|
+
if block_uuid in block_configs_by_uuids:
|
|
804
|
+
block_configs.append(block_configs_by_uuids[block_uuid])
|
|
805
|
+
|
|
806
|
+
if block_uuid in self.blocks_by_uuid:
|
|
807
|
+
blocks_by_uuid[block_uuid] = self.blocks_by_uuid[block_uuid]
|
|
808
|
+
|
|
809
|
+
self.block_configs = block_configs
|
|
810
|
+
self.blocks_by_uuid = blocks_by_uuid
|
|
811
|
+
|
|
812
|
+
return True
|
|
813
|
+
|
|
781
814
|
def __add_block_to_mapping(
|
|
782
815
|
self,
|
|
783
816
|
blocks_by_uuid,
|
|
@@ -10,6 +10,12 @@ default:
|
|
|
10
10
|
AZURE_CLIENT_SECRET: "{{ env_var('AZURE_CLIENT_SECRET') }}"
|
|
11
11
|
AZURE_STORAGE_ACCOUNT_NAME: "{{ env_var('AZURE_STORAGE_ACCOUNT_NAME') }}"
|
|
12
12
|
AZURE_TENANT_ID: "{{ env_var('AZURE_TENANT_ID') }}"
|
|
13
|
+
CLICKHOUSE_DATABASE: default
|
|
14
|
+
CLICKHOUSE_HOST: host.docker.internal
|
|
15
|
+
CLICKHOUSE_INTERFACE: http
|
|
16
|
+
CLICKHOUSE_PASSWORD: null
|
|
17
|
+
CLICKHOUSE_PORT: 8123
|
|
18
|
+
CLICKHOUSE_USERNAME: null
|
|
13
19
|
GOOGLE_SERVICE_ACC_KEY:
|
|
14
20
|
type: service_account
|
|
15
21
|
project_id: project-id
|
|
@@ -46,3 +52,9 @@ default:
|
|
|
46
52
|
SNOWFLAKE_DEFAULT_DB: optional_default_database
|
|
47
53
|
SNOWFLAKE_DEFAULT_SCHEMA: optional_default_schema
|
|
48
54
|
SNOWFLAKE_ROLE: role
|
|
55
|
+
TRINO_CATALOG: catalog
|
|
56
|
+
TRINO_HOST: '127.0.0.1'
|
|
57
|
+
TRINO_PASSWORD: pasword
|
|
58
|
+
TRINO_PORT: 8080
|
|
59
|
+
TRINO_SCHEMA: schema
|
|
60
|
+
TRINO_USER: user
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
from mage_ai.io.base import BaseSQLDatabase, ExportWritePolicy, QUERY_ROW_LIMIT
|
|
2
|
+
from mage_ai.io.config import BaseConfigLoader, ConfigKey
|
|
3
|
+
from mage_ai.io.export_utils import (
|
|
4
|
+
clean_df_for_export,
|
|
5
|
+
infer_dtypes,
|
|
6
|
+
)
|
|
7
|
+
from pandas import DataFrame
|
|
8
|
+
from typing import Dict, List, Union
|
|
9
|
+
import clickhouse_connect
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ClickHouse(BaseSQLDatabase):
|
|
13
|
+
"""
|
|
14
|
+
Handles data transfer betwee a ClickHouse data warehouse and the Mage app.
|
|
15
|
+
"""
|
|
16
|
+
def __init__(self, **kwargs) -> None:
|
|
17
|
+
"""
|
|
18
|
+
Initializes settings for connecting to a ClickHouse warehouse.
|
|
19
|
+
|
|
20
|
+
To authenticate (and authorize) access to a ClickHouse warehouse,
|
|
21
|
+
credentials, i.e., username and password, must be provided.
|
|
22
|
+
|
|
23
|
+
All keyword arguments will be passed to the ClickHouse client.
|
|
24
|
+
"""
|
|
25
|
+
if kwargs.get('verbose') is not None:
|
|
26
|
+
kwargs.pop('verbose')
|
|
27
|
+
super().__init__(verbose=kwargs.get('verbose', True))
|
|
28
|
+
with self.printer.print_msg('Connecting to ClickHouse'):
|
|
29
|
+
self.client = clickhouse_connect.get_client(**kwargs)
|
|
30
|
+
|
|
31
|
+
@classmethod
|
|
32
|
+
def with_config(cls, config: BaseConfigLoader) -> 'ClickHouse':
|
|
33
|
+
"""
|
|
34
|
+
Initializes ClickHouse client from configuration loader
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
config (BaseConfigLoader): Configuration loader object
|
|
38
|
+
"""
|
|
39
|
+
if ConfigKey.CLICKHOUSE_HOST not in config:
|
|
40
|
+
raise ValueError(
|
|
41
|
+
'No valid configuration settings found for ClickHouse. '
|
|
42
|
+
'You must specify host.'
|
|
43
|
+
)
|
|
44
|
+
return cls(
|
|
45
|
+
database=config[ConfigKey.CLICKHOUSE_DATABASE],
|
|
46
|
+
host=config[ConfigKey.CLICKHOUSE_HOST],
|
|
47
|
+
interface=config[ConfigKey.CLICKHOUSE_INTERFACE],
|
|
48
|
+
password=config[ConfigKey.CLICKHOUSE_PASSWORD],
|
|
49
|
+
port=config[ConfigKey.CLICKHOUSE_PORT],
|
|
50
|
+
username=config[ConfigKey.CLICKHOUSE_USERNAME],
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
def execute(self, command_string: str, **kwargs) -> None:
|
|
54
|
+
"""
|
|
55
|
+
Sends command to the connected ClickHouse warehouse.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
command_string (str): Command to execute on the ClickHouse warehouse.
|
|
59
|
+
**kwargs: Additional arguments to pass to command, such as configurations
|
|
60
|
+
"""
|
|
61
|
+
with self.printer.print_msg(f'Executing query \'{command_string}\''):
|
|
62
|
+
command_string = self._clean_query(command_string)
|
|
63
|
+
self.client.command(command_string, **kwargs)
|
|
64
|
+
|
|
65
|
+
def execute_query(
|
|
66
|
+
self,
|
|
67
|
+
query: str,
|
|
68
|
+
parameters: Dict = None,
|
|
69
|
+
**kwargs,
|
|
70
|
+
) -> DataFrame:
|
|
71
|
+
"""
|
|
72
|
+
Sends query to the connected ClickHouse warehouse.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
query (str): Query to execute on the ClickHouse warehouse.
|
|
76
|
+
**kwargs: Additional arguments to pass to query, such as query configurations
|
|
77
|
+
"""
|
|
78
|
+
query = self._clean_query(query)
|
|
79
|
+
with self.printer.print_msg(f'Executing query \'{query}\''):
|
|
80
|
+
result = self.client.query_df(query, parameters=parameters)
|
|
81
|
+
|
|
82
|
+
return result
|
|
83
|
+
|
|
84
|
+
def execute_queries(
|
|
85
|
+
self,
|
|
86
|
+
queries: List[str],
|
|
87
|
+
query_variables: List[Dict] = None,
|
|
88
|
+
fetch_query_at_indexes: List[bool] = None,
|
|
89
|
+
**kwargs,
|
|
90
|
+
) -> List:
|
|
91
|
+
results = []
|
|
92
|
+
|
|
93
|
+
for idx, query in enumerate(queries):
|
|
94
|
+
parameters = query_variables[idx] \
|
|
95
|
+
if query_variables and idx < len(query_variables) \
|
|
96
|
+
else {}
|
|
97
|
+
query = self._clean_query(query)
|
|
98
|
+
|
|
99
|
+
if fetch_query_at_indexes and idx < len(fetch_query_at_indexes) and \
|
|
100
|
+
fetch_query_at_indexes[idx]:
|
|
101
|
+
result = self.client.query_df(query, parameters=parameters)
|
|
102
|
+
else:
|
|
103
|
+
result = self.client.command(query, parameters=parameters)
|
|
104
|
+
|
|
105
|
+
results.append(result)
|
|
106
|
+
|
|
107
|
+
return results
|
|
108
|
+
|
|
109
|
+
def load(
|
|
110
|
+
self,
|
|
111
|
+
query_string: str,
|
|
112
|
+
limit: int = QUERY_ROW_LIMIT,
|
|
113
|
+
display_query: Union[str, None] = None,
|
|
114
|
+
verbose: bool = True,
|
|
115
|
+
**kwargs,
|
|
116
|
+
) -> DataFrame:
|
|
117
|
+
"""
|
|
118
|
+
Loads data from ClickHouse into a Pandas data frame based on the query given.
|
|
119
|
+
This will fail if the query returns no data from the database. When a select query
|
|
120
|
+
is provided, this function will load at maximum 10,000,000 rows of data. To operate on more
|
|
121
|
+
data, consider performing data transformations in warehouse.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
query_string (str): Query to fetch a table or subset of a table.
|
|
125
|
+
limit (int, Optional): The number of rows to limit the loaded dataframe to. Defaults to
|
|
126
|
+
10,000,000.
|
|
127
|
+
**kwargs: Additional arguments to pass to query, such as query configurations
|
|
128
|
+
|
|
129
|
+
Returns:
|
|
130
|
+
DataFrame: Data frame associated with the given query.
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
print_message = 'Loading data'
|
|
134
|
+
if verbose:
|
|
135
|
+
print_message += ' with query'
|
|
136
|
+
|
|
137
|
+
if display_query:
|
|
138
|
+
for line in display_query.split('\n'):
|
|
139
|
+
print_message += f'\n{line}'
|
|
140
|
+
else:
|
|
141
|
+
print_message += f'\n{query_string}'
|
|
142
|
+
|
|
143
|
+
query_string = self._clean_query(query_string)
|
|
144
|
+
|
|
145
|
+
with self.printer.print_msg(print_message):
|
|
146
|
+
return self.client.query_df(
|
|
147
|
+
self._enforce_limit(query_string, limit), **kwargs
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
def export(
|
|
151
|
+
self,
|
|
152
|
+
df: DataFrame,
|
|
153
|
+
table_name: str,
|
|
154
|
+
database: str = 'default',
|
|
155
|
+
if_exists: str = 'append',
|
|
156
|
+
index: bool = False,
|
|
157
|
+
query_string: Union[str, None] = None,
|
|
158
|
+
create_table_statement: Union[str, None] = None,
|
|
159
|
+
verbose: bool = True,
|
|
160
|
+
**kwargs,
|
|
161
|
+
) -> None:
|
|
162
|
+
"""
|
|
163
|
+
Exports a Pandas data frame to a ClickHouse warehouse based on the table name.
|
|
164
|
+
If table doesn't exist, the table is automatically created.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
df (DataFrame): Data frame to export
|
|
168
|
+
table_name (str): Name of the table to export data to (excluding database).
|
|
169
|
+
If this table exists, the table schema must match the data frame schema.
|
|
170
|
+
If this table doesn't exist, query_string must be specified to create the new table.
|
|
171
|
+
database (str): Name of the database in which the table is located.
|
|
172
|
+
if_exists (str, optional): Specifies export policy if table exists. Either
|
|
173
|
+
- `'fail'`: throw an error.
|
|
174
|
+
- `'replace'`: drops existing table and creates new table of same name.
|
|
175
|
+
- `'append'`: appends data frame to existing table. In this case the schema must
|
|
176
|
+
match the original table.
|
|
177
|
+
Defaults to `'append'`.
|
|
178
|
+
**kwargs: Additional arguments to pass to writer
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
if type(df) is dict:
|
|
182
|
+
df = DataFrame([df])
|
|
183
|
+
elif type(df) is list:
|
|
184
|
+
df = DataFrame(df)
|
|
185
|
+
|
|
186
|
+
if not query_string:
|
|
187
|
+
if index:
|
|
188
|
+
df = df.reset_index()
|
|
189
|
+
|
|
190
|
+
dtypes = infer_dtypes(df)
|
|
191
|
+
df = clean_df_for_export(df, self.clean, dtypes)
|
|
192
|
+
|
|
193
|
+
def __process(database: Union[str, None]):
|
|
194
|
+
|
|
195
|
+
df_existing = self.client.query_df(f"""
|
|
196
|
+
EXISTS TABLE {database}.{table_name}
|
|
197
|
+
""")
|
|
198
|
+
|
|
199
|
+
table_exists = not df_existing.empty and df_existing.iloc[0, 0] == 1
|
|
200
|
+
should_create_table = not table_exists
|
|
201
|
+
|
|
202
|
+
if table_exists:
|
|
203
|
+
if ExportWritePolicy.FAIL == if_exists:
|
|
204
|
+
raise ValueError(
|
|
205
|
+
f'Table \'{table_name}\' already'
|
|
206
|
+
' exists in database {database}.',
|
|
207
|
+
)
|
|
208
|
+
elif ExportWritePolicy.REPLACE == if_exists:
|
|
209
|
+
self.client.command(
|
|
210
|
+
f'DROP TABLE IF EXISTS {database}.{table_name}')
|
|
211
|
+
should_create_table = True
|
|
212
|
+
|
|
213
|
+
if query_string:
|
|
214
|
+
self.client.command(f'USE {database}')
|
|
215
|
+
|
|
216
|
+
if should_create_table:
|
|
217
|
+
self.client.command(f"""
|
|
218
|
+
CREATE TABLE IF NOT EXISTS {database}.{table_name} ENGINE = Memory AS
|
|
219
|
+
{query_string}
|
|
220
|
+
""")
|
|
221
|
+
else:
|
|
222
|
+
self.client.command(f"""
|
|
223
|
+
INSERT INTO {database}.{table_name}
|
|
224
|
+
{query_string}
|
|
225
|
+
""")
|
|
226
|
+
else:
|
|
227
|
+
if should_create_table:
|
|
228
|
+
self.client.command(create_table_statement)
|
|
229
|
+
|
|
230
|
+
self.client.insert_df(f'{database}.{table_name}', df)
|
|
231
|
+
|
|
232
|
+
if verbose:
|
|
233
|
+
with self.printer.print_msg(
|
|
234
|
+
f'Exporting data to table \'{database}.{table_name}\''):
|
|
235
|
+
__process(database=database)
|
|
236
|
+
else:
|
|
237
|
+
__process(database=database)
|