mage-ai 0.9.73__py3-none-any.whl → 0.9.75__py3-none-any.whl
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/ai/constants.py +2 -2
- mage_ai/ai/llm_pipeline_wizard.py +11 -7
- mage_ai/ai/openai_client.py +18 -5
- mage_ai/api/constants.py +4 -5
- mage_ai/api/oauth_scope.py +2 -2
- mage_ai/api/operations/constants.py +2 -2
- mage_ai/api/presenters/SyncPresenter.py +4 -1
- mage_ai/authentication/oauth/constants.py +2 -2
- mage_ai/authentication/operation_history/constants.py +2 -2
- mage_ai/authentication/permissions/constants.py +5 -6
- mage_ai/cache/constants.py +2 -2
- mage_ai/cache/dbt/constants.py +2 -3
- mage_ai/cluster_manager/constants.py +2 -2
- mage_ai/cluster_manager/kubernetes/workload_manager.py +3 -2
- mage_ai/command_center/constants.py +13 -13
- mage_ai/data_cleaner/column_types/constants.py +2 -2
- mage_ai/data_cleaner/transformer_actions/column.py +19 -7
- mage_ai/data_cleaner/transformer_actions/constants.py +10 -9
- mage_ai/data_integrations/destinations/constants.py +1 -0
- mage_ai/data_integrations/sources/constants.py +2 -0
- mage_ai/data_preparation/git/utils.py +4 -1
- mage_ai/data_preparation/logging/__init__.py +2 -2
- mage_ai/data_preparation/logging/logger.py +3 -3
- mage_ai/data_preparation/models/block/__init__.py +6 -0
- mage_ai/data_preparation/models/block/data_integration/constants.py +2 -2
- mage_ai/data_preparation/models/block/dbt/constants.py +3 -3
- mage_ai/data_preparation/models/block/dynamic/factory.py +40 -3
- mage_ai/data_preparation/models/block/dynamic/utils.py +31 -33
- mage_ai/data_preparation/models/block/dynamic/variables.py +1 -1
- mage_ai/data_preparation/models/block/settings/dynamic/constants.py +3 -3
- mage_ai/data_preparation/models/block/settings/dynamic/mixins.py +63 -4
- mage_ai/data_preparation/models/block/settings/global_data_products/models.py +2 -2
- mage_ai/data_preparation/models/constants.py +11 -11
- mage_ai/data_preparation/models/global_hooks/constants.py +7 -8
- mage_ai/data_preparation/models/global_hooks/models.py +5 -5
- mage_ai/data_preparation/models/pipeline.py +5 -0
- mage_ai/data_preparation/models/project/constants.py +2 -2
- mage_ai/data_preparation/models/triggers/__init__.py +6 -4
- mage_ai/data_preparation/models/variables/constants.py +5 -5
- mage_ai/data_preparation/models/widget/constants.py +5 -5
- mage_ai/data_preparation/preferences.py +9 -16
- mage_ai/data_preparation/repo_manager.py +2 -2
- mage_ai/data_preparation/sync/__init__.py +2 -2
- mage_ai/data_preparation/templates/data_exporters/streaming/elasticsearch.yaml +3 -0
- mage_ai/data_preparation/templates/data_exporters/streaming/generic_python.py +1 -1
- mage_ai/data_preparation/templates/data_loaders/streaming/nats.yaml +9 -3
- mage_ai/errors/constants.py +2 -2
- mage_ai/io/base.py +57 -16
- mage_ai/io/config.py +3 -3
- mage_ai/io/export_utils.py +2 -2
- mage_ai/io/google_cloud_storage.py +3 -2
- mage_ai/io/io_config.py +3 -2
- mage_ai/io/oracledb.py +2 -4
- mage_ai/io/postgres.py +40 -20
- mage_ai/io/utils.py +18 -0
- mage_ai/kernels/magic/constants.py +4 -4
- mage_ai/orchestration/constants.py +2 -2
- mage_ai/orchestration/db/__init__.py +3 -3
- mage_ai/orchestration/db/constants.py +2 -2
- mage_ai/orchestration/db/models/oauth.py +5 -5
- mage_ai/orchestration/db/models/schedules.py +28 -8
- mage_ai/orchestration/db/models/schedules_project_platform.py +10 -8
- mage_ai/orchestration/job_manager.py +2 -2
- mage_ai/orchestration/monitor/monitor_stats.py +2 -2
- mage_ai/orchestration/notification/config.py +2 -2
- mage_ai/orchestration/pipeline_scheduler_original.py +4 -12
- mage_ai/orchestration/queue/config.py +2 -2
- mage_ai/orchestration/queue/process_queue.py +3 -3
- mage_ai/presenters/charts/data_sources/constants.py +2 -2
- mage_ai/presenters/interactions/constants.py +4 -4
- mage_ai/presenters/pages/models/constants.py +4 -4
- mage_ai/server/constants.py +1 -1
- mage_ai/server/frontend_dist/404.html +3 -3
- mage_ai/server/frontend_dist/_next/static/38-PtskJFUTYUpRhT1qF_/_buildManifest.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/{1187-839336d276186105.js → 1187-4560c3895e1d7099.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/{1598-0adca9dce3ba4c60.js → 1598-cbf3f5a6078fc3f5.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/2717-638a944d24d5abde.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3548-36f746b1824004f2.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/3763-39a5174f6a3924db.js → frontend_dist/_next/static/chunks/3763-aabe2703076636b0.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3782-3e2acb5ed45b582b.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/449-f689774546860ca4.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/5627-d5e559859dd0e1e0.js → frontend_dist/_next/static/chunks/5627-10e76bafa5a26f5f.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/{5699-e49718dfc9eb2854.js → 5699-e99379e332bd0b41.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/{7966-163da2621b8c987c.js → 7966-a5a7db345ce81263.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{_app-663c909dcda4c23a.js → _app-13bf3b7dcef50c29.js} +2 -2
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/compute-ed67fa8e81662e8b.js → frontend_dist/_next/static/chunks/pages/compute-9e2dea78024e3bb4.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/files-e0ecd7ced09a63b2.js → frontend_dist/_next/static/chunks/pages/files-e08c7fe76f968f9c.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-data-products/{[...slug]-c7a729477ecda50e.js → [...slug]-30c3807057a4e65b.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{global-data-products-fd6ae6a358a60a0c.js → global-data-products-8dcb3b31af9e0e39.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-8e50243797a7fe59.js → frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-85a64b64d27214b6.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{global-hooks-d0c003446332dc0d.js → global-hooks-4ff959d51b8a9502.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{files-a69ed8e9f814490c.js → files-d08a460641d0efaa.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage/overview-1aad7093c6d39257.js → frontend_dist/_next/static/chunks/pages/manage/overview-aae747f487e08d51.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{pipeline-runs-528d30e0d13b0cc7.js → pipeline-runs-09a842d64a6ada62.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{settings-fb9201d9cf63031d.js → settings-2e98e57d9376a458.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/{[user]-000f5a980a07da39.js → [user]-7be6e41ad66089bb.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-e4e613f6e817a733.js → frontend_dist/_next/static/chunks/pages/manage/users/new-4c088833063bfa07.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{users-a5e9d77ed5b50205.js → users-b99379d0aa6a8c25.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage-34d718b8a4066c23.js → frontend_dist/_next/static/chunks/pages/manage-868fcd8cbeb265f0.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{oauth-3bfd1b8d7f036726.js → oauth-6ceceb62191dfe8a.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-e51cd04bd4d1fffe.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{pipeline-runs-5f8c100e648efa8a.js → pipeline-runs-2d0136b51b57de93.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/{[...slug]-688c652f3296bb9c.js → [...slug]-1ad5238742e25b4c.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-bd11e87d026bfbf9.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{dashboard-1236e36d39b1637d.js → dashboard-0f4f47f721b0723f.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-432da20df91511fb.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-fe91dfb0091f6bc6.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-0d68d4bf6290fefb.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-cf794b2d22a80f31.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-9254358d58f07714.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-a964caef91bed9e1.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{monitors-821001e690caebe2.js → monitors-80bebb4401eefe25.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-2eae7cb017027682.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs-2d4b2a0800a66b33.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-e3d7fdfeb7f806f7.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{settings-cd49372ae1702963.js → settings-0abf8a1b7243f93b.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-707ed8ca942ca802.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/{[...slug]-259143ed3cf59e31.js → [...slug]-8429f17d4146e1ec.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-193045d9836d8d80.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-b578b075a8d857e3.js → frontend_dist/_next/static/chunks/pages/pipelines-38187954b6ec4b40.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks/{[...slug]-5eeec927e4202b63.js → [...slug]-6834ae87bd668cb2.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks-fbe9ad995d46d837.js → frontend_dist/_next/static/chunks/pages/platform/global-hooks-b3f7309a23e592b2.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/{profile-fc659962d4015cb3.js → profile-f8b7374385e1f1bf.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-8de68502a9afa299.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-a4f88c334414402b.js → frontend_dist/_next/static/chunks/pages/settings/platform/settings-50fb6a34f3913f1f.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-4deb9579ef99a3c6.js → [...slug]-2e5c098c21ea32b7.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{permissions-e0cda2f2bfce8d61.js → permissions-54e4b15b9585bfc4.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-040f83d75d0f6537.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-910257d16c604ebd.js → [...slug]-95088f43034e3c95.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{roles-4f7a0756806cee34.js → roles-e9149e1fcf218f42.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{sync-data-208d6f955204d704.js → sync-data-75b67ae4a00818ef.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users/{[...slug]-c89dc67e5a1706a8.js → [...slug]-557dda05ca6c6124.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{users-5212c01a9dc558da.js → users-3ee783f5139c76a1.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{sign-in-054b33312d3193c3.js → sign-in-593c40985d63fcf7.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/templates/{[...slug]-b6ed6a5d818bfd20.js → [...slug]-252c4b6b818345d5.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{templates-852357bc983af2ea.js → templates-ca528bc607753ab8.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/terminal-1f9c56d671bbc67d.js → frontend_dist/_next/static/chunks/pages/terminal-287362c1defcc96b.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/test-2f83af8c9f1378fe.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-d9de73fb799efed8.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/version-control-ae3469b992a341d6.js → frontend_dist/_next/static/chunks/pages/version-control-573f0225d7a703ed.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/{webpack-43534cc51fce8644.js → webpack-0bc44da590c7cf85.js} +1 -1
- mage_ai/server/frontend_dist/block-layout.html +3 -3
- mage_ai/server/frontend_dist/compute.html +6 -6
- mage_ai/server/frontend_dist/files.html +6 -6
- mage_ai/server/frontend_dist/global-data-products/[...slug].html +6 -6
- mage_ai/server/frontend_dist/global-data-products.html +6 -6
- mage_ai/server/frontend_dist/global-hooks/[...slug].html +6 -6
- mage_ai/server/frontend_dist/global-hooks.html +6 -6
- mage_ai/server/frontend_dist/index.html +3 -3
- mage_ai/server/frontend_dist/manage/files.html +6 -6
- mage_ai/server/frontend_dist/manage/overview.html +6 -6
- mage_ai/server/frontend_dist/manage/pipeline-runs.html +6 -6
- mage_ai/server/frontend_dist/manage/settings.html +6 -6
- mage_ai/server/frontend_dist/manage/users/[user].html +6 -6
- mage_ai/server/frontend_dist/manage/users/new.html +6 -6
- mage_ai/server/frontend_dist/manage/users.html +6 -6
- mage_ai/server/frontend_dist/manage.html +6 -6
- mage_ai/server/frontend_dist/oauth.html +4 -4
- mage_ai/server/frontend_dist/overview.html +6 -6
- mage_ai/server/frontend_dist/pipeline-runs.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/dashboard.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +3 -3
- mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +6 -6
- mage_ai/server/frontend_dist/pipelines/[pipeline].html +3 -3
- mage_ai/server/frontend_dist/pipelines.html +6 -6
- mage_ai/server/frontend_dist/platform/global-hooks/[...slug].html +6 -6
- mage_ai/server/frontend_dist/platform/global-hooks.html +6 -6
- mage_ai/server/frontend_dist/settings/account/profile.html +6 -6
- mage_ai/server/frontend_dist/settings/platform/preferences.html +6 -6
- mage_ai/server/frontend_dist/settings/platform/settings.html +6 -6
- mage_ai/server/frontend_dist/settings/workspace/permissions/[...slug].html +6 -6
- mage_ai/server/frontend_dist/settings/workspace/permissions.html +6 -6
- mage_ai/server/frontend_dist/settings/workspace/preferences.html +6 -6
- mage_ai/server/frontend_dist/settings/workspace/roles/[...slug].html +6 -6
- mage_ai/server/frontend_dist/settings/workspace/roles.html +6 -6
- mage_ai/server/frontend_dist/settings/workspace/sync-data.html +6 -6
- mage_ai/server/frontend_dist/settings/workspace/users/[...slug].html +6 -6
- mage_ai/server/frontend_dist/settings/workspace/users.html +6 -6
- mage_ai/server/frontend_dist/settings.html +3 -3
- mage_ai/server/frontend_dist/sign-in.html +7 -7
- mage_ai/server/frontend_dist/templates/[...slug].html +6 -6
- mage_ai/server/frontend_dist/templates.html +6 -6
- mage_ai/server/frontend_dist/terminal.html +6 -6
- mage_ai/server/frontend_dist/test.html +3 -3
- mage_ai/server/frontend_dist/triggers.html +6 -6
- mage_ai/server/frontend_dist/v2/canvas.html +2 -2
- mage_ai/server/frontend_dist/v2.html +2 -2
- mage_ai/server/frontend_dist/version-control.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/404.html +3 -3
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{1187-839336d276186105.js → 1187-4560c3895e1d7099.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{1598-0adca9dce3ba4c60.js → 1598-cbf3f5a6078fc3f5.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-638a944d24d5abde.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-36f746b1824004f2.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/3763-39a5174f6a3924db.js → frontend_dist_base_path_template/_next/static/chunks/3763-aabe2703076636b0.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3782-3e2acb5ed45b582b.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/449-f689774546860ca4.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/5627-d5e559859dd0e1e0.js → frontend_dist_base_path_template/_next/static/chunks/5627-10e76bafa5a26f5f.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{5699-e49718dfc9eb2854.js → 5699-e99379e332bd0b41.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{7966-163da2621b8c987c.js → 7966-a5a7db345ce81263.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{_app-bb4a0e0d783622a8.js → _app-0392ef723ea2c6f8.js} +2 -2
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/compute-ed67fa8e81662e8b.js → frontend_dist_base_path_template/_next/static/chunks/pages/compute-9e2dea78024e3bb4.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/files-e0ecd7ced09a63b2.js → frontend_dist_base_path_template/_next/static/chunks/pages/files-e08c7fe76f968f9c.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-data-products/{[...slug]-c7a729477ecda50e.js → [...slug]-30c3807057a4e65b.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{global-data-products-fd6ae6a358a60a0c.js → global-data-products-8dcb3b31af9e0e39.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-8e50243797a7fe59.js → frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-85a64b64d27214b6.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{global-hooks-d0c003446332dc0d.js → global-hooks-4ff959d51b8a9502.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/{files-a69ed8e9f814490c.js → files-d08a460641d0efaa.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage/overview-1aad7093c6d39257.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage/overview-aae747f487e08d51.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/{pipeline-runs-528d30e0d13b0cc7.js → pipeline-runs-09a842d64a6ada62.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/{settings-fb9201d9cf63031d.js → settings-2e98e57d9376a458.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/{[user]-000f5a980a07da39.js → [user]-7be6e41ad66089bb.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage/users/new-e4e613f6e817a733.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-4c088833063bfa07.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/{users-a5e9d77ed5b50205.js → users-b99379d0aa6a8c25.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage-34d718b8a4066c23.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage-868fcd8cbeb265f0.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{oauth-3bfd1b8d7f036726.js → oauth-6ceceb62191dfe8a.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-e51cd04bd4d1fffe.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{pipeline-runs-5f8c100e648efa8a.js → pipeline-runs-2d0136b51b57de93.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills/{[...slug]-688c652f3296bb9c.js → [...slug]-1ad5238742e25b4c.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-bd11e87d026bfbf9.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{dashboard-1236e36d39b1637d.js → dashboard-0f4f47f721b0723f.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-432da20df91511fb.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-fe91dfb0091f6bc6.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-0d68d4bf6290fefb.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-cf794b2d22a80f31.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-9254358d58f07714.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-a964caef91bed9e1.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{monitors-821001e690caebe2.js → monitors-80bebb4401eefe25.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-2eae7cb017027682.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-2d4b2a0800a66b33.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs-e3d7fdfeb7f806f7.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{settings-cd49372ae1702963.js → settings-0abf8a1b7243f93b.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-707ed8ca942ca802.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers/{[...slug]-259143ed3cf59e31.js → [...slug]-8429f17d4146e1ec.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-193045d9836d8d80.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines-b578b075a8d857e3.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-38187954b6ec4b40.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks/{[...slug]-5eeec927e4202b63.js → [...slug]-6834ae87bd668cb2.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/platform/global-hooks-fbe9ad995d46d837.js → frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks-b3f7309a23e592b2.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/account/{profile-fc659962d4015cb3.js → profile-f8b7374385e1f1bf.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-8de68502a9afa299.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/settings/platform/settings-a4f88c334414402b.js → frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-50fb6a34f3913f1f.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-4deb9579ef99a3c6.js → [...slug]-2e5c098c21ea32b7.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{permissions-e0cda2f2bfce8d61.js → permissions-54e4b15b9585bfc4.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-040f83d75d0f6537.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-910257d16c604ebd.js → [...slug]-95088f43034e3c95.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{roles-4f7a0756806cee34.js → roles-e9149e1fcf218f42.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{sync-data-208d6f955204d704.js → sync-data-75b67ae4a00818ef.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/users/{[...slug]-c89dc67e5a1706a8.js → [...slug]-557dda05ca6c6124.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{users-5212c01a9dc558da.js → users-3ee783f5139c76a1.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{sign-in-054b33312d3193c3.js → sign-in-593c40985d63fcf7.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates/{[...slug]-b6ed6a5d818bfd20.js → [...slug]-252c4b6b818345d5.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{templates-852357bc983af2ea.js → templates-ca528bc607753ab8.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/terminal-1f9c56d671bbc67d.js → frontend_dist_base_path_template/_next/static/chunks/pages/terminal-287362c1defcc96b.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/test-2f83af8c9f1378fe.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-d9de73fb799efed8.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/version-control-ae3469b992a341d6.js → frontend_dist_base_path_template/_next/static/chunks/pages/version-control-573f0225d7a703ed.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{webpack-9eb1dd2ee735aaac.js → webpack-12ad70eb5c31aa92.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/dxnSzgIvSG4Ke5LM-tPQX/_buildManifest.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/block-layout.html +3 -3
- mage_ai/server/frontend_dist_base_path_template/compute.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/files.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/global-data-products/[...slug].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/global-data-products.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/global-hooks/[...slug].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/global-hooks.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/index.html +3 -3
- mage_ai/server/frontend_dist_base_path_template/manage/files.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/manage/overview.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/manage/pipeline-runs.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/manage/settings.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/manage/users/[user].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/manage/users/new.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/manage/users.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/manage.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/oauth.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/overview.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipeline-runs.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills/[...slug].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/dashboard.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/edit.html +3 -3
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/logs.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runs.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runtime.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs/[run].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/settings.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/syncs.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers/[...slug].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline].html +3 -3
- mage_ai/server/frontend_dist_base_path_template/pipelines.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/platform/global-hooks/[...slug].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/platform/global-hooks.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/account/profile.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/platform/preferences.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/platform/settings.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions/[...slug].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/preferences.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles/[...slug].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/sync-data.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/users/[...slug].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/users.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/settings.html +3 -3
- mage_ai/server/frontend_dist_base_path_template/sign-in.html +7 -7
- mage_ai/server/frontend_dist_base_path_template/templates/[...slug].html +6 -6
- mage_ai/server/frontend_dist_base_path_template/templates.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/terminal.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/test.html +3 -3
- mage_ai/server/frontend_dist_base_path_template/triggers.html +6 -6
- mage_ai/server/frontend_dist_base_path_template/v2/canvas.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/v2.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/version-control.html +6 -6
- mage_ai/server/kernel_output_parser.py +2 -3
- mage_ai/server/kernels.py +2 -3
- mage_ai/server/scheduler_manager.py +2 -2
- mage_ai/server/server.py +21 -0
- mage_ai/server/websockets/constants.py +4 -4
- mage_ai/services/compute/aws/constants.py +2 -2
- mage_ai/services/compute/aws/steps.py +16 -10
- mage_ai/services/compute/constants.py +4 -4
- mage_ai/services/compute/models.py +4 -4
- mage_ai/services/k8s/config.py +4 -0
- mage_ai/services/k8s/job_manager.py +2 -0
- mage_ai/services/spark/constants.py +3 -3
- mage_ai/services/spark/models/jobs.py +2 -2
- mage_ai/services/spark/models/sqls.py +2 -2
- mage_ai/services/spark/models/stages.py +4 -4
- mage_ai/services/spark/models/threads.py +2 -2
- mage_ai/services/teams/config.py +13 -2
- mage_ai/services/teams/teams.py +13 -11
- mage_ai/settings/backends.py +3 -2
- mage_ai/settings/models/configuration_option.py +3 -3
- mage_ai/settings/server.py +5 -0
- mage_ai/shared/constants.py +4 -2
- mage_ai/shared/custom_logger.py +13 -13
- mage_ai/shared/enum.py +8 -0
- mage_ai/shared/environments.py +27 -3
- mage_ai/shared/logger.py +2 -2
- mage_ai/shared/models.py +2 -1
- mage_ai/streaming/constants.py +3 -3
- mage_ai/streaming/sinks/elasticsearch.py +15 -5
- mage_ai/streaming/sinks/kafka.py +2 -2
- mage_ai/streaming/sinks/postgres.py +6 -0
- mage_ai/streaming/sources/amazon_sqs.py +2 -2
- mage_ai/streaming/sources/base.py +2 -2
- mage_ai/streaming/sources/kafka.py +20 -4
- mage_ai/streaming/sources/nats_js.py +10 -3
- mage_ai/streaming/sources/shared.py +3 -2
- mage_ai/system/constants.py +2 -2
- mage_ai/tests/api/endpoints/test_blocks.py +1 -101
- mage_ai/tests/api/endpoints/test_configuration_options.py +1 -48
- mage_ai/tests/api/endpoints/test_configuration_options_project_platform.py +68 -0
- mage_ai/tests/api/endpoints/test_custom_designs.py +1 -106
- mage_ai/tests/api/endpoints/test_custom_designs_project_platform.py +132 -0
- mage_ai/tests/api/endpoints/test_dbt_blocks.py +111 -0
- mage_ai/tests/api/endpoints/test_file_contents.py +0 -48
- mage_ai/tests/api/endpoints/test_file_contents_with_project_platform.py +66 -0
- mage_ai/tests/api/endpoints/test_pipelines.py +0 -134
- mage_ai/tests/api/endpoints/test_pipelines_with_project_platform.py +143 -0
- mage_ai/tests/api/policies/permissions/test_base_policy_with_permissions.py +2 -2
- mage_ai/tests/data_cleaner/transformer_actions/test_trim_transformer.py +161 -0
- mage_ai/tests/data_preparation/models/block/dbt/test_profiles.py +1 -1
- mage_ai/tests/data_preparation/models/block/dynamic/test_combos.py +1 -1
- mage_ai/tests/data_preparation/models/block/hook/test_hook_block.py +3 -2
- mage_ai/tests/data_preparation/models/test_block.py +7 -0
- mage_ai/tests/data_preparation/models/test_blocks_helper.py +1 -1
- mage_ai/tests/data_preparation/models/variables/test_summarizer.py +1 -1
- mage_ai/tests/data_preparation/sync/test_git_sync.py +6 -6
- mage_ai/tests/data_preparation/test_repo_manager.py +0 -63
- mage_ai/tests/data_preparation/test_repo_manager_project_platform.py +67 -0
- mage_ai/tests/data_preparation/test_variable_manager.py +0 -51
- mage_ai/tests/data_preparation/test_variable_manager_project_platform.py +41 -0
- mage_ai/tests/io/create_table/test_postgresql.py +27 -0
- mage_ai/tests/orchestration/notification/test_config.py +3 -3
- mage_ai/tests/orchestration/queue/test_process_queue.py +3 -2
- mage_ai/tests/orchestration/test_pipeline_scheduler.py +1 -0
- mage_ai/tests/settings/test_platform.py +2 -2
- mage_ai/tests/streaming/sinks/test_generic_io.py +25 -21
- mage_ai/usage_statistics/constants.py +4 -4
- mage_ai-0.9.75.dist-info/METADATA +377 -0
- {mage_ai-0.9.73.dist-info → mage_ai-0.9.75.dist-info}/RECORD +397 -388
- {mage_ai-0.9.73.dist-info → mage_ai-0.9.75.dist-info}/WHEEL +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1557-1ad0c64c2d08e569.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/2717-d65056b6b5e124eb.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3548-b2c5edfb710886a6.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3782-4b3091e550f809a2.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-69af3253ad0d0d89.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-fe112809feb25b05.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-e9ca358209cdf93d.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-a29f1615d2e7d330.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-6d382ae5bad9745c.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-135be8974f7f5f2b.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-3af13e89adff4d6c.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-058d283ee178c038.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-7b02bb70462144cb.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/test-86b12cc12d4a625f.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-2481c40b18d5b6d4.js +0 -1
- mage_ai/server/frontend_dist/_next/static/kxGpiudO3f9aX6FAiqydf/_buildManifest.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/H5pcGxWf1BkhXDRs2BqiI/_buildManifest.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1557-1ad0c64c2d08e569.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-d65056b6b5e124eb.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-b2c5edfb710886a6.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3782-4b3091e550f809a2.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-69af3253ad0d0d89.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-fe112809feb25b05.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-e9ca358209cdf93d.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-a29f1615d2e7d330.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-6d382ae5bad9745c.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-135be8974f7f5f2b.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-3af13e89adff4d6c.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-058d283ee178c038.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-7b02bb70462144cb.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/test-86b12cc12d4a625f.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-2481c40b18d5b6d4.js +0 -1
- mage_ai-0.9.73.dist-info/METADATA +0 -543
- /mage_ai/server/frontend_dist/_next/static/{kxGpiudO3f9aX6FAiqydf → 38-PtskJFUTYUpRhT1qF_}/_ssgManifest.js +0 -0
- /mage_ai/server/frontend_dist/_next/static/chunks/pages/{_app-663c909dcda4c23a.js.LICENSE.txt → _app-13bf3b7dcef50c29.js.LICENSE.txt} +0 -0
- /mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{_app-bb4a0e0d783622a8.js.LICENSE.txt → _app-0392ef723ea2c6f8.js.LICENSE.txt} +0 -0
- /mage_ai/server/frontend_dist_base_path_template/_next/static/{H5pcGxWf1BkhXDRs2BqiI → dxnSzgIvSG4Ke5LM-tPQX}/_ssgManifest.js +0 -0
- {mage_ai-0.9.73.dist-info → mage_ai-0.9.75.dist-info}/LICENSE +0 -0
- {mage_ai-0.9.73.dist-info → mage_ai-0.9.75.dist-info}/entry_points.txt +0 -0
- {mage_ai-0.9.73.dist-info → mage_ai-0.9.75.dist-info}/top_level.txt +0 -0
|
@@ -37,15 +37,13 @@ ENV_VAR_TO_CONFIG_KEY = {
|
|
|
37
37
|
GIT_SYNC_SUBMODULES: 'sync_submodules',
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
BOOLEAN_ENV_VARS = set(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
]
|
|
48
|
-
)
|
|
40
|
+
BOOLEAN_ENV_VARS = set([
|
|
41
|
+
GIT_SYNC_ON_PIPELINE_RUN,
|
|
42
|
+
GIT_SYNC_ON_START,
|
|
43
|
+
GIT_SYNC_ON_EXECUTOR_START,
|
|
44
|
+
GIT_SYNC_SUBMODULES,
|
|
45
|
+
GIT_ENABLE_GIT_INTEGRATION,
|
|
46
|
+
])
|
|
49
47
|
|
|
50
48
|
|
|
51
49
|
def get_value_for_sync_config(env_var, value) -> bool:
|
|
@@ -67,10 +65,7 @@ def build_sync_config(project_sync_config: Dict) -> Dict:
|
|
|
67
65
|
}
|
|
68
66
|
|
|
69
67
|
# Read settings from settings backend
|
|
70
|
-
config_from_settings = {
|
|
71
|
-
k: get_settings_value(k)
|
|
72
|
-
for k in ENV_VAR_TO_CONFIG_KEY.keys()
|
|
73
|
-
}
|
|
68
|
+
config_from_settings = {k: get_settings_value(k) for k in ENV_VAR_TO_CONFIG_KEY.keys()}
|
|
74
69
|
|
|
75
70
|
if any([v is not None for v in config_from_settings.values()]):
|
|
76
71
|
# Map sync config keys to settings values
|
|
@@ -153,9 +148,7 @@ class Preferences:
|
|
|
153
148
|
def get_preferences(repo_path=None, user: User = None) -> Preferences:
|
|
154
149
|
default_preferences = Preferences(repo_path=repo_path)
|
|
155
150
|
if user:
|
|
156
|
-
if user.preferences is None and os.path.exists(
|
|
157
|
-
default_preferences.preferences_file_path
|
|
158
|
-
):
|
|
151
|
+
if user.preferences is None and os.path.exists(default_preferences.preferences_file_path):
|
|
159
152
|
return default_preferences
|
|
160
153
|
else:
|
|
161
154
|
return Preferences(user=user, repo_path=repo_path)
|
|
@@ -3,7 +3,6 @@ import logging
|
|
|
3
3
|
import os
|
|
4
4
|
import traceback
|
|
5
5
|
import uuid
|
|
6
|
-
from enum import Enum
|
|
7
6
|
from typing import Dict, Optional
|
|
8
7
|
from warnings import warn
|
|
9
8
|
|
|
@@ -25,6 +24,7 @@ from mage_ai.settings.repo import get_repo_path as get_repo_path_new
|
|
|
25
24
|
from mage_ai.settings.repo import get_variables_dir
|
|
26
25
|
from mage_ai.settings.repo import set_repo_path as set_repo_path_new
|
|
27
26
|
from mage_ai.settings.utils import base_repo_path
|
|
27
|
+
from mage_ai.shared.enum import StrEnum
|
|
28
28
|
from mage_ai.shared.environments import is_debug
|
|
29
29
|
from mage_ai.shared.yaml import load_yaml, trim_strings
|
|
30
30
|
|
|
@@ -36,7 +36,7 @@ yml.indent(mapping=2, sequence=2, offset=0)
|
|
|
36
36
|
logger = logging.getLogger(__name__)
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
class ProjectType(
|
|
39
|
+
class ProjectType(StrEnum):
|
|
40
40
|
MAIN = 'main'
|
|
41
41
|
SUB = 'sub'
|
|
42
42
|
STANDALONE = 'standalone'
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
import os
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from enum import Enum
|
|
5
4
|
|
|
6
5
|
from mage_ai.shared.config import BaseConfig
|
|
6
|
+
from mage_ai.shared.enum import StrEnum
|
|
7
7
|
|
|
8
8
|
GIT_ACCESS_TOKEN_SECRET_NAME = 'mage_git_access_token'
|
|
9
9
|
GIT_SSH_PRIVATE_KEY_SECRET_NAME = 'mage_git_ssh_private_key_b64'
|
|
10
10
|
GIT_SSH_PUBLIC_KEY_SECRET_NAME = 'mage_git_ssh_public_key_b64'
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
class AuthType(
|
|
13
|
+
class AuthType(StrEnum):
|
|
14
14
|
SSH = 'ssh'
|
|
15
15
|
HTTPS = 'https'
|
|
16
16
|
OAUTH = 'oauth'
|
|
@@ -2,6 +2,9 @@ connector_type: elasticsearch
|
|
|
2
2
|
host: http://localhost
|
|
3
3
|
index_name: elastic_index
|
|
4
4
|
api_key: api_key_for_elastic_search
|
|
5
|
+
# # When using Data streams this must be set to create as they are Append-only indexes
|
|
6
|
+
# _op_type: None / index, create or update
|
|
7
|
+
# _source: None (Default '_doc') / Specify the source field
|
|
5
8
|
# # Whether to verify SSL certificates to authenticate.
|
|
6
9
|
# verify_certs: true
|
|
7
10
|
# ca_cert: "certificate.cert"
|
|
@@ -17,12 +17,18 @@ timeout: 5
|
|
|
17
17
|
|
|
18
18
|
# Optional: TLS configuration
|
|
19
19
|
use_tls: false
|
|
20
|
-
|
|
21
|
-
#
|
|
22
|
-
#
|
|
20
|
+
|
|
21
|
+
# Optional: SSL configuration
|
|
22
|
+
# ssl_config:
|
|
23
|
+
# cafile: "path/to/ca.pem"
|
|
24
|
+
# certfile: "path/to/client-cert.pem"
|
|
25
|
+
# keyfile: "path/to/client-key.pem"
|
|
23
26
|
|
|
24
27
|
# Optional: NKEY seed string
|
|
25
28
|
# nkeys_seed_str: "SUAPAEYJQOQHJ4"
|
|
26
29
|
|
|
30
|
+
# Optional: user credentials
|
|
31
|
+
# user_credentials: "path/to/credentials.creds"
|
|
32
|
+
|
|
27
33
|
# Optional: Consumer name for a durable consumer identifier, will use stream name if not provided
|
|
28
34
|
consumer_name: "my_consumer"
|
mage_ai/errors/constants.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from enum import
|
|
1
|
+
from mage_ai.shared.enum import IntEnum
|
|
2
2
|
|
|
3
3
|
"""
|
|
4
4
|
- **400 Bad Request**: The server could not understand the request due to invalid syntax.
|
|
@@ -13,7 +13,7 @@ from enum import Enum
|
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
class ErrorCode(
|
|
16
|
+
class ErrorCode(IntEnum):
|
|
17
17
|
CODE_400 = 400
|
|
18
18
|
CODE_401 = 401
|
|
19
19
|
CODE_402 = 402
|
mage_ai/io/base.py
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from abc import ABC, abstractmethod
|
|
3
|
-
from enum import Enum
|
|
4
3
|
from typing import IO, Any, Callable, Dict, Union
|
|
5
4
|
|
|
6
5
|
import pandas as pd
|
|
6
|
+
import polars as pl
|
|
7
7
|
from pandas import DataFrame
|
|
8
8
|
|
|
9
9
|
from mage_ai.io.constants import SQL_RESERVED_WORDS
|
|
10
|
+
from mage_ai.shared.enum import StrEnum
|
|
10
11
|
from mage_ai.shared.logger import VerbosePrintHandler
|
|
11
12
|
from mage_ai.shared.models import BaseEnum
|
|
12
13
|
from mage_ai.shared.utils import clean_name
|
|
@@ -14,7 +15,7 @@ from mage_ai.shared.utils import clean_name
|
|
|
14
15
|
QUERY_ROW_LIMIT = 10_000_000
|
|
15
16
|
|
|
16
17
|
|
|
17
|
-
class DataSource(
|
|
18
|
+
class DataSource(StrEnum):
|
|
18
19
|
ALGOLIA = 'algolia'
|
|
19
20
|
API = 'api'
|
|
20
21
|
BIGQUERY = 'bigquery'
|
|
@@ -40,12 +41,32 @@ class DataSource(str, Enum):
|
|
|
40
41
|
WEAVIATE = 'weaviate'
|
|
41
42
|
|
|
42
43
|
|
|
43
|
-
class FileFormat(
|
|
44
|
+
class FileFormat(StrEnum):
|
|
44
45
|
CSV = 'csv'
|
|
45
46
|
JSON = 'json'
|
|
46
47
|
PARQUET = 'parquet'
|
|
47
48
|
HDF5 = 'hdf5'
|
|
48
49
|
XML = 'xml'
|
|
50
|
+
EXCEL = 'excel'
|
|
51
|
+
|
|
52
|
+
@classmethod
|
|
53
|
+
def from_extension(cls, ext: str):
|
|
54
|
+
if ext == 'csv':
|
|
55
|
+
return cls.CSV
|
|
56
|
+
elif ext == 'json':
|
|
57
|
+
return cls.JSON
|
|
58
|
+
elif ext == 'parquet':
|
|
59
|
+
return cls.PARQUET
|
|
60
|
+
elif ext == 'hdf5':
|
|
61
|
+
return cls.HDF5
|
|
62
|
+
elif ext == 'xml':
|
|
63
|
+
return cls.XML
|
|
64
|
+
elif ext in ('xls', 'xlsx'):
|
|
65
|
+
return cls.EXCEL
|
|
66
|
+
else:
|
|
67
|
+
raise ValueError(
|
|
68
|
+
f'None file format found for this file extension: {ext}'
|
|
69
|
+
)
|
|
49
70
|
|
|
50
71
|
|
|
51
72
|
class ExportWritePolicy(BaseEnum):
|
|
@@ -125,7 +146,9 @@ class BaseFile(BaseIO):
|
|
|
125
146
|
pass
|
|
126
147
|
|
|
127
148
|
def _get_file_format(self, filepath: Union[os.PathLike, str]) -> str:
|
|
128
|
-
return
|
|
149
|
+
return FileFormat.from_extension(
|
|
150
|
+
os.path.splitext(os.path.basename(filepath))[-1][1:]
|
|
151
|
+
)
|
|
129
152
|
|
|
130
153
|
def __get_reader(self, format: Union[FileFormat, str, None]) -> Callable:
|
|
131
154
|
"""
|
|
@@ -150,6 +173,8 @@ class BaseFile(BaseIO):
|
|
|
150
173
|
return pd.read_hdf
|
|
151
174
|
elif format == FileFormat.XML:
|
|
152
175
|
return pd.read_xml
|
|
176
|
+
elif format == FileFormat.EXCEL:
|
|
177
|
+
return pd.read_excel
|
|
153
178
|
else:
|
|
154
179
|
raise ValueError(f"Invalid format '{format}' specified.")
|
|
155
180
|
|
|
@@ -190,7 +215,7 @@ class BaseFile(BaseIO):
|
|
|
190
215
|
|
|
191
216
|
def _write(
|
|
192
217
|
self,
|
|
193
|
-
df
|
|
218
|
+
df,
|
|
194
219
|
format: Union[FileFormat, str, None],
|
|
195
220
|
output: Union[IO, os.PathLike, str],
|
|
196
221
|
**kwargs,
|
|
@@ -218,7 +243,7 @@ class BaseFile(BaseIO):
|
|
|
218
243
|
raise ValueError('Cannot write HDF5 file to buffer of any type.')
|
|
219
244
|
name = os.path.splitext(os.path.basename(output))[0]
|
|
220
245
|
kwargs.setdefault('key', name)
|
|
221
|
-
elif format == FileFormat.PARQUET:
|
|
246
|
+
elif format == FileFormat.PARQUET and isinstance(df, DataFrame):
|
|
222
247
|
if 'coerce_timestamps' not in kwargs:
|
|
223
248
|
kwargs['coerce_timestamps'] = 'ms'
|
|
224
249
|
kwargs['allow_truncated_timestamps'] = True
|
|
@@ -226,7 +251,7 @@ class BaseFile(BaseIO):
|
|
|
226
251
|
|
|
227
252
|
def __get_writer(
|
|
228
253
|
self,
|
|
229
|
-
df
|
|
254
|
+
df,
|
|
230
255
|
format: Union[FileFormat, str, None],
|
|
231
256
|
) -> Callable:
|
|
232
257
|
"""
|
|
@@ -239,15 +264,31 @@ class BaseFile(BaseIO):
|
|
|
239
264
|
Returns:
|
|
240
265
|
Callable: File writer method
|
|
241
266
|
"""
|
|
242
|
-
if
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
267
|
+
if isinstance(df, pl.DataFrame): # polars DataFrame
|
|
268
|
+
if format == FileFormat.CSV:
|
|
269
|
+
return df.write_csv
|
|
270
|
+
elif format == FileFormat.JSON:
|
|
271
|
+
return df.write_json
|
|
272
|
+
elif format == FileFormat.HDF5:
|
|
273
|
+
return df.write_hdf5
|
|
274
|
+
elif format == FileFormat.XML:
|
|
275
|
+
return df.write_xml
|
|
276
|
+
elif format == FileFormat.EXCEL:
|
|
277
|
+
return df.write_excel
|
|
278
|
+
return df.write_parquet
|
|
279
|
+
|
|
280
|
+
elif isinstance(df, DataFrame): # pandas DataFrame
|
|
281
|
+
if format == FileFormat.CSV:
|
|
282
|
+
return df.to_csv
|
|
283
|
+
elif format == FileFormat.JSON:
|
|
284
|
+
return df.to_json
|
|
285
|
+
elif format == FileFormat.HDF5:
|
|
286
|
+
return df.to_hdf
|
|
287
|
+
elif format == FileFormat.XML:
|
|
288
|
+
return df.to_xml
|
|
289
|
+
elif format == FileFormat.EXCEL:
|
|
290
|
+
return df.to_excel
|
|
291
|
+
return df.to_parquet
|
|
251
292
|
|
|
252
293
|
def __del__(self):
|
|
253
294
|
if self.verbose and self.printer.exists_previous_message:
|
mage_ai/io/config.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from abc import ABC, abstractmethod
|
|
3
|
-
from enum import Enum
|
|
4
3
|
from pathlib import Path
|
|
5
4
|
from typing import Any, Dict, Union
|
|
6
5
|
|
|
@@ -9,9 +8,10 @@ from jinja2 import Template
|
|
|
9
8
|
|
|
10
9
|
from mage_ai.data_preparation.shared.utils import get_template_vars
|
|
11
10
|
from mage_ai.settings.repo import get_repo_path
|
|
11
|
+
from mage_ai.shared.enum import StrEnum
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
class ConfigKey(
|
|
14
|
+
class ConfigKey(StrEnum):
|
|
15
15
|
"""
|
|
16
16
|
List of configuration settings for use with data IO clients.
|
|
17
17
|
"""
|
|
@@ -333,7 +333,7 @@ class EnvironmentVariableLoader(BaseConfigLoader):
|
|
|
333
333
|
return os.getenv(env_var)
|
|
334
334
|
|
|
335
335
|
|
|
336
|
-
class VerboseConfigKey(
|
|
336
|
+
class VerboseConfigKey(StrEnum):
|
|
337
337
|
"""
|
|
338
338
|
Config key headers for the verbose configuration file format.
|
|
339
339
|
"""
|
mage_ai/io/export_utils.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
1
|
from typing import Callable, Dict, List, Mapping
|
|
3
2
|
|
|
4
3
|
from pandas import DataFrame, Series
|
|
5
4
|
from pandas.api.types import infer_dtype
|
|
6
5
|
|
|
6
|
+
from mage_ai.shared.enum import StrEnum
|
|
7
7
|
from mage_ai.shared.utils import clean_name
|
|
8
8
|
|
|
9
9
|
"""
|
|
@@ -19,7 +19,7 @@ class BadConversionError(Exception):
|
|
|
19
19
|
pass
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class PandasTypes(
|
|
22
|
+
class PandasTypes(StrEnum):
|
|
23
23
|
"""
|
|
24
24
|
Internal datatypes defined by the pandas Public API
|
|
25
25
|
"""
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from io import BytesIO
|
|
2
2
|
from typing import Union
|
|
3
3
|
|
|
4
|
+
import polars as pl
|
|
4
5
|
from google.cloud import storage
|
|
5
6
|
from google.oauth2 import service_account
|
|
6
7
|
from pandas import DataFrame
|
|
@@ -103,7 +104,7 @@ class GoogleCloudStorage(BaseFile):
|
|
|
103
104
|
|
|
104
105
|
def export(
|
|
105
106
|
self,
|
|
106
|
-
data: Union[DataFrame, str],
|
|
107
|
+
data: Union[DataFrame, pl.DataFrame, str],
|
|
107
108
|
bucket_name: str,
|
|
108
109
|
object_key: str,
|
|
109
110
|
format: Union[FileFormat, str, None] = None,
|
|
@@ -127,7 +128,7 @@ class GoogleCloudStorage(BaseFile):
|
|
|
127
128
|
):
|
|
128
129
|
bucket = self.client.get_bucket(bucket_name)
|
|
129
130
|
blob = bucket.blob(object_key)
|
|
130
|
-
if isinstance(data, DataFrame):
|
|
131
|
+
if isinstance(data, DataFrame) or isinstance(data, pl.DataFrame):
|
|
131
132
|
buffer = BytesIO()
|
|
132
133
|
self._write(data, format, buffer, **kwargs)
|
|
133
134
|
buffer.seek(0)
|
mage_ai/io/io_config.py
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from enum import Enum
|
|
3
2
|
from pathlib import Path
|
|
4
3
|
from typing import Any, Mapping, Optional, Union
|
|
5
4
|
|
|
6
5
|
import yaml
|
|
7
6
|
|
|
7
|
+
from mage_ai.shared.enum import StrEnum
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
class IOConfigKeys(StrEnum):
|
|
10
11
|
AWS = 'AWS'
|
|
11
12
|
BIGQUERY = 'BigQuery'
|
|
12
13
|
CLICKHOUSE = 'ClickHouse'
|
mage_ai/io/oracledb.py
CHANGED
|
@@ -244,10 +244,8 @@ FETCH FIRST {limit} ROWS ONLY
|
|
|
244
244
|
# Remove extraneous surrounding double quotes
|
|
245
245
|
# that get added while performing conversion to string.
|
|
246
246
|
df_[col] = df_[col].apply(lambda x: x.strip('"') if x and isinstance(x, str) else x)
|
|
247
|
-
df_.
|
|
248
|
-
values =
|
|
249
|
-
for i in range(0, len(df_)):
|
|
250
|
-
values.append(tuple(df_.fillna('').values[i]))
|
|
247
|
+
df_.fillna('', inplace=True)
|
|
248
|
+
values = list(df_.itertuples(index=False, name=None))
|
|
251
249
|
|
|
252
250
|
# Create values placeholder
|
|
253
251
|
colmn_names = df.columns.tolist()
|
mage_ai/io/postgres.py
CHANGED
|
@@ -99,6 +99,8 @@ class Postgres(BaseSQL):
|
|
|
99
99
|
password = self.settings['password']
|
|
100
100
|
port = self.settings['port']
|
|
101
101
|
user = self.settings['user']
|
|
102
|
+
keepalives = self.settings.get('keepalives', 1)
|
|
103
|
+
keepalives_idle = self.settings.get('keepalives_idle', 300)
|
|
102
104
|
if self.settings['connection_method'] == 'ssh_tunnel':
|
|
103
105
|
ssh_setting = dict(ssh_username=self.settings['ssh_username'])
|
|
104
106
|
if self.settings['ssh_pkey'] is not None:
|
|
@@ -128,19 +130,35 @@ class Postgres(BaseSQL):
|
|
|
128
130
|
host = '127.0.0.1'
|
|
129
131
|
port = self.ssh_tunnel.local_bind_port
|
|
130
132
|
|
|
131
|
-
connect_opts =
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
133
|
+
connect_opts = self.settings.copy()
|
|
134
|
+
# See recognized keyword parameters for psycopg2.connect()
|
|
135
|
+
# https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS
|
|
136
|
+
unrecognized_keys = [
|
|
137
|
+
'dbname',
|
|
138
|
+
'schema',
|
|
139
|
+
'connection_method',
|
|
140
|
+
'ssh_host',
|
|
141
|
+
'ssh_port',
|
|
142
|
+
'ssh_username',
|
|
143
|
+
'ssh_password',
|
|
144
|
+
'ssh_pkey',
|
|
145
|
+
"verbose"
|
|
146
|
+
]
|
|
147
|
+
for key in unrecognized_keys:
|
|
148
|
+
connect_opts.pop(key, None)
|
|
149
|
+
|
|
150
|
+
connect_opts.update(
|
|
151
|
+
{
|
|
152
|
+
'database': database,
|
|
153
|
+
'host': host,
|
|
154
|
+
'password': password,
|
|
155
|
+
'port': port,
|
|
156
|
+
'user': user,
|
|
157
|
+
'keepalives': keepalives,
|
|
158
|
+
'keepalives_idle': keepalives_idle,
|
|
159
|
+
}
|
|
139
160
|
)
|
|
140
161
|
|
|
141
|
-
if self.settings.get('connect_timeout'):
|
|
142
|
-
connect_opts['connect_timeout'] = self.settings['connect_timeout']
|
|
143
|
-
|
|
144
162
|
try:
|
|
145
163
|
self._ctx = connect(**connect_opts)
|
|
146
164
|
except Exception:
|
|
@@ -166,13 +184,14 @@ class Postgres(BaseSQL):
|
|
|
166
184
|
self,
|
|
167
185
|
schema_name: str
|
|
168
186
|
) -> str:
|
|
187
|
+
clean_schema_name = schema_name.strip('"')
|
|
169
188
|
return f"""
|
|
170
189
|
DO $$
|
|
171
190
|
BEGIN
|
|
172
191
|
IF NOT EXISTS (
|
|
173
192
|
SELECT schema_name
|
|
174
193
|
FROM information_schema.schemata
|
|
175
|
-
WHERE schema_name = '{
|
|
194
|
+
WHERE schema_name = '{clean_schema_name}'
|
|
176
195
|
) THEN
|
|
177
196
|
EXECUTE 'CREATE SCHEMA {schema_name}';
|
|
178
197
|
END IF;
|
|
@@ -276,6 +295,14 @@ class Postgres(BaseSQL):
|
|
|
276
295
|
|
|
277
296
|
return 'text'
|
|
278
297
|
|
|
298
|
+
@staticmethod
|
|
299
|
+
def _clean_array_value(val: str) -> str:
|
|
300
|
+
if val is None or type(val) is not str or len(val) < 2:
|
|
301
|
+
return val
|
|
302
|
+
if val[0] == '[' and val[-1] == ']':
|
|
303
|
+
return str(val).replace('[', '{').replace(']', '}')
|
|
304
|
+
return val
|
|
305
|
+
|
|
279
306
|
def upload_dataframe(
|
|
280
307
|
self,
|
|
281
308
|
cursor: _psycopg.cursor,
|
|
@@ -297,13 +324,6 @@ class Postgres(BaseSQL):
|
|
|
297
324
|
# Use COPY command
|
|
298
325
|
use_insert_command = False
|
|
299
326
|
|
|
300
|
-
def clean_array_value(val):
|
|
301
|
-
if val is None or type(val) is not str or len(val) < 2:
|
|
302
|
-
return val
|
|
303
|
-
if val[0] == '[' and val[-1] == ']':
|
|
304
|
-
return '{' + val[1:-1] + '}'
|
|
305
|
-
return val
|
|
306
|
-
|
|
307
327
|
def serialize_obj(val):
|
|
308
328
|
if type(val) is dict or type(val) is np.ndarray:
|
|
309
329
|
return simplejson.dumps(
|
|
@@ -318,7 +338,7 @@ class Postgres(BaseSQL):
|
|
|
318
338
|
ignore_nan=True,
|
|
319
339
|
)
|
|
320
340
|
elif not use_insert_command and type(val) is list:
|
|
321
|
-
return
|
|
341
|
+
return self._clean_array_value(simplejson.dumps(
|
|
322
342
|
val,
|
|
323
343
|
default=encode_complex,
|
|
324
344
|
ignore_nan=True,
|
mage_ai/io/utils.py
CHANGED
|
@@ -29,3 +29,21 @@ def escape_quotes(line: str, single: bool = True, double: bool = True) -> str:
|
|
|
29
29
|
if double:
|
|
30
30
|
new_line = new_line.replace('\"', '\\"')
|
|
31
31
|
return new_line
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def map_json_to_airtable(data_types):
|
|
35
|
+
# Extract the non-null type (ignoring 'null')
|
|
36
|
+
data_type = next((t for t in data_types if t != 'null'), 'string')
|
|
37
|
+
|
|
38
|
+
# Mapping from JSON types to Airtable types
|
|
39
|
+
type_mapping = {
|
|
40
|
+
'string': 'multilineText',
|
|
41
|
+
'integer': 'number',
|
|
42
|
+
'boolean': 'checkbox',
|
|
43
|
+
'array': 'multipleSelects',
|
|
44
|
+
'object': 'singleCollaborator',
|
|
45
|
+
'number': 'number',
|
|
46
|
+
'date-time': 'dateTime'
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return type_mapping.get(data_type, 'str')
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
from enum import
|
|
1
|
+
from mage_ai.shared.enum import StrEnum
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
class ExecutionStatus(
|
|
4
|
+
class ExecutionStatus(StrEnum):
|
|
5
5
|
CANCELLED = 'cancelled'
|
|
6
6
|
ERROR = 'error'
|
|
7
7
|
FAILURE = 'failure'
|
|
@@ -10,12 +10,12 @@ class ExecutionStatus(str, Enum):
|
|
|
10
10
|
SUCCESS = 'success'
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
class EventStreamType(
|
|
13
|
+
class EventStreamType(StrEnum):
|
|
14
14
|
EXECUTION = 'execution'
|
|
15
15
|
TASK = 'task'
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
class ResultType(
|
|
18
|
+
class ResultType(StrEnum):
|
|
19
19
|
DATA = 'data'
|
|
20
20
|
STATUS = 'status'
|
|
21
21
|
STDOUT = 'stdout'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
from mage_ai.shared.enum import StrEnum
|
|
2
2
|
|
|
3
3
|
DATABASE_CONNECTION_URL_ENV_VAR = 'MAGE_DATABASE_CONNECTION_URL'
|
|
4
4
|
|
|
@@ -18,7 +18,7 @@ PG_DB_NAME = 'DB_NAME'
|
|
|
18
18
|
PIPELINE_RUN_MAGE_VARIABLES_KEY = '__mage_variables'
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
class Entity(
|
|
21
|
+
class Entity(StrEnum):
|
|
22
22
|
# Permissions saved to the DB should not have the "ANY" entity. It should only be used
|
|
23
23
|
# when evaluating permissions.
|
|
24
24
|
ANY = 'any'
|
|
@@ -13,7 +13,7 @@ from mage_ai.orchestration.db.setup import get_postgres_connection_url
|
|
|
13
13
|
from mage_ai.orchestration.db.utils import get_user_info_from_db_connection_url
|
|
14
14
|
from mage_ai.settings import OTEL_EXPORTER_OTLP_ENDPOINT
|
|
15
15
|
from mage_ai.settings.repo import get_variables_dir
|
|
16
|
-
from mage_ai.shared.environments import is_debug,
|
|
16
|
+
from mage_ai.shared.environments import is_debug, is_test_mage
|
|
17
17
|
|
|
18
18
|
DB_RETRY_COUNT = 2
|
|
19
19
|
TEST_DB = 'test.db'
|
|
@@ -28,7 +28,7 @@ db_kwargs = dict(
|
|
|
28
28
|
if OTEL_EXPORTER_OTLP_ENDPOINT:
|
|
29
29
|
from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor
|
|
30
30
|
|
|
31
|
-
if
|
|
31
|
+
if is_test_mage():
|
|
32
32
|
db_connection_url = f'sqlite:///{TEST_DB}'
|
|
33
33
|
db_kwargs['connect_args']['check_same_thread'] = False
|
|
34
34
|
elif not db_connection_url:
|
|
@@ -37,7 +37,7 @@ elif not db_connection_url:
|
|
|
37
37
|
if pg_db_connection_url:
|
|
38
38
|
db_connection_url = pg_db_connection_url
|
|
39
39
|
else:
|
|
40
|
-
if
|
|
40
|
+
if is_test_mage():
|
|
41
41
|
db_connection_url = f'sqlite:///{TEST_DB}'
|
|
42
42
|
elif os.path.exists(os.path.join('mage_ai', 'orchestration', 'db')):
|
|
43
43
|
# For local dev environment
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import enum
|
|
2
1
|
import re
|
|
3
2
|
from datetime import datetime
|
|
4
3
|
from typing import Callable, List, Union
|
|
@@ -31,6 +30,7 @@ from mage_ai.orchestration.db import db_connection, safe_db_query
|
|
|
31
30
|
from mage_ai.orchestration.db.errors import ValidationError
|
|
32
31
|
from mage_ai.orchestration.db.models.base import BaseModel
|
|
33
32
|
from mage_ai.shared.array import find
|
|
33
|
+
from mage_ai.shared.enum import IntEnum, StrEnum
|
|
34
34
|
from mage_ai.shared.environments import is_test
|
|
35
35
|
from mage_ai.shared.hash import group_by, merge_dict
|
|
36
36
|
|
|
@@ -299,7 +299,7 @@ class Role(BaseModel):
|
|
|
299
299
|
user = relationship(User, back_populates='created_roles')
|
|
300
300
|
|
|
301
301
|
# Default global roles created by Mage
|
|
302
|
-
class DefaultRole(
|
|
302
|
+
class DefaultRole(StrEnum):
|
|
303
303
|
OWNER = 'Owner'
|
|
304
304
|
ADMIN = 'Admin'
|
|
305
305
|
EDITOR = 'Editor'
|
|
@@ -561,7 +561,7 @@ class UserRole(BaseModel):
|
|
|
561
561
|
|
|
562
562
|
|
|
563
563
|
class Permission(BaseModel):
|
|
564
|
-
class Access(
|
|
564
|
+
class Access(IntEnum):
|
|
565
565
|
OWNER = PermissionAccess.OWNER.value
|
|
566
566
|
ADMIN = PermissionAccess.ADMIN.value
|
|
567
567
|
EDITOR = PermissionAccess.EDITOR.value
|
|
@@ -841,11 +841,11 @@ class RolePermission(BaseModel):
|
|
|
841
841
|
|
|
842
842
|
|
|
843
843
|
class Oauth2Application(BaseModel):
|
|
844
|
-
class AuthorizationGrantType(
|
|
844
|
+
class AuthorizationGrantType(StrEnum):
|
|
845
845
|
AUTHORIZATION_CODE = 'authorization-code'
|
|
846
846
|
CLIENT_CREDENTIALS = 'client-credentials'
|
|
847
847
|
|
|
848
|
-
class ClientType(
|
|
848
|
+
class ClientType(StrEnum):
|
|
849
849
|
PRIVATE = 'private'
|
|
850
850
|
PUBLIC = 'public'
|
|
851
851
|
|