mage-ai 0.9.55__py3-none-any.whl → 0.9.57__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/api/parsers/ProjectParser.py +29 -0
- mage_ai/api/policies/BlockPolicy.py +1 -0
- mage_ai/api/policies/CustomDesignPolicy.py +3 -0
- mage_ai/api/policies/GitBranchPolicy.py +9 -0
- mage_ai/api/policies/GitCustomBranchPolicy.py +1 -0
- mage_ai/api/policies/GlobalHookPolicy.py +3 -0
- mage_ai/api/policies/ProjectPolicy.py +28 -0
- mage_ai/api/presenters/ProjectPresenter.py +4 -0
- mage_ai/api/resources/BlockResource.py +14 -1
- mage_ai/api/resources/FileResource.py +1 -1
- mage_ai/api/resources/GitFileResource.py +1 -1
- mage_ai/api/resources/GlobalHookResource.py +55 -10
- mage_ai/api/resources/PipelineResource.py +12 -11
- mage_ai/api/resources/ProjectResource.py +95 -7
- mage_ai/authentication/operation_history/models.py +1 -1
- mage_ai/cache/dbt/cache.py +1 -1
- mage_ai/cache/dbt/utils.py +22 -2
- mage_ai/cluster_manager/kubernetes/workload_manager.py +17 -7
- mage_ai/data_preparation/models/block/__init__.py +71 -5
- mage_ai/data_preparation/models/block/dbt/block_sql.py +13 -3
- mage_ai/data_preparation/models/block/dbt/dbt_adapter.py +15 -1
- mage_ai/data_preparation/models/block/dbt/profiles.py +14 -12
- mage_ai/data_preparation/models/block/platform/mixins.py +6 -2
- mage_ai/data_preparation/models/block/platform/utils.py +9 -1
- mage_ai/data_preparation/models/file.py +1 -1
- mage_ai/data_preparation/models/global_hooks/models.py +2 -2
- mage_ai/data_preparation/models/project/__init__.py +74 -4
- mage_ai/data_preparation/models/project/constants.py +1 -0
- mage_ai/data_preparation/repo_manager.py +3 -0
- mage_ai/orchestration/db/models/schedules.py +64 -102
- mage_ai/orchestration/db/models/schedules_project_platform.py +365 -0
- mage_ai/orchestration/pipeline_scheduler.py +5 -1700
- mage_ai/orchestration/pipeline_scheduler_original.py +1635 -0
- mage_ai/orchestration/pipeline_scheduler_project_platform.py +1701 -0
- mage_ai/server/constants.py +1 -1
- mage_ai/server/frontend_dist/404.html +2 -2
- mage_ai/server/frontend_dist/_next/static/A7VXVGKgLQCukXcjdysDz/_buildManifest.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/1557-724bfc3eabd095f7.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/161-33f26e485ddef393.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/2646-78905b899b68f4eb.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/3419-ad674b271b8520ce.js → frontend_dist/_next/static/chunks/3419-b8bd26f5946bec5a.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3437-ce26fc28e114b44e.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3540-9bb48b08f439d0a0.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3745-61b1c63bb56bb670.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/{5729.0f2748e9e6dab951.js → 5189.dca121eccea793be.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5457-b373ebdf4d05d8e2.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/5533-3455832bc3f8429b.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/5729-9d8204ab91da631d.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/5810-e26a0768db1cfdba.js → frontend_dist/_next/static/chunks/5810-addfa3491ae6b01c.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8264-68db2a8334ad48f1.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/8432-0ace6fb7bdbc6864.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/8731-82571147875a2d58.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/874-d9e1b3c9c00ebac9.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/9264-5df6e4c7b1e85c02.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{_app-0d183e2f234d52c6.js → _app-4c0239ca6203e827.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/compute-822e66aa2e90cf4c.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/files-373217c5de51aeef.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-data-products/{[...slug]-1e4838e534c8f31e.js → [...slug]-0325e76a2f3e08c1.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{global-data-products-bb38f73540efeac4.js → global-data-products-927ebbdc29529765.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-a172f5a447bd8925.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks-97bec2ac883e0c26.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/files-02d001d99eeaae3f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/settings-2e577bfd4f0db2b7.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-1827574a4ba95a72.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/new-a913c361bcc0d1a9.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users-4e6fdcbbfc931d67.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-1c327edcf05df9c9.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{oauth-eba7027969034415.js → oauth-bd8494f8875c5c97.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-5a98e6a531410afb.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-1442183d13edec2e.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/{[...slug]-b526282c8ac49986.js → [...slug]-38b2241cdd10320c.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-515eb343210aa1fb.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-1c646dbef65d6a69.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{dashboard-fe4d1321da8291cb.js → dashboard-35cb916a18ac4e1f.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-cd1918632dfef29d.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{logs-c011d465f61138ee.js → logs-67b0572c84db0940.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/{block-runs-46c0dabd155581a0.js → block-runs-40201b626ea3a664.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-f2a052cb8a20fe47.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-d1f23308effebe03.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{monitors-579899cbaedcdefc.js → monitors-9a116d88f00916ff.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/{[run]-7a2265b7e44bed0b.js → [run]-2d5abcd019d4bea1.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{runs-9b53da919db959bd.js → runs-5363a7ae9afe8983.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{settings-1839276725bfd757.js → settings-931a1b3112866a72.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{syncs-68d779bc62185470.js → syncs-5ec5367cb877db38.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-01f4528602f4ba2a.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-8366661f8e2b2959.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{triggers-358523847fdbf547.js → triggers-378f8dada7d0c1dd.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-627be24ef4963cfb.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks/[...slug]-814bbd11e10c26dc.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks-021ec25e05862f8f.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/settings/account/profile-00393e67ab1e6788.js → frontend_dist/_next/static/chunks/pages/settings/account/profile-2b0aa123043519b8.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-05186e17c94347c1.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/settings-efe8bf1bf3177a7e.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-eaeba99f9547a20a.js → [...slug]-aa5d871de1f3f7b0.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{permissions-c3140516cc28e467.js → permissions-ce45aad47049d993.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-1bc694b056ff0bcb.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-f6ff0e219a4b9ffd.js → [...slug]-88d29d1774db67e4.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{roles-22ff9d862736b2ec.js → roles-d8ca763e405cd9d1.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{sync-data-614925e838d1974c.js → sync-data-42bd909eb8951040.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users/{[...slug]-5b88dfb1c6d0d16c.js → [...slug]-250dfdf22bfe67e9.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{users-eb904db7ac7ea57c.js → users-97c4ce119f7238b5.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-dcdd0c71f99aebad.js → frontend_dist/_next/static/chunks/pages/sign-in-1af3ba18ff646dd4.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/templates/[...slug]-ff9d49355393daea.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{templates-5ebfe79c24d8c4b4.js → templates-299a2c8f2dd89cf3.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-fb3f398009a02879.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/test-59a08e06f4ef6c3a.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-551b85802515e313.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-1362aeda4a31dd41.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/{webpack-fea697dd168c6d0c.js → webpack-17c3a8f588f14cfd.js} +1 -1
- mage_ai/server/frontend_dist/block-layout.html +2 -2
- mage_ai/server/frontend_dist/compute.html +2 -2
- mage_ai/server/frontend_dist/files.html +2 -2
- mage_ai/server/frontend_dist/global-data-products/[...slug].html +2 -2
- mage_ai/server/frontend_dist/global-data-products.html +2 -2
- mage_ai/server/frontend_dist/global-hooks/[...slug].html +2 -2
- mage_ai/server/frontend_dist/global-hooks.html +2 -2
- mage_ai/server/frontend_dist/index.html +2 -2
- mage_ai/server/frontend_dist/manage/files.html +2 -2
- mage_ai/server/frontend_dist/manage/settings.html +2 -2
- mage_ai/server/frontend_dist/manage/users/[user].html +2 -2
- mage_ai/server/frontend_dist/manage/users/new.html +2 -2
- mage_ai/server/frontend_dist/manage/users.html +2 -2
- mage_ai/server/frontend_dist/manage.html +2 -2
- mage_ai/server/frontend_dist/oauth.html +3 -3
- mage_ai/server/frontend_dist/overview.html +2 -2
- mage_ai/server/frontend_dist/pipeline-runs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/dashboard.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
- mage_ai/server/frontend_dist/pipelines.html +2 -2
- mage_ai/server/frontend_dist/platform/global-hooks/[...slug].html +24 -0
- mage_ai/server/frontend_dist/platform/global-hooks.html +24 -0
- mage_ai/server/frontend_dist/settings/account/profile.html +2 -2
- mage_ai/server/frontend_dist/settings/platform/preferences.html +24 -0
- mage_ai/server/frontend_dist/settings/platform/settings.html +24 -0
- mage_ai/server/frontend_dist/settings/workspace/permissions/[...slug].html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/permissions.html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/preferences.html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/roles/[...slug].html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/roles.html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/sync-data.html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/users/[...slug].html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/users.html +2 -2
- mage_ai/server/frontend_dist/settings.html +2 -2
- mage_ai/server/frontend_dist/sign-in.html +3 -3
- mage_ai/server/frontend_dist/templates/[...slug].html +2 -2
- mage_ai/server/frontend_dist/templates.html +2 -2
- mage_ai/server/frontend_dist/terminal.html +2 -2
- mage_ai/server/frontend_dist/test.html +2 -2
- mage_ai/server/frontend_dist/triggers.html +2 -2
- mage_ai/server/frontend_dist/version-control.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/404.html +4 -4
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1557-724bfc3eabd095f7.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/161-33f26e485ddef393.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2646-78905b899b68f4eb.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/3419-ad674b271b8520ce.js → frontend_dist_base_path_template/_next/static/chunks/3419-b8bd26f5946bec5a.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3437-ce26fc28e114b44e.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3540-9bb48b08f439d0a0.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3745-61b1c63bb56bb670.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{5729.0f2748e9e6dab951.js → 5189.dca121eccea793be.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5457-b373ebdf4d05d8e2.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5533-3455832bc3f8429b.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5729-9d8204ab91da631d.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/5810-e26a0768db1cfdba.js → frontend_dist_base_path_template/_next/static/chunks/5810-addfa3491ae6b01c.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8264-68db2a8334ad48f1.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8432-0ace6fb7bdbc6864.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8731-82571147875a2d58.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/874-d9e1b3c9c00ebac9.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9264-5df6e4c7b1e85c02.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{_app-0d183e2f234d52c6.js → _app-4c0239ca6203e827.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/compute-822e66aa2e90cf4c.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/files-373217c5de51aeef.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-data-products/{[...slug]-1e4838e534c8f31e.js → [...slug]-0325e76a2f3e08c1.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{global-data-products-bb38f73540efeac4.js → global-data-products-927ebbdc29529765.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-a172f5a447bd8925.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks-97bec2ac883e0c26.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/files-02d001d99eeaae3f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/settings-2e577bfd4f0db2b7.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-1827574a4ba95a72.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-a913c361bcc0d1a9.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users-4e6fdcbbfc931d67.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage-1c327edcf05df9c9.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{oauth-eba7027969034415.js → oauth-bd8494f8875c5c97.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-5a98e6a531410afb.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipeline-runs-1442183d13edec2e.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills/{[...slug]-b526282c8ac49986.js → [...slug]-38b2241cdd10320c.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-515eb343210aa1fb.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-1c646dbef65d6a69.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{dashboard-fe4d1321da8291cb.js → dashboard-35cb916a18ac4e1f.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-cd1918632dfef29d.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{logs-c011d465f61138ee.js → logs-67b0572c84db0940.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/{block-runs-46c0dabd155581a0.js → block-runs-40201b626ea3a664.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-f2a052cb8a20fe47.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-d1f23308effebe03.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{monitors-579899cbaedcdefc.js → monitors-9a116d88f00916ff.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/{[run]-7a2265b7e44bed0b.js → [run]-2d5abcd019d4bea1.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{runs-9b53da919db959bd.js → runs-5363a7ae9afe8983.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{settings-1839276725bfd757.js → settings-931a1b3112866a72.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{syncs-68d779bc62185470.js → syncs-5ec5367cb877db38.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-01f4528602f4ba2a.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-8366661f8e2b2959.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{triggers-358523847fdbf547.js → triggers-378f8dada7d0c1dd.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-627be24ef4963cfb.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks/[...slug]-814bbd11e10c26dc.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks-021ec25e05862f8f.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/settings/account/profile-00393e67ab1e6788.js → frontend_dist_base_path_template/_next/static/chunks/pages/settings/account/profile-2b0aa123043519b8.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-05186e17c94347c1.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-efe8bf1bf3177a7e.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-eaeba99f9547a20a.js → [...slug]-aa5d871de1f3f7b0.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{permissions-c3140516cc28e467.js → permissions-ce45aad47049d993.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-1bc694b056ff0bcb.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-f6ff0e219a4b9ffd.js → [...slug]-88d29d1774db67e4.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{roles-22ff9d862736b2ec.js → roles-d8ca763e405cd9d1.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{sync-data-614925e838d1974c.js → sync-data-42bd909eb8951040.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/users/{[...slug]-5b88dfb1c6d0d16c.js → [...slug]-250dfdf22bfe67e9.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{users-eb904db7ac7ea57c.js → users-97c4ce119f7238b5.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/sign-in-dcdd0c71f99aebad.js → frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-1af3ba18ff646dd4.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates/[...slug]-ff9d49355393daea.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{templates-5ebfe79c24d8c4b4.js → templates-299a2c8f2dd89cf3.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/terminal-fb3f398009a02879.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/test-59a08e06f4ef6c3a.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-551b85802515e313.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/version-control-1362aeda4a31dd41.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{webpack-d30cb09c85b4c4f0.js → webpack-b55fe1e575d8ac9d.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/wSRrM15xnvA8lOWcaque7/_buildManifest.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/block-layout.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/compute.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/files.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/global-data-products/[...slug].html +5 -5
- mage_ai/server/frontend_dist_base_path_template/global-data-products.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/global-hooks/[...slug].html +5 -5
- mage_ai/server/frontend_dist_base_path_template/global-hooks.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/index.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/manage/files.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/manage/settings.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/manage/users/[user].html +5 -5
- mage_ai/server/frontend_dist_base_path_template/manage/users/new.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/manage/users.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/manage.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/oauth.html +3 -3
- mage_ai/server/frontend_dist_base_path_template/overview.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipeline-runs.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills/[...slug].html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/dashboard.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/edit.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/logs.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runs.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runtime.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs/[run].html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/settings.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/syncs.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers/[...slug].html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/platform/global-hooks/[...slug].html +24 -0
- mage_ai/server/frontend_dist_base_path_template/platform/global-hooks.html +24 -0
- mage_ai/server/frontend_dist_base_path_template/settings/account/profile.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/settings/platform/preferences.html +24 -0
- mage_ai/server/frontend_dist_base_path_template/settings/platform/settings.html +24 -0
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions/[...slug].html +5 -5
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/preferences.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles/[...slug].html +5 -5
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/sync-data.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/users/[...slug].html +5 -5
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/users.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/settings.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/sign-in.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/templates/[...slug].html +5 -5
- mage_ai/server/frontend_dist_base_path_template/templates.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/terminal.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/test.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/triggers.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/version-control.html +5 -5
- mage_ai/server/websocket_server.py +33 -22
- mage_ai/settings/models/configuration_option.py +15 -1
- mage_ai/settings/platform/__init__.py +44 -20
- mage_ai/shared/io.py +3 -0
- mage_ai/streaming/sinks/rabbitmq.py +3 -1
- mage_ai/streaming/sources/rabbitmq.py +5 -2
- mage_ai/tests/api/endpoints/test_pipeline_runs.py +4 -0
- mage_ai/tests/api/endpoints/test_projects.py +1 -0
- mage_ai/tests/api/resources/test_pipeline_resource.py +2 -2
- mage_ai/tests/data_preparation/models/block/platform/test_mixins.py +4 -3
- mage_ai/tests/data_preparation/models/test_block.py +2 -1
- mage_ai/tests/data_preparation/models/test_project.py +27 -7
- mage_ai/tests/orchestration/db/models/test_schedules.py +25 -7
- mage_ai/tests/orchestration/test_pipeline_scheduler.py +6 -261
- mage_ai/tests/orchestration/test_pipeline_scheduler_project_platform.py +286 -0
- mage_ai/tests/shared/mixins.py +1 -0
- {mage_ai-0.9.55.dist-info → mage_ai-0.9.57.dist-info}/METADATA +1 -1
- {mage_ai-0.9.55.dist-info → mage_ai-0.9.57.dist-info}/RECORD +309 -286
- mage_ai/server/frontend_dist/_next/static/7yQskzl_RfcpoOQn1DPQV/_buildManifest.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1125-fbdaaef471846c61.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1952-c4ba37bc172d7051.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/2646-d8612648f7836101.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3437-91f6098316edaf17.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3745-0aacee8ac93a042a.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5332-c5abdf5c8d65a52e.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5457-6e700aadac17ceec.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8264-dad1f090c4278137.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8432-ec2b97cbf32ec5a7.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8731-9e0ad513b0dfce83.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/874-18d9f33cdd028e9d.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/9264-4428392376aa9dd4.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/9626-2627bc34f11b2906.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/compute-5ead3afa88d14721.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/files-87b31b998e9f1222.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-a7d74042d52c3c38.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks-cf7f1ba0b44ec0fb.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/files-899b362caff47d4d.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/settings-b9ddd48737fba474.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-1e8731ba2559fef4.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/new-a6307396dfa82c88.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users-fc5aafe5085739a9.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-c008f0201864d693.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-321f47b2dba4c780.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-bf4d162b5460acc6.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-62ee3e957688c725.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-33d9fb90871be84c.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-f4ff09cfff8bad46.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/templates/[...slug]-04b0a55e8ad6f814.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-88025dd0ed3051a6.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/test-b936dd972db94c6b.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-e5e49ac3b9282aaa.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-a5372e488b5f44a2.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/2_SHgS8M315ekLG0qkZzC/_buildManifest.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1125-fbdaaef471846c61.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1952-c4ba37bc172d7051.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2646-d8612648f7836101.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3437-91f6098316edaf17.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3745-0aacee8ac93a042a.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5332-c5abdf5c8d65a52e.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5457-6e700aadac17ceec.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8264-dad1f090c4278137.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8432-ec2b97cbf32ec5a7.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8731-9e0ad513b0dfce83.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/874-18d9f33cdd028e9d.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9264-4428392376aa9dd4.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9626-2627bc34f11b2906.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/compute-5ead3afa88d14721.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/files-87b31b998e9f1222.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-a7d74042d52c3c38.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks-cf7f1ba0b44ec0fb.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/files-899b362caff47d4d.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/settings-b9ddd48737fba474.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-1e8731ba2559fef4.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-a6307396dfa82c88.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users-fc5aafe5085739a9.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage-c008f0201864d693.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-321f47b2dba4c780.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipeline-runs-bf4d162b5460acc6.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-62ee3e957688c725.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-33d9fb90871be84c.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-f4ff09cfff8bad46.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates/[...slug]-04b0a55e8ad6f814.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/terminal-88025dd0ed3051a6.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/test-b936dd972db94c6b.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-e5e49ac3b9282aaa.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/version-control-a5372e488b5f44a2.js +0 -1
- /mage_ai/server/frontend_dist/_next/static/{7yQskzl_RfcpoOQn1DPQV → A7VXVGKgLQCukXcjdysDz}/_ssgManifest.js +0 -0
- /mage_ai/server/frontend_dist_base_path_template/_next/static/{2_SHgS8M315ekLG0qkZzC → wSRrM15xnvA8lOWcaque7}/_ssgManifest.js +0 -0
- {mage_ai-0.9.55.dist-info → mage_ai-0.9.57.dist-info}/LICENSE +0 -0
- {mage_ai-0.9.55.dist-info → mage_ai-0.9.57.dist-info}/WHEEL +0 -0
- {mage_ai-0.9.55.dist-info → mage_ai-0.9.57.dist-info}/entry_points.txt +0 -0
- {mage_ai-0.9.55.dist-info → mage_ai-0.9.57.dist-info}/top_level.txt +0 -0
|
@@ -731,9 +731,7 @@ class WorkloadManager:
|
|
|
731
731
|
|
|
732
732
|
return env_vars
|
|
733
733
|
|
|
734
|
-
def
|
|
735
|
-
self, workspace_config: KubernetesWorkspaceConfig
|
|
736
|
-
) -> Dict:
|
|
734
|
+
def get_default_values(self) -> Dict:
|
|
737
735
|
service_account_name_default = None
|
|
738
736
|
storage_class_name_default = None
|
|
739
737
|
storage_access_mode_default = None
|
|
@@ -757,19 +755,31 @@ class WorkloadManager:
|
|
|
757
755
|
except Exception:
|
|
758
756
|
pass
|
|
759
757
|
|
|
758
|
+
return dict(
|
|
759
|
+
service_account_name=service_account_name_default,
|
|
760
|
+
storage_class_name=storage_class_name_default,
|
|
761
|
+
storage_access_mode=storage_access_mode_default,
|
|
762
|
+
storage_request_size=storage_request_size_default,
|
|
763
|
+
)
|
|
764
|
+
|
|
765
|
+
def __get_configurable_parameters(
|
|
766
|
+
self, workspace_config: KubernetesWorkspaceConfig
|
|
767
|
+
) -> Dict:
|
|
768
|
+
default_values = self.get_default_values()
|
|
769
|
+
|
|
760
770
|
storage_request_size = workspace_config.storage_request_size
|
|
761
771
|
if storage_request_size is None:
|
|
762
|
-
storage_request_size =
|
|
772
|
+
storage_request_size = default_values.get('storage_request_size')
|
|
763
773
|
else:
|
|
764
774
|
storage_request_size = f'{storage_request_size}Gi'
|
|
765
775
|
|
|
766
776
|
return dict(
|
|
767
777
|
service_account_name=workspace_config.service_account_name
|
|
768
|
-
or
|
|
778
|
+
or default_values.get('service_account_name'),
|
|
769
779
|
storage_class_name=workspace_config.storage_class_name
|
|
770
|
-
or
|
|
780
|
+
or default_values.get('storage_class_name'),
|
|
771
781
|
storage_access_mode=workspace_config.storage_access_mode
|
|
772
|
-
or
|
|
782
|
+
or default_values.get('storage_access_mode'),
|
|
773
783
|
storage_request_size=storage_request_size,
|
|
774
784
|
)
|
|
775
785
|
|
|
@@ -12,9 +12,11 @@ from contextlib import contextmanager, redirect_stderr, redirect_stdout
|
|
|
12
12
|
from datetime import datetime
|
|
13
13
|
from inspect import Parameter, isfunction, signature
|
|
14
14
|
from logging import Logger
|
|
15
|
+
from pathlib import Path
|
|
15
16
|
from queue import Queue
|
|
16
17
|
from typing import Any, Callable, Dict, Generator, List, Set, Tuple, Union
|
|
17
18
|
|
|
19
|
+
import inflection
|
|
18
20
|
import pandas as pd
|
|
19
21
|
import simplejson
|
|
20
22
|
import yaml
|
|
@@ -57,6 +59,7 @@ from mage_ai.data_preparation.models.constants import (
|
|
|
57
59
|
DATAFRAME_ANALYSIS_MAX_COLUMNS,
|
|
58
60
|
DATAFRAME_ANALYSIS_MAX_ROWS,
|
|
59
61
|
DATAFRAME_SAMPLE_COUNT_PREVIEW,
|
|
62
|
+
FILE_EXTENSION_TO_BLOCK_LANGUAGE,
|
|
60
63
|
NON_PIPELINE_EXECUTABLE_BLOCK_TYPES,
|
|
61
64
|
BlockColor,
|
|
62
65
|
BlockLanguage,
|
|
@@ -84,6 +87,10 @@ from mage_ai.shared.environments import get_env, is_debug
|
|
|
84
87
|
from mage_ai.shared.hash import extract, ignore_keys, merge_dict
|
|
85
88
|
from mage_ai.shared.logger import BlockFunctionExec
|
|
86
89
|
from mage_ai.shared.parsers import encode_complex
|
|
90
|
+
from mage_ai.shared.path_fixer import (
|
|
91
|
+
add_root_repo_path_to_relative_path,
|
|
92
|
+
get_path_parts,
|
|
93
|
+
)
|
|
87
94
|
from mage_ai.shared.strings import format_enum
|
|
88
95
|
from mage_ai.shared.utils import clean_name as clean_name_orig
|
|
89
96
|
from mage_ai.shared.utils import is_spark_env
|
|
@@ -586,7 +593,7 @@ class Block(DataIntegrationMixin, SparkBlock, ProjectPlatformAccessible):
|
|
|
586
593
|
def file_path(self) -> str:
|
|
587
594
|
file_path = self.get_file_path_from_source()
|
|
588
595
|
if file_path:
|
|
589
|
-
return file_path
|
|
596
|
+
return add_root_repo_path_to_relative_path(file_path)
|
|
590
597
|
|
|
591
598
|
return self.__build_file_path(
|
|
592
599
|
self.repo_path or os.getcwd(),
|
|
@@ -753,16 +760,28 @@ class Block(DataIntegrationMixin, SparkBlock, ProjectPlatformAccessible):
|
|
|
753
760
|
)
|
|
754
761
|
file_is_from_another_project = (
|
|
755
762
|
file_path_from_source and
|
|
756
|
-
from_another_project(
|
|
763
|
+
from_another_project(
|
|
764
|
+
file_path=file_path_from_source,
|
|
765
|
+
other_file_path=pipeline.dir_path if pipeline else None,
|
|
766
|
+
)
|
|
757
767
|
)
|
|
768
|
+
absolute_file_path = add_root_repo_path_to_relative_path(
|
|
769
|
+
file_path_from_source,
|
|
770
|
+
) if file_path_from_source else None
|
|
771
|
+
|
|
772
|
+
if not file_is_from_another_project and \
|
|
773
|
+
(not absolute_file_path or not os.path.exists(absolute_file_path)):
|
|
758
774
|
|
|
759
|
-
if not file_is_from_another_project:
|
|
760
775
|
if not replicated_block and \
|
|
761
776
|
(BlockType.DBT != block_type or BlockLanguage.YAML == language) and \
|
|
762
777
|
BlockType.GLOBAL_DATA_PRODUCT != block_type:
|
|
763
778
|
|
|
764
779
|
block_directory = self.file_directory_name(block_type)
|
|
765
|
-
|
|
780
|
+
if absolute_file_path:
|
|
781
|
+
block_dir_path = os.path.dirname(absolute_file_path)
|
|
782
|
+
else:
|
|
783
|
+
block_dir_path = os.path.join(repo_path, block_directory)
|
|
784
|
+
|
|
766
785
|
if not os.path.exists(block_dir_path):
|
|
767
786
|
os.mkdir(block_dir_path)
|
|
768
787
|
with open(os.path.join(block_dir_path, '__init__.py'), 'w'):
|
|
@@ -895,6 +914,41 @@ class Block(DataIntegrationMixin, SparkBlock, ProjectPlatformAccessible):
|
|
|
895
914
|
status=status,
|
|
896
915
|
)
|
|
897
916
|
|
|
917
|
+
@classmethod
|
|
918
|
+
def get_block_from_file_path(self, file_path: str) -> 'Block':
|
|
919
|
+
parts = get_path_parts(file_path)
|
|
920
|
+
|
|
921
|
+
if parts and len(parts) >= 3:
|
|
922
|
+
# If file_path == transformers/test4.py
|
|
923
|
+
# parts ==
|
|
924
|
+
# ('/home/src/default_repo/default_platform2/project3', 'transformers', 'test4.py')
|
|
925
|
+
|
|
926
|
+
# If project platform platform activated, then parts ==
|
|
927
|
+
# ('/home/src', 'default_repo', 'data_loaders/astral_violet.py')
|
|
928
|
+
|
|
929
|
+
root_project_full_path, path, file_path_base = parts
|
|
930
|
+
|
|
931
|
+
if project_platform_activated():
|
|
932
|
+
# ('data_loaders', 'astral_violet.py')
|
|
933
|
+
file_parts = Path(file_path_base).parts
|
|
934
|
+
block_type = inflection.singularize(str(file_parts[0]))
|
|
935
|
+
block_uuid = str(Path(*file_parts[1:]).with_suffix(''))
|
|
936
|
+
else:
|
|
937
|
+
block_type = inflection.singularize(str(path))
|
|
938
|
+
block_uuid = str(Path(file_path_base).with_suffix(''))
|
|
939
|
+
|
|
940
|
+
extension = Path(file_path).suffix.replace('.', '')
|
|
941
|
+
configuration = dict(file_path=file_path, file_source=dict(path=file_path))
|
|
942
|
+
language = FILE_EXTENSION_TO_BLOCK_LANGUAGE.get(extension)
|
|
943
|
+
|
|
944
|
+
return self.get_block(
|
|
945
|
+
block_uuid,
|
|
946
|
+
block_uuid,
|
|
947
|
+
block_type,
|
|
948
|
+
configuration=configuration,
|
|
949
|
+
language=language,
|
|
950
|
+
)
|
|
951
|
+
|
|
898
952
|
def all_upstream_blocks_completed(
|
|
899
953
|
self,
|
|
900
954
|
completed_block_uuids: Set[str],
|
|
@@ -945,6 +999,8 @@ class Block(DataIntegrationMixin, SparkBlock, ProjectPlatformAccessible):
|
|
|
945
999
|
if len(pipelines) == 0:
|
|
946
1000
|
os.remove(self.file_path)
|
|
947
1001
|
return
|
|
1002
|
+
|
|
1003
|
+
# TODO (tommy dang): delete this block from all pipelines in all projects
|
|
948
1004
|
# If pipeline is not specified, delete the block from all pipelines and delete the file.
|
|
949
1005
|
pipelines = Pipeline.get_pipelines_by_block(self, widget=widget)
|
|
950
1006
|
if not force:
|
|
@@ -954,6 +1010,7 @@ class Block(DataIntegrationMixin, SparkBlock, ProjectPlatformAccessible):
|
|
|
954
1010
|
f'Block {self.uuid} has downstream dependencies in pipeline {p.uuid}. '
|
|
955
1011
|
'Please remove the dependencies before deleting the block.'
|
|
956
1012
|
)
|
|
1013
|
+
|
|
957
1014
|
for p in pipelines:
|
|
958
1015
|
p.delete_block(
|
|
959
1016
|
p.get_block(self.uuid, widget=widget),
|
|
@@ -961,6 +1018,7 @@ class Block(DataIntegrationMixin, SparkBlock, ProjectPlatformAccessible):
|
|
|
961
1018
|
commit=commit,
|
|
962
1019
|
force=force,
|
|
963
1020
|
)
|
|
1021
|
+
|
|
964
1022
|
os.remove(self.file_path)
|
|
965
1023
|
|
|
966
1024
|
def execute_with_callback(
|
|
@@ -2336,7 +2394,15 @@ df = get_variable('{self.pipeline.uuid}', '{block_uuid}', 'df')
|
|
|
2336
2394
|
self.__update_pipeline_block(widget=widget)
|
|
2337
2395
|
return self
|
|
2338
2396
|
|
|
2339
|
-
async def update_content_async(
|
|
2397
|
+
async def update_content_async(
|
|
2398
|
+
self,
|
|
2399
|
+
content,
|
|
2400
|
+
error_if_file_missing: bool = True,
|
|
2401
|
+
widget: bool = False,
|
|
2402
|
+
) -> 'Block':
|
|
2403
|
+
if error_if_file_missing and not self.file.exists():
|
|
2404
|
+
raise Exception(f'File for block {self.uuid} does not exist at {self.file.file_path}.')
|
|
2405
|
+
|
|
2340
2406
|
block_content = await self.content_async()
|
|
2341
2407
|
if content != block_content:
|
|
2342
2408
|
self.status = BlockStatus.UPDATED
|
|
@@ -65,7 +65,9 @@ class DBTBlockSQL(DBTBlock, ProjectPlatformAccessible):
|
|
|
65
65
|
if file_path:
|
|
66
66
|
return file_path
|
|
67
67
|
|
|
68
|
-
file_path = self.configuration.get('file_path')
|
|
68
|
+
file_path = self.configuration.get('file_path') or ''
|
|
69
|
+
if file_path and Path(file_path).parts[0] == 'dbt':
|
|
70
|
+
file_path = os.path.join(*Path(file_path).parts[1:]) or ''
|
|
69
71
|
|
|
70
72
|
return str((Path(self.repo_path)) / DBT_DIRECTORY_NAME / file_path)
|
|
71
73
|
|
|
@@ -82,9 +84,15 @@ class DBTBlockSQL(DBTBlock, ProjectPlatformAccessible):
|
|
|
82
84
|
if project_path:
|
|
83
85
|
return project_path
|
|
84
86
|
|
|
87
|
+
try:
|
|
88
|
+
diff = Path(self.file_path).relative_to(self.base_project_path)
|
|
89
|
+
if diff:
|
|
90
|
+
diff = Path(diff).parts[0]
|
|
91
|
+
except ValueError:
|
|
92
|
+
diff = self.file_path
|
|
93
|
+
|
|
85
94
|
return str(
|
|
86
|
-
Path(self.base_project_path) /
|
|
87
|
-
self.configuration.get('file_path', '').split(os.sep)[0]
|
|
95
|
+
Path(self.base_project_path) / diff,
|
|
88
96
|
)
|
|
89
97
|
|
|
90
98
|
@property
|
|
@@ -187,6 +195,7 @@ class DBTBlockSQL(DBTBlock, ProjectPlatformAccessible):
|
|
|
187
195
|
# Get upstream nodes via dbt list
|
|
188
196
|
with Profiles(self.project_path, self.pipeline.variables) as profiles:
|
|
189
197
|
try:
|
|
198
|
+
|
|
190
199
|
args = [
|
|
191
200
|
'list',
|
|
192
201
|
# project-dir
|
|
@@ -218,6 +227,7 @@ class DBTBlockSQL(DBTBlock, ProjectPlatformAccessible):
|
|
|
218
227
|
pipeline=self.pipeline,
|
|
219
228
|
uuid=self.uuid,
|
|
220
229
|
),
|
|
230
|
+
hydrate_configuration=False,
|
|
221
231
|
)
|
|
222
232
|
]
|
|
223
233
|
|
|
@@ -199,7 +199,21 @@ class DBTAdapter:
|
|
|
199
199
|
profiles_path = self.__profiles.interpolate()
|
|
200
200
|
|
|
201
201
|
# set dbt flags
|
|
202
|
-
|
|
202
|
+
# Need to add profiles.yml file
|
|
203
|
+
try:
|
|
204
|
+
user_config = read_user_config(profiles_path)
|
|
205
|
+
except Exception as err:
|
|
206
|
+
print(f'[ERROR] DBTAdapter.open: {err}.')
|
|
207
|
+
|
|
208
|
+
if not profiles_path.endswith('profiles.yaml') and \
|
|
209
|
+
not profiles_path.endswith('profiles.yml'):
|
|
210
|
+
|
|
211
|
+
try:
|
|
212
|
+
user_config = read_user_config(os.path.join(profiles_path, 'profiles.yml'))
|
|
213
|
+
except Exception as err2:
|
|
214
|
+
print(f'[ERROR] DBTAdapter.open: {err2}.')
|
|
215
|
+
raise err
|
|
216
|
+
|
|
203
217
|
adapter_config = DBTAdapterConfig(
|
|
204
218
|
project_dir=self.project_path,
|
|
205
219
|
profiles_dir=profiles_path,
|
|
@@ -135,19 +135,21 @@ class Profiles(object):
|
|
|
135
135
|
|
|
136
136
|
# write interpolated profiles.yml
|
|
137
137
|
interpoalted_profiles_full_path = interpolated_profiles_dir / PROFILES_FILE_NAME
|
|
138
|
-
if os.path.exists(interpoalted_profiles_full_path):
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
138
|
+
if not os.path.exists(interpoalted_profiles_full_path):
|
|
139
|
+
os.makedirs(os.path.dirname(interpoalted_profiles_full_path), exist_ok=True)
|
|
140
|
+
|
|
141
|
+
try:
|
|
142
|
+
with interpoalted_profiles_full_path.open('w') as f:
|
|
143
|
+
yaml.safe_dump(self.profiles, f)
|
|
144
|
+
except Exception as e:
|
|
145
|
+
raise ProfilesError(
|
|
146
|
+
f'Failed to write interpolated `{PROFILES_FILE_NAME}`' +
|
|
147
|
+
f' to `{interpolated_profiles_dir}`: {e}'
|
|
148
|
+
)
|
|
147
149
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
150
|
+
self.__interpolated_profiles_dir = str(interpolated_profiles_dir)
|
|
151
|
+
self.is_interpolated = True
|
|
152
|
+
return self.__interpolated_profiles_dir
|
|
151
153
|
|
|
152
154
|
def __del__(self) -> None:
|
|
153
155
|
self.clean()
|
|
@@ -79,7 +79,10 @@ class ProjectPlatformAccessible:
|
|
|
79
79
|
return config
|
|
80
80
|
|
|
81
81
|
def is_from_another_project(self) -> bool:
|
|
82
|
-
return self.project_platform_activated and from_another_project(
|
|
82
|
+
return self.project_platform_activated and from_another_project(
|
|
83
|
+
self.__file_source_path(),
|
|
84
|
+
other_file_path=self.pipeline.dir_path if self.pipeline else None,
|
|
85
|
+
)
|
|
83
86
|
|
|
84
87
|
def get_file_path_from_source(self) -> str:
|
|
85
88
|
if not self.project_platform_activated:
|
|
@@ -201,6 +204,7 @@ class ProjectPlatformAccessible:
|
|
|
201
204
|
block_class,
|
|
202
205
|
block_dict,
|
|
203
206
|
node: Dict = None,
|
|
207
|
+
hydrate_configuration: bool = True,
|
|
204
208
|
):
|
|
205
209
|
block_type = block_dict['block_type']
|
|
206
210
|
configuration = block_dict['configuration'] or {}
|
|
@@ -209,7 +213,7 @@ class ProjectPlatformAccessible:
|
|
|
209
213
|
pipeline = block_dict['pipeline']
|
|
210
214
|
uuid = block_dict['uuid']
|
|
211
215
|
|
|
212
|
-
if self.project_platform_activated:
|
|
216
|
+
if hydrate_configuration and self.project_platform_activated:
|
|
213
217
|
# self.project_path
|
|
214
218
|
# /home/src/default_platform/default_repo/dbt/demo
|
|
215
219
|
# node['original_file_path']
|
|
@@ -8,12 +8,20 @@ from mage_ai.settings.platform import (
|
|
|
8
8
|
)
|
|
9
9
|
from mage_ai.settings.repo import get_repo_path
|
|
10
10
|
from mage_ai.shared.files import find_directory
|
|
11
|
+
from mage_ai.shared.path_fixer import get_path_parts, remove_base_repo_directory_name
|
|
11
12
|
|
|
12
13
|
|
|
13
|
-
def from_another_project(file_path: str) -> bool:
|
|
14
|
+
def from_another_project(file_path: str, other_file_path: str = None) -> bool:
|
|
14
15
|
if not file_path or not project_platform_activated():
|
|
15
16
|
return False
|
|
16
17
|
|
|
18
|
+
if other_file_path:
|
|
19
|
+
tup1 = get_path_parts(remove_base_repo_directory_name(file_path))
|
|
20
|
+
tup2 = get_path_parts(remove_base_repo_directory_name(other_file_path))
|
|
21
|
+
|
|
22
|
+
if len(tup1) >= 2 and len(tup2) >= 2:
|
|
23
|
+
return tup1[1] != tup2[1]
|
|
24
|
+
|
|
17
25
|
active_repo_path = get_repo_path(root_project=False)
|
|
18
26
|
paths = get_repo_paths_for_file_path(
|
|
19
27
|
file_path,
|
|
@@ -484,7 +484,7 @@ def traverse(
|
|
|
484
484
|
|
|
485
485
|
def __should_update_dbt_cache(dir_path: str, filename: str) -> bool:
|
|
486
486
|
project_model = Project(root_project=True)
|
|
487
|
-
if project_model and project_model.is_feature_enabled(FeatureUUID.DBT_V2):
|
|
487
|
+
if project_model and project_model.is_feature_enabled(FeatureUUID.DBT_V2) and dir_path:
|
|
488
488
|
# If the file is a SQL or YAML file
|
|
489
489
|
if (
|
|
490
490
|
filename.endswith('.sql') or
|
|
@@ -1085,9 +1085,9 @@ class GlobalHooks(BaseDataClass):
|
|
|
1085
1085
|
user=user,
|
|
1086
1086
|
)
|
|
1087
1087
|
|
|
1088
|
-
def save(self, file_path: str = None) -> None:
|
|
1088
|
+
def save(self, file_path: str = None, repo_path: str = None) -> None:
|
|
1089
1089
|
if not file_path:
|
|
1090
|
-
file_path = self.file_path()
|
|
1090
|
+
file_path = self.file_path(repo_path=repo_path)
|
|
1091
1091
|
|
|
1092
1092
|
content_original = None
|
|
1093
1093
|
if os.path.exists(file_path):
|
|
@@ -3,11 +3,13 @@ from typing import Dict, List
|
|
|
3
3
|
|
|
4
4
|
import aiohttp
|
|
5
5
|
|
|
6
|
+
from mage_ai.cluster_manager.constants import KUBE_NAMESPACE, ClusterType
|
|
6
7
|
from mage_ai.data_preparation.models.project.constants import FeatureUUID
|
|
7
|
-
from mage_ai.data_preparation.repo_manager import get_repo_config
|
|
8
|
+
from mage_ai.data_preparation.repo_manager import get_cluster_type, get_repo_config
|
|
8
9
|
from mage_ai.server.constants import VERSION
|
|
9
10
|
from mage_ai.settings.platform import (
|
|
10
11
|
active_project_settings,
|
|
12
|
+
platform_settings,
|
|
11
13
|
project_platform_activated,
|
|
12
14
|
project_platform_settings,
|
|
13
15
|
)
|
|
@@ -35,6 +37,34 @@ class Project():
|
|
|
35
37
|
root_project=self.root_project,
|
|
36
38
|
)
|
|
37
39
|
self.version = VERSION
|
|
40
|
+
self._features = None
|
|
41
|
+
|
|
42
|
+
self.__repo_config_root_project = None
|
|
43
|
+
|
|
44
|
+
if project_platform_activated():
|
|
45
|
+
self.__repo_config_root_project = get_repo_config(
|
|
46
|
+
repo_path=get_repo_path(root_project=True),
|
|
47
|
+
root_project=True,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
@property
|
|
51
|
+
def workspace_config_defaults(self) -> Dict:
|
|
52
|
+
config = self.repo_config.workspace_config_defaults or {}
|
|
53
|
+
cluster_type = get_cluster_type()
|
|
54
|
+
try:
|
|
55
|
+
if cluster_type == ClusterType.K8S:
|
|
56
|
+
from mage_ai.cluster_manager.kubernetes.workload_manager import (
|
|
57
|
+
WorkloadManager,
|
|
58
|
+
)
|
|
59
|
+
workload_manager = WorkloadManager(os.getenv(KUBE_NAMESPACE))
|
|
60
|
+
k8s_default_values = workload_manager.get_default_values()
|
|
61
|
+
|
|
62
|
+
if not config.get('k8s'):
|
|
63
|
+
config['k8s'] = k8s_default_values
|
|
64
|
+
except Exception:
|
|
65
|
+
pass
|
|
66
|
+
|
|
67
|
+
return config
|
|
38
68
|
|
|
39
69
|
@property
|
|
40
70
|
def help_improve_mage(self) -> bool:
|
|
@@ -50,15 +80,51 @@ class Project():
|
|
|
50
80
|
|
|
51
81
|
@property
|
|
52
82
|
def features(self) -> Dict:
|
|
83
|
+
if self._features:
|
|
84
|
+
return self._features
|
|
85
|
+
|
|
86
|
+
self._features = {}
|
|
87
|
+
features = self.features_defined
|
|
88
|
+
|
|
89
|
+
for uuid in FeatureUUID:
|
|
90
|
+
key = uuid.value
|
|
91
|
+
self._features[key] = features.get(key) if features else None
|
|
92
|
+
|
|
93
|
+
return self._features
|
|
94
|
+
|
|
95
|
+
@features.setter
|
|
96
|
+
def features(self, x):
|
|
97
|
+
self._features = x
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def features_defined(self) -> Dict:
|
|
53
101
|
data = {}
|
|
54
|
-
features = self.repo_config.features
|
|
102
|
+
features = self.repo_config.features if self.repo_config else {}
|
|
103
|
+
|
|
104
|
+
if project_platform_activated() and self.__repo_config_root_project:
|
|
105
|
+
settings = platform_settings()
|
|
106
|
+
if settings.get('features') and (settings.get('features') or {}).get('override'):
|
|
107
|
+
features.update(self.features_override)
|
|
55
108
|
|
|
56
109
|
for uuid in FeatureUUID:
|
|
57
110
|
key = uuid.value
|
|
58
|
-
|
|
111
|
+
if FeatureUUID.PROJECT_PLATFORM == uuid:
|
|
112
|
+
data[key] = project_platform_activated()
|
|
113
|
+
else:
|
|
114
|
+
if features and key in features:
|
|
115
|
+
data[key] = features.get(key)
|
|
59
116
|
|
|
60
117
|
return data
|
|
61
118
|
|
|
119
|
+
@property
|
|
120
|
+
def features_override(self) -> Dict:
|
|
121
|
+
if project_platform_activated() and self.__repo_config_root_project:
|
|
122
|
+
settings = self.platform_settings()
|
|
123
|
+
if settings.get('features') and (settings.get('features') or {}).get('override'):
|
|
124
|
+
return self.__repo_config_root_project.features or {}
|
|
125
|
+
|
|
126
|
+
return {}
|
|
127
|
+
|
|
62
128
|
@property
|
|
63
129
|
def emr_config(self) -> Dict:
|
|
64
130
|
return self.repo_config.emr_config or None
|
|
@@ -85,6 +151,10 @@ class Project():
|
|
|
85
151
|
|
|
86
152
|
return False
|
|
87
153
|
|
|
154
|
+
def platform_settings(self) -> Dict:
|
|
155
|
+
if project_platform_activated():
|
|
156
|
+
return platform_settings(mage_projects_only=True)
|
|
157
|
+
|
|
88
158
|
def repo_path_for_database_query(self, key: str) -> List[str]:
|
|
89
159
|
if self.settings:
|
|
90
160
|
query_arr = dig(self.settings, ['database', 'query', key])
|
|
@@ -102,7 +172,7 @@ class Project():
|
|
|
102
172
|
return project_platform_settings(mage_projects_only=True)
|
|
103
173
|
|
|
104
174
|
def is_feature_enabled(self, feature_name: FeatureUUID) -> bool:
|
|
105
|
-
feature_enabled = self.
|
|
175
|
+
feature_enabled = self.features.get(feature_name.value, False)
|
|
106
176
|
|
|
107
177
|
if is_debug():
|
|
108
178
|
print(f'[Project.is_feature_enabled]: {feature_name} | {feature_enabled}')
|
|
@@ -64,6 +64,7 @@ class RepoConfig:
|
|
|
64
64
|
self.s3_bucket = None
|
|
65
65
|
self.s3_path_prefix = None
|
|
66
66
|
self.logging_config = None
|
|
67
|
+
self.variables_dir = None
|
|
67
68
|
self.variables_retention_period = None
|
|
68
69
|
|
|
69
70
|
from mage_ai.data_preparation.shared.utils import get_template_vars
|
|
@@ -122,6 +123,7 @@ class RepoConfig:
|
|
|
122
123
|
self.openai_api_key = repo_config.get('openai_api_key')
|
|
123
124
|
self.pipelines = repo_config.get('pipelines')
|
|
124
125
|
self.retry_config = repo_config.get('retry_config')
|
|
126
|
+
self.workspace_config_defaults = repo_config.get('workspace_config_defaults')
|
|
125
127
|
|
|
126
128
|
self.ldap_config = repo_config.get('ldap_config')
|
|
127
129
|
|
|
@@ -194,6 +196,7 @@ class RepoConfig:
|
|
|
194
196
|
spark_config=self.spark_config,
|
|
195
197
|
variables_dir=self.remote_variables_dir if remote else self.variables_dir,
|
|
196
198
|
variables_retention_period=self.variables_retention_period,
|
|
199
|
+
workspace_config_defaults=self.workspace_config_defaults
|
|
197
200
|
)
|
|
198
201
|
|
|
199
202
|
def save(self, **kwargs) -> None:
|