mage-ai 0.9.68__py3-none-any.whl → 0.9.69__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/resources/SeedResource.py +2 -1
- mage_ai/api/resources/SessionResource.py +13 -1
- mage_ai/authentication/permissions/constants.py +2 -0
- mage_ai/authentication/permissions/seed.py +32 -21
- mage_ai/authentication/providers/active_directory.py +4 -3
- mage_ai/authentication/providers/okta.py +22 -83
- mage_ai/data_preparation/executors/streaming_pipeline_executor.py +77 -7
- mage_ai/data_preparation/models/block/__init__.py +7 -3
- mage_ai/data_preparation/models/block/data_integration/mixins.py +16 -5
- mage_ai/data_preparation/models/block/dynamic/child.py +3 -0
- mage_ai/data_preparation/models/block/dynamic/variables.py +2 -2
- mage_ai/data_preparation/models/block/extension/utils.py +1 -0
- mage_ai/data_preparation/models/block/integration/__init__.py +1 -1
- mage_ai/data_preparation/models/block/sql/__init__.py +1 -1
- mage_ai/data_preparation/models/pipeline.py +22 -6
- mage_ai/data_preparation/models/utils.py +6 -0
- mage_ai/data_preparation/models/variable.py +18 -4
- mage_ai/data_preparation/repo_manager.py +3 -2
- mage_ai/data_preparation/shared/utils.py +1 -1
- mage_ai/data_preparation/templates/data_exporters/mysql.py +2 -2
- mage_ai/data_preparation/templates/data_exporters/oracledb.py +27 -0
- mage_ai/data_preparation/templates/repo/metadata.yaml +1 -0
- mage_ai/io/bigquery.py +131 -58
- mage_ai/io/mysql.py +38 -6
- mage_ai/io/snowflake.py +152 -29
- mage_ai/orchestration/db/models/oauth.py +4 -4
- mage_ai/orchestration/db/models/schedules.py +9 -2
- mage_ai/orchestration/job_manager.py +6 -0
- mage_ai/orchestration/pipeline_scheduler_original.py +16 -6
- mage_ai/orchestration/queue/celery_queue.py +8 -1
- mage_ai/orchestration/queue/process_queue.py +67 -4
- mage_ai/orchestration/queue/queue.py +8 -0
- mage_ai/server/constants.py +1 -1
- mage_ai/server/frontend_dist/404.html +2 -2
- mage_ai/server/frontend_dist/_next/static/{i8pymuJDTVHdWjUP1QSh1 → _krrrgup_C-dPOpX36S8I}/_buildManifest.js +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/1557-df144fbd8b2208c3.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/2717-d9200be634dd6766.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/3548-fa0792ddb88f4646.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/5699-6d708c6b2153ea08.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/7361-8a23dd8360593e7a.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-d9c89527266296f7.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/index-4e12783b064c1cfe.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/{pipeline-runs-a66b4c7641ae03eb.js → pipeline-runs-3edc6270c5b0e962.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-e1dd1ed71d26c10d.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-59aca25a5b1d3998.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-cb88fd075a357fcf.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-1bdfda8edc9cf4a8.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-3591d035bb3bb2b8.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-503049734a8b082f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/settings-c2e9ef989c8bfa73.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-5b26eeda8aed8a7b.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{sync-data-79a4cf66a623e667.js → sync-data-8b793b3b696a2cd3.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{users-86814e581acaf5db.js → users-a4db8710f703c729.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-09414a8b66fb6f06.js +1 -0
- mage_ai/server/frontend_dist/block-layout.html +2 -2
- mage_ai/server/frontend_dist/compute.html +2 -2
- mage_ai/server/frontend_dist/files.html +2 -2
- mage_ai/server/frontend_dist/global-data-products/[...slug].html +2 -2
- mage_ai/server/frontend_dist/global-data-products.html +2 -2
- mage_ai/server/frontend_dist/global-hooks/[...slug].html +2 -2
- mage_ai/server/frontend_dist/global-hooks.html +2 -2
- mage_ai/server/frontend_dist/index.html +2 -2
- mage_ai/server/frontend_dist/manage/files.html +2 -2
- mage_ai/server/frontend_dist/manage/settings.html +2 -2
- mage_ai/server/frontend_dist/manage/users/[user].html +2 -2
- mage_ai/server/frontend_dist/manage/users/new.html +2 -2
- mage_ai/server/frontend_dist/manage/users.html +2 -2
- mage_ai/server/frontend_dist/manage.html +2 -2
- mage_ai/server/frontend_dist/oauth.html +2 -2
- mage_ai/server/frontend_dist/overview.html +2 -2
- mage_ai/server/frontend_dist/pipeline-runs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/dashboard.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
- mage_ai/server/frontend_dist/pipelines.html +2 -2
- mage_ai/server/frontend_dist/platform/global-hooks/[...slug].html +2 -2
- mage_ai/server/frontend_dist/platform/global-hooks.html +2 -2
- mage_ai/server/frontend_dist/settings/account/profile.html +2 -2
- mage_ai/server/frontend_dist/settings/platform/preferences.html +2 -2
- mage_ai/server/frontend_dist/settings/platform/settings.html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/permissions/[...slug].html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/permissions.html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/preferences.html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/roles/[...slug].html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/roles.html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/sync-data.html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/users/[...slug].html +2 -2
- mage_ai/server/frontend_dist/settings/workspace/users.html +2 -2
- mage_ai/server/frontend_dist/settings.html +2 -2
- mage_ai/server/frontend_dist/sign-in.html +2 -2
- mage_ai/server/frontend_dist/templates/[...slug].html +2 -2
- mage_ai/server/frontend_dist/templates.html +2 -2
- mage_ai/server/frontend_dist/terminal.html +2 -2
- mage_ai/server/frontend_dist/test.html +2 -2
- mage_ai/server/frontend_dist/triggers.html +2 -2
- mage_ai/server/frontend_dist/version-control.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/404.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/_next/static/{CKCvjsYCf2imD2X8zAOBf → KLL5mirre9d7_ZeEpaw3s}/_buildManifest.js +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1557-df144fbd8b2208c3.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-d9200be634dd6766.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-fa0792ddb88f4646.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5699-6d708c6b2153ea08.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7361-8a23dd8360593e7a.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-d9c89527266296f7.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/index-4e12783b064c1cfe.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{pipeline-runs-a66b4c7641ae03eb.js → pipeline-runs-3edc6270c5b0e962.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-e1dd1ed71d26c10d.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-59aca25a5b1d3998.js +1 -0
- mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-cb88fd075a357fcf.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-1bdfda8edc9cf4a8.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-3591d035bb3bb2b8.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-503049734a8b082f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-c2e9ef989c8bfa73.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-5b26eeda8aed8a7b.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{sync-data-79a4cf66a623e667.js → sync-data-8b793b3b696a2cd3.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{users-86814e581acaf5db.js → users-a4db8710f703c729.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-09414a8b66fb6f06.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 +2 -2
- mage_ai/server/frontend_dist_base_path_template/files.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/global-data-products/[...slug].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/global-data-products.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/global-hooks/[...slug].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/global-hooks.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/index.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/manage/files.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/manage/settings.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/manage/users/[user].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/manage/users/new.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/manage/users.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/manage.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/oauth.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/overview.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipeline-runs.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills/[...slug].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/dashboard.html +2 -2
- 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 +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runs.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs/[run].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/settings.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/syncs.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers/[...slug].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/pipelines.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/platform/global-hooks/[...slug].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/platform/global-hooks.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/account/profile.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/platform/preferences.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/platform/settings.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions/[...slug].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/preferences.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles/[...slug].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/sync-data.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/users/[...slug].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings/workspace/users.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/settings.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/sign-in.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/templates/[...slug].html +2 -2
- mage_ai/server/frontend_dist_base_path_template/templates.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/terminal.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/test.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/triggers.html +2 -2
- mage_ai/server/frontend_dist_base_path_template/version-control.html +2 -2
- mage_ai/server/scheduler_manager.py +7 -0
- mage_ai/server/server.py +12 -5
- mage_ai/server/websocket_server.py +1 -0
- mage_ai/settings/keys/auth.py +2 -0
- mage_ai/settings/server.py +1 -1
- mage_ai/streaming/sources/influxdb.py +2 -0
- mage_ai/streaming/sources/kafka.py +1 -1
- mage_ai/tests/api/endpoints/mixins.py +10 -9
- mage_ai/tests/api/endpoints/test_seeds.py +24 -0
- mage_ai/tests/api/operations/test_sessions.py +53 -2
- mage_ai/tests/authentication/providers/test_okta.py +43 -0
- mage_ai/tests/orchestration/db/models/test_oauth.py +3 -3
- mage_ai/tests/orchestration/queue/test_process_queue.py +1 -0
- mage_ai/tests/server/test_server.py +8 -4
- {mage_ai-0.9.68.dist-info → mage_ai-0.9.69.dist-info}/METADATA +4 -4
- {mage_ai-0.9.68.dist-info → mage_ai-0.9.69.dist-info}/RECORD +203 -200
- mage_ai/server/frontend_dist/_next/static/chunks/1557-01f0843dc6ac4971.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/2717-b5f9575799b594d5.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3548-961ff79ca70038c7.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5699-6efc749f2f8ddd20.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/7361-18d9d8be96e1ce97.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-08790743315de36a.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/index-13760bb72d823b69.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-bd0aff5a5ed8888c.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-d1ee961387c58b7f.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-ceb06e1616ee9610.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-8ff16ef9566e911a.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/settings-74d76300942dcee8.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-d7a8bc51bb7a1082.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-f59d34429fe022ee.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1557-01f0843dc6ac4971.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-b5f9575799b594d5.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-961ff79ca70038c7.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5699-6efc749f2f8ddd20.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7361-18d9d8be96e1ce97.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-08790743315de36a.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/index-13760bb72d823b69.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-bd0aff5a5ed8888c.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-d1ee961387c58b7f.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-ceb06e1616ee9610.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-8ff16ef9566e911a.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-74d76300942dcee8.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-d7a8bc51bb7a1082.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-f59d34429fe022ee.js +0 -1
- /mage_ai/server/frontend_dist/_next/static/{i8pymuJDTVHdWjUP1QSh1 → _krrrgup_C-dPOpX36S8I}/_ssgManifest.js +0 -0
- /mage_ai/server/frontend_dist_base_path_template/_next/static/{CKCvjsYCf2imD2X8zAOBf → KLL5mirre9d7_ZeEpaw3s}/_ssgManifest.js +0 -0
- {mage_ai-0.9.68.dist-info → mage_ai-0.9.69.dist-info}/LICENSE +0 -0
- {mage_ai-0.9.68.dist-info → mage_ai-0.9.69.dist-info}/WHEEL +0 -0
- {mage_ai-0.9.68.dist-info → mage_ai-0.9.69.dist-info}/entry_points.txt +0 -0
- {mage_ai-0.9.68.dist-info → mage_ai-0.9.69.dist-info}/top_level.txt +0 -0
mage_ai/io/snowflake.py
CHANGED
|
@@ -11,6 +11,7 @@ from mage_ai.data_preparation.models.block.sql.utils.shared import (
|
|
|
11
11
|
)
|
|
12
12
|
from mage_ai.io.base import QUERY_ROW_LIMIT, BaseSQLConnection, ExportWritePolicy
|
|
13
13
|
from mage_ai.io.config import BaseConfigLoader, ConfigKey
|
|
14
|
+
from mage_ai.io.constants import UNIQUE_CONFLICT_METHOD_UPDATE
|
|
14
15
|
from mage_ai.shared.hash import merge_dict
|
|
15
16
|
|
|
16
17
|
DEFAULT_LOGIN_TIMEOUT = 20
|
|
@@ -201,6 +202,8 @@ class Snowflake(BaseSQLConnection):
|
|
|
201
202
|
schema: str = None,
|
|
202
203
|
if_exists: str = 'append',
|
|
203
204
|
query_string: Union[str, None] = None,
|
|
205
|
+
unique_conflict_method: str = None,
|
|
206
|
+
unique_constraints: List[str] = None,
|
|
204
207
|
verbose: bool = True,
|
|
205
208
|
**kwargs,
|
|
206
209
|
) -> None:
|
|
@@ -265,37 +268,28 @@ class Snowflake(BaseSQLConnection):
|
|
|
265
268
|
cur.execute(f'DROP TABLE "{schema}"."{table_name}"', timeout=self.timeout)
|
|
266
269
|
should_create_table = True
|
|
267
270
|
|
|
268
|
-
if
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
if should_create_table:
|
|
273
|
-
cur.execute(f"""
|
|
274
|
-
CREATE TABLE IF NOT EXISTS "{database}"."{schema}"."{table_name}" AS
|
|
275
|
-
{query_string}
|
|
276
|
-
""", timeout=self.timeout)
|
|
277
|
-
else:
|
|
278
|
-
cur.execute(f"""
|
|
279
|
-
INSERT INTO "{database}"."{schema}"."{table_name}"
|
|
280
|
-
{query_string}
|
|
281
|
-
""", timeout=self.timeout)
|
|
282
|
-
|
|
283
|
-
else:
|
|
284
|
-
write_kwargs = merge_dict(
|
|
285
|
-
dict(
|
|
286
|
-
auto_create_table=should_create_table,
|
|
287
|
-
database=database,
|
|
288
|
-
schema=schema,
|
|
289
|
-
# This param makes sure datetime column is written correctly
|
|
290
|
-
use_logical_type=True,
|
|
291
|
-
),
|
|
292
|
-
kwargs or dict(),
|
|
293
|
-
)
|
|
294
|
-
write_pandas(
|
|
295
|
-
self.conn,
|
|
271
|
+
if unique_constraints and unique_conflict_method and df is not None:
|
|
272
|
+
self.__upsert_df_into_table(
|
|
273
|
+
table_name,
|
|
296
274
|
df,
|
|
275
|
+
cur,
|
|
276
|
+
database,
|
|
277
|
+
schema,
|
|
278
|
+
should_create_table=should_create_table,
|
|
279
|
+
unique_conflict_method=unique_conflict_method,
|
|
280
|
+
unique_constraints=unique_constraints,
|
|
281
|
+
**kwargs,
|
|
282
|
+
)
|
|
283
|
+
else:
|
|
284
|
+
self.__write_table(
|
|
297
285
|
table_name,
|
|
298
|
-
|
|
286
|
+
df,
|
|
287
|
+
cur,
|
|
288
|
+
database,
|
|
289
|
+
schema,
|
|
290
|
+
should_create_table=should_create_table,
|
|
291
|
+
query_string=query_string,
|
|
292
|
+
**kwargs,
|
|
299
293
|
)
|
|
300
294
|
|
|
301
295
|
if verbose:
|
|
@@ -306,6 +300,135 @@ INSERT INTO "{database}"."{schema}"."{table_name}"
|
|
|
306
300
|
else:
|
|
307
301
|
__process()
|
|
308
302
|
|
|
303
|
+
def __upsert_df_into_table(
|
|
304
|
+
self,
|
|
305
|
+
table_name: str,
|
|
306
|
+
df: DataFrame,
|
|
307
|
+
cursor,
|
|
308
|
+
database: str,
|
|
309
|
+
schema: str,
|
|
310
|
+
should_create_table: bool = False,
|
|
311
|
+
unique_conflict_method: str = None,
|
|
312
|
+
unique_constraints: List[str] = None,
|
|
313
|
+
allow_reserved_words: bool = True,
|
|
314
|
+
auto_clean_name: bool = True,
|
|
315
|
+
case_sensitive: bool = True,
|
|
316
|
+
**kwargs
|
|
317
|
+
):
|
|
318
|
+
write_kwargs = merge_dict(
|
|
319
|
+
dict(
|
|
320
|
+
auto_create_table=True,
|
|
321
|
+
database=database,
|
|
322
|
+
schema=schema,
|
|
323
|
+
# This param makes sure datetime column is written correctly
|
|
324
|
+
use_logical_type=True,
|
|
325
|
+
),
|
|
326
|
+
kwargs or dict(),
|
|
327
|
+
)
|
|
328
|
+
# should_create_table is True when the table does not exist, so just create the
|
|
329
|
+
# table as normal.
|
|
330
|
+
if should_create_table:
|
|
331
|
+
write_pandas(
|
|
332
|
+
self.conn,
|
|
333
|
+
df,
|
|
334
|
+
table_name,
|
|
335
|
+
**write_kwargs,
|
|
336
|
+
)
|
|
337
|
+
else:
|
|
338
|
+
temp_table_name = f'temp_{table_name}'
|
|
339
|
+
write_pandas(
|
|
340
|
+
self.conn,
|
|
341
|
+
df,
|
|
342
|
+
temp_table_name,
|
|
343
|
+
table_type='temp',
|
|
344
|
+
**write_kwargs,
|
|
345
|
+
)
|
|
346
|
+
|
|
347
|
+
cleaned_unique_constraints = []
|
|
348
|
+
for col in unique_constraints:
|
|
349
|
+
cleaned_col = self._clean_column_name(
|
|
350
|
+
col,
|
|
351
|
+
allow_reserved_words=allow_reserved_words,
|
|
352
|
+
auto_clean_name=auto_clean_name,
|
|
353
|
+
case_sensitive=case_sensitive,
|
|
354
|
+
)
|
|
355
|
+
cleaned_unique_constraints.append(f'"{cleaned_col}"')
|
|
356
|
+
|
|
357
|
+
cleaned_columns = []
|
|
358
|
+
for col in df.columns:
|
|
359
|
+
cleaned_col = self._clean_column_name(
|
|
360
|
+
col,
|
|
361
|
+
allow_reserved_words=allow_reserved_words,
|
|
362
|
+
auto_clean_name=auto_clean_name,
|
|
363
|
+
case_sensitive=case_sensitive,
|
|
364
|
+
)
|
|
365
|
+
cleaned_columns.append(f'"{cleaned_col}"')
|
|
366
|
+
|
|
367
|
+
merge_commands = [
|
|
368
|
+
f'MERGE INTO "{database}"."{schema}"."{table_name}" AS a',
|
|
369
|
+
f'USING (SELECT * FROM "{database}"."{schema}"."{temp_table_name}") AS b',
|
|
370
|
+
f"ON {' AND '.join([f'a.{col} = b.{col}' for col in cleaned_unique_constraints])}",
|
|
371
|
+
]
|
|
372
|
+
|
|
373
|
+
if unique_conflict_method == UNIQUE_CONFLICT_METHOD_UPDATE:
|
|
374
|
+
set_command = ', '.join(
|
|
375
|
+
[f'a.{col} = b.{col}' for col in cleaned_columns],
|
|
376
|
+
)
|
|
377
|
+
merge_commands.append(f'WHEN MATCHED THEN UPDATE SET {set_command}')
|
|
378
|
+
|
|
379
|
+
insert_columns = ', '.join(cleaned_columns)
|
|
380
|
+
merge_values = f"({', '.join([f'b.{col}' for col in cleaned_columns])})"
|
|
381
|
+
merge_commands.append(
|
|
382
|
+
f"WHEN NOT MATCHED THEN INSERT ({insert_columns}) VALUES {merge_values}",
|
|
383
|
+
)
|
|
384
|
+
merge_command = '\n'.join(merge_commands)
|
|
385
|
+
|
|
386
|
+
cursor.execute(merge_command, timeout=self.timeout)
|
|
387
|
+
|
|
388
|
+
def __write_table(
|
|
389
|
+
self,
|
|
390
|
+
table_name: str,
|
|
391
|
+
df: DataFrame,
|
|
392
|
+
cursor,
|
|
393
|
+
database: str,
|
|
394
|
+
schema: str,
|
|
395
|
+
should_create_table: bool = False,
|
|
396
|
+
query_string: str = None,
|
|
397
|
+
**kwargs
|
|
398
|
+
):
|
|
399
|
+
if query_string:
|
|
400
|
+
cursor.execute(f'USE DATABASE {database}', timeout=self.timeout)
|
|
401
|
+
cursor.execute(f'USE SCHEMA {schema}', timeout=self.timeout)
|
|
402
|
+
|
|
403
|
+
if should_create_table:
|
|
404
|
+
cursor.execute(f"""
|
|
405
|
+
CREATE TABLE IF NOT EXISTS "{database}"."{schema}"."{table_name}" AS
|
|
406
|
+
{query_string}
|
|
407
|
+
""", timeout=self.timeout)
|
|
408
|
+
else:
|
|
409
|
+
cursor.execute(f"""
|
|
410
|
+
INSERT INTO "{database}"."{schema}"."{table_name}"
|
|
411
|
+
{query_string}
|
|
412
|
+
""", timeout=self.timeout)
|
|
413
|
+
|
|
414
|
+
else:
|
|
415
|
+
write_kwargs = merge_dict(
|
|
416
|
+
dict(
|
|
417
|
+
auto_create_table=should_create_table,
|
|
418
|
+
database=database,
|
|
419
|
+
schema=schema,
|
|
420
|
+
# This param makes sure datetime column is written correctly
|
|
421
|
+
use_logical_type=True,
|
|
422
|
+
),
|
|
423
|
+
kwargs or dict(),
|
|
424
|
+
)
|
|
425
|
+
write_pandas(
|
|
426
|
+
self.conn,
|
|
427
|
+
df,
|
|
428
|
+
table_name,
|
|
429
|
+
**write_kwargs,
|
|
430
|
+
)
|
|
431
|
+
|
|
309
432
|
@classmethod
|
|
310
433
|
def with_config(
|
|
311
434
|
cls,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import enum
|
|
2
2
|
import re
|
|
3
3
|
from datetime import datetime
|
|
4
|
-
from typing import Dict, List, Union
|
|
4
|
+
from typing import Callable, Dict, List, Union
|
|
5
5
|
|
|
6
6
|
from sqlalchemy import (
|
|
7
7
|
JSON,
|
|
@@ -327,7 +327,7 @@ class Role(BaseModel):
|
|
|
327
327
|
self,
|
|
328
328
|
entity: Entity = None,
|
|
329
329
|
entity_id: str = None,
|
|
330
|
-
|
|
330
|
+
name_func: Callable[[str], str] = None,
|
|
331
331
|
) -> None:
|
|
332
332
|
"""
|
|
333
333
|
Create default roles with associated permissions for a given entity and entity_id.
|
|
@@ -349,8 +349,8 @@ class Role(BaseModel):
|
|
|
349
349
|
}
|
|
350
350
|
for name, access in mapping.items():
|
|
351
351
|
role_name = name
|
|
352
|
-
if
|
|
353
|
-
role_name =
|
|
352
|
+
if name_func is not None:
|
|
353
|
+
role_name = name_func(name)
|
|
354
354
|
role = self.query.filter(self.name == role_name).first()
|
|
355
355
|
if not role:
|
|
356
356
|
self.create(
|
|
@@ -48,6 +48,7 @@ from mage_ai.data_preparation.models.constants import (
|
|
|
48
48
|
PipelineType,
|
|
49
49
|
)
|
|
50
50
|
from mage_ai.data_preparation.models.pipeline import Pipeline
|
|
51
|
+
from mage_ai.data_preparation.models.project import Project
|
|
51
52
|
from mage_ai.data_preparation.models.triggers import (
|
|
52
53
|
ScheduleInterval,
|
|
53
54
|
ScheduleStatus,
|
|
@@ -934,7 +935,10 @@ class PipelineRun(PipelineRunProjectPlatformMixin, BaseModel):
|
|
|
934
935
|
|
|
935
936
|
@property
|
|
936
937
|
def pipeline_tags(self):
|
|
937
|
-
|
|
938
|
+
try:
|
|
939
|
+
pipeline_config = Pipeline.get_config(self.pipeline_uuid)
|
|
940
|
+
except Exception:
|
|
941
|
+
pipeline_config = dict()
|
|
938
942
|
|
|
939
943
|
return pipeline_config.get('tags') if pipeline_config is not None else []
|
|
940
944
|
|
|
@@ -989,6 +993,9 @@ class PipelineRun(PipelineRunProjectPlatformMixin, BaseModel):
|
|
|
989
993
|
block_runs_all = []
|
|
990
994
|
|
|
991
995
|
data_integration_block_uuids_mapping = {}
|
|
996
|
+
|
|
997
|
+
pipeline_project = Project(pipeline.repo_config)
|
|
998
|
+
|
|
992
999
|
for block_run in self.block_runs:
|
|
993
1000
|
block_runs_all.append(block_run)
|
|
994
1001
|
|
|
@@ -1021,7 +1028,7 @@ class PipelineRun(PipelineRunProjectPlatformMixin, BaseModel):
|
|
|
1021
1028
|
"original": 1,
|
|
1022
1029
|
}
|
|
1023
1030
|
"""
|
|
1024
|
-
if metrics and block and block.is_data_integration():
|
|
1031
|
+
if metrics and block and block.is_data_integration(pipeline_project=pipeline_project):
|
|
1025
1032
|
original_block_uuid = metrics.get('original_block_uuid')
|
|
1026
1033
|
|
|
1027
1034
|
if original_block_uuid and metrics.get('child'):
|
|
@@ -86,6 +86,12 @@ class JobManager:
|
|
|
86
86
|
job_id = self.__job_id(JobType.INTEGRATION_STREAM, id)
|
|
87
87
|
return self.queue.kill_job(job_id)
|
|
88
88
|
|
|
89
|
+
def start(self):
|
|
90
|
+
self.queue.start()
|
|
91
|
+
|
|
92
|
+
def stop(self):
|
|
93
|
+
self.queue.stop()
|
|
94
|
+
|
|
89
95
|
def __job_id(self, job_type: JobType, uid: Union[str, int]):
|
|
90
96
|
return f'{job_type}_{uid}'
|
|
91
97
|
|
|
@@ -830,6 +830,8 @@ class PipelineScheduler:
|
|
|
830
830
|
Returns:
|
|
831
831
|
List[BlockRun]: A list of crashed block runs.
|
|
832
832
|
"""
|
|
833
|
+
for b in self.pipeline_run.block_runs:
|
|
834
|
+
b.refresh()
|
|
833
835
|
running_or_queued_block_runs = [b for b in self.pipeline_run.block_runs if b.status in [
|
|
834
836
|
BlockRun.BlockRunStatus.RUNNING,
|
|
835
837
|
BlockRun.BlockRunStatus.QUEUED,
|
|
@@ -1679,7 +1681,11 @@ def gen_pipeline_with_schedules_single_project(
|
|
|
1679
1681
|
# Iterate through pipeline schedules by pipeline to handle pipeline run limits for
|
|
1680
1682
|
# each pipeline.
|
|
1681
1683
|
for pipeline_uuid, active_schedules in pipeline_schedules_by_pipeline.items():
|
|
1682
|
-
|
|
1684
|
+
try:
|
|
1685
|
+
pipeline = Pipeline.get(pipeline_uuid)
|
|
1686
|
+
except Exception as e:
|
|
1687
|
+
print(f'Error fetching pipeline {pipeline_uuid}: {e}')
|
|
1688
|
+
continue
|
|
1683
1689
|
yield pipeline_uuid, pipeline, active_schedules
|
|
1684
1690
|
|
|
1685
1691
|
|
|
@@ -1740,11 +1746,15 @@ def gen_pipeline_with_schedules_project_platform(
|
|
|
1740
1746
|
for pair in pipeline_schedules_by_pipeline_by_repo_path.items():
|
|
1741
1747
|
repo_path, pipeline_schedules_by_pipeline = pair
|
|
1742
1748
|
for pipeline_uuid, active_schedules in pipeline_schedules_by_pipeline.items():
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1749
|
+
try:
|
|
1750
|
+
pipeline = get_pipeline_from_platform(
|
|
1751
|
+
pipeline_uuid,
|
|
1752
|
+
repo_path=repo_path,
|
|
1753
|
+
mapping=pipeline_schedule_repo_paths_to_repo_path_mapping,
|
|
1754
|
+
)
|
|
1755
|
+
except Exception as e:
|
|
1756
|
+
print(f'Error fetching pipeline {pipeline_uuid}: {e}')
|
|
1757
|
+
continue
|
|
1748
1758
|
yield pipeline_uuid, pipeline, active_schedules
|
|
1749
1759
|
|
|
1750
1760
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
from typing import Callable
|
|
2
|
+
|
|
1
3
|
from mage_ai.orchestration.queue.config import QueueConfig
|
|
2
4
|
from mage_ai.orchestration.queue.queue import Queue
|
|
3
|
-
from typing import Callable
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
class CeleryQueue(Queue):
|
|
@@ -27,3 +28,9 @@ class CeleryQueue(Queue):
|
|
|
27
28
|
|
|
28
29
|
def kill_job(self, job_id: str):
|
|
29
30
|
pass
|
|
31
|
+
|
|
32
|
+
def start(self):
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
def stop(self):
|
|
36
|
+
pass
|
|
@@ -36,6 +36,11 @@ class JobStatus(str, Enum):
|
|
|
36
36
|
CANCELLED = 'cancelled'
|
|
37
37
|
|
|
38
38
|
|
|
39
|
+
class QueueStatus(str, Enum):
|
|
40
|
+
ACTIVE = 'active'
|
|
41
|
+
INACTIVE = 'inactive'
|
|
42
|
+
|
|
43
|
+
|
|
39
44
|
class ProcessQueue(Queue):
|
|
40
45
|
def __init__(self, queue_config: QueueConfig):
|
|
41
46
|
"""
|
|
@@ -53,6 +58,7 @@ class ProcessQueue(Queue):
|
|
|
53
58
|
jobs.
|
|
54
59
|
|
|
55
60
|
"""
|
|
61
|
+
self.status = QueueStatus.INACTIVE
|
|
56
62
|
self.queue_config = queue_config
|
|
57
63
|
self.process_queue_config = self.queue_config.process_queue_config
|
|
58
64
|
self.queue = mp.Queue()
|
|
@@ -76,12 +82,16 @@ class ProcessQueue(Queue):
|
|
|
76
82
|
|
|
77
83
|
def clean_up_jobs(self):
|
|
78
84
|
"""
|
|
79
|
-
Cleans up completed jobs from the job dictionary.
|
|
85
|
+
1. Cleans up completed jobs from the job dictionary.
|
|
86
|
+
2. Check whether there're jobs need to be killed.
|
|
80
87
|
"""
|
|
81
88
|
job_ids = self.job_dict.keys()
|
|
82
89
|
for job_id in job_ids:
|
|
83
|
-
if job_id in self.job_dict
|
|
84
|
-
|
|
90
|
+
if job_id in self.job_dict:
|
|
91
|
+
if not self.has_job(job_id):
|
|
92
|
+
del self.job_dict[job_id]
|
|
93
|
+
elif self.__should_kill_job(job_id):
|
|
94
|
+
self.kill_job(job_id)
|
|
85
95
|
|
|
86
96
|
def enqueue(self, job_id: str, target: Callable, *args, **kwargs):
|
|
87
97
|
"""
|
|
@@ -94,6 +104,9 @@ class ProcessQueue(Queue):
|
|
|
94
104
|
**kwargs: Keyword arguments for the target function.
|
|
95
105
|
|
|
96
106
|
"""
|
|
107
|
+
if self.status != QueueStatus.ACTIVE:
|
|
108
|
+
self._print('Cannot enqueue a job to an inactive queue.')
|
|
109
|
+
return
|
|
97
110
|
if self.has_job(job_id):
|
|
98
111
|
self._print(f'Job {job_id} exists. Skip enqueue.')
|
|
99
112
|
return
|
|
@@ -155,6 +168,7 @@ class ProcessQueue(Queue):
|
|
|
155
168
|
print(f'Kill job {job_id}, job_dict {self.job_dict}')
|
|
156
169
|
job = self.job_dict.get(job_id)
|
|
157
170
|
if not job:
|
|
171
|
+
self.__set_kill_job(job_id)
|
|
158
172
|
return
|
|
159
173
|
if isinstance(job, int):
|
|
160
174
|
if job == os.getpid():
|
|
@@ -165,6 +179,7 @@ class ProcessQueue(Queue):
|
|
|
165
179
|
except Exception as err:
|
|
166
180
|
print(err)
|
|
167
181
|
self.job_dict[job_id] = JobStatus.CANCELLED
|
|
182
|
+
self.__unset_kill_job(job_id)
|
|
168
183
|
|
|
169
184
|
def start_worker_pool(self):
|
|
170
185
|
"""
|
|
@@ -182,6 +197,28 @@ class ProcessQueue(Queue):
|
|
|
182
197
|
)
|
|
183
198
|
self.worker_pool_proc.start()
|
|
184
199
|
|
|
200
|
+
def start(self):
|
|
201
|
+
self.status = QueueStatus.ACTIVE
|
|
202
|
+
|
|
203
|
+
def stop(self):
|
|
204
|
+
"""
|
|
205
|
+
1. Stop enqueueing new jobs
|
|
206
|
+
2. Clear the queue
|
|
207
|
+
3. Kill all the running jobs
|
|
208
|
+
"""
|
|
209
|
+
self.status = QueueStatus.INACTIVE
|
|
210
|
+
while not self.queue.empty():
|
|
211
|
+
try:
|
|
212
|
+
self.queue.get_nowait()
|
|
213
|
+
except self.queue.Empty:
|
|
214
|
+
break
|
|
215
|
+
job_ids = self.job_dict.keys()
|
|
216
|
+
for job_id in job_ids:
|
|
217
|
+
if job_id in self.job_dict:
|
|
218
|
+
if isinstance(self.job_dict.get(job_id), int):
|
|
219
|
+
self.kill_job(job_id)
|
|
220
|
+
del self.job_dict[job_id]
|
|
221
|
+
|
|
185
222
|
def is_worker_pool_alive(self) -> bool:
|
|
186
223
|
"""
|
|
187
224
|
Checks if the worker pool process is alive.
|
|
@@ -197,6 +234,31 @@ class ProcessQueue(Queue):
|
|
|
197
234
|
def __is_process_alive(self, pid: int) -> bool:
|
|
198
235
|
return psutil.pid_exists(pid)
|
|
199
236
|
|
|
237
|
+
def __redis_key_kill_job(self, job_id):
|
|
238
|
+
return f'kill_job_{job_id}'
|
|
239
|
+
|
|
240
|
+
def __set_kill_job(self, job_id):
|
|
241
|
+
if not self.redis_client:
|
|
242
|
+
return
|
|
243
|
+
return self.redis_client.set(
|
|
244
|
+
self.__redis_key_kill_job(job_id),
|
|
245
|
+
'1',
|
|
246
|
+
ex=LIVENESS_TIMEOUT_SECONDS,
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
def __unset_kill_job(self, job_id):
|
|
250
|
+
if not self.redis_client:
|
|
251
|
+
return
|
|
252
|
+
key = self.__redis_key_kill_job(job_id)
|
|
253
|
+
if self.redis_client.get(key):
|
|
254
|
+
self.redis_client.delete(key)
|
|
255
|
+
|
|
256
|
+
def __should_kill_job(self, job_id):
|
|
257
|
+
if not self.redis_client:
|
|
258
|
+
return False
|
|
259
|
+
value = self.redis_client.get(self.__redis_key_kill_job(job_id))
|
|
260
|
+
return value is not None
|
|
261
|
+
|
|
200
262
|
|
|
201
263
|
class Worker(mp.Process):
|
|
202
264
|
def __init__(
|
|
@@ -275,10 +337,11 @@ def poll_job_and_execute(
|
|
|
275
337
|
job_dict: The shared job dictionary.
|
|
276
338
|
|
|
277
339
|
"""
|
|
340
|
+
pid = os.getpid()
|
|
278
341
|
workers = []
|
|
279
342
|
while True:
|
|
280
343
|
workers = [w for w in workers if w.is_alive()]
|
|
281
|
-
print(f'Worker pool size: {len(workers)}')
|
|
344
|
+
print(f'[Process {pid}] Worker pool size: {len(workers)}')
|
|
282
345
|
if not workers and queue.empty():
|
|
283
346
|
break
|
|
284
347
|
while not queue.empty():
|
mage_ai/server/constants.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><title>Mage</title><meta content="width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=0" name="viewport"/><meta name="next-head-count" content="3"/><link href="/favicon.ico" rel="icon"/><link rel="preload" href="/_next/static/css/b59541b123fd7191.css" as="style"/><link rel="stylesheet" href="/_next/static/css/b59541b123fd7191.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-d079359c241db804.js" defer=""></script><script src="/_next/static/chunks/framework-22b71764bf44ede4.js" defer=""></script><script src="/_next/static/chunks/main-77fe248a6fbd12d8.js" defer=""></script><script src="/_next/static/chunks/pages/_app-
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><title>Mage</title><meta content="width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=0" name="viewport"/><meta name="next-head-count" content="3"/><link href="/favicon.ico" rel="icon"/><link rel="preload" href="/_next/static/css/b59541b123fd7191.css" as="style"/><link rel="stylesheet" href="/_next/static/css/b59541b123fd7191.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-d079359c241db804.js" defer=""></script><script src="/_next/static/chunks/framework-22b71764bf44ede4.js" defer=""></script><script src="/_next/static/chunks/main-77fe248a6fbd12d8.js" defer=""></script><script src="/_next/static/chunks/pages/_app-d9c89527266296f7.js" defer=""></script><script src="/_next/static/chunks/pages/404-8ecd93274c427b76.js" defer=""></script><script src="/_next/static/_krrrgup_C-dPOpX36S8I/_buildManifest.js" defer=""></script><script src="/_next/static/_krrrgup_C-dPOpX36S8I/_ssgManifest.js" defer=""></script><style data-styled="" data-styled-version="5.3.6">html{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-overflow-style:scrollbar;}/*!sc*/
|
|
2
2
|
*,*::before,*::after{-webkit-box-sizing:inherit;box-sizing:inherit;}/*!sc*/
|
|
3
3
|
data-styled.g4[id="sc-global-czSCUT1"]{content:"sc-global-czSCUT1,"}/*!sc*/
|
|
4
4
|
.cAAVhx{margin-top:16px;margin-bottom:16px;}/*!sc*/
|
|
@@ -17,4 +17,4 @@ data-styled.g79[id="Headline__H1Style-sc-12jzt2e-2"]{content:"hkcwCQ,"}/*!sc*/
|
|
|
17
17
|
.kOVcuR .Toastify__toast--success{background:#00A81A !important;color:#FFFFFF !important;}/*!sc*/
|
|
18
18
|
.kOVcuR .Toastify__toast--warning{background:#DD9900 !important;color:#FFFFFF !important;}/*!sc*/
|
|
19
19
|
data-styled.g275[id="ToastWrapper-sc-1a33ph1-0"]{content:"kOVcuR,"}/*!sc*/
|
|
20
|
-
</style></head><body><div id="__next"><div class="" style="position:fixed;top:0;left:0;height:2px;background:transparent;z-index:99999999999;width:100%"><div class="" style="height:100%;background:#FF144D;transition:all 500ms ease;width:0%"><div style="box-shadow:0 0 10px #FF144D, 0 0 10px #FF144D;width:5%;opacity:1;position:absolute;height:100%;transition:all 500ms ease;transform:rotate(3deg) translate(0px, -4px);left:-10rem"></div></div></div><main style="align-items:center;display:flex;flex-direction:column;height:100vh;margin-top:16rem"><svg width="84.70857142857143" height="64" viewBox="0 0 20 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path opacity="0.4" d="M15.3266 0L19.2641 1.82961e-06L11.9687 14L8.03125 14L15.3266 0Z" fill="url(#paint0_linear_1303_5)"></path><path d="M11.9692 1.82961e-06L8.03164 0L0.736328 14L4.67383 14L8.03164 7.55626V14H11.9691V8.38194e-05L11.9692 1.82961e-06Z" fill="url(#paint1_linear_1303_5)"></path><path d="M15.3269 2.57679e-06H19.2644V14H15.3269V2.57679e-06Z" fill="url(#paint2_linear_1303_5)"></path><defs><linearGradient id="paint0_linear_1303_5" x1="8.03125" y1="7" x2="19.2641" y2="7" gradientUnits="userSpaceOnUse"><stop offset="0.28125" stop-color="#7D55EC"></stop><stop offset="1" stop-color="#2AB2FE"></stop></linearGradient><linearGradient id="paint1_linear_1303_5" x1="0.736328" y1="7" x2="19.2644" y2="7" gradientUnits="userSpaceOnUse"><stop offset="0.28125" stop-color="#7D55EC"></stop><stop offset="1" stop-color="#2AB2FE"></stop></linearGradient><linearGradient id="paint2_linear_1303_5" x1="0.736328" y1="7" x2="19.2644" y2="7" gradientUnits="userSpaceOnUse"><stop offset="0.28125" stop-color="#7D55EC"></stop><stop offset="1" stop-color="#2AB2FE"></stop></linearGradient></defs></svg><div class="Spacing__SpacingStyle-sc-1mpmtgj-0 cAAVhx"><div class="Headline__HeadlineContainerStyle-sc-12jzt2e-0 dDWSWx"><h1 class="Headline__H1Style-sc-12jzt2e-2 hkcwCQ">404 - Page Not Found<!-- --></h1></div></div><p class="Text__TextStyle-sc-sl5nur-0 fmHTvj">You will be redirected to the Pipelines dashboard in <!-- -->5<!-- --> seconds.<!-- --></p></main><div id="command-center-root"></div><div></div><div></div><div></div><div class="ToastWrapper-sc-1a33ph1-0 kOVcuR"><div class="Toastify"></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{},"currentTheme":{"accent":{"alert":"#F6540B","blue":"#4877FF","blueLight":"rgba(72, 119, 255, 0.5)","contentDefaultTransparent":"rgba(174, 174, 174, 0.5)","cyan":"#65E3FF","cyanLight":"rgba(101, 227, 255, 0.3)","cyanTransparent":"rgba(101, 227, 255, 0.12)","dbt":"#fc6949","dbtDark":"rgba(252, 105, 73, 0.3)","dbtLight":"rgba(252, 105, 73, 0.5)","info":"#00ABFF","infoTransparent":"rgba(0, 171, 255, 0.5)","negative":"#FF1E59","negativeTransparent":"rgba(255, 30, 89, 0.3)","pink":"#FF4FF8","pinkLight":"rgb(255, 79, 248, 0.5)","positive":"#00A81A","primaryTransparent":"rgba(155, 108, 167, 0.5)","purple":"#7D55EC","purpleLight":"rgba(125, 85, 236, 0.5)","rose":"#D1A2AB","roseLight":"rgba(209, 162, 171, 0.5)","sky":"#6AA1E0","skyLight":"rgba(106, 161, 224, 0.5)","teal":"#00B4CC","tealLight":"rgba(0, 180, 204, 0.5)","warning":"#DD9900","warningTransparent":"rgba(221, 153, 0, 0.5)","yellow":"#FFCC19","yellowLight":"rgba(255, 204, 25, 0.5)"},"background":{"blackTransparent":"rgba(0, 0, 0, 0.6)","blackTransparentDark":"rgba(0, 0, 0, 0.8)","chartBlock":"#2E3036","codeArea":"#1E1F24","codeTextarea":"#000000","content":"#1B1C20","danger":"#FFD0DB","dark":"#B1B8C3","dashboard":"#18181C","dashboardTransparent":"rgba(24, 24, 28, 0.1)","header":"#1B1B1B","menu":"#0F4CFF","muted":"#F9FAFC","navigation":"#EDEDED","output":"#2E3036","page":"#1E1F24","panel":"#232429","panelTransparent":"rgba(35, 36, 41, 0.7)","popup":"#27292E","row":"#2C2C2C","row2":"#51535C","scrollbarThumb":"rgba(100, 100, 100, 0.5)","scrollbarThumbHover":"rgba(255, 255, 255, 0.3)","scrollbarTrack":"#2E3036","success":"#8ADE00","successLight":"rgb(138, 222, 0, 0.3)","table":"#292A2F","tag":"#3A4550"},"borders":{"button":"#454850","contrast":"#FFFFFF","danger":"#FF144D","dark":"#000000","darkLight":"#2E3036","info":"#FFCC19","light":"#2F3034","medium":"#1C1C1C","medium2":"#141414","success":"#2FCB52"},"brand":{"earth100":"#C6EEDB","earth200":"#9DDFBF","earth300":"#6BBF96","earth400":"#37A46F","earth400Transparent":"rgba(55, 164, 111, 0.4)","earth500":"#00954C","energy100":"#FFF4BA","energy200":"#FFED92","energy300":"#FFE662","energy400":"#FFDA19","energy400Transparent":"rgba(255, 218, 25, 0.04)","energy500":"#F6C000","fire100":"#FFD7E0","fire200":"#FFA3B9","fire300":"#FF547D","fire400":"#FF144D","fire400Transparent":"rgba(255, 20, 77, 0.4)","fire500":"#EB0032","stone100":"#F3E6D7","stone200":"#E3D4C2","stone400":"#BFA78B","stone500":"#AF8859","water100":"#BDCEFF","water200":"#81A1FF","water300":"#517DFF","water400":"#2A60FE","water400Transparent":"rgba(42, 96, 254, 0.4)","water500":"#0F4CFF","wind100":"#EEEAFF","wind200":"#CCC1F4","wind300":"#A698DD","wind400":"#6B50D7","wind400SuperTransparent":"rgba(107, 80, 215, 0.12)","wind400Transparent":"rgba(107, 80, 215, 0.4)","wind500":"#4E32BC"},"chart":{"backgroundPrimary":"#7D55EC","backgroundSecondary":"#FF144D","backgroundTertiary":"#86E2FF","button1":"#4877FF","button2":"#FFCC19","button3":"#8ADE00","button4":"#FF4FF8","button5":"#B98D95","lines":"#9B6CA7","primary":"#6B50D7","secondary":"#FF144D","tertiary":"#2A60FE"},"content":{"active":"#FFFFFF","default":"#AEAEAE","disabled":"rgba(255, 255, 255, 0.3)","inverted":"#2C2C2C","muted":"#787A85"},"elevation":{"visualizationAccent":"#996CFF","visualizationAccentAlt":"#C1ACF7"},"feature":{"active":"rgba(250, 248, 254, 0.14)","disabled":"rgba(201, 206, 218, 0.12)"},"icons":{"neutral":"#787878"},"interactive":{"activeBorder":"#060606","blackBackgroundTransparent":"rgba(0, 0, 0, 0.5)","checked":"#060606","dangerBorder":"#FF144D","defaultBackground":"#36383F","defaultBackgroundTransparent":"rgba(54, 56, 63, 0.5)","defaultBorder":"#ffffff1a","disabledBorder":"#B1B8C3","focusBackground":"#B1B8C3","focusBorder":"#86E2FF","hoverBackground":"#4E4E4E","hoverBackgroundTransparent":"rgba(78, 78, 78, 0.5)","hoverBlackBackgroundTransparent":"rgba(0, 0, 0, 0.7)","hoverBorder":"#B9BFCA","hoverOverlay":"rgba(255, 255, 255, 0.1)","linkPrimary":"#1752FF","linkPrimaryHover":"#4877FF","linkPrimaryLight":"#5982ff","linkSecondary":"#6B50D7","linkSecondaryDisabled":"#C4B9EF","linkText":"#6AA1E0","linkTextLight":"#9ECBFF","purple":"#885EFF","rowHoverBackground":"rgba(0, 0, 0, 0.1)","transparent":"rgba(255, 255, 255, 0)"},"loader":{"color":"#EB0032","colorInverted":"#8ADE00"},"logo":{"color":"#FFFFFF"},"monotone":{"black":"#060606","blackTransparent":"rgba(0, 0, 0, 0.6)","gray":"#B1B8C3","grey100":"#F2F2F2","grey200":"#D5D7DC","grey300":"#B4B8C0","grey400":"#70747C","grey500":"#51535C","purple":"#6B50D7","white":"#FFFFFF","whiteTransparent":"rgba(255, 255, 255, 0.6)"},"neutral":{"n100":"#E7E8EA","n200":"#D8DADE","n300":"#CBCCD0","n400":"#BCBEC4","n500":"#AEB0B6"},"progress":{"negative":"#FF144D","positive":"#6B50D7"},"shadow":{"base":"12px 40px 120px rgba(0, 0, 0, 0.3)","frame":"0px 10px 40px rgba(0, 0, 0, 0.26)","menu":"4px 10px 20px rgba(6, 6, 6, 0.12)","popup":"10px 20px 40px rgba(0, 0, 0, 0.2)","small":"0px, 4px, rgba(0, 0, 0, 0.25)","window":"0px 10px 60px rgba(0, 0, 0, 0.7)"},"status":{"negative":"#FF144D","positive":"#24B400"},"text":{"fileBrowser":"#787A85"}}},"page":"/404","query":{},"buildId":"
|
|
20
|
+
</style></head><body><div id="__next"><div class="" style="position:fixed;top:0;left:0;height:2px;background:transparent;z-index:99999999999;width:100%"><div class="" style="height:100%;background:#FF144D;transition:all 500ms ease;width:0%"><div style="box-shadow:0 0 10px #FF144D, 0 0 10px #FF144D;width:5%;opacity:1;position:absolute;height:100%;transition:all 500ms ease;transform:rotate(3deg) translate(0px, -4px);left:-10rem"></div></div></div><main style="align-items:center;display:flex;flex-direction:column;height:100vh;margin-top:16rem"><svg width="84.70857142857143" height="64" viewBox="0 0 20 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path opacity="0.4" d="M15.3266 0L19.2641 1.82961e-06L11.9687 14L8.03125 14L15.3266 0Z" fill="url(#paint0_linear_1303_5)"></path><path d="M11.9692 1.82961e-06L8.03164 0L0.736328 14L4.67383 14L8.03164 7.55626V14H11.9691V8.38194e-05L11.9692 1.82961e-06Z" fill="url(#paint1_linear_1303_5)"></path><path d="M15.3269 2.57679e-06H19.2644V14H15.3269V2.57679e-06Z" fill="url(#paint2_linear_1303_5)"></path><defs><linearGradient id="paint0_linear_1303_5" x1="8.03125" y1="7" x2="19.2641" y2="7" gradientUnits="userSpaceOnUse"><stop offset="0.28125" stop-color="#7D55EC"></stop><stop offset="1" stop-color="#2AB2FE"></stop></linearGradient><linearGradient id="paint1_linear_1303_5" x1="0.736328" y1="7" x2="19.2644" y2="7" gradientUnits="userSpaceOnUse"><stop offset="0.28125" stop-color="#7D55EC"></stop><stop offset="1" stop-color="#2AB2FE"></stop></linearGradient><linearGradient id="paint2_linear_1303_5" x1="0.736328" y1="7" x2="19.2644" y2="7" gradientUnits="userSpaceOnUse"><stop offset="0.28125" stop-color="#7D55EC"></stop><stop offset="1" stop-color="#2AB2FE"></stop></linearGradient></defs></svg><div class="Spacing__SpacingStyle-sc-1mpmtgj-0 cAAVhx"><div class="Headline__HeadlineContainerStyle-sc-12jzt2e-0 dDWSWx"><h1 class="Headline__H1Style-sc-12jzt2e-2 hkcwCQ">404 - Page Not Found<!-- --></h1></div></div><p class="Text__TextStyle-sc-sl5nur-0 fmHTvj">You will be redirected to the Pipelines dashboard in <!-- -->5<!-- --> seconds.<!-- --></p></main><div id="command-center-root"></div><div></div><div></div><div></div><div class="ToastWrapper-sc-1a33ph1-0 kOVcuR"><div class="Toastify"></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{},"currentTheme":{"accent":{"alert":"#F6540B","blue":"#4877FF","blueLight":"rgba(72, 119, 255, 0.5)","contentDefaultTransparent":"rgba(174, 174, 174, 0.5)","cyan":"#65E3FF","cyanLight":"rgba(101, 227, 255, 0.3)","cyanTransparent":"rgba(101, 227, 255, 0.12)","dbt":"#fc6949","dbtDark":"rgba(252, 105, 73, 0.3)","dbtLight":"rgba(252, 105, 73, 0.5)","info":"#00ABFF","infoTransparent":"rgba(0, 171, 255, 0.5)","negative":"#FF1E59","negativeTransparent":"rgba(255, 30, 89, 0.3)","pink":"#FF4FF8","pinkLight":"rgb(255, 79, 248, 0.5)","positive":"#00A81A","primaryTransparent":"rgba(155, 108, 167, 0.5)","purple":"#7D55EC","purpleLight":"rgba(125, 85, 236, 0.5)","rose":"#D1A2AB","roseLight":"rgba(209, 162, 171, 0.5)","sky":"#6AA1E0","skyLight":"rgba(106, 161, 224, 0.5)","teal":"#00B4CC","tealLight":"rgba(0, 180, 204, 0.5)","warning":"#DD9900","warningTransparent":"rgba(221, 153, 0, 0.5)","yellow":"#FFCC19","yellowLight":"rgba(255, 204, 25, 0.5)"},"background":{"blackTransparent":"rgba(0, 0, 0, 0.6)","blackTransparentDark":"rgba(0, 0, 0, 0.8)","chartBlock":"#2E3036","codeArea":"#1E1F24","codeTextarea":"#000000","content":"#1B1C20","danger":"#FFD0DB","dark":"#B1B8C3","dashboard":"#18181C","dashboardTransparent":"rgba(24, 24, 28, 0.1)","header":"#1B1B1B","menu":"#0F4CFF","muted":"#F9FAFC","navigation":"#EDEDED","output":"#2E3036","page":"#1E1F24","panel":"#232429","panelTransparent":"rgba(35, 36, 41, 0.7)","popup":"#27292E","row":"#2C2C2C","row2":"#51535C","scrollbarThumb":"rgba(100, 100, 100, 0.5)","scrollbarThumbHover":"rgba(255, 255, 255, 0.3)","scrollbarTrack":"#2E3036","success":"#8ADE00","successLight":"rgb(138, 222, 0, 0.3)","table":"#292A2F","tag":"#3A4550"},"borders":{"button":"#454850","contrast":"#FFFFFF","danger":"#FF144D","dark":"#000000","darkLight":"#2E3036","info":"#FFCC19","light":"#2F3034","medium":"#1C1C1C","medium2":"#141414","success":"#2FCB52"},"brand":{"earth100":"#C6EEDB","earth200":"#9DDFBF","earth300":"#6BBF96","earth400":"#37A46F","earth400Transparent":"rgba(55, 164, 111, 0.4)","earth500":"#00954C","energy100":"#FFF4BA","energy200":"#FFED92","energy300":"#FFE662","energy400":"#FFDA19","energy400Transparent":"rgba(255, 218, 25, 0.04)","energy500":"#F6C000","fire100":"#FFD7E0","fire200":"#FFA3B9","fire300":"#FF547D","fire400":"#FF144D","fire400Transparent":"rgba(255, 20, 77, 0.4)","fire500":"#EB0032","stone100":"#F3E6D7","stone200":"#E3D4C2","stone400":"#BFA78B","stone500":"#AF8859","water100":"#BDCEFF","water200":"#81A1FF","water300":"#517DFF","water400":"#2A60FE","water400Transparent":"rgba(42, 96, 254, 0.4)","water500":"#0F4CFF","wind100":"#EEEAFF","wind200":"#CCC1F4","wind300":"#A698DD","wind400":"#6B50D7","wind400SuperTransparent":"rgba(107, 80, 215, 0.12)","wind400Transparent":"rgba(107, 80, 215, 0.4)","wind500":"#4E32BC"},"chart":{"backgroundPrimary":"#7D55EC","backgroundSecondary":"#FF144D","backgroundTertiary":"#86E2FF","button1":"#4877FF","button2":"#FFCC19","button3":"#8ADE00","button4":"#FF4FF8","button5":"#B98D95","lines":"#9B6CA7","primary":"#6B50D7","secondary":"#FF144D","tertiary":"#2A60FE"},"content":{"active":"#FFFFFF","default":"#AEAEAE","disabled":"rgba(255, 255, 255, 0.3)","inverted":"#2C2C2C","muted":"#787A85"},"elevation":{"visualizationAccent":"#996CFF","visualizationAccentAlt":"#C1ACF7"},"feature":{"active":"rgba(250, 248, 254, 0.14)","disabled":"rgba(201, 206, 218, 0.12)"},"icons":{"neutral":"#787878"},"interactive":{"activeBorder":"#060606","blackBackgroundTransparent":"rgba(0, 0, 0, 0.5)","checked":"#060606","dangerBorder":"#FF144D","defaultBackground":"#36383F","defaultBackgroundTransparent":"rgba(54, 56, 63, 0.5)","defaultBorder":"#ffffff1a","disabledBorder":"#B1B8C3","focusBackground":"#B1B8C3","focusBorder":"#86E2FF","hoverBackground":"#4E4E4E","hoverBackgroundTransparent":"rgba(78, 78, 78, 0.5)","hoverBlackBackgroundTransparent":"rgba(0, 0, 0, 0.7)","hoverBorder":"#B9BFCA","hoverOverlay":"rgba(255, 255, 255, 0.1)","linkPrimary":"#1752FF","linkPrimaryHover":"#4877FF","linkPrimaryLight":"#5982ff","linkSecondary":"#6B50D7","linkSecondaryDisabled":"#C4B9EF","linkText":"#6AA1E0","linkTextLight":"#9ECBFF","purple":"#885EFF","rowHoverBackground":"rgba(0, 0, 0, 0.1)","transparent":"rgba(255, 255, 255, 0)"},"loader":{"color":"#EB0032","colorInverted":"#8ADE00"},"logo":{"color":"#FFFFFF"},"monotone":{"black":"#060606","blackTransparent":"rgba(0, 0, 0, 0.6)","gray":"#B1B8C3","grey100":"#F2F2F2","grey200":"#D5D7DC","grey300":"#B4B8C0","grey400":"#70747C","grey500":"#51535C","purple":"#6B50D7","white":"#FFFFFF","whiteTransparent":"rgba(255, 255, 255, 0.6)"},"neutral":{"n100":"#E7E8EA","n200":"#D8DADE","n300":"#CBCCD0","n400":"#BCBEC4","n500":"#AEB0B6"},"progress":{"negative":"#FF144D","positive":"#6B50D7"},"shadow":{"base":"12px 40px 120px rgba(0, 0, 0, 0.3)","frame":"0px 10px 40px rgba(0, 0, 0, 0.26)","menu":"4px 10px 20px rgba(6, 6, 6, 0.12)","popup":"10px 20px 40px rgba(0, 0, 0, 0.2)","small":"0px, 4px, rgba(0, 0, 0, 0.25)","window":"0px 10px 60px rgba(0, 0, 0, 0.7)"},"status":{"negative":"#FF144D","positive":"#24B400"},"text":{"fileBrowser":"#787A85"}}},"page":"/404","query":{},"buildId":"_krrrgup_C-dPOpX36S8I","nextExport":true,"isFallback":false,"appGip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__BUILD_MANIFEST=function(s,e,i,a,t,c,n,p,l,g,u,r,o,k,
|
|
1
|
+
self.__BUILD_MANIFEST=function(s,e,i,a,t,c,n,p,l,g,u,r,o,f,k,b,d,h,j,m,w,_,v,y,I,B,F,A,D,E,L){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static/chunks/pages/index-4e12783b064c1cfe.js"],"/404":["static/chunks/pages/404-8ecd93274c427b76.js"],"/_error":["static/chunks/pages/_error-e989623bffcbf724.js"],"/block-layout":[l,a,t,g,o,u,f,m,"static/chunks/pages/block-layout-14f952f66964022f.js"],"/compute":[s,v,"static/chunks/pages/compute-010d9ac728f8a517.js"],"/files":[s,"static/chunks/pages/files-98df0674eac4ec84.js"],"/global-data-products":[s,c,k,y,"static/chunks/pages/global-data-products-78e8e88f2a757a18.js"],"/global-data-products/[...slug]":[s,c,k,y,"static/chunks/pages/global-data-products/[...slug]-591abd392dc50ed4.js"],"/global-hooks":[s,b,"static/chunks/pages/global-hooks-34966cfd2d89c366.js"],"/global-hooks/[...slug]":[s,b,"static/chunks/pages/global-hooks/[...slug]-fbc51d79d3196fa2.js"],"/manage":[s,n,d,"static/chunks/pages/manage-852d403c7bda21b3.js"],"/manage/files":[s,n,"static/chunks/pages/manage/files-f15a685682b1037b.js"],"/manage/settings":[s,n,"static/chunks/pages/manage/settings-52a597d0c674907a.js"],"/manage/users":[s,n,"static/chunks/pages/manage/users-b2896118903236c5.js"],"/manage/users/new":[s,n,"static/chunks/pages/manage/users/new-d0a403e8920104d2.js"],"/manage/users/[user]":[s,n,"static/chunks/pages/manage/users/[user]-8bbfa0c19b5e4cb3.js"],"/oauth":[s,"static/chunks/pages/oauth-30e34ee15d410331.js"],"/overview":[l,a,t,g,o,s,r,u,f,h,m,w,I,B,"static/chunks/pages/overview-597b74828bf105db.js"],"/pipeline-runs":[s,c,d,"static/chunks/pages/pipeline-runs-3edc6270c5b0e962.js"],"/pipelines":[s,r,d,h,w,I,"static/chunks/pages/pipelines-3591d035bb3bb2b8.js"],"/pipelines/[pipeline]":["static/chunks/pages/pipelines/[pipeline]-91a5d6a11e7d4c56.js"],"/pipelines/[pipeline]/backfills":[s,e,"static/chunks/pages/pipelines/[pipeline]/backfills-a8b61d8d239fd16f.js"],"/pipelines/[pipeline]/backfills/[...slug]":[p,j,s,e,c,"static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-ff4bd7a8ec3bab40.js"],"/pipelines/[pipeline]/dashboard":[l,a,t,g,o,s,e,u,f,m,"static/chunks/pages/pipelines/[pipeline]/dashboard-95ffcd3e2b27e567.js"],"/pipelines/[pipeline]/edit":[l,a,t,p,g,o,s,r,u,f,h,w,F,v,"static/chunks/pages/pipelines/[pipeline]/edit-e1dd1ed71d26c10d.js"],"/pipelines/[pipeline]/logs":[j,s,e,"static/chunks/pages/pipelines/[pipeline]/logs-3f5c14076ddde20e.js"],"/pipelines/[pipeline]/monitors":[a,t,s,e,B,"static/chunks/pages/pipelines/[pipeline]/monitors-7acc7afc00df17c2.js"],"/pipelines/[pipeline]/monitors/block-runs":[a,t,s,e,"static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-a5c0362763a21fa8.js"],"/pipelines/[pipeline]/monitors/block-runtime":[l,a,t,"static/chunks/9832-67896490f6e8a014.js",s,e,"static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-1ed9045b2f1dfd65.js"],"/pipelines/[pipeline]/runs":[p,s,e,c,"static/chunks/pages/pipelines/[pipeline]/runs-6dae38250e135c54.js"],"/pipelines/[pipeline]/runs/[run]":[a,p,g,s,e,u,F,"static/chunks/pages/pipelines/[pipeline]/runs/[run]-1417ad1c821d720a.js"],"/pipelines/[pipeline]/settings":[s,e,"static/chunks/pages/pipelines/[pipeline]/settings-59aca25a5b1d3998.js"],"/pipelines/[pipeline]/syncs":[s,e,"static/chunks/pages/pipelines/[pipeline]/syncs-90abafc7ed61c582.js"],"/pipelines/[pipeline]/triggers":[p,j,A,s,e,d,k,D,"static/chunks/pages/pipelines/[pipeline]/triggers-1bdfda8edc9cf4a8.js"],"/pipelines/[pipeline]/triggers/[...slug]":[p,j,A,s,e,c,D,"static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-f028ef3880ed856c.js"],"/platform/global-hooks":[s,b,"static/chunks/pages/platform/global-hooks-c916c778b0764634.js"],"/platform/global-hooks/[...slug]":[s,b,"static/chunks/pages/platform/global-hooks/[...slug]-e187f4c2b4eccd00.js"],"/settings":["static/chunks/pages/settings-b39e5bca035dec41.js"],"/settings/account/profile":[s,i,_,"static/chunks/pages/settings/account/profile-3f0df3decc856ee9.js"],"/settings/platform/preferences":[s,i,"static/chunks/pages/settings/platform/preferences-503049734a8b082f.js"],"/settings/platform/settings":[s,i,"static/chunks/pages/settings/platform/settings-c2e9ef989c8bfa73.js"],"/settings/workspace/permissions":[s,i,E,"static/chunks/pages/settings/workspace/permissions-e5a4d3d815cec25d.js"],"/settings/workspace/permissions/[...slug]":[s,i,E,"static/chunks/pages/settings/workspace/permissions/[...slug]-47b64ced27c24985.js"],"/settings/workspace/preferences":[s,i,"static/chunks/pages/settings/workspace/preferences-5b26eeda8aed8a7b.js"],"/settings/workspace/roles":[s,i,L,"static/chunks/pages/settings/workspace/roles-36fa165a48af586b.js"],"/settings/workspace/roles/[...slug]":[s,i,L,"static/chunks/pages/settings/workspace/roles/[...slug]-379e1ee292504842.js"],"/settings/workspace/sync-data":[s,i,"static/chunks/pages/settings/workspace/sync-data-8b793b3b696a2cd3.js"],"/settings/workspace/users":[s,i,_,"static/chunks/pages/settings/workspace/users-a4db8710f703c729.js"],"/settings/workspace/users/[...slug]":[s,i,_,"static/chunks/pages/settings/workspace/users/[...slug]-2af9afbe727d88aa.js"],"/sign-in":[s,"static/chunks/pages/sign-in-09414a8b66fb6f06.js"],"/templates":[s,r,h,"static/chunks/pages/templates-05a5312f50db749c.js"],"/templates/[...slug]":[s,r,"static/chunks/pages/templates/[...slug]-98a34c313012fc10.js"],"/terminal":[s,"static/chunks/pages/terminal-89e1b3e6799378a5.js"],"/test":["static/chunks/pages/test-bd51b3918b39329e.js"],"/triggers":[s,k,"static/chunks/pages/triggers-9cba3211434a8966.js"],"/version-control":[s,"static/chunks/pages/version-control-5753fac7c1bfdc88.js"],sortedPages:["/","/404","/_app","/_error","/block-layout","/compute","/files","/global-data-products","/global-data-products/[...slug]","/global-hooks","/global-hooks/[...slug]","/manage","/manage/files","/manage/settings","/manage/users","/manage/users/new","/manage/users/[user]","/oauth","/overview","/pipeline-runs","/pipelines","/pipelines/[pipeline]","/pipelines/[pipeline]/backfills","/pipelines/[pipeline]/backfills/[...slug]","/pipelines/[pipeline]/dashboard","/pipelines/[pipeline]/edit","/pipelines/[pipeline]/logs","/pipelines/[pipeline]/monitors","/pipelines/[pipeline]/monitors/block-runs","/pipelines/[pipeline]/monitors/block-runtime","/pipelines/[pipeline]/runs","/pipelines/[pipeline]/runs/[run]","/pipelines/[pipeline]/settings","/pipelines/[pipeline]/syncs","/pipelines/[pipeline]/triggers","/pipelines/[pipeline]/triggers/[...slug]","/platform/global-hooks","/platform/global-hooks/[...slug]","/settings","/settings/account/profile","/settings/platform/preferences","/settings/platform/settings","/settings/workspace/permissions","/settings/workspace/permissions/[...slug]","/settings/workspace/preferences","/settings/workspace/roles","/settings/workspace/roles/[...slug]","/settings/workspace/sync-data","/settings/workspace/users","/settings/workspace/users/[...slug]","/sign-in","/templates","/templates/[...slug]","/terminal","/test","/triggers","/version-control"]}}("static/chunks/1557-df144fbd8b2208c3.js","static/chunks/3782-ef4cd4f0b52072d0.js","static/chunks/5699-6d708c6b2153ea08.js","static/chunks/125-abc06c39b97fd8aa.js","static/chunks/2714-68fef54789d7eaeb.js","static/chunks/7966-f07b2913f7326b50.js","static/chunks/1598-3070ba5a71ce3e2d.js","static/chunks/9161-837b653aa849a76f.js","static/chunks/29107295-989a0767a635d9d5.js","static/chunks/2631-b9f9bea3f1cf906d.js","static/chunks/8095-bdce03896ef9639a.js","static/chunks/4241-4499461184ba0d23.js","static/chunks/4783-422429203610c318.js","static/chunks/635-0d6b7c8804bcd2dc.js","static/chunks/9624-59b2f803f9c88cd6.js","static/chunks/1187-c9537b3f51775d0c.js","static/chunks/5544-d10ee8ec70354aa1.js","static/chunks/523-be11ad59861d00ca.js","static/chunks/7674-5f8f0882b3411d98.js","static/chunks/9440-4069842b90d4b801.js","static/chunks/3548-fa0792ddb88f4646.js","static/chunks/7361-8a23dd8360593e7a.js","static/chunks/3366-526b00bb494c02a4.js","static/chunks/3763-61b542dafdbf5754.js","static/chunks/5627-237a3de578538022.js","static/chunks/5831-2abc4063e887a03e.js","static/chunks/9265-d2a1aaec75ec69b8.js","static/chunks/26-38bc9380422f3900.js","static/chunks/2717-d9200be634dd6766.js","static/chunks/8146-6bed4e7401e067e6.js","static/chunks/7022-0d52dd8868621fb0.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|