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
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
2
|
from dataclasses import dataclass, field
|
|
3
|
-
from enum import Enum
|
|
4
3
|
from typing import Dict, List
|
|
5
4
|
|
|
6
5
|
from mage_ai.data_preparation.models.project import Project
|
|
@@ -10,6 +9,7 @@ from mage_ai.services.compute.constants import (
|
|
|
10
9
|
ComputeManagementApplicationTab,
|
|
11
10
|
)
|
|
12
11
|
from mage_ai.services.spark.constants import ComputeServiceUUID
|
|
12
|
+
from mage_ai.shared.enum import StrEnum
|
|
13
13
|
from mage_ai.shared.hash import merge_dict
|
|
14
14
|
from mage_ai.shared.models import BaseDataClass
|
|
15
15
|
|
|
@@ -35,7 +35,7 @@ class ConnectionCredential(BaseDataClass):
|
|
|
35
35
|
self.error = ErrorMessage.load(**self.error)
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
class SetupStepStatus(
|
|
38
|
+
class SetupStepStatus(StrEnum):
|
|
39
39
|
COMPLETED = 'completed'
|
|
40
40
|
ERROR = 'error'
|
|
41
41
|
INCOMPLETE = 'incomplete'
|
|
@@ -137,7 +137,7 @@ class ComputeConnection(SetupStep):
|
|
|
137
137
|
|
|
138
138
|
|
|
139
139
|
class ComputeService:
|
|
140
|
-
|
|
140
|
+
service_uuid = ComputeServiceUUID.STANDALONE_CLUSTER
|
|
141
141
|
|
|
142
142
|
def __init__(self, project: Project, with_clusters: bool = False):
|
|
143
143
|
self.project = project
|
|
@@ -169,7 +169,7 @@ class ComputeService:
|
|
|
169
169
|
|
|
170
170
|
@property
|
|
171
171
|
def uuid(self) -> ComputeServiceUUID:
|
|
172
|
-
return self.__class__.
|
|
172
|
+
return self.__class__.service_uuid
|
|
173
173
|
|
|
174
174
|
@abstractmethod
|
|
175
175
|
def active_cluster(self, **kwargs) -> Dict:
|
mage_ai/services/k8s/config.py
CHANGED
|
@@ -58,6 +58,7 @@ class K8sExecutorConfig(BaseConfig):
|
|
|
58
58
|
service_account_name = DEFAULT_SERVICE_ACCOUNT_NAME
|
|
59
59
|
affinity = None
|
|
60
60
|
node_selector = None
|
|
61
|
+
scheduler_name = None
|
|
61
62
|
tolerations = []
|
|
62
63
|
volumes = []
|
|
63
64
|
image_pull_secrets = {}
|
|
@@ -71,6 +72,8 @@ class K8sExecutorConfig(BaseConfig):
|
|
|
71
72
|
|
|
72
73
|
if executor_config.pod.get('node_selector'):
|
|
73
74
|
node_selector = executor_config.pod['node_selector']
|
|
75
|
+
if executor_config.pod.get('scheduler_name'):
|
|
76
|
+
scheduler_name = executor_config.pod['scheduler_name']
|
|
74
77
|
|
|
75
78
|
if executor_config.pod.get('tolerations'):
|
|
76
79
|
tolerations += [V1Toleration(**e) for e in executor_config.pod['tolerations']]
|
|
@@ -123,6 +126,7 @@ class K8sExecutorConfig(BaseConfig):
|
|
|
123
126
|
containers=[container],
|
|
124
127
|
image_pull_secrets=image_pull_secrets,
|
|
125
128
|
node_selector=node_selector,
|
|
129
|
+
scheduler_name=scheduler_name,
|
|
126
130
|
restart_policy='Never',
|
|
127
131
|
service_account_name=service_account_name,
|
|
128
132
|
tolerations=tolerations,
|
|
@@ -172,6 +172,8 @@ class JobManager():
|
|
|
172
172
|
pod_spec.tolerations = mage_server_pod_spec.tolerations
|
|
173
173
|
if not pod_spec.node_selector:
|
|
174
174
|
pod_spec.node_selector = mage_server_pod_spec.node_selector
|
|
175
|
+
if not pod_spec.scheduler_name:
|
|
176
|
+
pod_spec.scheduler_name = mage_server_pod_spec.scheduler_name
|
|
175
177
|
pod_spec.image_pull_secrets = pod_spec.image_pull_secrets if pod_spec.image_pull_secrets \
|
|
176
178
|
else mage_server_pod_spec.image_pull_secrets
|
|
177
179
|
return pod_spec
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
from enum import
|
|
1
|
+
from mage_ai.shared.enum import StrEnum
|
|
2
2
|
|
|
3
3
|
SPARK_DIRECTORY_NAME = '.spark'
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
class ComputeServiceUUID(
|
|
6
|
+
class ComputeServiceUUID(StrEnum):
|
|
7
7
|
AWS_EMR = 'AWS_EMR'
|
|
8
8
|
STANDALONE_CLUSTER = 'STANDALONE_CLUSTER'
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
class SparkMaster(
|
|
11
|
+
class SparkMaster(StrEnum):
|
|
12
12
|
LOCAL = 'local'
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from dataclasses import dataclass, field
|
|
2
|
-
from enum import Enum
|
|
3
2
|
from typing import Dict, List
|
|
4
3
|
|
|
5
4
|
from mage_ai.services.spark.models.applications import Application
|
|
6
5
|
from mage_ai.services.spark.models.base import BaseSparkModel
|
|
6
|
+
from mage_ai.shared.enum import StrEnum
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
class JobStatus(
|
|
9
|
+
class JobStatus(StrEnum):
|
|
10
10
|
FAILED = 'FAILED'
|
|
11
11
|
RUNNING = 'RUNNING'
|
|
12
12
|
SUCCEEDED = 'SUCCEEDED'
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
from dataclasses import dataclass, field
|
|
2
|
-
from enum import Enum
|
|
3
2
|
from typing import List
|
|
4
3
|
|
|
5
4
|
from mage_ai.services.spark.models.applications import Application
|
|
6
5
|
from mage_ai.services.spark.models.base import BaseSparkModel
|
|
7
6
|
from mage_ai.services.spark.models.jobs import Job
|
|
8
7
|
from mage_ai.services.spark.models.stages import StageAttempt
|
|
8
|
+
from mage_ai.shared.enum import StrEnum
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
class SqlStatus(
|
|
11
|
+
class SqlStatus(StrEnum):
|
|
12
12
|
COMPLETED = 'COMPLETED'
|
|
13
13
|
|
|
14
14
|
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
from dataclasses import dataclass, field
|
|
2
|
-
from enum import Enum
|
|
3
2
|
from typing import Dict, List
|
|
4
3
|
|
|
5
4
|
from mage_ai.services.spark.models.applications import Application
|
|
6
5
|
from mage_ai.services.spark.models.base import BaseSparkModel
|
|
7
6
|
from mage_ai.services.spark.models.metrics import Metrics
|
|
7
|
+
from mage_ai.shared.enum import StrEnum
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class Locality(
|
|
10
|
+
class Locality(StrEnum):
|
|
11
11
|
NODE_LOCAL = 'NODE_LOCAL'
|
|
12
12
|
PROCESS_LOCAL = 'PROCESS_LOCAL'
|
|
13
13
|
RACK_LOCAL = 'RACK_LOCAL'
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
class StageStatus(
|
|
16
|
+
class StageStatus(StrEnum):
|
|
17
17
|
COMPLETE = 'COMPLETE'
|
|
18
18
|
PENDING = 'PENDING'
|
|
19
19
|
SKIPPED = 'SKIPPED'
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class TaskStatus(
|
|
22
|
+
class TaskStatus(StrEnum):
|
|
23
23
|
SUCCESS = 'SUCCESS'
|
|
24
24
|
|
|
25
25
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from dataclasses import dataclass, field
|
|
2
|
-
from enum import Enum
|
|
3
2
|
from typing import List
|
|
4
3
|
|
|
5
4
|
from mage_ai.services.spark.models.base import BaseSparkModel
|
|
5
|
+
from mage_ai.shared.enum import StrEnum
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
class ThreadState(
|
|
8
|
+
class ThreadState(StrEnum):
|
|
9
9
|
RUNNABLE = 'RUNNABLE'
|
|
10
10
|
TIMED_WAITING = 'TIMED_WAITING'
|
|
11
11
|
WAITING = 'WAITING'
|
mage_ai/services/teams/config.py
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
2
4
|
from mage_ai.shared.config import BaseConfig
|
|
3
5
|
|
|
4
6
|
|
|
5
7
|
@dataclass
|
|
6
8
|
class TeamsConfig(BaseConfig):
|
|
7
|
-
webhook_url: str = None
|
|
9
|
+
webhook_url: List[str] = None
|
|
10
|
+
|
|
11
|
+
def __post_init__(self):
|
|
12
|
+
# Normalize webhook_url to a list if it's provided as a string
|
|
13
|
+
if isinstance(self.webhook_url, str):
|
|
14
|
+
self.webhook_url = [self.webhook_url]
|
|
15
|
+
elif self.webhook_url is None:
|
|
16
|
+
self.webhook_url = []
|
|
8
17
|
|
|
9
18
|
@property
|
|
10
19
|
def is_valid(self) -> bool:
|
|
11
|
-
return self.webhook_url
|
|
20
|
+
return bool(self.webhook_url) and all(
|
|
21
|
+
url and url != 'None' and url.strip() != '' for url in self.webhook_url
|
|
22
|
+
)
|
mage_ai/services/teams/teams.py
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
from mage_ai.services.teams.config import TeamsConfig
|
|
2
1
|
import requests
|
|
3
2
|
|
|
3
|
+
from mage_ai.services.teams.config import TeamsConfig
|
|
4
|
+
|
|
4
5
|
|
|
5
6
|
def send_teams_message(
|
|
6
7
|
config: TeamsConfig,
|
|
7
8
|
message: str,
|
|
8
9
|
title: str = 'Mage pipeline run status logs',
|
|
9
10
|
) -> None:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
'
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
for url in config.webhook_url:
|
|
12
|
+
requests.post(
|
|
13
|
+
url=url,
|
|
14
|
+
json={
|
|
15
|
+
'summary': title,
|
|
16
|
+
'sections': [{
|
|
17
|
+
'activityTitle': title,
|
|
18
|
+
'activitySubtitle': message,
|
|
19
|
+
}],
|
|
20
|
+
},
|
|
21
|
+
)
|
mage_ai/settings/backends.py
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import logging
|
|
3
3
|
import os
|
|
4
|
-
from enum import Enum
|
|
5
4
|
from typing import Optional
|
|
6
5
|
|
|
6
|
+
from mage_ai.shared.enum import StrEnum
|
|
7
|
+
|
|
7
8
|
logger = logging.getLogger(__name__)
|
|
8
9
|
|
|
9
10
|
|
|
10
|
-
class BackendType(
|
|
11
|
+
class BackendType(StrEnum):
|
|
11
12
|
"""
|
|
12
13
|
Enum for the different types of settings backends.
|
|
13
14
|
"""
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import os
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from enum import Enum
|
|
5
4
|
from pathlib import Path
|
|
6
5
|
from typing import Dict, Union
|
|
7
6
|
|
|
@@ -15,6 +14,7 @@ from mage_ai.data_preparation.models.pipeline import Pipeline
|
|
|
15
14
|
from mage_ai.data_preparation.shared.utils import get_template_vars
|
|
16
15
|
from mage_ai.settings.platform import project_platform_activated
|
|
17
16
|
from mage_ai.settings.repo import get_repo_path
|
|
17
|
+
from mage_ai.shared.enum import StrEnum
|
|
18
18
|
from mage_ai.shared.files import get_full_file_paths_containing_multi_items
|
|
19
19
|
from mage_ai.shared.hash import merge_dict
|
|
20
20
|
from mage_ai.shared.models import BaseDataClass
|
|
@@ -37,11 +37,11 @@ async def read_file(full_path: str) -> str:
|
|
|
37
37
|
return config
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
class ConfigurationType(
|
|
40
|
+
class ConfigurationType(StrEnum):
|
|
41
41
|
DBT = 'dbt'
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
class OptionType(
|
|
44
|
+
class OptionType(StrEnum):
|
|
45
45
|
PROFILES = 'profiles'
|
|
46
46
|
PROJECTS = 'projects'
|
|
47
47
|
TARGETS = 'targets'
|
mage_ai/settings/server.py
CHANGED
|
@@ -161,6 +161,11 @@ NEW_RELIC_CONFIG_PATH = os.getenv('NEW_RELIC_CONFIG_PATH', '')
|
|
|
161
161
|
# If enabled, the /metrics route will expose Tornado server metrics
|
|
162
162
|
ENABLE_PROMETHEUS = get_bool_value(os.getenv('ENABLE_PROMETHEUS', 'False'))
|
|
163
163
|
|
|
164
|
+
# API switch configuration
|
|
165
|
+
# If disabled, those AI APIs will not be used in backend.
|
|
166
|
+
ENABLE_OPEN_AI = get_bool_value(os.getenv('ENABLE_OPEN_AI') or 'True')
|
|
167
|
+
ENABLE_HUGGING_FACE = get_bool_value(os.getenv('ENABLE_HUGGING_FACE') or 'True')
|
|
168
|
+
|
|
164
169
|
# OpenTelemetry Configuration
|
|
165
170
|
OTEL_EXPORTER_OTLP_ENDPOINT = os.getenv('OTEL_EXPORTER_OTLP_ENDPOINT', None)
|
|
166
171
|
OTEL_EXPORTER_OTLP_HTTP_ENDPOINT = os.getenv('OTEL_EXPORTER_HTTP_OTLP_ENDPOINT', None)
|
mage_ai/shared/constants.py
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
from enum import
|
|
1
|
+
from mage_ai.shared.enum import StrEnum
|
|
2
2
|
|
|
3
3
|
ENV_DEV = 'dev'
|
|
4
4
|
ENV_PROD = 'prod'
|
|
5
5
|
ENV_STAGING = 'staging'
|
|
6
6
|
ENV_TEST = 'test'
|
|
7
|
+
ENV_TEST_MAGE = 'test_mage'
|
|
7
8
|
|
|
8
9
|
VALID_ENVS = frozenset([
|
|
9
10
|
ENV_DEV,
|
|
10
11
|
ENV_PROD,
|
|
11
12
|
ENV_STAGING,
|
|
12
13
|
ENV_TEST,
|
|
14
|
+
ENV_TEST_MAGE,
|
|
13
15
|
])
|
|
14
16
|
|
|
15
17
|
SAMPLE_SIZE = 1000
|
|
@@ -20,7 +22,7 @@ GCS_PREFIX = 'gs://'
|
|
|
20
22
|
ENV_VAR_INSTANCE_TYPE = 'INSTANCE_TYPE'
|
|
21
23
|
|
|
22
24
|
|
|
23
|
-
class InstanceType(
|
|
25
|
+
class InstanceType(StrEnum):
|
|
24
26
|
SERVER_AND_SCHEDULER = 'server_and_scheduler'
|
|
25
27
|
SCHEDULER = 'scheduler'
|
|
26
28
|
WEB_SERVER = 'web_server'
|
mage_ai/shared/custom_logger.py
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
import logging
|
|
3
|
-
from enum import Enum
|
|
4
3
|
|
|
5
4
|
import simplejson
|
|
6
5
|
|
|
7
6
|
from mage_ai.data_preparation.models.constants import BlockType
|
|
7
|
+
from mage_ai.shared.enum import StrEnum
|
|
8
8
|
from mage_ai.shared.environments import is_deus_ex_machina
|
|
9
9
|
from mage_ai.shared.parsers import encode_complex
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class Color(
|
|
12
|
+
class Color(StrEnum):
|
|
13
13
|
BLUE = "\x1b[1;34m"
|
|
14
14
|
BOLD_RED = "\x1b[31;1m"
|
|
15
15
|
GREEN = "\x1b[1;32m"
|
|
@@ -64,19 +64,19 @@ class ColorPrinter:
|
|
|
64
64
|
self.label = None
|
|
65
65
|
|
|
66
66
|
def debug(self, *args, **kwargs):
|
|
67
|
-
self.print(color=Color.PURPLE,
|
|
67
|
+
self.print(*args, color=Color.PURPLE, **kwargs)
|
|
68
68
|
|
|
69
69
|
def info(self, *args, **kwargs):
|
|
70
|
-
self.print(color=Color.BLUE,
|
|
70
|
+
self.print(*args, color=Color.BLUE, **kwargs)
|
|
71
71
|
|
|
72
72
|
def warning(self, *args, **kwargs):
|
|
73
|
-
self.print(color=Color.GREEN,
|
|
73
|
+
self.print(*args, color=Color.GREEN, **kwargs)
|
|
74
74
|
|
|
75
75
|
def error(self, *args, **kwargs):
|
|
76
|
-
self.print(color=Color.RED,
|
|
76
|
+
self.print(*args, color=Color.RED, **kwargs)
|
|
77
77
|
|
|
78
78
|
def critical(self, *args, **kwargs):
|
|
79
|
-
self.print(color=Color.BOLD_RED,
|
|
79
|
+
self.print(*args, color=Color.BOLD_RED, **kwargs)
|
|
80
80
|
|
|
81
81
|
def print(self, *args, **kwargs):
|
|
82
82
|
if not is_deus_ex_machina():
|
|
@@ -183,39 +183,39 @@ class CustomFormatter(logging.Formatter):
|
|
|
183
183
|
def debug(self, p: int = 0, *args, **kwargs):
|
|
184
184
|
if is_deus_ex_machina():
|
|
185
185
|
if p:
|
|
186
|
-
self.print(color=Color.PURPLE,
|
|
186
|
+
self.print(*args, color=Color.PURPLE, **kwargs)
|
|
187
187
|
else:
|
|
188
188
|
super().debug(*args, **kwargs)
|
|
189
189
|
|
|
190
190
|
def info(self, p: int = 0, *args, **kwargs):
|
|
191
191
|
if is_deus_ex_machina():
|
|
192
192
|
if p:
|
|
193
|
-
self.print(color=Color.BLUE,
|
|
193
|
+
self.print(*args, color=Color.BLUE, **kwargs)
|
|
194
194
|
else:
|
|
195
195
|
super().info(*args, **kwargs)
|
|
196
196
|
|
|
197
197
|
def warning(self, p: int = 0, *args, **kwargs):
|
|
198
198
|
if is_deus_ex_machina():
|
|
199
199
|
if p:
|
|
200
|
-
self.print(color=Color.YELLOW,
|
|
200
|
+
self.print(*args, color=Color.YELLOW, **kwargs)
|
|
201
201
|
else:
|
|
202
202
|
super().warning(*args, **kwargs)
|
|
203
203
|
|
|
204
204
|
def error(self, p: int = 0, *args, **kwargs):
|
|
205
205
|
if is_deus_ex_machina():
|
|
206
206
|
if p:
|
|
207
|
-
self.print(color=Color.RED,
|
|
207
|
+
self.print(*args, color=Color.RED, **kwargs)
|
|
208
208
|
else:
|
|
209
209
|
super().error(*args, **kwargs)
|
|
210
210
|
|
|
211
211
|
def critical(self, p: int = 0, *args, **kwargs):
|
|
212
212
|
if is_deus_ex_machina():
|
|
213
213
|
if p:
|
|
214
|
-
self.print(color=Color.BOLD_RED,
|
|
214
|
+
self.print(*args, color=Color.BOLD_RED, **kwargs)
|
|
215
215
|
else:
|
|
216
216
|
super().critical(*args, **kwargs)
|
|
217
217
|
|
|
218
|
-
def print(self, color: Color,
|
|
218
|
+
def print(self, *args, color: Color, **kwargs):
|
|
219
219
|
more = None
|
|
220
220
|
if kwargs:
|
|
221
221
|
more = simplejson.dumps(
|
mage_ai/shared/enum.py
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
try:
|
|
2
|
+
# breaking change introduced in python 3.11
|
|
3
|
+
from enum import Enum, IntEnum, StrEnum # noqa: F401
|
|
4
|
+
except ImportError: # pragma: no cover
|
|
5
|
+
from enum import Enum, IntEnum # noqa: F401 # pragma: no cover
|
|
6
|
+
|
|
7
|
+
class StrEnum(str, Enum): # pragma: no cover
|
|
8
|
+
pass # pragma: no cover
|
mage_ai/shared/environments.py
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import sys
|
|
3
3
|
|
|
4
|
-
from mage_ai.shared.constants import
|
|
4
|
+
from mage_ai.shared.constants import (
|
|
5
|
+
ENV_DEV,
|
|
6
|
+
ENV_PROD,
|
|
7
|
+
ENV_STAGING,
|
|
8
|
+
ENV_TEST,
|
|
9
|
+
ENV_TEST_MAGE,
|
|
10
|
+
)
|
|
5
11
|
|
|
6
12
|
|
|
7
13
|
def is_deus_ex_machina():
|
|
@@ -16,8 +22,24 @@ def is_dev():
|
|
|
16
22
|
return os.getenv('ENV', None) == 'dev' or os.getenv('ENV', None) == 'development'
|
|
17
23
|
|
|
18
24
|
|
|
25
|
+
def is_test_mage():
|
|
26
|
+
"""
|
|
27
|
+
The "test_mage" environment is used for running unit tests in the CI/CD pipeline.
|
|
28
|
+
When running unit tests, a "test.db" sqlite database is temporarily created for
|
|
29
|
+
storing test metadata. Refer to the mage_ai/orchestration/db/__init__.py file for
|
|
30
|
+
implementation details. The test_mage environment is separate from the "test"
|
|
31
|
+
environment so that Mage's unit tests don't affect a user's own testing metadata db.
|
|
32
|
+
"""
|
|
33
|
+
return os.getenv('ENV', None) == 'test_mage' or any('unittest' in v for v in sys.argv)
|
|
34
|
+
|
|
35
|
+
|
|
19
36
|
def is_test():
|
|
20
|
-
|
|
37
|
+
"""
|
|
38
|
+
The "test" environment is the default environment for testing where users may have
|
|
39
|
+
their own specific tests that they want to run with their own test metadata db at a
|
|
40
|
+
specific location.
|
|
41
|
+
"""
|
|
42
|
+
return os.getenv('ENV', None) == 'test' or is_test_mage()
|
|
21
43
|
|
|
22
44
|
|
|
23
45
|
def is_production():
|
|
@@ -29,7 +51,9 @@ def is_staging():
|
|
|
29
51
|
|
|
30
52
|
|
|
31
53
|
def get_env():
|
|
32
|
-
if
|
|
54
|
+
if is_test_mage():
|
|
55
|
+
return ENV_TEST_MAGE
|
|
56
|
+
elif is_test():
|
|
33
57
|
return ENV_TEST
|
|
34
58
|
elif is_production():
|
|
35
59
|
return ENV_PROD
|
mage_ai/shared/logger.py
CHANGED
|
@@ -2,10 +2,10 @@ import json
|
|
|
2
2
|
import logging
|
|
3
3
|
import time
|
|
4
4
|
from contextlib import contextmanager, redirect_stdout
|
|
5
|
-
from enum import Enum
|
|
6
5
|
from typing import Callable, List
|
|
7
6
|
|
|
8
7
|
from mage_ai.settings import SERVER_LOGGING_TEMPLATE
|
|
8
|
+
from mage_ai.shared.enum import StrEnum
|
|
9
9
|
from mage_ai.shared.hash import merge_dict
|
|
10
10
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
@@ -107,7 +107,7 @@ def set_logging_format(logging_format: str = None, level: str = None) -> None:
|
|
|
107
107
|
root_logger.exception('Invalid logging level %s', level)
|
|
108
108
|
|
|
109
109
|
|
|
110
|
-
class LoggingLevel(
|
|
110
|
+
class LoggingLevel(StrEnum):
|
|
111
111
|
DEBUG = 'DEBUG'
|
|
112
112
|
INFO = 'INFO'
|
|
113
113
|
WARNING = 'WARNING'
|
mage_ai/shared/models.py
CHANGED
|
@@ -7,12 +7,13 @@ from typing import Any, Dict, List, Optional, Type, Union
|
|
|
7
7
|
|
|
8
8
|
import inflection
|
|
9
9
|
|
|
10
|
+
from mage_ai.shared.enum import StrEnum
|
|
10
11
|
from mage_ai.shared.environments import is_debug
|
|
11
12
|
from mage_ai.shared.hash import merge_dict
|
|
12
13
|
from mage_ai.shared.parsers import encode_complex
|
|
13
14
|
|
|
14
15
|
|
|
15
|
-
class BaseEnum(
|
|
16
|
+
class BaseEnum(StrEnum):
|
|
16
17
|
@classmethod
|
|
17
18
|
def has_value(cls, value: Union[Any, str]) -> bool:
|
|
18
19
|
if isinstance(value, cls):
|
mage_ai/streaming/constants.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
from enum import
|
|
1
|
+
from mage_ai.shared.enum import StrEnum
|
|
2
2
|
|
|
3
3
|
DEFAULT_BATCH_SIZE = 100
|
|
4
4
|
DEFAULT_TIMEOUT_MS = 500
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
class SourceType(
|
|
7
|
+
class SourceType(StrEnum):
|
|
8
8
|
ACTIVEMQ = 'activemq'
|
|
9
9
|
AMAZON_SQS = 'amazon_sqs'
|
|
10
10
|
AZURE_EVENT_HUB = 'azure_event_hub'
|
|
@@ -17,7 +17,7 @@ class SourceType(str, Enum):
|
|
|
17
17
|
MONGODB = 'mongodb'
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
class SinkType(
|
|
20
|
+
class SinkType(StrEnum):
|
|
21
21
|
ACTIVEMQ = 'activemq'
|
|
22
22
|
AMAZON_S3 = 'amazon_s3'
|
|
23
23
|
AZURE_DATA_LAKE = 'azure_data_lake'
|
|
@@ -16,6 +16,8 @@ class ElasticSearchConfig(BaseConfig):
|
|
|
16
16
|
api_key: str = None
|
|
17
17
|
ca_cert: str = None
|
|
18
18
|
_id: str = None
|
|
19
|
+
_op_type: str = None
|
|
20
|
+
_source: str = None
|
|
19
21
|
|
|
20
22
|
|
|
21
23
|
class ElasticSearchSink(BaseSink):
|
|
@@ -51,9 +53,17 @@ class ElasticSearchSink(BaseSink):
|
|
|
51
53
|
|
|
52
54
|
def batch_write(self, messages: List[Dict]):
|
|
53
55
|
self._print(f'Batch ingest data {messages}, time={time.time()}')
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
docs = []
|
|
57
|
+
for msg in messages:
|
|
58
|
+
doc = {'_index': self.config.index_name}
|
|
59
|
+
if self.config._id is not None:
|
|
60
|
+
doc['id'] = msg[self.config._id]
|
|
61
|
+
if self.config._op_type is not None:
|
|
62
|
+
doc['_op_type'] = self.config._op_type
|
|
63
|
+
if self.config._source is not None:
|
|
64
|
+
doc[self.config._source] = msg
|
|
65
|
+
else:
|
|
66
|
+
doc['_doc'] = msg
|
|
67
|
+
docs.append(doc)
|
|
68
|
+
|
|
59
69
|
helpers.bulk(self.client, docs)
|
mage_ai/streaming/sinks/kafka.py
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import time
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from enum import Enum
|
|
5
4
|
from typing import Dict, List
|
|
6
5
|
|
|
7
6
|
from kafka import KafkaProducer
|
|
8
7
|
|
|
9
8
|
from mage_ai.shared.config import BaseConfig
|
|
9
|
+
from mage_ai.shared.enum import StrEnum
|
|
10
10
|
from mage_ai.streaming.constants import DEFAULT_BATCH_SIZE, DEFAULT_TIMEOUT_MS
|
|
11
11
|
from mage_ai.streaming.sinks.base import BaseSink
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
class SecurityProtocol(
|
|
14
|
+
class SecurityProtocol(StrEnum):
|
|
15
15
|
SASL_SSL = 'SASL_SSL'
|
|
16
16
|
SSL = 'SSL'
|
|
17
17
|
|
|
@@ -23,6 +23,9 @@ class PostgresConfig(BaseConfig):
|
|
|
23
23
|
port: int = 5432
|
|
24
24
|
unique_conflict_method: str = UNIQUE_CONFLICT_METHOD_IGNORE
|
|
25
25
|
unique_constraints: List = field(default_factory=list)
|
|
26
|
+
allow_reserved_words: bool = False
|
|
27
|
+
auto_clean_name: bool = True
|
|
28
|
+
case_sensitive: bool = False
|
|
26
29
|
|
|
27
30
|
|
|
28
31
|
class PostgresSink(BaseSink):
|
|
@@ -57,6 +60,9 @@ class PostgresSink(BaseSink):
|
|
|
57
60
|
if_exists=ExportWritePolicy.APPEND,
|
|
58
61
|
unique_conflict_method=self.config.unique_conflict_method,
|
|
59
62
|
unique_constraints=self.config.unique_constraints,
|
|
63
|
+
allow_reserved_words=self.config.allow_reserved_words,
|
|
64
|
+
auto_clean_name=self.config.auto_clean_name,
|
|
65
|
+
case_sensitive=self.config.case_sensitive,
|
|
60
66
|
)
|
|
61
67
|
|
|
62
68
|
def destroy(self):
|
|
@@ -2,12 +2,12 @@ import json
|
|
|
2
2
|
import threading
|
|
3
3
|
import time
|
|
4
4
|
from dataclasses import dataclass
|
|
5
|
-
from enum import Enum
|
|
6
5
|
from typing import Callable, Dict
|
|
7
6
|
|
|
8
7
|
import boto3
|
|
9
8
|
|
|
10
9
|
from mage_ai.shared.config import BaseConfig
|
|
10
|
+
from mage_ai.shared.enum import StrEnum
|
|
11
11
|
from mage_ai.streaming.constants import DEFAULT_BATCH_SIZE
|
|
12
12
|
from mage_ai.streaming.sources.base import BaseSource
|
|
13
13
|
from mage_ai.streaming.sources.shared import SerDeConfig, SerializationMethod
|
|
@@ -15,7 +15,7 @@ from mage_ai.streaming.sources.shared import SerDeConfig, SerializationMethod
|
|
|
15
15
|
DEFAULT_WAIT_TIME_SECONDS = 1
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
class MessageDeletionMethod(
|
|
18
|
+
class MessageDeletionMethod(StrEnum):
|
|
19
19
|
AFTER_RECEIVED = 'AFTER_RECEIVED'
|
|
20
20
|
MANUAL = 'MANUAL'
|
|
21
21
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import json
|
|
2
2
|
from abc import ABC, abstractmethod
|
|
3
|
-
from enum import Enum
|
|
4
3
|
from typing import Callable, Dict
|
|
5
4
|
|
|
5
|
+
from mage_ai.shared.enum import StrEnum
|
|
6
6
|
from mage_ai.shared.environments import is_test
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
class SourceConsumeMethod(
|
|
9
|
+
class SourceConsumeMethod(StrEnum):
|
|
10
10
|
BATCH_READ = 'BATCH_READ'
|
|
11
11
|
READ = 'READ'
|
|
12
12
|
READ_ASYNC = 'READ_ASYNC'
|