mage-ai 0.9.57__py3-none-any.whl → 0.9.59__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 +1 -0
- mage_ai/ai/generator.py +7 -0
- mage_ai/ai/llm_pipeline_wizard.py +13 -0
- mage_ai/ai/openai_client.py +9 -1
- mage_ai/api/logging.py +11 -7
- mage_ai/api/policies/BlockPolicy.py +1 -0
- mage_ai/api/policies/CacheItemPolicy.py +16 -3
- mage_ai/api/policies/CommandCenterItemPolicy.py +56 -0
- mage_ai/api/policies/CustomTemplatePolicy.py +0 -3
- mage_ai/api/policies/GitBranchPolicy.py +8 -1
- mage_ai/api/policies/GitFilePolicy.py +1 -0
- mage_ai/api/policies/PipelinePolicy.py +2 -0
- mage_ai/api/policies/PipelineSchedulePolicy.py +1 -0
- mage_ai/api/policies/VersionControlBranchPolicy.py +98 -0
- mage_ai/api/policies/VersionControlFilePolicy.py +96 -0
- mage_ai/api/policies/VersionControlProjectPolicy.py +92 -0
- mage_ai/api/policies/VersionControlRemotePolicy.py +94 -0
- mage_ai/api/presenters/CommandCenterItemPresenter.py +19 -0
- mage_ai/api/presenters/GitBranchPresenter.py +2 -0
- mage_ai/api/presenters/GitCustomBranchPresenter.py +1 -0
- mage_ai/api/presenters/PipelinePresenter.py +5 -5
- mage_ai/api/presenters/PipelineSchedulePresenter.py +4 -0
- mage_ai/api/presenters/VersionControlBranchPresenter.py +15 -0
- mage_ai/api/presenters/VersionControlFilePresenter.py +15 -0
- mage_ai/api/presenters/VersionControlProjectPresenter.py +14 -0
- mage_ai/api/presenters/VersionControlRemotePresenter.py +15 -0
- mage_ai/api/resources/BlockResource.py +110 -80
- mage_ai/api/resources/CacheItemResource.py +88 -0
- mage_ai/api/resources/CommandCenterItemResource.py +29 -0
- mage_ai/api/resources/FileResource.py +15 -1
- mage_ai/api/resources/FolderResource.py +2 -1
- mage_ai/api/resources/GitBranchResource.py +183 -108
- mage_ai/api/resources/GitCustomBranchResource.py +9 -2
- mage_ai/api/resources/GitFileResource.py +26 -13
- mage_ai/api/resources/KernelResource.py +9 -1
- mage_ai/api/resources/LogResource.py +1 -1
- mage_ai/api/resources/OauthResource.py +4 -5
- mage_ai/api/resources/PipelineResource.py +71 -38
- mage_ai/api/resources/PipelineRunResource.py +7 -2
- mage_ai/api/resources/ProjectResource.py +1 -2
- mage_ai/api/resources/PullRequestResource.py +12 -3
- mage_ai/api/resources/SearchResultResource.py +4 -4
- mage_ai/api/resources/VersionControlBranchResource.py +85 -0
- mage_ai/api/resources/VersionControlFileResource.py +65 -0
- mage_ai/api/resources/VersionControlProjectResource.py +46 -0
- mage_ai/api/resources/VersionControlRemoteResource.py +64 -0
- mage_ai/authentication/oauth/constants.py +13 -16
- mage_ai/authentication/operation_history/models.py +11 -32
- mage_ai/authentication/operation_history/utils.py +14 -14
- mage_ai/authentication/permissions/constants.py +5 -0
- mage_ai/authentication/providers/active_directory.py +2 -2
- mage_ai/authentication/providers/bitbucket.py +2 -2
- mage_ai/authentication/providers/constants.py +6 -12
- mage_ai/authentication/providers/ghe.py +2 -2
- mage_ai/authentication/providers/google.py +2 -2
- mage_ai/authentication/providers/okta.py +2 -2
- mage_ai/cache/base.py +11 -3
- mage_ai/cache/block.py +116 -32
- mage_ai/cache/block_action_object/__init__.py +52 -43
- mage_ai/cache/constants.py +1 -0
- mage_ai/cache/dbt/utils.py +31 -10
- mage_ai/cache/file.py +114 -0
- mage_ai/cache/models.py +2 -0
- mage_ai/cache/pipeline.py +34 -8
- mage_ai/cache/tag.py +51 -10
- mage_ai/cache/utils.py +44 -3
- mage_ai/cluster_manager/kubernetes/workload_manager.py +9 -1
- mage_ai/command_center/__init__.py +0 -0
- mage_ai/command_center/applications/__init__.py +0 -0
- mage_ai/command_center/applications/constants.py +96 -0
- mage_ai/command_center/applications/factory.py +54 -0
- mage_ai/command_center/blocks/__init__.py +0 -0
- mage_ai/command_center/blocks/factory.py +39 -0
- mage_ai/command_center/blocks/utils.py +127 -0
- mage_ai/command_center/constants.py +66 -0
- mage_ai/command_center/factory.py +161 -0
- mage_ai/command_center/files/__init__.py +0 -0
- mage_ai/command_center/files/constants.py +235 -0
- mage_ai/command_center/files/factory.py +86 -0
- mage_ai/command_center/models.py +442 -0
- mage_ai/command_center/pipeline_runs/__init__.py +0 -0
- mage_ai/command_center/pipeline_runs/utils.py +141 -0
- mage_ai/command_center/pipelines/__init__.py +0 -0
- mage_ai/command_center/pipelines/constants.py +118 -0
- mage_ai/command_center/pipelines/factory.py +132 -0
- mage_ai/command_center/pipelines/utils.py +120 -0
- mage_ai/command_center/service.py +45 -0
- mage_ai/command_center/settings.py +37 -0
- mage_ai/command_center/support/__init__.py +0 -0
- mage_ai/command_center/support/constants.py +46 -0
- mage_ai/command_center/triggers/__init__.py +0 -0
- mage_ai/command_center/triggers/factory.py +49 -0
- mage_ai/command_center/triggers/utils.py +463 -0
- mage_ai/command_center/utils.py +30 -0
- mage_ai/data_preparation/executors/azure_container_instance_executor.py +1 -1
- mage_ai/data_preparation/executors/block_executor.py +68 -19
- mage_ai/data_preparation/executors/ecs_block_executor.py +2 -2
- mage_ai/data_preparation/executors/executor_factory.py +2 -0
- mage_ai/data_preparation/executors/gcp_cloud_run_block_executor.py +1 -1
- mage_ai/data_preparation/executors/k8s_block_executor.py +2 -2
- mage_ai/data_preparation/executors/pyspark_block_executor.py +7 -1
- mage_ai/data_preparation/git/__init__.py +29 -11
- mage_ai/data_preparation/git/api.py +14 -13
- mage_ai/data_preparation/git/clients/base.py +4 -8
- mage_ai/data_preparation/git/clients/github.py +1 -0
- mage_ai/data_preparation/git/utils.py +5 -7
- mage_ai/data_preparation/models/block/__init__.py +556 -329
- mage_ai/data_preparation/models/block/content.py +111 -0
- mage_ai/data_preparation/models/block/data_integration/mixins.py +1 -0
- mage_ai/data_preparation/models/block/dbt/block.py +30 -20
- mage_ai/data_preparation/models/block/dbt/block_sql.py +93 -257
- mage_ai/data_preparation/models/block/dbt/block_yaml.py +81 -158
- mage_ai/data_preparation/models/block/dbt/constants.py +12 -0
- mage_ai/data_preparation/models/block/dbt/dbt_adapter.py +23 -10
- mage_ai/data_preparation/models/block/dbt/dbt_cli.py +124 -612
- mage_ai/data_preparation/models/block/dbt/profiles.py +19 -15
- mage_ai/data_preparation/models/block/dbt/project.py +3 -0
- mage_ai/data_preparation/models/block/dynamic/constants.py +0 -0
- mage_ai/data_preparation/models/block/dynamic/dynamic_child.py +507 -47
- mage_ai/data_preparation/models/block/dynamic/utils.py +432 -1
- mage_ai/data_preparation/models/block/platform/mixins.py +68 -44
- mage_ai/data_preparation/models/block/r/__init__.py +19 -9
- mage_ai/data_preparation/models/block/sql/__init__.py +33 -18
- mage_ai/data_preparation/models/block/sql/utils/shared.py +4 -1
- mage_ai/data_preparation/models/block/utils.py +176 -71
- mage_ai/data_preparation/models/constants.py +7 -0
- mage_ai/data_preparation/models/file.py +23 -4
- mage_ai/data_preparation/models/pipeline.py +20 -8
- mage_ai/data_preparation/models/project/__init__.py +12 -7
- mage_ai/data_preparation/models/project/constants.py +2 -0
- mage_ai/data_preparation/models/triggers/__init__.py +7 -0
- mage_ai/data_preparation/models/utils.py +20 -0
- mage_ai/data_preparation/models/variable.py +113 -15
- mage_ai/data_preparation/shared/utils.py +6 -3
- mage_ai/data_preparation/storage/base_storage.py +17 -0
- mage_ai/data_preparation/storage/gcs_storage.py +4 -0
- mage_ai/data_preparation/storage/local_storage.py +15 -0
- mage_ai/data_preparation/storage/s3_storage.py +4 -0
- mage_ai/data_preparation/templates/data_exporters/qdrant.py +0 -1
- mage_ai/data_preparation/templates/data_loaders/qdrant.py +2 -1
- mage_ai/data_preparation/variable_manager.py +1 -0
- mage_ai/io/base.py +4 -1
- mage_ai/io/bigquery.py +25 -16
- mage_ai/io/clickhouse.py +3 -0
- mage_ai/io/druid.py +3 -0
- mage_ai/io/mongodb.py +1 -1
- mage_ai/io/pinot.py +3 -0
- mage_ai/io/postgres.py +13 -0
- mage_ai/io/snowflake.py +4 -0
- mage_ai/io/spark.py +8 -3
- mage_ai/io/sql.py +6 -0
- mage_ai/orchestration/db/__init__.py +26 -19
- mage_ai/orchestration/db/cache.py +4 -3
- mage_ai/orchestration/db/models/schedules.py +72 -16
- mage_ai/orchestration/db/models/schedules_project_platform.py +2 -3
- mage_ai/orchestration/pipeline_scheduler_original.py +19 -11
- mage_ai/orchestration/pipeline_scheduler_project_platform.py +20 -11
- mage_ai/presenters/interactions/constants.py +1 -0
- mage_ai/presenters/interactions/models.py +4 -3
- mage_ai/presenters/pages/models/client_pages/pipeline_schedules.py +1 -1
- mage_ai/server/constants.py +1 -1
- mage_ai/server/frontend_dist/404.html +11 -11
- mage_ai/server/frontend_dist/_next/static/PPQxHOmWVJ0iQFzG2rc8m/_buildManifest.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/1235.c9ed47779baccc05.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/125-029194ff22eb33a5.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/1557-4f7485c2e2228f77.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/2474-8e702cea23ddd16d.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/2479-727fa69ee9be6fab.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/26-38bc9380422f3900.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/2717-3e7ea8543b3825b7.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3366-420721116ea5a665.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3449-a9c98239582cd6f0.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3548-13563a1ff815f922.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3943-9e0a8ba0db34b35f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/4371-ef23f95888d6cd11.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/4632.a4171dbf46b31c7c.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/523-be11ad59861d00ca.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/5457-d582b00545b4cb5e.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/{5189.dca121eccea793be.js → 5729.0f2748e9e6dab951.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5831-2abc4063e887a03e.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/6085-692d2f784c0504f2.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/635-1e8857c2b6dde289.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/7022-0d52dd8868621fb0.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/7264-d05f4b7088533f6f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/7361-b3d661ec743bfadf.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/737-cc6467310a130dd9.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/{4495-4f0340aa82e0c623.js → 7674-9ec4fe64b5bf64d5.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8038-85d715c8c8394827.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/8095-bdce03896ef9639a.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/8146-6bed4e7401e067e6.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/8192-0c0b91523a38c4ca.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/8432-f736d101fc6d9215.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/8513-d207733b485c8d03.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/9264-7cd9cd0ba86ec5e4.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/9265-d2a1aaec75ec69b8.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/9440-54add041c392517f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/9624-59b2f803f9c88cd6.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/9832-67896490f6e8a014.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/bd1a647f.fe5d87096be24a62.js → frontend_dist/_next/static/chunks/bd1a647f.04f7913662092327.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/404-7cabe357906f44f2.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-a11bd2ebe11b3fd2.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/block-layout-ffca51945cd154ef.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/compute-3ba957769292db80.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/files-45679fd18b3edd82.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-data-products/[...slug]-95735a218106aa99.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{global-data-products-927ebbdc29529765.js → global-data-products-81d6c7fd9a9cff38.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-eb4421d51fb7368f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks-a8c712e20512fede.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/files-f1be1d4735ba6919.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/settings-febe676687966276.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-70efe222130490b5.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/new-0914c36b3c8fd59f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users-4f12e989e7809ef9.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-809d4c99b44991a1.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/oauth-bd8494f8875c5c97.js → frontend_dist/_next/static/chunks/pages/oauth-aa9079c8dbaea3a5.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-4e30fb5b18383b71.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-5d31c3aace39182d.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-85a80ee66f60a65c.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-0bd74047e257e6d9.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-80619dc504d0103b.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-3cc8d74ff8525bfd.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-cdc379ff24ff8858.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-03396d6086003e16.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-d6d920758654f6d9.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-27727bb87be506c3.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-16aab67743651a0b.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-e3ca1bedb660b252.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-9d58701fe7213727.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-0041fd76ee15e49f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-780be9a2da697915.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-db8bb970b1f2273f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-a3422b0ab1dbacd7.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks/[...slug]-987a1603f4201943.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks-3dc8bf89cab2722b.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-43d3f2a5071b9537.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-c97b1a39b22c112a.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/settings-49efb66da67554ca.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-aa5d871de1f3f7b0.js → [...slug]-5117d3555972484c.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/permissions-ee1c19d4a192ae4d.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-4dc5724486ee3396.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-88d29d1774db67e4.js → [...slug]-fa095aac732368c3.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{roles-d8ca763e405cd9d1.js → roles-db6d71f8692a33e7.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-99c6a263d2ab9553.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users/{[...slug]-250dfdf22bfe67e9.js → [...slug]-9d881ac0a3db9baa.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-bee414d57c4b55d7.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-e7030e1a7a9e88e1.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/templates/[...slug]-312afc9a3f8d0a4f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/templates-e5300c340aa94c6b.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-fa7ca0c86142d146.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/test-bd51b3918b39329e.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-5158a9d98d2459e8.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-5ce099a7abb354ff.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/{webpack-17c3a8f588f14cfd.js → webpack-efa55343114c8128.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/css/d1e8e64d0b07af2f.css → frontend_dist/_next/static/css/b59541b123fd7191.css} +1 -1
- mage_ai/server/frontend_dist/block-layout.html +3 -3
- mage_ai/server/frontend_dist/compute.html +11 -11
- mage_ai/server/frontend_dist/files.html +11 -11
- mage_ai/server/frontend_dist/global-data-products/[...slug].html +11 -11
- mage_ai/server/frontend_dist/global-data-products.html +11 -11
- mage_ai/server/frontend_dist/global-hooks/[...slug].html +11 -11
- mage_ai/server/frontend_dist/global-hooks.html +11 -11
- mage_ai/server/frontend_dist/index.html +3 -3
- mage_ai/server/frontend_dist/manage/files.html +11 -11
- mage_ai/server/frontend_dist/manage/settings.html +11 -11
- mage_ai/server/frontend_dist/manage/users/[user].html +11 -11
- mage_ai/server/frontend_dist/manage/users/new.html +11 -11
- mage_ai/server/frontend_dist/manage/users.html +11 -11
- mage_ai/server/frontend_dist/manage.html +11 -11
- mage_ai/server/frontend_dist/oauth.html +8 -8
- mage_ai/server/frontend_dist/overview.html +11 -11
- mage_ai/server/frontend_dist/pipeline-runs.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/dashboard.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +3 -3
- mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +11 -11
- mage_ai/server/frontend_dist/pipelines/[pipeline].html +3 -3
- mage_ai/server/frontend_dist/pipelines.html +11 -11
- mage_ai/server/frontend_dist/platform/global-hooks/[...slug].html +11 -11
- mage_ai/server/frontend_dist/platform/global-hooks.html +11 -11
- mage_ai/server/frontend_dist/settings/account/profile.html +11 -11
- mage_ai/server/frontend_dist/settings/platform/preferences.html +11 -11
- mage_ai/server/frontend_dist/settings/platform/settings.html +11 -11
- mage_ai/server/frontend_dist/settings/workspace/permissions/[...slug].html +11 -11
- mage_ai/server/frontend_dist/settings/workspace/permissions.html +11 -11
- mage_ai/server/frontend_dist/settings/workspace/preferences.html +11 -11
- mage_ai/server/frontend_dist/settings/workspace/roles/[...slug].html +11 -11
- mage_ai/server/frontend_dist/settings/workspace/roles.html +11 -11
- mage_ai/server/frontend_dist/settings/workspace/sync-data.html +11 -11
- mage_ai/server/frontend_dist/settings/workspace/users/[...slug].html +11 -11
- mage_ai/server/frontend_dist/settings/workspace/users.html +11 -11
- mage_ai/server/frontend_dist/settings.html +3 -3
- mage_ai/server/frontend_dist/sign-in.html +40 -41
- mage_ai/server/frontend_dist/templates/[...slug].html +11 -11
- mage_ai/server/frontend_dist/templates.html +11 -11
- mage_ai/server/frontend_dist/terminal.html +11 -11
- mage_ai/server/frontend_dist/test.html +3 -3
- mage_ai/server/frontend_dist/triggers.html +11 -11
- mage_ai/server/frontend_dist/version-control.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/404.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1235.c9ed47779baccc05.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/125-029194ff22eb33a5.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1557-4f7485c2e2228f77.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2474-8e702cea23ddd16d.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2479-727fa69ee9be6fab.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/26-38bc9380422f3900.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-3e7ea8543b3825b7.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3366-420721116ea5a665.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3449-a9c98239582cd6f0.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-13563a1ff815f922.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3943-9e0a8ba0db34b35f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/4371-ef23f95888d6cd11.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/4632.a4171dbf46b31c7c.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/523-be11ad59861d00ca.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5457-d582b00545b4cb5e.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{5189.dca121eccea793be.js → 5729.0f2748e9e6dab951.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5831-2abc4063e887a03e.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6085-692d2f784c0504f2.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/635-1e8857c2b6dde289.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7022-0d52dd8868621fb0.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7264-d05f4b7088533f6f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7361-b3d661ec743bfadf.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/737-cc6467310a130dd9.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{4495-4f0340aa82e0c623.js → 7674-9ec4fe64b5bf64d5.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8038-85d715c8c8394827.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8095-bdce03896ef9639a.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8146-6bed4e7401e067e6.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8192-0c0b91523a38c4ca.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8432-f736d101fc6d9215.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8513-d207733b485c8d03.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9264-7cd9cd0ba86ec5e4.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9265-d2a1aaec75ec69b8.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9440-54add041c392517f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9624-59b2f803f9c88cd6.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9832-67896490f6e8a014.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/bd1a647f.fe5d87096be24a62.js → frontend_dist_base_path_template/_next/static/chunks/bd1a647f.04f7913662092327.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/404-7cabe357906f44f2.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-a11bd2ebe11b3fd2.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/block-layout-ffca51945cd154ef.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/compute-3ba957769292db80.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/files-45679fd18b3edd82.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-data-products/[...slug]-95735a218106aa99.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{global-data-products-927ebbdc29529765.js → global-data-products-81d6c7fd9a9cff38.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-eb4421d51fb7368f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks-a8c712e20512fede.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/files-f1be1d4735ba6919.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/settings-febe676687966276.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-70efe222130490b5.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-0914c36b3c8fd59f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users-4f12e989e7809ef9.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage-809d4c99b44991a1.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/oauth-bd8494f8875c5c97.js → frontend_dist_base_path_template/_next/static/chunks/pages/oauth-aa9079c8dbaea3a5.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-4e30fb5b18383b71.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipeline-runs-5d31c3aace39182d.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-85a80ee66f60a65c.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-0bd74047e257e6d9.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-80619dc504d0103b.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-3cc8d74ff8525bfd.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-cdc379ff24ff8858.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-03396d6086003e16.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-d6d920758654f6d9.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors-27727bb87be506c3.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-16aab67743651a0b.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs-e3ca1bedb660b252.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-9d58701fe7213727.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-0041fd76ee15e49f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-780be9a2da697915.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-db8bb970b1f2273f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-a3422b0ab1dbacd7.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks/[...slug]-987a1603f4201943.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks-3dc8bf89cab2722b.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/account/profile-43d3f2a5071b9537.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-c97b1a39b22c112a.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-49efb66da67554ca.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-aa5d871de1f3f7b0.js → [...slug]-5117d3555972484c.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/permissions-ee1c19d4a192ae4d.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-4dc5724486ee3396.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-88d29d1774db67e4.js → [...slug]-fa095aac732368c3.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{roles-d8ca763e405cd9d1.js → roles-db6d71f8692a33e7.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/sync-data-99c6a263d2ab9553.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/users/{[...slug]-250dfdf22bfe67e9.js → [...slug]-9d881ac0a3db9baa.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/users-bee414d57c4b55d7.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-e7030e1a7a9e88e1.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates/[...slug]-312afc9a3f8d0a4f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates-e5300c340aa94c6b.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/terminal-fa7ca0c86142d146.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/test-bd51b3918b39329e.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-5158a9d98d2459e8.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/version-control-5ce099a7abb354ff.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{webpack-b55fe1e575d8ac9d.js → webpack-bd35e1c7bd7b5a9a.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/css/d1e8e64d0b07af2f.css → frontend_dist_base_path_template/_next/static/css/b59541b123fd7191.css} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/do4WOsw7lNhouR0mtPTFi/_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 +11 -11
- mage_ai/server/frontend_dist_base_path_template/files.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/global-data-products/[...slug].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/global-data-products.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/global-hooks/[...slug].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/global-hooks.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/index.html +3 -3
- mage_ai/server/frontend_dist_base_path_template/manage/files.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/manage/settings.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/manage/users/[user].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/manage/users/new.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/manage/users.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/manage.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/oauth.html +8 -8
- mage_ai/server/frontend_dist_base_path_template/overview.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipeline-runs.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills/[...slug].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/dashboard.html +11 -11
- 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 +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runs.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runtime.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs/[run].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/settings.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/syncs.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers/[...slug].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline].html +3 -3
- mage_ai/server/frontend_dist_base_path_template/pipelines.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/platform/global-hooks/[...slug].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/platform/global-hooks.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/account/profile.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/platform/preferences.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/platform/settings.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions/[...slug].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/preferences.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles/[...slug].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/sync-data.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/users/[...slug].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/users.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/settings.html +3 -3
- mage_ai/server/frontend_dist_base_path_template/sign-in.html +40 -41
- mage_ai/server/frontend_dist_base_path_template/templates/[...slug].html +11 -11
- mage_ai/server/frontend_dist_base_path_template/templates.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/terminal.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/test.html +3 -3
- mage_ai/server/frontend_dist_base_path_template/triggers.html +11 -11
- mage_ai/server/frontend_dist_base_path_template/version-control.html +11 -11
- mage_ai/server/logger.py +8 -2
- mage_ai/server/server.py +18 -1
- mage_ai/services/aws/ecs/config.py +3 -3
- mage_ai/services/aws/ecs/ecs.py +2 -2
- mage_ai/services/search/block_action_objects.py +59 -5
- mage_ai/settings/models/configuration_option.py +3 -1
- mage_ai/settings/platform/__init__.py +64 -20
- mage_ai/settings/platform/utils.py +4 -1
- mage_ai/settings/repo.py +5 -4
- mage_ai/shared/custom_logger.py +213 -0
- mage_ai/shared/environments.py +4 -0
- mage_ai/shared/files.py +52 -1
- mage_ai/shared/models.py +2 -1
- mage_ai/shared/parsers.py +8 -1
- mage_ai/shared/path_fixer.py +62 -5
- mage_ai/shared/retry.py +4 -0
- mage_ai/shared/strings.py +4 -0
- mage_ai/tests/api/endpoints/test_blocks.py +101 -1
- mage_ai/tests/api/operations/base/test_base_with_user_permissions.py +4 -1
- mage_ai/tests/base_test.py +21 -2
- mage_ai/tests/cache/test_pipeline_cache.py +11 -8
- mage_ai/tests/data_preparation/executors/test_block_executor.py +55 -45
- mage_ai/tests/data_preparation/git/test_api.py +4 -4
- mage_ai/tests/data_preparation/models/block/dbt/test_block.py +75 -43
- mage_ai/tests/data_preparation/models/block/dbt/test_block_sql.py +329 -320
- mage_ai/tests/data_preparation/models/block/dbt/test_block_yaml.py +298 -268
- mage_ai/tests/data_preparation/models/block/dbt/test_dbt_adapter.py +14 -4
- mage_ai/tests/data_preparation/models/block/dbt/test_dbt_cli.py +14 -11
- mage_ai/tests/data_preparation/models/block/dbt/test_profiles.py +2 -2
- mage_ai/tests/data_preparation/models/block/dbt/test_project.py +2 -2
- mage_ai/tests/data_preparation/models/block/dbt/test_sources.py +2 -2
- mage_ai/tests/data_preparation/models/block/dynamic/test_dynamic_child_block_factory.py +477 -474
- mage_ai/tests/data_preparation/models/block/dynamic/test_dynamic_helpers.py +25 -24
- mage_ai/tests/data_preparation/models/block/platform/test_mixins.py +16 -25
- mage_ai/tests/data_preparation/models/block/test_utils.py +8 -8
- mage_ai/tests/data_preparation/models/test_block.py +6 -8
- mage_ai/tests/data_preparation/models/test_project.py +10 -5
- mage_ai/tests/data_preparation/models/test_variable.py +51 -4
- mage_ai/tests/orchestration/test_pipeline_scheduler_project_platform.py +1 -0
- mage_ai/version_control/__init__.py +0 -0
- mage_ai/version_control/models.py +288 -0
- {mage_ai-0.9.57.dist-info → mage_ai-0.9.59.dist-info}/METADATA +49 -47
- {mage_ai-0.9.57.dist-info → mage_ai-0.9.59.dist-info}/RECORD +504 -486
- mage_ai/server/frontend_dist/_next/static/A7VXVGKgLQCukXcjdysDz/_buildManifest.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1124-09b283a2f26cc576.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1154-2f262f7eb38ebaa1.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1235.53172e14801844e5.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1557-724bfc3eabd095f7.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/161-33f26e485ddef393.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1751-5adf859690505d7b.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1821-953efd0da290d25f.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/2474-352ae192b826d896.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/2646-78905b899b68f4eb.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/2717-477f64b5e272d5a3.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/2852872c-15b31a7081e6a868.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/2920.86a65e5f26ff1795.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3004-9fff558eeede3a83.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/341-ef0f7b98b7f69802.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3419-b8bd26f5946bec5a.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3437-ce26fc28e114b44e.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3540-9bb48b08f439d0a0.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3745-61b1c63bb56bb670.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3859-ba594d21a1260cd2.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3943-a49377acc514e77f.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5283-8d1dacb2eeb9e652.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5457-b373ebdf4d05d8e2.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5499-261cfa2410506eb4.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5533-3455832bc3f8429b.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5729-9d8204ab91da631d.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5810-addfa3491ae6b01c.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5820-28adeabb5cda2b96.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5896-7b8e36634d7d94eb.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/6043-728790621ca9014c.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/6285-648f9a732e100b2f.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/6563-5b3b97c9088baf69.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/6639-74eefed142e14ea6.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/6965-c613d1834c8ed92d.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/7022-1c1c93b6222d48f9.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/7361-559f4d2eca379217.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/7858-26a5a5d04fa3c703.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8146-7fc9ef7d0202e6ab.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8264-68db2a8334ad48f1.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8432-0ace6fb7bdbc6864.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/844-1e171f361e63b36d.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8731-82571147875a2d58.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/874-d9e1b3c9c00ebac9.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8998-e46ae0a83be32d42.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/9264-5df6e4c7b1e85c02.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/9302-913007e2f801ad65.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/9440-c51bf1e8f271cb25.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/9624-89a4b20eb3b3c754.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/976-0a8c2c4d7acd957b.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/404-5ddd12931e0e3e41.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-4c0239ca6203e827.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/block-layout-d40babdbf465a7e1.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/compute-822e66aa2e90cf4c.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/files-373217c5de51aeef.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-data-products/[...slug]-0325e76a2f3e08c1.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-a172f5a447bd8925.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks-97bec2ac883e0c26.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/files-02d001d99eeaae3f.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/settings-2e577bfd4f0db2b7.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-1827574a4ba95a72.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/new-a913c361bcc0d1a9.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users-4e6fdcbbfc931d67.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-1c327edcf05df9c9.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-5a98e6a531410afb.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-1442183d13edec2e.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-38b2241cdd10320c.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-1c646dbef65d6a69.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-35cb916a18ac4e1f.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-cd1918632dfef29d.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-67b0572c84db0940.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-40201b626ea3a664.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-d1f23308effebe03.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-9a116d88f00916ff.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-2d5abcd019d4bea1.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-5363a7ae9afe8983.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-931a1b3112866a72.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-5ec5367cb877db38.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-8366661f8e2b2959.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-378f8dada7d0c1dd.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-627be24ef4963cfb.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks/[...slug]-814bbd11e10c26dc.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks-021ec25e05862f8f.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-2b0aa123043519b8.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-05186e17c94347c1.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/settings-efe8bf1bf3177a7e.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/permissions-ce45aad47049d993.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-1bc694b056ff0bcb.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-42bd909eb8951040.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-97c4ce119f7238b5.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-1af3ba18ff646dd4.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/templates/[...slug]-ff9d49355393daea.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/templates-299a2c8f2dd89cf3.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-fb3f398009a02879.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/test-59a08e06f4ef6c3a.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-551b85802515e313.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-1362aeda4a31dd41.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1124-09b283a2f26cc576.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1154-2f262f7eb38ebaa1.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1235.53172e14801844e5.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1557-724bfc3eabd095f7.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/161-33f26e485ddef393.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1751-5adf859690505d7b.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1821-953efd0da290d25f.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2474-352ae192b826d896.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2646-78905b899b68f4eb.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-477f64b5e272d5a3.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2852872c-15b31a7081e6a868.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2920.86a65e5f26ff1795.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3004-9fff558eeede3a83.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/341-ef0f7b98b7f69802.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3419-b8bd26f5946bec5a.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3437-ce26fc28e114b44e.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3540-9bb48b08f439d0a0.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3745-61b1c63bb56bb670.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3859-ba594d21a1260cd2.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3943-a49377acc514e77f.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5283-8d1dacb2eeb9e652.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5457-b373ebdf4d05d8e2.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5499-261cfa2410506eb4.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5533-3455832bc3f8429b.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5729-9d8204ab91da631d.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5810-addfa3491ae6b01c.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5820-28adeabb5cda2b96.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5896-7b8e36634d7d94eb.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6043-728790621ca9014c.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6285-648f9a732e100b2f.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6563-5b3b97c9088baf69.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6639-74eefed142e14ea6.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6965-c613d1834c8ed92d.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7022-1c1c93b6222d48f9.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7361-559f4d2eca379217.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7858-26a5a5d04fa3c703.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8146-7fc9ef7d0202e6ab.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8264-68db2a8334ad48f1.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8432-0ace6fb7bdbc6864.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/844-1e171f361e63b36d.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8731-82571147875a2d58.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/874-d9e1b3c9c00ebac9.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8998-e46ae0a83be32d42.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9264-5df6e4c7b1e85c02.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9302-913007e2f801ad65.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9440-c51bf1e8f271cb25.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9624-89a4b20eb3b3c754.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/976-0a8c2c4d7acd957b.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/404-5ddd12931e0e3e41.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-4c0239ca6203e827.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/block-layout-d40babdbf465a7e1.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/compute-822e66aa2e90cf4c.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/files-373217c5de51aeef.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-data-products/[...slug]-0325e76a2f3e08c1.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-a172f5a447bd8925.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks-97bec2ac883e0c26.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/files-02d001d99eeaae3f.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/settings-2e577bfd4f0db2b7.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-1827574a4ba95a72.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-a913c361bcc0d1a9.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users-4e6fdcbbfc931d67.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage-1c327edcf05df9c9.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-5a98e6a531410afb.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipeline-runs-1442183d13edec2e.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-38b2241cdd10320c.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-1c646dbef65d6a69.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-35cb916a18ac4e1f.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-cd1918632dfef29d.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-67b0572c84db0940.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-40201b626ea3a664.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-d1f23308effebe03.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors-9a116d88f00916ff.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-2d5abcd019d4bea1.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs-5363a7ae9afe8983.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-931a1b3112866a72.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-5ec5367cb877db38.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-8366661f8e2b2959.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-378f8dada7d0c1dd.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-627be24ef4963cfb.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks/[...slug]-814bbd11e10c26dc.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks-021ec25e05862f8f.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/account/profile-2b0aa123043519b8.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-05186e17c94347c1.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-efe8bf1bf3177a7e.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/permissions-ce45aad47049d993.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-1bc694b056ff0bcb.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/sync-data-42bd909eb8951040.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/users-97c4ce119f7238b5.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-1af3ba18ff646dd4.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates/[...slug]-ff9d49355393daea.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates-299a2c8f2dd89cf3.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/terminal-fb3f398009a02879.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/test-59a08e06f4ef6c3a.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-551b85802515e313.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/version-control-1362aeda4a31dd41.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/wSRrM15xnvA8lOWcaque7/_buildManifest.js +0 -1
- /mage_ai/server/frontend_dist/_next/static/{A7VXVGKgLQCukXcjdysDz → PPQxHOmWVJ0iQFzG2rc8m}/_ssgManifest.js +0 -0
- /mage_ai/server/frontend_dist_base_path_template/_next/static/{wSRrM15xnvA8lOWcaque7 → do4WOsw7lNhouR0mtPTFi}/_ssgManifest.js +0 -0
- {mage_ai-0.9.57.dist-info → mage_ai-0.9.59.dist-info}/LICENSE +0 -0
- {mage_ai-0.9.57.dist-info → mage_ai-0.9.59.dist-info}/WHEEL +0 -0
- {mage_ai-0.9.57.dist-info → mage_ai-0.9.59.dist-info}/entry_points.txt +0 -0
- {mage_ai-0.9.57.dist-info → mage_ai-0.9.59.dist-info}/top_level.txt +0 -0
|
@@ -2,22 +2,41 @@ from typing import Dict, List, Tuple
|
|
|
2
2
|
|
|
3
3
|
import pandas as pd
|
|
4
4
|
|
|
5
|
+
from mage_ai.data_preparation.models.block.dynamic.utils import (
|
|
6
|
+
DynamicBlockWrapper,
|
|
7
|
+
MetadataInstructions,
|
|
8
|
+
)
|
|
5
9
|
from mage_ai.data_preparation.models.block.utils import (
|
|
6
|
-
|
|
10
|
+
build_dynamic_block_uuid,
|
|
7
11
|
dynamic_block_values_and_metadata,
|
|
8
|
-
is_dynamic_block,
|
|
9
|
-
is_dynamic_block_child,
|
|
10
12
|
)
|
|
11
13
|
from mage_ai.data_preparation.models.constants import BlockType
|
|
12
|
-
from mage_ai.
|
|
14
|
+
from mage_ai.orchestration.db.models.schedules import BlockRun
|
|
15
|
+
from mage_ai.shared.array import find, find_index
|
|
16
|
+
from mage_ai.shared.custom_logger import DX_PRINTER
|
|
17
|
+
from mage_ai.shared.environments import is_test
|
|
13
18
|
|
|
14
19
|
|
|
15
20
|
class DynamicChildBlockFactory:
|
|
16
|
-
def __init__(
|
|
21
|
+
def __init__(
|
|
22
|
+
self,
|
|
23
|
+
block,
|
|
24
|
+
pipeline_run=None,
|
|
25
|
+
block_run_id: int = None,
|
|
26
|
+
block_run: BlockRun = None,
|
|
27
|
+
block_runs: List = None,
|
|
28
|
+
**kwargs,
|
|
29
|
+
):
|
|
17
30
|
self.block = block
|
|
18
|
-
self.
|
|
31
|
+
self.block_run_id = block_run_id
|
|
19
32
|
self.type = BlockType.DYNAMIC_CHILD
|
|
20
33
|
|
|
34
|
+
self._block_run = block_run
|
|
35
|
+
self._block_runs = block_runs
|
|
36
|
+
self._block_runs_fetched = True if self._block_runs else False
|
|
37
|
+
self._pipeline_run = pipeline_run
|
|
38
|
+
self._wrapper = None
|
|
39
|
+
|
|
21
40
|
def __getattr__(self, name):
|
|
22
41
|
val = getattr(self.block, name)
|
|
23
42
|
|
|
@@ -29,19 +48,139 @@ class DynamicChildBlockFactory:
|
|
|
29
48
|
|
|
30
49
|
return val
|
|
31
50
|
|
|
51
|
+
def block_run(self) -> BlockRun:
|
|
52
|
+
if self._block_run:
|
|
53
|
+
return self._block_run
|
|
54
|
+
|
|
55
|
+
if self._block_runs:
|
|
56
|
+
self._block_run = find(
|
|
57
|
+
lambda br, factory=self: (
|
|
58
|
+
factory.block_run_id and br.id == factory.block_run_id
|
|
59
|
+
) or (br.block_uuid == factory.block.uuid),
|
|
60
|
+
self._block_runs,
|
|
61
|
+
)
|
|
62
|
+
DX_PRINTER.debug(
|
|
63
|
+
f'Block run: for block {self.block.uuid}: '
|
|
64
|
+
f'{self._block_run.id if self._block_run else ""} '
|
|
65
|
+
f'{self._block_run.block_uuid if self._block_run else ""}'
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
if not self._block_run:
|
|
69
|
+
try:
|
|
70
|
+
self._block_run = BlockRun.query.get(self.block_run_id)
|
|
71
|
+
except AttributeError as err:
|
|
72
|
+
if not is_test():
|
|
73
|
+
raise err
|
|
74
|
+
print(err)
|
|
75
|
+
|
|
76
|
+
return self._block_run
|
|
77
|
+
|
|
78
|
+
def set_pipeline_run(self, pipeline_run):
|
|
79
|
+
self._pipeline_run = pipeline_run
|
|
80
|
+
|
|
81
|
+
def pipeline_run(self):
|
|
82
|
+
if self._pipeline_run:
|
|
83
|
+
return self._pipeline_run
|
|
84
|
+
|
|
85
|
+
block_run = self.block_run()
|
|
86
|
+
if block_run:
|
|
87
|
+
self._pipeline_run = block_run.pipeline_run
|
|
88
|
+
|
|
89
|
+
return self._pipeline_run
|
|
90
|
+
|
|
91
|
+
def block_runs(self) -> List[BlockRun]:
|
|
92
|
+
if self._block_runs or self._block_runs_fetched:
|
|
93
|
+
return self._block_runs
|
|
94
|
+
|
|
95
|
+
block_run = self.block_run()
|
|
96
|
+
if block_run:
|
|
97
|
+
self._block_runs = BlockRun.query.filter(
|
|
98
|
+
BlockRun.pipeline_run_id == block_run.pipeline_run_id,
|
|
99
|
+
).all()
|
|
100
|
+
self._block_runs_fetched = True
|
|
101
|
+
|
|
102
|
+
return self._block_runs
|
|
103
|
+
|
|
104
|
+
def block_run_metadata(self) -> Dict:
|
|
105
|
+
block_run = self.block_run()
|
|
106
|
+
if block_run:
|
|
107
|
+
return block_run.metrics
|
|
108
|
+
|
|
109
|
+
def wrapper(self) -> DynamicBlockWrapper:
|
|
110
|
+
if self._wrapper:
|
|
111
|
+
return self._wrapper
|
|
112
|
+
|
|
113
|
+
self._wrapper = DynamicBlockWrapper(factory=self)
|
|
114
|
+
|
|
115
|
+
return self._wrapper
|
|
116
|
+
|
|
32
117
|
def execute_sync(
|
|
33
118
|
self,
|
|
34
119
|
execution_partition: str = None,
|
|
35
120
|
**kwargs,
|
|
36
121
|
) -> List[Dict]:
|
|
37
|
-
|
|
122
|
+
"""
|
|
123
|
+
When a pipeline run is created and it begins to create its block runs,
|
|
124
|
+
we can statically detect which blocks have at least 1 upstream block that is both
|
|
125
|
+
a dynamic block and a dynamic child block (nickname dynamic squared).
|
|
126
|
+
|
|
127
|
+
If there exists a block with an upstream block that is dynamic squared (nickname),
|
|
128
|
+
that means we’ll eventually have to generate N clones of the original dynamic child
|
|
129
|
+
block.
|
|
130
|
+
|
|
131
|
+
Original dynamic child blocks (the one below) are responsible for spawning dynamic
|
|
132
|
+
child block runs generated from the output data of an upstream dynamic block.
|
|
133
|
+
|
|
134
|
+
We cannot create those block runs statically because the output from the upstream
|
|
135
|
+
dynamic squared block hasn’t been created yet.
|
|
136
|
+
|
|
137
|
+
When the original (non-cloned version) of the dynamic child block with an upstream
|
|
138
|
+
dynamic squared block executes (logic is contained in the DynamicChildBlockFactory
|
|
139
|
+
class), instead of generating purely dynamic child block runs, it’ll create
|
|
140
|
+
clones of the original block (itself).
|
|
141
|
+
|
|
142
|
+
Those clones of the original will then depend on each individual spawn of the
|
|
143
|
+
upstream dynamic squared block. Once a spawn finishes running, the output from
|
|
144
|
+
that spawn will be used by the clone of the original to dynamically create
|
|
145
|
+
block runs.
|
|
146
|
+
|
|
147
|
+
When the original (non-cloned) dynamic child block executes, perform these 2 special checks:
|
|
148
|
+
1. Are there any upstream blocks that are dynamic and dynamic child (dynamic squared)
|
|
149
|
+
2. If yes, does that upstream block reduce output
|
|
150
|
+
|
|
151
|
+
If the upstream block doesn’t reduce output, then do the following:
|
|
152
|
+
1. Get the number of spawns from the upstream block
|
|
153
|
+
2. Create N block runs that is a clone of its original self, for every spawn
|
|
154
|
+
3. Set block run’s metadata/metrics to have an upstream dependency on that spawn.
|
|
155
|
+
|
|
156
|
+
If the upstream block reduces output, then use the logic already defined below to:
|
|
157
|
+
1. Get the number of spawns from the upstream block
|
|
158
|
+
2. Create a block run for a clone of its original self
|
|
159
|
+
3. That block run’s metadata/metrics will include all the block run block UUIDs of all the
|
|
160
|
+
spawns as an upstream dependency.
|
|
161
|
+
"""
|
|
162
|
+
DX_PRINTER.label = 'DynamicChildBlockFactory'
|
|
163
|
+
DX_PRINTER.info(
|
|
164
|
+
'execute_sync',
|
|
165
|
+
block=self.block,
|
|
166
|
+
dynamic_block=self.wrapper().to_dict(),
|
|
167
|
+
)
|
|
38
168
|
|
|
39
|
-
|
|
169
|
+
arr = []
|
|
170
|
+
values = self.__build_block_runs(self.wrapper(), execution_partition=execution_partition)
|
|
40
171
|
if not values:
|
|
172
|
+
DX_PRINTER.error('No block runs to create from values', block=self.block)
|
|
41
173
|
return None
|
|
42
174
|
|
|
175
|
+
DX_PRINTER.info(
|
|
176
|
+
f'Blocks runs to create: {len(values)}',
|
|
177
|
+
block=self.block,
|
|
178
|
+
uuids=[tup[0] for tup in values],
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
pipeline_run = self.pipeline_run()
|
|
43
182
|
for block_uuid, metrics in values:
|
|
44
|
-
|
|
183
|
+
pipeline_run.create_block_run(
|
|
45
184
|
block_uuid,
|
|
46
185
|
metrics=metrics,
|
|
47
186
|
skip_if_exists=True,
|
|
@@ -53,63 +192,307 @@ class DynamicChildBlockFactory:
|
|
|
53
192
|
|
|
54
193
|
return arr
|
|
55
194
|
|
|
56
|
-
def
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
195
|
+
def upstream_blocks_wrapped(self) -> List[DynamicBlockWrapper]:
|
|
196
|
+
block_runs = self.block_runs() or []
|
|
197
|
+
metadata = self.block_run_metadata() or {}
|
|
198
|
+
|
|
199
|
+
upstream_blocks_mapping = {}
|
|
200
|
+
|
|
201
|
+
dynamic_upstream_block_uuids = (metadata or {}).get('dynamic_upstream_block_uuids') or []
|
|
202
|
+
for upstream_block_uuid in dynamic_upstream_block_uuids:
|
|
203
|
+
block_original = self.block.pipeline.get_block(upstream_block_uuid)
|
|
204
|
+
if block_original:
|
|
205
|
+
upstream_blocks_mapping[block_original.uuid] = DynamicBlockWrapper(
|
|
206
|
+
factory=DynamicChildBlockFactory(
|
|
207
|
+
block_original,
|
|
208
|
+
block_run=find(
|
|
209
|
+
lambda br, uuid=upstream_block_uuid: br.block_uuid == uuid,
|
|
210
|
+
block_runs,
|
|
211
|
+
),
|
|
212
|
+
block_runs=block_runs,
|
|
213
|
+
),
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
for upstream_block in self.block.upstream_blocks:
|
|
217
|
+
if upstream_block.uuid in upstream_blocks_mapping:
|
|
218
|
+
continue
|
|
219
|
+
|
|
220
|
+
upstream_blocks_mapping[upstream_block.uuid] = DynamicBlockWrapper(
|
|
221
|
+
factory=DynamicChildBlockFactory(
|
|
222
|
+
upstream_block,
|
|
223
|
+
block_run=find(
|
|
224
|
+
lambda br, uuid=upstream_block.uuid: br.block_uuid == uuid,
|
|
225
|
+
block_runs,
|
|
226
|
+
),
|
|
227
|
+
block_runs=block_runs,
|
|
228
|
+
),
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
return list(upstream_blocks_mapping.values())
|
|
232
|
+
|
|
233
|
+
def __build_block_runs(
|
|
234
|
+
self,
|
|
235
|
+
wrapper: DynamicBlockWrapper,
|
|
236
|
+
execution_partition: str = None,
|
|
237
|
+
) -> List[Tuple]:
|
|
238
|
+
"""
|
|
239
|
+
Check to see if this block is a clone of the original block.
|
|
240
|
+
A clone will act as an original block (e.g. controller that create block runs
|
|
241
|
+
for itself) but its upstream is associated to a dynamic child’s spawns (a spawn is
|
|
242
|
+
a block run that was created for a dynamic child by the dynamic child block itself.)
|
|
243
|
+
|
|
244
|
+
When an original clone block calculates how many block runs it should spawn,
|
|
245
|
+
it must treat any upstream dynamic + dynamic child (e.g. D2) blocks simply as a
|
|
246
|
+
dynamic block.
|
|
247
|
+
"""
|
|
248
|
+
|
|
249
|
+
upstream_wrappers = []
|
|
250
|
+
for upstream_wrapper in wrapper.factory.upstream_blocks_wrapped():
|
|
251
|
+
"""
|
|
252
|
+
This order is very important!
|
|
253
|
+
Is the upstream block is both dynamic and a dynamic child,
|
|
254
|
+
it needs to act like a dynamic child first so that it spawns 1 block run
|
|
255
|
+
for each of its downstream blocks.
|
|
256
|
+
Then, when this upstream block’s block runs are completed, those blocks
|
|
257
|
+
will act as a dynamic block and create N block runs for its downstream.
|
|
258
|
+
|
|
259
|
+
For example, A -> B -> C
|
|
260
|
+
A: dynamic block
|
|
261
|
+
B: dynamic block, dynamic child
|
|
262
|
+
C: dynamic child
|
|
263
|
+
|
|
264
|
+
A: creates 3 B
|
|
265
|
+
B: 3 block runs, each create 3 C
|
|
266
|
+
C: 9 block runs in total
|
|
267
|
+
|
|
268
|
+
The current block needs to spawn 3 block runs that act as original blocks
|
|
269
|
+
so that when its upstream block (that is both dynamic & dynamic child)
|
|
270
|
+
is completed, the 3 "original blocks" will run through this process and
|
|
271
|
+
dynamically create block runs based on the upstream block’s output.
|
|
272
|
+
"""
|
|
273
|
+
|
|
274
|
+
upstream_is_dynamic = upstream_wrapper.is_dynamic()
|
|
275
|
+
upstream_is_dynamic_child = upstream_wrapper.is_dynamic_child()
|
|
276
|
+
|
|
277
|
+
if wrapper.is_clone_of_original() and upstream_is_dynamic:
|
|
278
|
+
"""
|
|
279
|
+
If this is the clone of the original and the upstream block is at least a
|
|
280
|
+
dynamic block, handle the block run creation process as usual.
|
|
281
|
+
|
|
282
|
+
Treat this process as if its generating block runs from an upstream
|
|
283
|
+
dynamic block.
|
|
284
|
+
|
|
285
|
+
However, to determine how many children to create from that dynamic block,
|
|
286
|
+
we must fetch the output data of a specific spawn because the output data
|
|
287
|
+
can vary depending on which spawn it is.
|
|
288
|
+
|
|
289
|
+
How do we know which dynamic child spawn block this is assigned to?
|
|
290
|
+
"""
|
|
291
|
+
upstream_wrappers.append((upstream_wrapper, False))
|
|
292
|
+
elif wrapper.is_original() and upstream_is_dynamic and upstream_is_dynamic_child:
|
|
293
|
+
"""
|
|
294
|
+
If this is the original (non-cloned) dynamic child block and
|
|
295
|
+
the upstream block is dynamic squared, then create N clones of original.
|
|
296
|
+
Treat this process as if its generating block runs from an upstream
|
|
297
|
+
dynamic child block. The difference will be after the block run metadata
|
|
298
|
+
is generated.
|
|
299
|
+
Before creating the block run record in the database, we must hydrate the
|
|
300
|
+
block run’s metadata/metrics with data that will allow the clones to
|
|
301
|
+
recognize itself as a clone of the original.
|
|
302
|
+
"""
|
|
303
|
+
upstream_wrappers.append((upstream_wrapper, True))
|
|
304
|
+
|
|
305
|
+
wrapper.metadata_instructions = MetadataInstructions(
|
|
306
|
+
clone_original=True,
|
|
307
|
+
original=wrapper,
|
|
308
|
+
upstream=upstream_wrapper,
|
|
309
|
+
)
|
|
310
|
+
elif upstream_is_dynamic:
|
|
311
|
+
upstream_wrappers.append((upstream_wrapper, False))
|
|
312
|
+
elif upstream_is_dynamic_child:
|
|
313
|
+
upstream_wrappers.append((upstream_wrapper, True))
|
|
314
|
+
|
|
315
|
+
DX_PRINTER.info(
|
|
316
|
+
f'Upstream block: {upstream_wrapper.uuid}',
|
|
317
|
+
block=wrapper.block,
|
|
318
|
+
upstream_is_dynamic=upstream_is_dynamic,
|
|
319
|
+
upstream_is_dynamic_child=upstream_is_dynamic_child,
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
DX_PRINTER.info(
|
|
323
|
+
f'Upstream blocks: {len(upstream_wrappers)}',
|
|
324
|
+
block=wrapper.block,
|
|
325
|
+
uuids=[f'{tup[0].uuid}: {tup[1]}' for tup in upstream_wrappers],
|
|
326
|
+
)
|
|
63
327
|
|
|
64
328
|
outputs = []
|
|
65
|
-
for
|
|
329
|
+
for upstream_parent_index, pair in enumerate(upstream_wrappers):
|
|
330
|
+
upstream_wrapper, is_dynamic_child = pair
|
|
331
|
+
|
|
66
332
|
values = None
|
|
67
333
|
block_metadata = None
|
|
68
334
|
|
|
69
335
|
if is_dynamic_child:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
336
|
+
DX_PRINTER.debug(
|
|
337
|
+
f'Getting block runs for upstream dynamic child: {upstream_wrapper.uuid}',
|
|
338
|
+
block=wrapper.block,
|
|
339
|
+
upstream_block=upstream_wrapper.uuid,
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
# If the upstream block is also a dynamic block, dynamic block behavior
|
|
343
|
+
# takes precedence. Every child block of the upstream block will act as a
|
|
344
|
+
# separate dynamic block that create dynamic children. We must use the index
|
|
345
|
+
# of that dynamic block which is a single number to differentiate between
|
|
346
|
+
# this current block having multiple upstream dynamic blocks.
|
|
347
|
+
parent_index_for_child_block = None
|
|
348
|
+
if upstream_wrapper.is_dynamic():
|
|
349
|
+
parent_index_for_child_block = upstream_parent_index
|
|
350
|
+
|
|
351
|
+
values_pairs = self.__build_block_runs(
|
|
352
|
+
upstream_wrapper,
|
|
81
353
|
execution_partition=execution_partition,
|
|
82
|
-
)
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
DX_PRINTER.debug(
|
|
357
|
+
f'Block runs built for upstream dynamic child {upstream_wrapper.uuid}: '
|
|
358
|
+
f'{len(values_pairs)}',
|
|
359
|
+
block=wrapper.block,
|
|
360
|
+
upstream_block=upstream_wrapper.uuid,
|
|
361
|
+
)
|
|
362
|
+
|
|
363
|
+
values = []
|
|
364
|
+
|
|
365
|
+
if isinstance(values_pairs, dict):
|
|
366
|
+
values_pairs = list(values_pairs.items())
|
|
367
|
+
|
|
368
|
+
for upstream_block_uuid, _metrics in values_pairs:
|
|
369
|
+
values.append(dict(
|
|
370
|
+
parent_index=parent_index_for_child_block,
|
|
371
|
+
upstream_block_uuid=upstream_block_uuid,
|
|
372
|
+
extra_settings=dict(
|
|
373
|
+
block_uuid_prefix=upstream_block_uuid.split(':')[-1],
|
|
374
|
+
dynamic_upstream_block_uuids=[
|
|
375
|
+
upstream_block_uuid,
|
|
376
|
+
],
|
|
377
|
+
),
|
|
378
|
+
))
|
|
379
|
+
|
|
380
|
+
DX_PRINTER.critical(
|
|
381
|
+
'Adding outputs from upstream dynamic child block',
|
|
382
|
+
block=wrapper.block,
|
|
383
|
+
parent_index=parent_index_for_child_block,
|
|
384
|
+
upstream_block_uuid=upstream_block_uuid,
|
|
385
|
+
extra_settings=dict(
|
|
386
|
+
block_uuid_prefix=upstream_block_uuid.split(':')[-1],
|
|
387
|
+
dynamic_upstream_block_uuids=[
|
|
388
|
+
upstream_block_uuid,
|
|
389
|
+
],
|
|
390
|
+
),
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
DX_PRINTER.debug(
|
|
394
|
+
f'Values from upstream dynamic child: {len(values)}',
|
|
395
|
+
block=wrapper.block,
|
|
396
|
+
upstream_block=upstream_wrapper.uuid,
|
|
397
|
+
)
|
|
398
|
+
|
|
83
399
|
outputs.append((values, None))
|
|
84
400
|
else:
|
|
401
|
+
dynamic_block_index_from_parent = wrapper.get_dynamic_block_index_from_parent(
|
|
402
|
+
upstream_wrapper.uuid,
|
|
403
|
+
)
|
|
404
|
+
# Validate that the output of this function returns the correct output
|
|
405
|
+
# for dynamic squared blocks (aka dynamic + dynamic child).
|
|
85
406
|
values, block_metadata = dynamic_block_values_and_metadata(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
407
|
+
upstream_wrapper.block,
|
|
408
|
+
block_uuid=wrapper.get_parent_block_uuid_for_output_variables(
|
|
409
|
+
upstream_wrapper.block,
|
|
410
|
+
upstream_wrapper.uuid,
|
|
411
|
+
),
|
|
412
|
+
dynamic_block_index=dynamic_block_index_from_parent,
|
|
413
|
+
execution_partition=execution_partition,
|
|
414
|
+
)
|
|
415
|
+
|
|
416
|
+
DX_PRINTER.critical(
|
|
417
|
+
'dynamic_block_values_and_metadata',
|
|
418
|
+
block=wrapper.block,
|
|
419
|
+
block_uuid=wrapper.get_parent_block_uuid_for_output_variables(
|
|
420
|
+
upstream_wrapper.block,
|
|
421
|
+
upstream_wrapper.uuid,
|
|
422
|
+
),
|
|
423
|
+
dynamic_block_index=dynamic_block_index_from_parent,
|
|
424
|
+
upstream_block=upstream_wrapper.block.uuid,
|
|
425
|
+
upstream_block_uuid=upstream_wrapper.uuid,
|
|
426
|
+
values=values,
|
|
427
|
+
__uuid='dynamic_block_values_and_metadata',
|
|
89
428
|
)
|
|
90
429
|
|
|
91
430
|
if isinstance(values, pd.DataFrame):
|
|
92
431
|
values = values.to_dict(orient='records')
|
|
93
432
|
|
|
94
433
|
if values:
|
|
434
|
+
dynamic_upstream_block_uuids = None
|
|
435
|
+
|
|
436
|
+
# If these child blocks are being created by its clone of
|
|
437
|
+
# original dynamic child block, then we need to use the parent index of the
|
|
438
|
+
# spawn of the upstream dynamic squared block.
|
|
439
|
+
if wrapper.is_clone_of_original():
|
|
440
|
+
dynamic_upstream_block_uuids = [
|
|
441
|
+
upstream_wrapper.uuid,
|
|
442
|
+
]
|
|
443
|
+
upstream_parent_index = wrapper.get_dynamic_block_index()
|
|
444
|
+
|
|
445
|
+
DX_PRINTER.critical(
|
|
446
|
+
'dynamic_upstream_index from current upstream is '
|
|
447
|
+
f'{upstream_wrapper.get_dynamic_block_index()}',
|
|
448
|
+
)
|
|
449
|
+
|
|
450
|
+
child_data = []
|
|
451
|
+
for parent_index, value in enumerate(values):
|
|
452
|
+
extra_settings = dict(
|
|
453
|
+
dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
|
|
454
|
+
index=parent_index,
|
|
455
|
+
value=value,
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
if dynamic_block_index_from_parent is not None:
|
|
459
|
+
extra_settings['block_uuid_prefix'] = dynamic_block_index_from_parent
|
|
460
|
+
|
|
461
|
+
child_data.append(dict(
|
|
462
|
+
parent_index=upstream_parent_index,
|
|
463
|
+
upstream_block_uuid=upstream_wrapper.uuid,
|
|
464
|
+
extra_settings=extra_settings,
|
|
465
|
+
))
|
|
466
|
+
|
|
467
|
+
DX_PRINTER.critical(
|
|
468
|
+
'Adding outputs from upstream dynamic block',
|
|
469
|
+
block=wrapper.block,
|
|
470
|
+
upstream_block=upstream_wrapper.block.uuid,
|
|
471
|
+
upstream_block_uuid=upstream_wrapper.uuid,
|
|
472
|
+
parent_index=upstream_parent_index,
|
|
473
|
+
block_metadata=block_metadata,
|
|
474
|
+
)
|
|
475
|
+
|
|
95
476
|
outputs.append((
|
|
96
|
-
|
|
97
|
-
parent_index=parent_index,
|
|
98
|
-
upstream_block_uuid=upstream_block.uuid,
|
|
99
|
-
extra_settings=dict(value=value),
|
|
100
|
-
) for parent_index, value in enumerate(values)],
|
|
477
|
+
child_data,
|
|
101
478
|
block_metadata,
|
|
102
479
|
))
|
|
103
480
|
|
|
481
|
+
DX_PRINTER.info(f'Outputs: {len(outputs)}', block=wrapper.block)
|
|
482
|
+
if len(outputs) == 0:
|
|
483
|
+
DX_PRINTER.critical('No outputs', block=wrapper.block)
|
|
484
|
+
|
|
104
485
|
all_data = None
|
|
105
486
|
for output in outputs:
|
|
106
487
|
child_data = None
|
|
107
488
|
child_metadata = None
|
|
108
489
|
|
|
109
490
|
if len(output) >= 1:
|
|
491
|
+
# list of values from 1 parent
|
|
110
492
|
child_data = output[0]
|
|
111
493
|
|
|
112
494
|
if len(output) >= 2:
|
|
495
|
+
# list of metadata from 1 parent
|
|
113
496
|
child_metadata = output[1]
|
|
114
497
|
|
|
115
498
|
metadata_len = len(child_metadata) if child_metadata else 0
|
|
@@ -117,20 +500,32 @@ class DynamicChildBlockFactory:
|
|
|
117
500
|
if all_data is None:
|
|
118
501
|
all_data = []
|
|
119
502
|
if child_data:
|
|
120
|
-
for data_dict in child_data:
|
|
503
|
+
for index_within_same_parent, data_dict in enumerate(child_data):
|
|
121
504
|
parent_index = data_dict['parent_index']
|
|
122
505
|
upstream_block_uuid = data_dict['upstream_block_uuid']
|
|
123
506
|
extra_settings = data_dict['extra_settings']
|
|
124
507
|
|
|
125
508
|
metadata = None
|
|
126
|
-
|
|
127
|
-
|
|
509
|
+
|
|
510
|
+
if index_within_same_parent is not None and \
|
|
511
|
+
index_within_same_parent < metadata_len:
|
|
512
|
+
|
|
513
|
+
metadata = child_metadata[index_within_same_parent]
|
|
514
|
+
|
|
128
515
|
all_data.append([(
|
|
129
516
|
upstream_block_uuid,
|
|
130
517
|
parent_index,
|
|
131
518
|
metadata,
|
|
132
519
|
extra_settings,
|
|
133
520
|
)])
|
|
521
|
+
|
|
522
|
+
DX_PRINTER.critical(
|
|
523
|
+
'Looping over all data',
|
|
524
|
+
upstream_block_uuid=upstream_block_uuid,
|
|
525
|
+
parent_index=parent_index,
|
|
526
|
+
metadata=metadata,
|
|
527
|
+
extra_settings=extra_settings,
|
|
528
|
+
)
|
|
134
529
|
else:
|
|
135
530
|
all_data.append([(None, None, None, None)])
|
|
136
531
|
else:
|
|
@@ -151,20 +546,33 @@ class DynamicChildBlockFactory:
|
|
|
151
546
|
metadata,
|
|
152
547
|
extra_settings,
|
|
153
548
|
)])
|
|
549
|
+
|
|
550
|
+
DX_PRINTER.critical(
|
|
551
|
+
'Looping over all data',
|
|
552
|
+
upstream_block_uuid=upstream_block_uuid,
|
|
553
|
+
parent_index=parent_index,
|
|
554
|
+
metadata=metadata,
|
|
555
|
+
extra_settings=extra_settings,
|
|
556
|
+
)
|
|
154
557
|
else:
|
|
155
558
|
arr.append(data_arr + [(None, None, None, None)])
|
|
156
559
|
|
|
157
560
|
all_data = arr
|
|
158
561
|
|
|
562
|
+
block_runs_tuples = []
|
|
563
|
+
|
|
159
564
|
if all_data is None:
|
|
160
|
-
return
|
|
565
|
+
return block_runs_tuples
|
|
161
566
|
|
|
162
|
-
block_runs_tuples = []
|
|
163
567
|
for idx, child_data_list in enumerate(all_data):
|
|
164
|
-
block_runs_tuples.append(self.__build_block_run(
|
|
568
|
+
block_runs_tuples.append(self.__build_block_run(
|
|
569
|
+
wrapper,
|
|
570
|
+
idx,
|
|
571
|
+
child_data_list,
|
|
572
|
+
))
|
|
165
573
|
|
|
166
574
|
# Add upstream blocks defined dynamically from the dynamic block’s metadata
|
|
167
|
-
pipeline = block.pipeline
|
|
575
|
+
pipeline = wrapper.block.pipeline
|
|
168
576
|
for idx, child_data_list in enumerate(all_data):
|
|
169
577
|
for idx2, tup in enumerate(child_data_list):
|
|
170
578
|
_upstream_block_uuid, _parent_index, metadata_inner, _extra_settings = tup
|
|
@@ -195,17 +603,24 @@ class DynamicChildBlockFactory:
|
|
|
195
603
|
metrics = {}
|
|
196
604
|
metrics['dynamic_upstream_block_uuids'] = \
|
|
197
605
|
(metrics.get('dynamic_upstream_block_uuids') or []) + up_uuids
|
|
606
|
+
|
|
198
607
|
block_runs_tuples[idx] = (block_uuid, metrics)
|
|
199
608
|
|
|
200
609
|
return block_runs_tuples
|
|
201
610
|
|
|
202
|
-
def __build_block_run(
|
|
611
|
+
def __build_block_run(
|
|
612
|
+
self,
|
|
613
|
+
wrapper: DynamicBlockWrapper,
|
|
614
|
+
index: int,
|
|
615
|
+
child_data_list: List[Tuple],
|
|
616
|
+
) -> Tuple:
|
|
203
617
|
metadata = {}
|
|
204
618
|
dynamic_block_indexes = None
|
|
205
619
|
block_uuids = []
|
|
206
620
|
upstream_blocks = []
|
|
207
621
|
dynamic_upstream_block_uuids = []
|
|
208
622
|
upstream_block_uuids_for_dynamic_block_uuid = []
|
|
623
|
+
parent_indexes = []
|
|
209
624
|
|
|
210
625
|
for tup in child_data_list:
|
|
211
626
|
parent_block_uuid, parent_index, metadata_inner, extra_settings = tup
|
|
@@ -216,6 +631,8 @@ class DynamicChildBlockFactory:
|
|
|
216
631
|
extra_settings.get('dynamic_upstream_block_uuids') or [],
|
|
217
632
|
)
|
|
218
633
|
|
|
634
|
+
# Don’t include this in the naming constructor if the block creating this child or
|
|
635
|
+
# spawn is from itself.
|
|
219
636
|
block_uuid_prefix = str(parent_index) if parent_index is not None else None
|
|
220
637
|
if 'block_uuid_prefix' in extra_settings:
|
|
221
638
|
block_uuid_prefix = extra_settings.get('block_uuid_prefix')
|
|
@@ -235,6 +652,7 @@ class DynamicChildBlockFactory:
|
|
|
235
652
|
if dynamic_block_indexes is None:
|
|
236
653
|
dynamic_block_indexes = {}
|
|
237
654
|
dynamic_block_indexes[parent_block_uuid] = parent_index
|
|
655
|
+
parent_indexes.append(parent_index)
|
|
238
656
|
|
|
239
657
|
metadata_for_uuid = {}
|
|
240
658
|
if any([uuid is not None for uuid in block_uuids]):
|
|
@@ -242,13 +660,55 @@ class DynamicChildBlockFactory:
|
|
|
242
660
|
[uuid or str(idx) for idx, uuid in enumerate(block_uuids)],
|
|
243
661
|
)
|
|
244
662
|
|
|
245
|
-
|
|
246
|
-
|
|
663
|
+
# The parent_indexes are a list representation of dynamic_block_indexes.
|
|
664
|
+
# dynamic_block_indexes is used to determine what folder to retrieve the output
|
|
665
|
+
# variables from when fetching input data from an upstream dynamic or dynamic child block.
|
|
666
|
+
# We need parent_indexes to create a unique combination of values when constructing
|
|
667
|
+
# the block run block UUID.
|
|
668
|
+
if parent_indexes and \
|
|
669
|
+
len(parent_indexes) >= len(upstream_block_uuids_for_dynamic_block_uuid):
|
|
670
|
+
|
|
671
|
+
upstream_block_uuids_for_dynamic_block_uuid = parent_indexes
|
|
672
|
+
|
|
673
|
+
base_block_uuid = wrapper.block_uuid
|
|
674
|
+
block_uuid = build_dynamic_block_uuid(
|
|
675
|
+
base_block_uuid,
|
|
247
676
|
metadata_for_uuid,
|
|
248
677
|
index=index,
|
|
249
678
|
upstream_block_uuids=upstream_block_uuids_for_dynamic_block_uuid,
|
|
250
679
|
)
|
|
251
680
|
|
|
681
|
+
DX_PRINTER.critical(
|
|
682
|
+
'Dynamic block UUID',
|
|
683
|
+
block=wrapper.block,
|
|
684
|
+
block_uuid=block_uuid,
|
|
685
|
+
index=index,
|
|
686
|
+
metadata_for_uuid=metadata_for_uuid,
|
|
687
|
+
upstream_block_uuids=upstream_block_uuids_for_dynamic_block_uuid,
|
|
688
|
+
wrapper_block_uuid=wrapper.block_uuid,
|
|
689
|
+
wrapper_uuid=wrapper.uuid,
|
|
690
|
+
)
|
|
691
|
+
|
|
692
|
+
clone_original = \
|
|
693
|
+
wrapper.metadata_instructions and wrapper.metadata_instructions.clone_original
|
|
694
|
+
if clone_original:
|
|
695
|
+
metadata.update(wrapper.to_dict(use_metadata_instructions=True))
|
|
696
|
+
block_uuid = ':'.join([
|
|
697
|
+
base_block_uuid,
|
|
698
|
+
'clone',
|
|
699
|
+
] + block_uuid.split(':')[2:])
|
|
700
|
+
|
|
701
|
+
DX_PRINTER.critical(
|
|
702
|
+
'Dynamic block UUID clone of original',
|
|
703
|
+
block=wrapper.block,
|
|
704
|
+
block_uuid=block_uuid,
|
|
705
|
+
index=index,
|
|
706
|
+
metadata_for_uuid=metadata_for_uuid,
|
|
707
|
+
upstream_block_uuids=upstream_block_uuids_for_dynamic_block_uuid,
|
|
708
|
+
wrapper_block_uuid=wrapper.block_uuid,
|
|
709
|
+
wrapper_uuid=wrapper.uuid,
|
|
710
|
+
)
|
|
711
|
+
|
|
252
712
|
metrics = dict(
|
|
253
713
|
dynamic_block_index=index,
|
|
254
714
|
)
|