mage-ai 0.9.46__py3-none-any.whl → 0.9.48__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/operations/base.py +27 -5
- mage_ai/api/policies/GlobalHookPolicy.py +1 -1
- mage_ai/api/policies/IntegrationSourcePolicy.py +62 -0
- mage_ai/api/policies/OauthPolicy.py +6 -6
- mage_ai/api/presenters/GlobalHookPresenter.py +1 -1
- mage_ai/api/presenters/IntegrationSourcePresenter.py +9 -2
- mage_ai/api/presenters/PipelinePresenter.py +3 -0
- mage_ai/api/presenters/PipelineRunPresenter.py +8 -3
- mage_ai/api/presenters/PipelineSchedulePresenter.py +22 -1
- mage_ai/api/resources/BlockResource.py +5 -0
- mage_ai/api/resources/DataProviderResource.py +2 -0
- mage_ai/api/resources/IntegrationSourceResource.py +149 -2
- mage_ai/data_integrations/sources/constants.py +5 -0
- mage_ai/data_integrations/utils/scheduler.py +57 -2
- mage_ai/data_preparation/executors/block_executor.py +30 -2
- mage_ai/data_preparation/executors/pipeline_executor.py +19 -4
- mage_ai/data_preparation/models/block/__init__.py +75 -32
- mage_ai/data_preparation/models/block/data_integration/constants.py +3 -0
- mage_ai/data_preparation/models/block/data_integration/mixins.py +6 -6
- mage_ai/data_preparation/models/block/data_integration/utils.py +198 -39
- mage_ai/data_preparation/models/block/sql/bigquery.py +2 -2
- mage_ai/data_preparation/models/block/sql/snowflake.py +2 -2
- mage_ai/data_preparation/models/block/sql/trino.py +2 -2
- mage_ai/data_preparation/models/block/sql/utils/shared.py +20 -3
- mage_ai/data_preparation/models/block/utils.py +53 -29
- mage_ai/data_preparation/models/global_hooks/constants.py +50 -1
- mage_ai/data_preparation/models/global_hooks/models.py +148 -84
- mage_ai/data_preparation/models/global_hooks/predicates.py +316 -0
- mage_ai/data_preparation/models/pipeline.py +7 -0
- mage_ai/data_preparation/models/pipelines/integration_pipeline.py +0 -1
- mage_ai/data_preparation/models/project/__init__.py +0 -2
- mage_ai/data_preparation/preferences.py +29 -18
- mage_ai/data_preparation/repo_manager.py +12 -2
- mage_ai/data_preparation/sync/__init__.py +2 -0
- mage_ai/data_preparation/templates/constants.py +14 -0
- mage_ai/data_preparation/templates/data_exporters/chroma.py +24 -0
- mage_ai/data_preparation/templates/data_exporters/streaming/rabbitmq.yaml +7 -0
- mage_ai/data_preparation/templates/data_loaders/chroma.py +27 -0
- mage_ai/data_preparation/templates/repo/io_config.yaml +3 -0
- mage_ai/io/base.py +1 -0
- mage_ai/io/chroma.py +162 -0
- mage_ai/io/config.py +8 -0
- mage_ai/orchestration/db/models/schedules.py +169 -34
- mage_ai/orchestration/pipeline_scheduler.py +59 -89
- mage_ai/server/constants.py +1 -1
- mage_ai/server/frontend_dist/404.html +2 -2
- mage_ai/server/frontend_dist/_next/static/chunks/{1749-9a6276b2918fdae1.js → 1749-bf512b4dabbab7fa.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1952-0f9a12782f0aaae6.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/2714-1e79e9f2e998b544.js → frontend_dist/_next/static/chunks/2714-68fef54789d7eaeb.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/2717-14191a781cf2f286.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3419-a7a52bcaaa687b07.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3437-e81a62f33337ca06.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3943-3cb1f765210dd7a4.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/4138-2c16e6d2f22246cd.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/4267-cb102e060a43d9bd.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/{4366-93e09e5a4a7e182c.js → 4366-3e52497942acbafe.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/{4783-1a21d9be47574bba.js → 4783-422429203610c318.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/{5499-76cf8f023c6b0985.js → 5499-c2853ef57d39fde8.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5810-e26a0768db1cfdba.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/{5896-14e5a23b1c6a0769.js → 5896-7b8e36634d7d94eb.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/6285-e9b45335bfb9ccaf.js → frontend_dist/_next/static/chunks/6285-648f9a732e100b2f.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/6798-b904395b0c18647b.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/6990-303bb87fc50f1755.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/7022-070ec0144a4d029c.js → frontend_dist/_next/static/chunks/7022-e76cae3ba5ee5312.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/{7361-694e1e4fb9c97d68.js → 7361-6c5c9063b9f91700.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/7858-d9df72e95e438284.js → frontend_dist/_next/static/chunks/7858-26a5a5d04fa3c703.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/{8146-92e7ccfed169ee9c.js → 8146-27f0e31f309897a5.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8264-9d6a7cea289e29ff.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/845-9a73c65fe3fdc328.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/8487-608d62c0eef1f29a.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/1845-5ce774d5ab81ed57.js → frontend_dist/_next/static/chunks/8731-2f78ec7b7760be8f.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/90-93d18aaecef0685b.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/9264-727704fc34e74ae0.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/9618-4eb49cdbd1ba11d7.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/9624-48fba6b4e6966fb7.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/976-18c98af60b76f1a7.js → frontend_dist/_next/static/chunks/976-0a8c2c4d7acd957b.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-8254de4f793643d0.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/block-layout-a24cb24b6f08bbc9.js → frontend_dist/_next/static/chunks/pages/block-layout-b926f6eb1ee9a53b.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/compute-a9402b51e9fe748e.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/files-85cecae037fd7a70.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-data-products/{[...slug]-cfd68e760ae00958.js → [...slug]-c3c9523ea8072c11.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{global-data-products-c3b79ef31007f95b.js → global-data-products-4d046f15202a1c8d.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-286133386c97a2b6.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{global-hooks-e561ae38cf5592e8.js → global-hooks-3da370825153056c.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage/files-449a022f2f0f2d94.js → frontend_dist/_next/static/chunks/pages/manage/files-39b73da5a15590f6.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{settings-60845f0b59142f32.js → settings-666748ff5d101411.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-9384c5f1efa2ac18.js → frontend_dist/_next/static/chunks/pages/manage/users/[user]-be27631e67dbe070.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-abd8571907664fdf.js → frontend_dist/_next/static/chunks/pages/manage/users/new-1932ce64823b372b.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage/users-28a930b148d99766.js → frontend_dist/_next/static/chunks/pages/manage/users-ed509c75cf23f0f5.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage-f83deb790548693b.js → frontend_dist/_next/static/chunks/pages/manage-1feebec1124123fc.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{oauth-8bb62c4f6a511c43.js → oauth-e9b8f19c30381c28.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/overview-f0c40645f385f23f.js → frontend_dist/_next/static/chunks/pages/overview-7b2ba2d5405c05fe.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-70fc3351bd11025f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-6ee3b88a5bb4ce94.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-c9cf383bc13ce7b8.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-571c0962333b92f0.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-7bca6f718b939934.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-c119f630038b0685.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-146051325c92d742.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/{block-runs-ddddcddd2f74b4f6.js → block-runs-15d307e6ba934a56.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-4a238307feddb522.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-f6196e563b960e5c.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors-e051057d9fe94f23.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-25dbd73201d99e80.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-06e55db757959ef8.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs-2d20b2cd08907afd.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-ec3c45cfa027db58.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-495e877aa7ed709e.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-49adfeed5157d92b.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-6143e028225390f5.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-0886f6320fef7131.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-e82a763d742cc034.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-50d20fa715d454af.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-b78b1be5b9ed84b9.js → [...slug]-2bbd63b7e93a8600.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{permissions-37b78a436eeab258.js → permissions-4ea156c39608caab.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-f3c29ec53ee35795.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-db05a80d18c168e5.js → [...slug]-64ec8928d2542f3c.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{roles-f55c77e4f46c8d33.js → roles-835e6ec2a48ec583.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{sync-data-2a1f8737561fdd94.js → sync-data-0769149af025de30.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users/{[...slug]-e3bf6e5d8bb250c4.js → [...slug]-612a65c42bcadef0.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{users-20f0a050a42a015d.js → users-e3365b4029a8db33.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-99e2748e3c1d57a3.js → frontend_dist/_next/static/chunks/pages/sign-in-f3a33e8f83abdb58.js} +1 -1
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/templates/[...slug]-f44ccd1499ffd23a.js → frontend_dist/_next/static/chunks/pages/templates/[...slug]-f264097bf8120f31.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{templates-1bfaa1c50e844813.js → templates-406e13cc5c4caab4.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{terminal-ed121e305169cf1c.js → terminal-ef8ad878e5e7bb2f.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-a90728798f964700.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-0e0c2713a2922be7.js +1 -0
- mage_ai/server/frontend_dist/_next/static/xxcdnITr3IkTdETH5ghqw/_buildManifest.js +1 -0
- mage_ai/server/frontend_dist/block-layout.html +2 -2
- mage_ai/server/frontend_dist/compute.html +5 -5
- mage_ai/server/frontend_dist/files.html +5 -5
- mage_ai/server/frontend_dist/global-data-products/[...slug].html +5 -5
- mage_ai/server/frontend_dist/global-data-products.html +5 -5
- mage_ai/server/frontend_dist/global-hooks/[...slug].html +5 -5
- mage_ai/server/frontend_dist/global-hooks.html +5 -5
- mage_ai/server/frontend_dist/index.html +2 -2
- mage_ai/server/frontend_dist/manage/files.html +5 -5
- mage_ai/server/frontend_dist/manage/settings.html +5 -5
- mage_ai/server/frontend_dist/manage/users/[user].html +5 -5
- mage_ai/server/frontend_dist/manage/users/new.html +5 -5
- mage_ai/server/frontend_dist/manage/users.html +5 -5
- mage_ai/server/frontend_dist/manage.html +5 -5
- mage_ai/server/frontend_dist/oauth.html +4 -4
- mage_ai/server/frontend_dist/overview.html +5 -5
- mage_ai/server/frontend_dist/pipeline-runs.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/dashboard.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +5 -5
- mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
- mage_ai/server/frontend_dist/pipelines.html +5 -5
- mage_ai/server/frontend_dist/settings/account/profile.html +5 -5
- mage_ai/server/frontend_dist/settings/workspace/permissions/[...slug].html +5 -5
- mage_ai/server/frontend_dist/settings/workspace/permissions.html +5 -5
- mage_ai/server/frontend_dist/settings/workspace/preferences.html +5 -5
- mage_ai/server/frontend_dist/settings/workspace/roles/[...slug].html +5 -5
- mage_ai/server/frontend_dist/settings/workspace/roles.html +5 -5
- mage_ai/server/frontend_dist/settings/workspace/sync-data.html +5 -5
- mage_ai/server/frontend_dist/settings/workspace/users/[...slug].html +5 -5
- mage_ai/server/frontend_dist/settings/workspace/users.html +5 -5
- mage_ai/server/frontend_dist/settings.html +2 -2
- mage_ai/server/frontend_dist/sign-in.html +24 -24
- mage_ai/server/frontend_dist/templates/[...slug].html +5 -5
- mage_ai/server/frontend_dist/templates.html +5 -5
- mage_ai/server/frontend_dist/terminal.html +5 -5
- mage_ai/server/frontend_dist/test.html +5 -5
- mage_ai/server/frontend_dist/triggers.html +5 -5
- mage_ai/server/frontend_dist/version-control.html +5 -5
- mage_ai/server/frontend_dist_base_path_template/404.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{1749-9a6276b2918fdae1.js → 1749-bf512b4dabbab7fa.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1952-0f9a12782f0aaae6.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/2714-1e79e9f2e998b544.js → frontend_dist_base_path_template/_next/static/chunks/2714-68fef54789d7eaeb.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-14191a781cf2f286.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3419-a7a52bcaaa687b07.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3437-e81a62f33337ca06.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3943-3cb1f765210dd7a4.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/4138-2c16e6d2f22246cd.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/4267-cb102e060a43d9bd.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{4366-93e09e5a4a7e182c.js → 4366-3e52497942acbafe.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{4783-1a21d9be47574bba.js → 4783-422429203610c318.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{5499-76cf8f023c6b0985.js → 5499-c2853ef57d39fde8.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5810-e26a0768db1cfdba.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{5896-14e5a23b1c6a0769.js → 5896-7b8e36634d7d94eb.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/6285-e9b45335bfb9ccaf.js → frontend_dist_base_path_template/_next/static/chunks/6285-648f9a732e100b2f.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6798-b904395b0c18647b.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6990-303bb87fc50f1755.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/7022-070ec0144a4d029c.js → frontend_dist_base_path_template/_next/static/chunks/7022-e76cae3ba5ee5312.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{7361-694e1e4fb9c97d68.js → 7361-6c5c9063b9f91700.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/7858-d9df72e95e438284.js → frontend_dist_base_path_template/_next/static/chunks/7858-26a5a5d04fa3c703.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{8146-92e7ccfed169ee9c.js → 8146-27f0e31f309897a5.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8264-9d6a7cea289e29ff.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/845-9a73c65fe3fdc328.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8487-608d62c0eef1f29a.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/1845-5ce774d5ab81ed57.js → frontend_dist_base_path_template/_next/static/chunks/8731-2f78ec7b7760be8f.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/90-93d18aaecef0685b.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9264-727704fc34e74ae0.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9618-4eb49cdbd1ba11d7.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9624-48fba6b4e6966fb7.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/976-18c98af60b76f1a7.js → frontend_dist_base_path_template/_next/static/chunks/976-0a8c2c4d7acd957b.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-8254de4f793643d0.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/block-layout-a24cb24b6f08bbc9.js → frontend_dist_base_path_template/_next/static/chunks/pages/block-layout-b926f6eb1ee9a53b.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/compute-a9402b51e9fe748e.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/files-85cecae037fd7a70.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-data-products/{[...slug]-cfd68e760ae00958.js → [...slug]-c3c9523ea8072c11.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{global-data-products-c3b79ef31007f95b.js → global-data-products-4d046f15202a1c8d.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-286133386c97a2b6.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{global-hooks-e561ae38cf5592e8.js → global-hooks-3da370825153056c.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage/files-449a022f2f0f2d94.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage/files-39b73da5a15590f6.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/{settings-60845f0b59142f32.js → settings-666748ff5d101411.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage/users/[user]-9384c5f1efa2ac18.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-be27631e67dbe070.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage/users/new-abd8571907664fdf.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-1932ce64823b372b.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage/users-28a930b148d99766.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage/users-ed509c75cf23f0f5.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage-f83deb790548693b.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage-1feebec1124123fc.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{oauth-8bb62c4f6a511c43.js → oauth-e9b8f19c30381c28.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/overview-f0c40645f385f23f.js → frontend_dist_base_path_template/_next/static/chunks/pages/overview-7b2ba2d5405c05fe.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipeline-runs-70fc3351bd11025f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-6ee3b88a5bb4ce94.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-c9cf383bc13ce7b8.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-571c0962333b92f0.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-7bca6f718b939934.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-c119f630038b0685.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-146051325c92d742.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/{block-runs-ddddcddd2f74b4f6.js → block-runs-15d307e6ba934a56.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-4a238307feddb522.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-f6196e563b960e5c.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-e051057d9fe94f23.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors-25dbd73201d99e80.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-06e55db757959ef8.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-2d20b2cd08907afd.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs-ec3c45cfa027db58.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-495e877aa7ed709e.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-49adfeed5157d92b.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-6143e028225390f5.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-0886f6320fef7131.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-e82a763d742cc034.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/account/profile-50d20fa715d454af.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-b78b1be5b9ed84b9.js → [...slug]-2bbd63b7e93a8600.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{permissions-37b78a436eeab258.js → permissions-4ea156c39608caab.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-f3c29ec53ee35795.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-db05a80d18c168e5.js → [...slug]-64ec8928d2542f3c.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{roles-f55c77e4f46c8d33.js → roles-835e6ec2a48ec583.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{sync-data-2a1f8737561fdd94.js → sync-data-0769149af025de30.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/users/{[...slug]-e3bf6e5d8bb250c4.js → [...slug]-612a65c42bcadef0.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{users-20f0a050a42a015d.js → users-e3365b4029a8db33.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/sign-in-99e2748e3c1d57a3.js → frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-f3a33e8f83abdb58.js} +1 -1
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/templates/[...slug]-f44ccd1499ffd23a.js → frontend_dist_base_path_template/_next/static/chunks/pages/templates/[...slug]-f264097bf8120f31.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{templates-1bfaa1c50e844813.js → templates-406e13cc5c4caab4.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{terminal-ed121e305169cf1c.js → terminal-ef8ad878e5e7bb2f.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-a90728798f964700.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/version-control-0e0c2713a2922be7.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/gDn6inKdLyj35NvURBSCV/_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 +4 -4
- 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/settings/account/profile.html +5 -5
- 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 +20 -20
- 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 +5 -5
- 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/server.py +11 -3
- mage_ai/services/k8s/job_manager.py +1 -0
- mage_ai/settings/repo.py +3 -0
- mage_ai/shared/files.py +47 -0
- mage_ai/shared/models.py +1 -0
- mage_ai/streaming/constants.py +1 -0
- mage_ai/streaming/sinks/postgres.py +2 -0
- mage_ai/streaming/sinks/rabbitmq.py +76 -0
- mage_ai/streaming/sinks/sink_factory.py +4 -0
- mage_ai/streaming/sources/nats_js.py +12 -1
- mage_ai/tests/api/operations/test_operations_with_hooks.py +136 -91
- mage_ai/tests/api/policies/test_oauth_policy.py +38 -0
- mage_ai/tests/data_preparation/executors/test_block_executor.py +2 -0
- mage_ai/tests/data_preparation/models/global_hooks/test_global_hooks.py +33 -8
- mage_ai/tests/data_preparation/models/global_hooks/test_hook.py +82 -38
- mage_ai/tests/data_preparation/models/global_hooks/test_predicates.py +803 -0
- mage_ai/tests/data_preparation/models/global_hooks/test_utils.py +6 -1
- mage_ai/tests/data_preparation/models/test_block.py +26 -0
- mage_ai/tests/data_preparation/models/test_pipeline.py +15 -0
- mage_ai/tests/factory.py +40 -2
- mage_ai/tests/orchestration/test_pipeline_scheduler.py +82 -1
- mage_ai/tests/services/k8s/test_job_manager.py +16 -0
- mage_ai/tests/shared/mixins.py +60 -23
- mage_ai/tests/streaming/sinks/test_rabbitmq.py +36 -0
- {mage_ai-0.9.46.dist-info → mage_ai-0.9.48.dist-info}/METADATA +7 -4
- {mage_ai-0.9.46.dist-info → mage_ai-0.9.48.dist-info}/RECORD +335 -321
- {mage_ai-0.9.46.dist-info → mage_ai-0.9.48.dist-info}/WHEEL +1 -1
- mage_ai/server/frontend_dist/_next/static/9jB4XPuz6BzxBcG9VNao5/_buildManifest.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1952-ac7722e8b1ab88fe.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3419-f8d518d024e7b5c8.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3943-9e1105393a3be0de.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/4267-fd4d8049e83178de.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5810-12eadc488265d55b.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/595-0d174b1f9fbfce4f.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/600-705fe234320ec5de.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/6333-bc1b433b428a9095.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/722-a1584445357a276c.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8264-0d582a6ca33c3dfa.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/8487-032ef9b17d20aad9.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/90-a7308bae028d7001.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/9264-1d4f0327d42fed91.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/9618-2c5045255ac5a6e7.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/9624-334e7db5c84cb4ea.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-ebef928183f9a3bb.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/compute-419775ca1293b354.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/files-0f2d4be6fdca86ca.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-77edfa32d000e88b.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-b35d37bfba8fbccc.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-10e9a2d19541caa2.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-c8d3a5289ab93f88.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-ff7e9108502f5716.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-ef680455ae54ccbe.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-0691711636fa95c7.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-2914e326a5f1ffe0.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-b75bf17498e87354.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-3a7500e6e53084d3.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-c0e551d265a8d467.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-e47db5c3eaf683af.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-55ac955dfa9a5a8d.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-29c92a9bc54ae5cd.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-572d82d6eb7a5d43.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-2d26d80370a2e481.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1952-ac7722e8b1ab88fe.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3419-f8d518d024e7b5c8.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3943-9e1105393a3be0de.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/4267-fd4d8049e83178de.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5810-12eadc488265d55b.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/595-0d174b1f9fbfce4f.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/600-705fe234320ec5de.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6333-bc1b433b428a9095.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/722-a1584445357a276c.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8264-0d582a6ca33c3dfa.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8487-032ef9b17d20aad9.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/90-a7308bae028d7001.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9264-1d4f0327d42fed91.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9618-2c5045255ac5a6e7.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9624-334e7db5c84cb4ea.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-ebef928183f9a3bb.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/compute-419775ca1293b354.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/files-0f2d4be6fdca86ca.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-77edfa32d000e88b.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipeline-runs-b35d37bfba8fbccc.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-10e9a2d19541caa2.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-c8d3a5289ab93f88.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-ff7e9108502f5716.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-ef680455ae54ccbe.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-0691711636fa95c7.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-2914e326a5f1ffe0.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-b75bf17498e87354.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-3a7500e6e53084d3.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-c0e551d265a8d467.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-e47db5c3eaf683af.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/account/profile-55ac955dfa9a5a8d.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-29c92a9bc54ae5cd.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-572d82d6eb7a5d43.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/version-control-2d26d80370a2e481.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/uPDjJYpJMst1q6psbRyte/_buildManifest.js +0 -1
- /mage_ai/server/frontend_dist/_next/static/{9jB4XPuz6BzxBcG9VNao5 → xxcdnITr3IkTdETH5ghqw}/_ssgManifest.js +0 -0
- /mage_ai/server/frontend_dist_base_path_template/_next/static/{uPDjJYpJMst1q6psbRyte → gDn6inKdLyj35NvURBSCV}/_ssgManifest.js +0 -0
- {mage_ai-0.9.46.dist-info → mage_ai-0.9.48.dist-info}/LICENSE +0 -0
- {mage_ai-0.9.46.dist-info → mage_ai-0.9.48.dist-info}/entry_points.txt +0 -0
- {mage_ai-0.9.46.dist-info → mage_ai-0.9.48.dist-info}/top_level.txt +0 -0
|
@@ -8,7 +8,9 @@ from mage_ai.data_integrations.sources.constants import SQL_SOURCES
|
|
|
8
8
|
from mage_ai.data_integrations.utils.config import build_config, get_batch_fetch_limit
|
|
9
9
|
from mage_ai.data_preparation.logging.logger import DictLogger
|
|
10
10
|
from mage_ai.data_preparation.models.block.data_integration.constants import (
|
|
11
|
+
KEY_REPLICATION_METHOD,
|
|
11
12
|
MAX_QUERY_STRING_SIZE,
|
|
13
|
+
REPLICATION_METHOD_INCREMENTAL,
|
|
12
14
|
)
|
|
13
15
|
from mage_ai.data_preparation.models.block.data_integration.utils import (
|
|
14
16
|
convert_block_output_data_for_destination,
|
|
@@ -19,6 +21,7 @@ from mage_ai.data_preparation.models.block.data_integration.utils import (
|
|
|
19
21
|
from mage_ai.data_preparation.models.pipelines.integration_pipeline import (
|
|
20
22
|
IntegrationPipeline,
|
|
21
23
|
)
|
|
24
|
+
from mage_ai.data_preparation.models.triggers import ScheduleInterval
|
|
22
25
|
from mage_ai.orchestration.db import db_connection
|
|
23
26
|
from mage_ai.orchestration.db.models.schedules import BlockRun, PipelineRun
|
|
24
27
|
from mage_ai.orchestration.metrics.pipeline_run import calculate_metrics
|
|
@@ -253,6 +256,7 @@ def build_block_run_metadata(
|
|
|
253
256
|
logging_tags: Dict = None,
|
|
254
257
|
parent_stream: str = None,
|
|
255
258
|
partition: str = None,
|
|
259
|
+
pipeline_run: PipelineRun = None,
|
|
256
260
|
selected_streams: List[str] = None,
|
|
257
261
|
) -> List[Dict]:
|
|
258
262
|
block_run_metadata = []
|
|
@@ -270,9 +274,11 @@ def build_block_run_metadata(
|
|
|
270
274
|
|
|
271
275
|
if block.is_source():
|
|
272
276
|
return __build_block_run_metadata_for_source(
|
|
277
|
+
block,
|
|
273
278
|
data_integration_settings,
|
|
274
279
|
logger,
|
|
275
280
|
logging_tags=logging_tags,
|
|
281
|
+
pipeline_run=pipeline_run,
|
|
276
282
|
selected_streams=selected_streams,
|
|
277
283
|
)
|
|
278
284
|
|
|
@@ -377,9 +383,11 @@ def __build_block_run_metadata_for_destination(
|
|
|
377
383
|
|
|
378
384
|
|
|
379
385
|
def __build_block_run_metadata_for_source(
|
|
386
|
+
block,
|
|
380
387
|
data_integration_settings: Dict,
|
|
381
388
|
logger: DictLogger,
|
|
382
389
|
logging_tags: Dict = None,
|
|
390
|
+
pipeline_run: PipelineRun = None,
|
|
383
391
|
selected_streams: List[str] = None,
|
|
384
392
|
) -> List[Dict]:
|
|
385
393
|
block_run_metadata = []
|
|
@@ -388,20 +396,66 @@ def __build_block_run_metadata_for_source(
|
|
|
388
396
|
config = data_integration_settings.get('config')
|
|
389
397
|
batch_fetch_limit = get_batch_fetch_limit(config)
|
|
390
398
|
|
|
391
|
-
|
|
392
|
-
|
|
399
|
+
stream_dicts_by_stream_id = index_by(
|
|
400
|
+
lambda x: x.get('tap_stream_id') or x.get('stream'),
|
|
401
|
+
get_selected_streams(catalog),
|
|
402
|
+
)
|
|
403
|
+
|
|
404
|
+
streams = []
|
|
405
|
+
|
|
406
|
+
if selected_streams:
|
|
407
|
+
streams = selected_streams
|
|
408
|
+
else:
|
|
409
|
+
streams = list(stream_dicts_by_stream_id.keys())
|
|
410
|
+
|
|
411
|
+
at_least_one_incremental = False
|
|
412
|
+
|
|
413
|
+
for stream_id in streams:
|
|
414
|
+
if at_least_one_incremental:
|
|
415
|
+
break
|
|
416
|
+
|
|
417
|
+
stream_dict = stream_dicts_by_stream_id.get(stream_id)
|
|
418
|
+
if not stream_dict:
|
|
419
|
+
continue
|
|
420
|
+
|
|
421
|
+
if REPLICATION_METHOD_INCREMENTAL == stream_dict.get(KEY_REPLICATION_METHOD):
|
|
422
|
+
at_least_one_incremental = True
|
|
423
|
+
break
|
|
424
|
+
|
|
425
|
+
execution_partition_previous = None
|
|
426
|
+
|
|
427
|
+
if at_least_one_incremental and pipeline_run:
|
|
428
|
+
pipeline_runs_completed = \
|
|
429
|
+
PipelineRun.recently_completed_pipeline_runs(
|
|
430
|
+
pipeline_run.pipeline_uuid,
|
|
431
|
+
pipeline_run_id=pipeline_run.id,
|
|
432
|
+
pipeline_schedule_id=(
|
|
433
|
+
None if
|
|
434
|
+
ScheduleInterval.ONCE == pipeline_run.pipeline_schedule.schedule_interval else
|
|
435
|
+
pipeline_run.pipeline_schedule_id
|
|
436
|
+
),
|
|
437
|
+
sample_size=1,
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
if pipeline_runs_completed:
|
|
441
|
+
execution_partition_previous = pipeline_runs_completed[0].execution_partition
|
|
442
|
+
|
|
393
443
|
data_integration_uuid = data_integration_settings.get('data_integration_uuid')
|
|
394
444
|
|
|
395
445
|
is_sql_source = data_integration_uuid in SQL_SOURCES_UUID
|
|
396
446
|
record_counts_by_stream = {}
|
|
397
447
|
if is_sql_source:
|
|
448
|
+
|
|
398
449
|
record_counts_by_stream = index_by(
|
|
399
450
|
lambda x: x['id'],
|
|
400
451
|
count_records(
|
|
401
452
|
config,
|
|
402
453
|
data_integration_uuid,
|
|
403
454
|
streams,
|
|
455
|
+
block=block,
|
|
404
456
|
catalog=catalog,
|
|
457
|
+
partition=execution_partition_previous,
|
|
458
|
+
variables=pipeline_run.variables if pipeline_run else None,
|
|
405
459
|
),
|
|
406
460
|
)
|
|
407
461
|
|
|
@@ -432,6 +486,7 @@ def __build_block_run_metadata_for_source(
|
|
|
432
486
|
|
|
433
487
|
for idx in range(number_of_batches):
|
|
434
488
|
block_run_metadata.append(dict(
|
|
489
|
+
execution_partition_previous=execution_partition_previous,
|
|
435
490
|
index=idx,
|
|
436
491
|
number_of_batches=number_of_batches,
|
|
437
492
|
stream=tap_stream_id,
|
|
@@ -84,6 +84,8 @@ class BlockExecutor:
|
|
|
84
84
|
self,
|
|
85
85
|
analyze_outputs: bool = False,
|
|
86
86
|
block_run_id: int = None,
|
|
87
|
+
block_run_outputs_cache: Dict[str, List] = None,
|
|
88
|
+
cache_block_output_in_memory: bool = False,
|
|
87
89
|
callback_url: Union[str, None] = None,
|
|
88
90
|
global_vars: Union[Dict, None] = None,
|
|
89
91
|
input_from_output: Union[Dict, None] = None,
|
|
@@ -105,6 +107,10 @@ class BlockExecutor:
|
|
|
105
107
|
Args:
|
|
106
108
|
analyze_outputs: Whether to analyze the outputs of the block.
|
|
107
109
|
block_run_id: The ID of the block run.
|
|
110
|
+
block_run_outputs_cache: block uuid to block outputs mapping. It's used when
|
|
111
|
+
cache_block_output_in_memory is set to True.
|
|
112
|
+
cache_block_output_in_memory: Whether to cache the block output in memory. By default,
|
|
113
|
+
the block output is persisted on disk.
|
|
108
114
|
callback_url: The URL for the callback.
|
|
109
115
|
global_vars: Global variables for the block execution.
|
|
110
116
|
input_from_output: Input from the output of a previous block.
|
|
@@ -512,6 +518,8 @@ class BlockExecutor:
|
|
|
512
518
|
return self._execute(
|
|
513
519
|
analyze_outputs=analyze_outputs,
|
|
514
520
|
block_run_id=block_run_id,
|
|
521
|
+
block_run_outputs_cache=block_run_outputs_cache,
|
|
522
|
+
cache_block_output_in_memory=cache_block_output_in_memory,
|
|
515
523
|
callback_url=callback_url,
|
|
516
524
|
global_vars=global_vars,
|
|
517
525
|
update_status=update_status,
|
|
@@ -620,6 +628,8 @@ class BlockExecutor:
|
|
|
620
628
|
self,
|
|
621
629
|
analyze_outputs: bool = False,
|
|
622
630
|
block_run_id: int = None,
|
|
631
|
+
block_run_outputs_cache: Dict[str, List] = None,
|
|
632
|
+
cache_block_output_in_memory: bool = False,
|
|
623
633
|
callback_url: Union[str, None] = None,
|
|
624
634
|
global_vars: Union[Dict, None] = None,
|
|
625
635
|
update_status: bool = False,
|
|
@@ -640,7 +650,11 @@ class BlockExecutor:
|
|
|
640
650
|
|
|
641
651
|
Args:
|
|
642
652
|
analyze_outputs: Whether to analyze the outputs of the block.
|
|
653
|
+
block_run_outputs_cache: block uuid to block outputs mapping. It's used when
|
|
654
|
+
cache_block_output_in_memory is set to True.
|
|
643
655
|
callback_url: The URL for the callback.
|
|
656
|
+
cache_block_output_in_memory: Whether to cache the block output in memory. By default,
|
|
657
|
+
the block output is persisted on disk.
|
|
644
658
|
global_vars: Global variables for the block execution.
|
|
645
659
|
update_status: Whether to update the status of the block execution.
|
|
646
660
|
input_from_output: Input from the output of a previous block.
|
|
@@ -659,7 +673,10 @@ class BlockExecutor:
|
|
|
659
673
|
logging_tags = dict()
|
|
660
674
|
|
|
661
675
|
extra_options = {}
|
|
662
|
-
|
|
676
|
+
if cache_block_output_in_memory:
|
|
677
|
+
store_variables = False
|
|
678
|
+
else:
|
|
679
|
+
store_variables = True
|
|
663
680
|
is_data_integration = False
|
|
664
681
|
|
|
665
682
|
if self.project.is_feature_enabled(FeatureUUID.DATA_INTEGRATION_IN_BATCH_PIPELINE):
|
|
@@ -735,6 +752,14 @@ class BlockExecutor:
|
|
|
735
752
|
except Exception as err:
|
|
736
753
|
print(f'[WARNING] BlockExecutor._execute: {err}')
|
|
737
754
|
|
|
755
|
+
is_source = self.block.is_source()
|
|
756
|
+
if is_source and data_integration_metadata:
|
|
757
|
+
execution_partition_previous = data_integration_metadata.get(
|
|
758
|
+
'execution_partition_previous',
|
|
759
|
+
)
|
|
760
|
+
if execution_partition_previous:
|
|
761
|
+
extra_options['execution_partition_previous'] = execution_partition_previous
|
|
762
|
+
|
|
738
763
|
if di_settings and \
|
|
739
764
|
data_integration_metadata and \
|
|
740
765
|
data_integration_metadata.get('controller') and \
|
|
@@ -746,7 +771,6 @@ class BlockExecutor:
|
|
|
746
771
|
if is_data_integration:
|
|
747
772
|
arr = []
|
|
748
773
|
|
|
749
|
-
is_source = self.block.is_source()
|
|
750
774
|
data_integration_uuid = di_settings.get('data_integration_uuid')
|
|
751
775
|
catalog = di_settings.get('catalog', [])
|
|
752
776
|
|
|
@@ -770,6 +794,7 @@ class BlockExecutor:
|
|
|
770
794
|
logging_tags=logging_tags,
|
|
771
795
|
parent_stream=data_integration_metadata.get('parent_stream'),
|
|
772
796
|
partition=self.execution_partition,
|
|
797
|
+
pipeline_run=pipeline_run,
|
|
773
798
|
selected_streams=[stream],
|
|
774
799
|
)
|
|
775
800
|
for br_metadata in block_run_metadata:
|
|
@@ -949,6 +974,7 @@ class BlockExecutor:
|
|
|
949
974
|
|
|
950
975
|
result = self.block.execute_sync(
|
|
951
976
|
analyze_outputs=analyze_outputs,
|
|
977
|
+
block_run_outputs_cache=block_run_outputs_cache,
|
|
952
978
|
execution_partition=self.execution_partition,
|
|
953
979
|
global_vars=global_vars,
|
|
954
980
|
logger=self.logger,
|
|
@@ -971,6 +997,7 @@ class BlockExecutor:
|
|
|
971
997
|
global_vars=global_vars,
|
|
972
998
|
logger=self.logger,
|
|
973
999
|
logging_tags=logging_tags,
|
|
1000
|
+
outputs=result if cache_block_output_in_memory else None,
|
|
974
1001
|
)
|
|
975
1002
|
elif PipelineType.INTEGRATION != self.pipeline.type and \
|
|
976
1003
|
(not is_data_integration or BlockLanguage.PYTHON == self.block.language):
|
|
@@ -979,6 +1006,7 @@ class BlockExecutor:
|
|
|
979
1006
|
global_vars=global_vars,
|
|
980
1007
|
logger=self.logger,
|
|
981
1008
|
logging_tags=logging_tags,
|
|
1009
|
+
outputs=result if cache_block_output_in_memory else None,
|
|
982
1010
|
update_tests=False,
|
|
983
1011
|
dynamic_block_uuid=dynamic_block_uuid,
|
|
984
1012
|
)
|
|
@@ -89,7 +89,10 @@ class PipelineExecutor:
|
|
|
89
89
|
if global_vars is None:
|
|
90
90
|
global_vars = dict()
|
|
91
91
|
|
|
92
|
-
def create_block_task(
|
|
92
|
+
def create_block_task(
|
|
93
|
+
block_run: BlockRun,
|
|
94
|
+
block_run_outputs_cache: Dict[str, List],
|
|
95
|
+
) -> asyncio.Task:
|
|
93
96
|
async def execute_block() -> None:
|
|
94
97
|
executor_kwargs = dict(
|
|
95
98
|
pipeline=self.pipeline,
|
|
@@ -102,22 +105,34 @@ class PipelineExecutor:
|
|
|
102
105
|
block_run_data['started_at'] = datetime.now(tz=pytz.UTC)
|
|
103
106
|
|
|
104
107
|
block_run.update(**block_run_data)
|
|
105
|
-
BlockExecutor(**executor_kwargs).execute(
|
|
108
|
+
return BlockExecutor(**executor_kwargs).execute(
|
|
106
109
|
block_run_id=block_run.id,
|
|
110
|
+
block_run_outputs_cache=block_run_outputs_cache,
|
|
111
|
+
cache_block_output_in_memory=self.pipeline.cache_block_output_in_memory,
|
|
107
112
|
global_vars=global_vars,
|
|
108
113
|
pipeline_run_id=pipeline_run.id,
|
|
109
114
|
)
|
|
110
115
|
|
|
111
116
|
return asyncio.create_task(execute_block())
|
|
112
117
|
|
|
118
|
+
block_run_outputs_cache = dict()
|
|
119
|
+
|
|
113
120
|
while not pipeline_run.all_blocks_completed(allow_blocks_to_fail):
|
|
121
|
+
# Update the statuses of the block runs to CONDITION_FAILED or UPSTREAM_FAILED.
|
|
122
|
+
pipeline_run.update_block_run_statuses(pipeline_run.initial_block_runs)
|
|
114
123
|
executable_block_runs = pipeline_run.executable_block_runs(
|
|
115
124
|
allow_blocks_to_fail=allow_blocks_to_fail,
|
|
116
125
|
)
|
|
117
126
|
if not executable_block_runs:
|
|
118
127
|
return
|
|
119
|
-
block_run_tasks = [
|
|
120
|
-
|
|
128
|
+
block_run_tasks = [
|
|
129
|
+
create_block_task(b, block_run_outputs_cache=block_run_outputs_cache)
|
|
130
|
+
for b in executable_block_runs]
|
|
131
|
+
block_run_outputs = await asyncio.gather(*block_run_tasks)
|
|
132
|
+
if self.pipeline.cache_block_output_in_memory:
|
|
133
|
+
for idx, block_run in enumerate(executable_block_runs):
|
|
134
|
+
block_run_outputs_cache[block_run.block_uuid] = \
|
|
135
|
+
block_run_outputs[idx].get('output', [])
|
|
121
136
|
|
|
122
137
|
def build_tags(self, **kwargs):
|
|
123
138
|
default_tags = dict(
|
|
@@ -23,6 +23,7 @@ from jinja2 import Template
|
|
|
23
23
|
import mage_ai.data_preparation.decorators
|
|
24
24
|
from mage_ai.cache.block import BlockCache
|
|
25
25
|
from mage_ai.data_cleaner.shared.utils import is_geo_dataframe, is_spark_dataframe
|
|
26
|
+
from mage_ai.data_integrations.sources.constants import SQL_SOURCES_MAPPING
|
|
26
27
|
from mage_ai.data_preparation.logging.logger import DictLogger
|
|
27
28
|
from mage_ai.data_preparation.logging.logger_manager_factory import LoggerManagerFactory
|
|
28
29
|
from mage_ai.data_preparation.models.block.data_integration.mixins import (
|
|
@@ -466,11 +467,14 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
466
467
|
uuid = settings.get('source') or settings.get('destination')
|
|
467
468
|
mapping = grouped_templates.get(uuid) or {}
|
|
468
469
|
|
|
470
|
+
di_metadata = merge_dict(
|
|
471
|
+
extract(mapping or {}, ['name']),
|
|
472
|
+
settings,
|
|
473
|
+
)
|
|
474
|
+
di_metadata['sql'] = uuid in SQL_SOURCES_MAPPING
|
|
475
|
+
|
|
469
476
|
return dict(
|
|
470
|
-
data_integration=
|
|
471
|
-
extract(mapping or {}, ['name']),
|
|
472
|
-
settings,
|
|
473
|
-
),
|
|
477
|
+
data_integration=di_metadata,
|
|
474
478
|
)
|
|
475
479
|
elif BlockLanguage.PYTHON == self.language:
|
|
476
480
|
try:
|
|
@@ -482,15 +486,18 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
482
486
|
uuid = di_settings.get('data_integration_uuid')
|
|
483
487
|
mapping = grouped_templates.get(uuid) or {}
|
|
484
488
|
|
|
489
|
+
di_metadata = merge_dict(
|
|
490
|
+
extract(mapping or {}, ['name']),
|
|
491
|
+
ignore_keys(di_settings or {}, [
|
|
492
|
+
'catalog',
|
|
493
|
+
'config',
|
|
494
|
+
'data_integration_uuid',
|
|
495
|
+
]),
|
|
496
|
+
)
|
|
497
|
+
di_metadata['sql'] = uuid in SQL_SOURCES_MAPPING
|
|
498
|
+
|
|
485
499
|
return dict(
|
|
486
|
-
data_integration=
|
|
487
|
-
extract(mapping or {}, ['name']),
|
|
488
|
-
ignore_keys(di_settings or {}, [
|
|
489
|
-
'catalog',
|
|
490
|
-
'config',
|
|
491
|
-
'data_integration_uuid',
|
|
492
|
-
]),
|
|
493
|
-
),
|
|
500
|
+
data_integration=di_metadata,
|
|
494
501
|
)
|
|
495
502
|
except Exception as err:
|
|
496
503
|
if is_debug():
|
|
@@ -971,6 +978,7 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
971
978
|
def execute_sync(
|
|
972
979
|
self,
|
|
973
980
|
analyze_outputs: bool = False,
|
|
981
|
+
block_run_outputs_cache: Dict[str, List] = None,
|
|
974
982
|
build_block_output_stdout: Callable[..., object] = None,
|
|
975
983
|
custom_code: str = None,
|
|
976
984
|
execution_partition: str = None,
|
|
@@ -991,6 +999,7 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
991
999
|
output_messages_to_logs: bool = False,
|
|
992
1000
|
disable_json_serialization: bool = False,
|
|
993
1001
|
data_integration_runtime_settings: Dict = None,
|
|
1002
|
+
execution_partition_previous: str = None,
|
|
994
1003
|
**kwargs,
|
|
995
1004
|
) -> Dict:
|
|
996
1005
|
if logging_tags is None:
|
|
@@ -1031,6 +1040,7 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
1031
1040
|
)
|
|
1032
1041
|
|
|
1033
1042
|
output = self.execute_block(
|
|
1043
|
+
block_run_outputs_cache=block_run_outputs_cache,
|
|
1034
1044
|
build_block_output_stdout=build_block_output_stdout,
|
|
1035
1045
|
custom_code=custom_code,
|
|
1036
1046
|
execution_partition=execution_partition,
|
|
@@ -1044,6 +1054,7 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
1044
1054
|
dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
|
|
1045
1055
|
run_settings=run_settings,
|
|
1046
1056
|
data_integration_runtime_settings=data_integration_runtime_settings,
|
|
1057
|
+
execution_partition_previous=execution_partition_previous,
|
|
1047
1058
|
**kwargs,
|
|
1048
1059
|
)
|
|
1049
1060
|
|
|
@@ -1209,6 +1220,7 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
1209
1220
|
|
|
1210
1221
|
def execute_block(
|
|
1211
1222
|
self,
|
|
1223
|
+
block_run_outputs_cache: Dict[str, List] = None,
|
|
1212
1224
|
build_block_output_stdout: Callable[..., object] = None,
|
|
1213
1225
|
custom_code: str = None,
|
|
1214
1226
|
execution_partition: str = None,
|
|
@@ -1223,6 +1235,7 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
1223
1235
|
dynamic_upstream_block_uuids: List[str] = None,
|
|
1224
1236
|
run_settings: Dict = None,
|
|
1225
1237
|
data_integration_runtime_settings: str = None,
|
|
1238
|
+
execution_partition_previous: str = None,
|
|
1226
1239
|
**kwargs,
|
|
1227
1240
|
) -> Dict:
|
|
1228
1241
|
if logging_tags is None:
|
|
@@ -1262,11 +1275,12 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
1262
1275
|
else:
|
|
1263
1276
|
input_vars, kwargs_vars, upstream_block_uuids = self.fetch_input_variables(
|
|
1264
1277
|
input_args,
|
|
1265
|
-
|
|
1266
|
-
global_vars,
|
|
1278
|
+
block_run_outputs_cache=block_run_outputs_cache,
|
|
1267
1279
|
dynamic_block_index=dynamic_block_index,
|
|
1268
1280
|
dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
|
|
1281
|
+
execution_partition=execution_partition,
|
|
1269
1282
|
from_notebook=from_notebook,
|
|
1283
|
+
global_vars=global_vars,
|
|
1270
1284
|
)
|
|
1271
1285
|
|
|
1272
1286
|
outputs_from_input_vars = {}
|
|
@@ -1301,6 +1315,7 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
1301
1315
|
upstream_block_uuids=upstream_block_uuids,
|
|
1302
1316
|
run_settings=run_settings,
|
|
1303
1317
|
data_integration_runtime_settings=data_integration_runtime_settings,
|
|
1318
|
+
execution_partition_previous=execution_partition_previous,
|
|
1304
1319
|
**kwargs,
|
|
1305
1320
|
)
|
|
1306
1321
|
|
|
@@ -1356,6 +1371,7 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
1356
1371
|
upstream_block_uuids: List[str] = None,
|
|
1357
1372
|
run_settings: Dict = None,
|
|
1358
1373
|
data_integration_runtime_settings: str = None,
|
|
1374
|
+
execution_partition_previous: str = None,
|
|
1359
1375
|
**kwargs,
|
|
1360
1376
|
) -> List:
|
|
1361
1377
|
if logging_tags is None:
|
|
@@ -1379,6 +1395,7 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
1379
1395
|
dynamic_block_index=dynamic_block_index,
|
|
1380
1396
|
dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
|
|
1381
1397
|
execution_partition=execution_partition,
|
|
1398
|
+
execution_partition_previous=execution_partition_previous,
|
|
1382
1399
|
from_notebook=from_notebook,
|
|
1383
1400
|
global_vars=global_vars,
|
|
1384
1401
|
input_vars=input_vars,
|
|
@@ -1522,24 +1539,48 @@ class Block(DataIntegrationMixin, SparkBlock):
|
|
|
1522
1539
|
def fetch_input_variables(
|
|
1523
1540
|
self,
|
|
1524
1541
|
input_args,
|
|
1525
|
-
|
|
1526
|
-
|
|
1542
|
+
block_run_outputs_cache: Dict[str, List] = None,
|
|
1543
|
+
data_integration_settings_mapping: Dict = None,
|
|
1527
1544
|
dynamic_block_index: int = None,
|
|
1528
1545
|
dynamic_upstream_block_uuids: List[str] = None,
|
|
1546
|
+
execution_partition: str = None,
|
|
1529
1547
|
from_notebook: bool = False,
|
|
1548
|
+
global_vars: Dict = None,
|
|
1530
1549
|
upstream_block_uuids: List[str] = None,
|
|
1531
|
-
data_integration_settings_mapping: Dict = None,
|
|
1532
1550
|
) -> Tuple[List, List, List]:
|
|
1551
|
+
"""
|
|
1552
|
+
Fetch input variables for the current block's execution.
|
|
1553
|
+
|
|
1554
|
+
Args:
|
|
1555
|
+
input_args: The input arguments required for the block's execution.
|
|
1556
|
+
block_run_outputs_cache (Optional[Dict[str, List]]): A dictionary mapping block run
|
|
1557
|
+
UUIDs to their outputs.
|
|
1558
|
+
data_integration_settings_mapping (Optional[Dict]): A dictionary containing data
|
|
1559
|
+
integration settings.
|
|
1560
|
+
dynamic_block_index (Optional[int]): The index of the dynamic block, if applicable.
|
|
1561
|
+
dynamic_upstream_block_uuids (Optional[List[str]]): The UUIDs of the dynamic upstream
|
|
1562
|
+
blocks.
|
|
1563
|
+
execution_partition (Optional[str]): The execution partition for the block.
|
|
1564
|
+
from_notebook (Optional[bool]): A boolean indicating whether the execution is
|
|
1565
|
+
triggered from a notebook.
|
|
1566
|
+
global_vars (Optional[Dict]): A dictionary containing global variables.
|
|
1567
|
+
upstream_block_uuids (Optional[List[str]]): List of UUIDs of upstream blocks.
|
|
1568
|
+
|
|
1569
|
+
Returns:
|
|
1570
|
+
Tuple[List, List, List]: A tuple containing the input variables, kwargs variables, and
|
|
1571
|
+
upstream block UUIDs.
|
|
1572
|
+
"""
|
|
1533
1573
|
variables = fetch_input_variables(
|
|
1534
1574
|
self.pipeline,
|
|
1535
1575
|
upstream_block_uuids or self.upstream_block_uuids,
|
|
1536
1576
|
input_args,
|
|
1537
|
-
|
|
1538
|
-
global_vars,
|
|
1539
|
-
dynamic_block_index,
|
|
1540
|
-
dynamic_upstream_block_uuids,
|
|
1541
|
-
from_notebook=from_notebook,
|
|
1577
|
+
block_run_outputs_cache=block_run_outputs_cache,
|
|
1542
1578
|
data_integration_settings_mapping=data_integration_settings_mapping,
|
|
1579
|
+
dynamic_block_index=dynamic_block_index,
|
|
1580
|
+
dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
|
|
1581
|
+
execution_partition=execution_partition,
|
|
1582
|
+
from_notebook=from_notebook,
|
|
1583
|
+
global_vars=global_vars,
|
|
1543
1584
|
)
|
|
1544
1585
|
|
|
1545
1586
|
return variables
|
|
@@ -2279,6 +2320,7 @@ df = get_variable('{self.pipeline.uuid}', '{block_uuid}', 'df')
|
|
|
2279
2320
|
global_vars: Dict = None,
|
|
2280
2321
|
logger: Logger = None,
|
|
2281
2322
|
logging_tags: Dict = None,
|
|
2323
|
+
outputs: List[Any] = None,
|
|
2282
2324
|
update_tests: bool = True,
|
|
2283
2325
|
dynamic_block_uuid: str = None,
|
|
2284
2326
|
) -> None:
|
|
@@ -2308,12 +2350,13 @@ df = get_variable('{self.pipeline.uuid}', '{block_uuid}', 'df')
|
|
|
2308
2350
|
else:
|
|
2309
2351
|
test_functions = self.test_functions
|
|
2310
2352
|
|
|
2311
|
-
outputs
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2353
|
+
if outputs is None:
|
|
2354
|
+
outputs = self.get_raw_outputs(
|
|
2355
|
+
dynamic_block_uuid or self.uuid,
|
|
2356
|
+
execution_partition=execution_partition,
|
|
2357
|
+
from_notebook=from_notebook,
|
|
2358
|
+
global_vars=global_vars,
|
|
2359
|
+
)
|
|
2317
2360
|
|
|
2318
2361
|
if logger and 'logger' not in global_vars:
|
|
2319
2362
|
global_vars['logger'] = logger
|
|
@@ -3082,8 +3125,8 @@ class ConditionalBlock(AddonBlock):
|
|
|
3082
3125
|
if parent_block is not None:
|
|
3083
3126
|
input_vars, kwargs_vars, _ = parent_block.fetch_input_variables(
|
|
3084
3127
|
None,
|
|
3085
|
-
execution_partition,
|
|
3086
|
-
global_vars,
|
|
3128
|
+
execution_partition=execution_partition,
|
|
3129
|
+
global_vars=global_vars,
|
|
3087
3130
|
dynamic_block_index=dynamic_block_index,
|
|
3088
3131
|
dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
|
|
3089
3132
|
)
|
|
@@ -3158,11 +3201,11 @@ class CallbackBlock(AddonBlock):
|
|
|
3158
3201
|
# Fetch input variables
|
|
3159
3202
|
input_vars, kwargs_vars, upstream_block_uuids = self.fetch_input_variables(
|
|
3160
3203
|
None,
|
|
3161
|
-
execution_partition,
|
|
3162
|
-
global_vars,
|
|
3163
3204
|
dynamic_block_index=dynamic_block_index,
|
|
3164
3205
|
dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
|
|
3206
|
+
execution_partition=execution_partition,
|
|
3165
3207
|
from_notebook=from_notebook,
|
|
3208
|
+
global_vars=global_vars,
|
|
3166
3209
|
upstream_block_uuids=[parent_block.uuid] if parent_block else None,
|
|
3167
3210
|
)
|
|
3168
3211
|
|
|
@@ -50,6 +50,7 @@ EXECUTION_PARTITION_FROM_NOTEBOOK = '_from_notebook'
|
|
|
50
50
|
|
|
51
51
|
OUTPUT_TYPE_RECORD = 'RECORD'
|
|
52
52
|
OUTPUT_TYPE_SCHEMA = 'SCHEMA'
|
|
53
|
+
OUTPUT_TYPE_STATE = 'STATE'
|
|
53
54
|
TYPE_OBJECT = 'object'
|
|
54
55
|
|
|
55
56
|
KEY_BOOKMARK_PROPERTIES = 'bookmark_properties'
|
|
@@ -77,6 +78,8 @@ REPLICATION_METHOD_LOG_BASED = 'LOG_BASED'
|
|
|
77
78
|
MB_1 = 1024 * 1000
|
|
78
79
|
MAX_QUERY_STRING_SIZE = 10 * MB_1
|
|
79
80
|
|
|
81
|
+
VARIABLE_BOOKMARK_VALUES_KEY = '__bookmark_values__'
|
|
82
|
+
|
|
80
83
|
|
|
81
84
|
class IngestMode(str, Enum):
|
|
82
85
|
DISK = 'disk'
|
|
@@ -453,13 +453,13 @@ class DataIntegrationMixin:
|
|
|
453
453
|
# Get the output as inputs for this block
|
|
454
454
|
input_vars_fetched, kwargs_vars, up_block_uuids = self.fetch_input_variables(
|
|
455
455
|
input_vars,
|
|
456
|
-
|
|
457
|
-
global_vars,
|
|
456
|
+
data_integration_settings_mapping=data_integration_settings_mapping,
|
|
458
457
|
dynamic_block_index=dynamic_block_index,
|
|
459
458
|
dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
|
|
459
|
+
execution_partition=execution_partition,
|
|
460
460
|
from_notebook=from_notebook,
|
|
461
|
+
global_vars=global_vars,
|
|
461
462
|
upstream_block_uuids=block_uuids_to_fetch,
|
|
462
|
-
data_integration_settings_mapping=data_integration_settings_mapping,
|
|
463
463
|
)
|
|
464
464
|
|
|
465
465
|
if block_uuids_to_fetch and is_debug():
|
|
@@ -515,13 +515,13 @@ class DataIntegrationMixin:
|
|
|
515
515
|
kwargs_vars_inner, \
|
|
516
516
|
_up_block_uuids = self.fetch_input_variables(
|
|
517
517
|
None,
|
|
518
|
-
|
|
519
|
-
global_vars,
|
|
518
|
+
data_integration_settings_mapping=data_integration_settings_mapping,
|
|
520
519
|
dynamic_block_index=dynamic_block_index,
|
|
521
520
|
dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
|
|
521
|
+
execution_partition=execution_partition,
|
|
522
522
|
from_notebook=from_notebook,
|
|
523
|
+
global_vars=global_vars,
|
|
523
524
|
upstream_block_uuids=[up_uuid],
|
|
524
|
-
data_integration_settings_mapping=data_integration_settings_mapping,
|
|
525
525
|
)
|
|
526
526
|
|
|
527
527
|
if input_vars_inner:
|