mage-ai 0.9.66__py3-none-any.whl → 0.9.68__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/monitors/BaseMonitor.py +1 -2
- mage_ai/api/policies/PipelinePolicy.py +2 -0
- mage_ai/api/resources/BlockLayoutItemResource.py +2 -2
- mage_ai/api/resources/BlockResource.py +4 -3
- mage_ai/api/resources/CacheItemResource.py +1 -1
- mage_ai/api/resources/GitBranchResource.py +3 -5
- mage_ai/api/resources/PageBlockLayoutResource.py +2 -2
- mage_ai/api/resources/PipelineResource.py +13 -0
- mage_ai/api/resources/PipelineRunResource.py +10 -1
- mage_ai/cache/tag.py +3 -0
- mage_ai/cluster_manager/manage.py +4 -1
- mage_ai/data_preparation/decorators.py +15 -0
- mage_ai/data_preparation/executors/k8s_block_executor.py +8 -1
- mage_ai/data_preparation/executors/k8s_pipeline_executor.py +12 -1
- mage_ai/data_preparation/executors/streaming_pipeline_executor.py +22 -12
- mage_ai/data_preparation/git/api.py +3 -0
- mage_ai/data_preparation/git/clients/gitlab.py +3 -2
- mage_ai/data_preparation/logging/gcs_logger_manager.py +7 -4
- mage_ai/data_preparation/models/block/__init__.py +45 -86
- mage_ai/data_preparation/models/block/block_factory.py +77 -0
- mage_ai/data_preparation/models/block/dbt/block.py +5 -7
- mage_ai/data_preparation/models/block/global_data_product/__init__.py +9 -3
- mage_ai/data_preparation/models/block/integration/__init__.py +12 -8
- mage_ai/data_preparation/models/block/platform/mixins.py +1 -1
- mage_ai/data_preparation/models/pipeline.py +80 -13
- mage_ai/data_preparation/storage/gcs_storage.py +28 -3
- mage_ai/data_preparation/storage/local_storage.py +18 -3
- mage_ai/data_preparation/storage/s3_storage.py +7 -2
- mage_ai/data_preparation/templates/constants.py +7 -0
- mage_ai/data_preparation/templates/data_loaders/streaming/generic_python.py +23 -0
- mage_ai/data_preparation/templates/template.py +6 -2
- mage_ai/data_preparation/variable_manager.py +2 -1
- mage_ai/io/bigquery.py +2 -0
- mage_ai/io/export_utils.py +3 -0
- mage_ai/io/oracledb.py +152 -5
- mage_ai/io/sql.py +4 -0
- mage_ai/orchestration/db/__init__.py +2 -2
- mage_ai/orchestration/db/models/schedules.py +2 -2
- mage_ai/orchestration/job_manager.py +6 -1
- mage_ai/orchestration/notification/sender.py +8 -0
- mage_ai/orchestration/pipeline_scheduler_original.py +10 -1
- mage_ai/server/constants.py +1 -1
- mage_ai/server/frontend_dist/404.html +2 -2
- mage_ai/server/frontend_dist/_next/static/chunks/3548-961ff79ca70038c7.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/{4241-ccd0126f5750cc35.js → 4241-4499461184ba0d23.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/5627-237a3de578538022.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/{7966-5c1786fb7e7a48f5.js → 7966-f07b2913f7326b50.js} +1 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-08790743315de36a.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/index-13760bb72d823b69.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-8bbfa0c19b5e4cb3.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-852d403c7bda21b3.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-597b74828bf105db.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-a8b61d8d239fd16f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-bd0aff5a5ed8888c.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-3f5c14076ddde20e.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-1417ad1c821d720a.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-d1ee961387c58b7f.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-90abafc7ed61c582.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-cb88fd075a357fcf.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-ceb06e1616ee9610.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-8ff16ef9566e911a.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-d7a8bc51bb7a1082.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-f59d34429fe022ee.js +1 -0
- mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-9cba3211434a8966.js +1 -0
- mage_ai/server/{frontend_dist_base_path_template/_next/static/wxqkF4diPqRxUfP6Ac6ai → frontend_dist/_next/static/i8pymuJDTVHdWjUP1QSh1}/_buildManifest.js +1 -1
- mage_ai/server/frontend_dist/block-layout.html +2 -2
- mage_ai/server/frontend_dist/compute.html +2 -2
- mage_ai/server/frontend_dist/files.html +2 -2
- mage_ai/server/frontend_dist/global-data-products/[...slug].html +2 -2
- mage_ai/server/frontend_dist/global-data-products.html +2 -2
- mage_ai/server/frontend_dist/global-hooks/[...slug].html +2 -2
- mage_ai/server/frontend_dist/global-hooks.html +2 -2
- mage_ai/server/frontend_dist/index.html +2 -2
- mage_ai/server/frontend_dist/manage/files.html +2 -2
- mage_ai/server/frontend_dist/manage/settings.html +2 -2
- mage_ai/server/frontend_dist/manage/users/[user].html +2 -2
- mage_ai/server/frontend_dist/manage/users/new.html +2 -2
- mage_ai/server/frontend_dist/manage/users.html +2 -2
- mage_ai/server/frontend_dist/manage.html +2 -2
- mage_ai/server/frontend_dist/oauth.html +3 -3
- mage_ai/server/frontend_dist/overview.html +2 -2
- mage_ai/server/frontend_dist/pipeline-runs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/dashboard.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +2 -2
- mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
- mage_ai/server/frontend_dist/pipelines.html +2 -2
- mage_ai/server/frontend_dist/platform/global-hooks/[...slug].html +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 +5 -5
- 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/_next/static/rtugsJoijF2SsCCB5_yKS → frontend_dist_base_path_template/_next/static/CKCvjsYCf2imD2X8zAOBf}/_buildManifest.js +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-961ff79ca70038c7.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{4241-ccd0126f5750cc35.js → 4241-4499461184ba0d23.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5627-237a3de578538022.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{7966-5c1786fb7e7a48f5.js → 7966-f07b2913f7326b50.js} +1 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-08790743315de36a.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/index-13760bb72d823b69.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-8bbfa0c19b5e4cb3.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage-852d403c7bda21b3.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-597b74828bf105db.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-a8b61d8d239fd16f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-bd0aff5a5ed8888c.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-3f5c14076ddde20e.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-1417ad1c821d720a.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-d1ee961387c58b7f.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-90abafc7ed61c582.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-cb88fd075a357fcf.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-ceb06e1616ee9610.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-8ff16ef9566e911a.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-d7a8bc51bb7a1082.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-f59d34429fe022ee.js +1 -0
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-9cba3211434a8966.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 +3 -3
- 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 +5 -5
- 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/services/aws/s3/s3.py +8 -2
- mage_ai/services/k8s/job_manager.py +8 -0
- mage_ai/services/slack/slack.py +10 -1
- mage_ai/services/spark/spark.py +9 -2
- mage_ai/settings/backends.py +8 -8
- mage_ai/settings/models/configuration_option.py +10 -9
- mage_ai/settings/server.py +6 -1
- mage_ai/shared/files.py +19 -1
- mage_ai/shared/logger.py +12 -6
- mage_ai/shared/path_fixer.py +3 -0
- mage_ai/streaming/sources/base.py +5 -0
- mage_ai/streaming/sources/base_python.py +30 -0
- mage_ai/streaming/sources/kafka.py +2 -1
- mage_ai/streaming/sources/mongodb.py +4 -0
- mage_ai/streaming/sources/source_factory.py +25 -0
- mage_ai/tests/data_preparation/models/block/dbt/test_block.py +2 -2
- mage_ai/tests/data_preparation/models/block/dbt/test_block_sql.py +1 -1
- mage_ai/tests/data_preparation/models/block/dbt/test_block_yaml.py +1 -1
- mage_ai/tests/data_preparation/models/test_block.py +41 -3
- mage_ai/tests/orchestration/test_pipeline_scheduler.py +2 -0
- mage_ai/tests/settings/models/test_configuration_option.py +2 -2
- {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/METADATA +3 -3
- {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/RECORD +225 -222
- mage_ai/server/frontend_dist/_next/static/chunks/181-e61915415a976861.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/3548-13563a1ff815f922.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-913116aa749f7ca6.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/index-64851458dde54ad9.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-d3a5fd3119fdb1e4.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-42789d698d28a92f.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-d05040edba41b2ac.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-aaf393c86fc1bda3.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-d84556cefbe31a1a.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-cf656cbe37ecaacc.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-1b688d61f8efe07a.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-ed3331d22d5cff7d.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-d94e48bad89ba1e0.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-f508c2f261297724.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-f99e99aa8f45529c.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-6826000cdffc36b8.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-dde29a463495cebb.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-7d38b2f7c3e918a1.js +0 -1
- mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-ab98a7b3a678669e.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/181-e61915415a976861.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-13563a1ff815f922.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-913116aa749f7ca6.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/index-64851458dde54ad9.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-d3a5fd3119fdb1e4.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage-42789d698d28a92f.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-d05040edba41b2ac.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-aaf393c86fc1bda3.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-d84556cefbe31a1a.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-cf656cbe37ecaacc.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-1b688d61f8efe07a.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-ed3331d22d5cff7d.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-d94e48bad89ba1e0.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-f508c2f261297724.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-f99e99aa8f45529c.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-6826000cdffc36b8.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-dde29a463495cebb.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-7d38b2f7c3e918a1.js +0 -1
- mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-ab98a7b3a678669e.js +0 -1
- /mage_ai/server/frontend_dist/_next/static/{rtugsJoijF2SsCCB5_yKS → i8pymuJDTVHdWjUP1QSh1}/_ssgManifest.js +0 -0
- /mage_ai/server/frontend_dist_base_path_template/_next/static/{wxqkF4diPqRxUfP6Ac6ai → CKCvjsYCf2imD2X8zAOBf}/_ssgManifest.js +0 -0
- {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/LICENSE +0 -0
- {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/WHEEL +0 -0
- {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/entry_points.txt +0 -0
- {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/top_level.txt +0 -0
mage_ai/shared/path_fixer.py
CHANGED
|
@@ -29,6 +29,9 @@ def add_absolute_path(file_path: str, add_base_repo_path: bool = True) -> str:
|
|
|
29
29
|
full_path = os.path.join(repo_path, parts[0])
|
|
30
30
|
if os.path.exists(full_path):
|
|
31
31
|
full_path = os.path.join(repo_path, file_path)
|
|
32
|
+
elif os.path.exists(os.path.join(repo_path, 'dbt', parts[0])):
|
|
33
|
+
# DBT v1 paths
|
|
34
|
+
full_path = os.path.join(repo_path, 'dbt', file_path)
|
|
32
35
|
else:
|
|
33
36
|
full_path = find_directory(repo_path, lambda x: x.endswith(file_path))
|
|
34
37
|
|
|
@@ -3,6 +3,8 @@ from abc import ABC, abstractmethod
|
|
|
3
3
|
from enum import Enum
|
|
4
4
|
from typing import Callable, Dict
|
|
5
5
|
|
|
6
|
+
from mage_ai.shared.environments import is_test
|
|
7
|
+
|
|
6
8
|
|
|
7
9
|
class SourceConsumeMethod(str, Enum):
|
|
8
10
|
BATCH_READ = 'BATCH_READ'
|
|
@@ -22,6 +24,9 @@ class BaseSource(ABC):
|
|
|
22
24
|
self.checkpoint_path = kwargs.get('checkpoint_path')
|
|
23
25
|
self.checkpoint = self.read_checkpoint()
|
|
24
26
|
self.init_client()
|
|
27
|
+
if not is_test():
|
|
28
|
+
# Not test the connection in unit tests
|
|
29
|
+
self.test_connection()
|
|
25
30
|
|
|
26
31
|
@abstractmethod
|
|
27
32
|
def init_client(self):
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from typing import Callable
|
|
2
|
+
|
|
3
|
+
from mage_ai.streaming.sources.base import BaseSource
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class BasePythonSource(BaseSource):
|
|
7
|
+
def __init__(self, **kwargs):
|
|
8
|
+
"""
|
|
9
|
+
Not require config in the python source
|
|
10
|
+
"""
|
|
11
|
+
super().__init__(None, **kwargs)
|
|
12
|
+
|
|
13
|
+
def init_client(self):
|
|
14
|
+
"""
|
|
15
|
+
Intialize the client for the source.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def read(self, handler: Callable):
|
|
19
|
+
"""
|
|
20
|
+
Read the message from the source and use handler to process the message.
|
|
21
|
+
|
|
22
|
+
This method only needs to be implemented when consume_method is 'READ'.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def batch_read(self, handler: Callable):
|
|
26
|
+
"""
|
|
27
|
+
Batch read the messages from the source and use handler to process the messages.
|
|
28
|
+
|
|
29
|
+
This method only needs to be implemented when consume_method is 'BATCH_READ'.
|
|
30
|
+
"""
|
|
@@ -256,7 +256,8 @@ class KafkaSource(BaseSource):
|
|
|
256
256
|
handler(message_values)
|
|
257
257
|
|
|
258
258
|
def test_connection(self):
|
|
259
|
-
|
|
259
|
+
self.consumer._client.check_version(timeout=5)
|
|
260
|
+
self._print('Test connectino successfully.')
|
|
260
261
|
|
|
261
262
|
def __deserialize_message(self, message):
|
|
262
263
|
if self.config.serde_config is None:
|
|
@@ -18,6 +18,7 @@ class MongoDBConfig(BaseConfig):
|
|
|
18
18
|
pipeline: Optional[_Pipeline] = None
|
|
19
19
|
operation_time: Optional[Timestamp] = None
|
|
20
20
|
start_after: Optional[Mapping[str, Any]] = None
|
|
21
|
+
full_document: Optional[str] = None
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
class MongoSource(BaseSource):
|
|
@@ -46,6 +47,9 @@ class MongoSource(BaseSource):
|
|
|
46
47
|
if hasattr(self.config, 'start_after') and self.config.start_after is not None:
|
|
47
48
|
watch_args['start_after'] = self.config.start_after
|
|
48
49
|
|
|
50
|
+
if hasattr(self.config, 'full_document'):
|
|
51
|
+
watch_args['full_document'] = self.config.full_document
|
|
52
|
+
|
|
49
53
|
return watch_args
|
|
50
54
|
|
|
51
55
|
def batch_read(self, handler: Callable):
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from typing import Dict
|
|
2
2
|
|
|
3
|
+
from mage_ai.data_preparation.decorators import collect_decorated_objs
|
|
3
4
|
from mage_ai.streaming.constants import SourceType
|
|
4
5
|
|
|
5
6
|
|
|
@@ -51,3 +52,27 @@ class SourceFactory:
|
|
|
51
52
|
raise Exception(
|
|
52
53
|
f'Consuming data from {connector_type} is not supported in streaming pipelines yet.',
|
|
53
54
|
)
|
|
55
|
+
|
|
56
|
+
@classmethod
|
|
57
|
+
def get_python_source(self, content: str, **kwargs):
|
|
58
|
+
"""
|
|
59
|
+
Find the class that's decorated with streaming_source from the source code.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
content (str): The python code that contains the streaming source implementation.
|
|
63
|
+
**kwargs: {'global_vars': {...}}
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
The initialized class object.
|
|
67
|
+
|
|
68
|
+
Raises:
|
|
69
|
+
Exception: Description
|
|
70
|
+
"""
|
|
71
|
+
decorated_sources = []
|
|
72
|
+
|
|
73
|
+
exec(content, {'streaming_source': collect_decorated_objs(decorated_sources)})
|
|
74
|
+
|
|
75
|
+
if not decorated_sources:
|
|
76
|
+
raise Exception('Not find the class that has streaming_source decorator.')
|
|
77
|
+
|
|
78
|
+
return decorated_sources[0](**kwargs)
|
|
@@ -38,7 +38,7 @@ class DBTBlockTest(AsyncDBTestCase):
|
|
|
38
38
|
self.block_sql.language = BlockLanguage.SQL
|
|
39
39
|
self.block_sql.pipeline = pipeline
|
|
40
40
|
|
|
41
|
-
self.dbt_block_sql = DBTBlock(
|
|
41
|
+
self.dbt_block_sql = DBTBlock.create(
|
|
42
42
|
name='test_dbt_block_sql',
|
|
43
43
|
uuid='test_dbt_block_sql',
|
|
44
44
|
block_type=BlockType.DBT,
|
|
@@ -50,7 +50,7 @@ class DBTBlockTest(AsyncDBTestCase):
|
|
|
50
50
|
pipeline=pipeline,
|
|
51
51
|
)
|
|
52
52
|
|
|
53
|
-
self.dbt_block_yaml = DBTBlock(
|
|
53
|
+
self.dbt_block_yaml = DBTBlock.create(
|
|
54
54
|
name='test_dbt_block_yaml',
|
|
55
55
|
uuid='test_dbt_block_yaml',
|
|
56
56
|
block_type=BlockType.DBT,
|
|
@@ -7,14 +7,18 @@ from faker import Faker
|
|
|
7
7
|
from pandas.testing import assert_frame_equal
|
|
8
8
|
|
|
9
9
|
# from mage_ai.data_cleaner.column_types.constants import ColumnType
|
|
10
|
-
from mage_ai.data_preparation.models.block import Block, BlockType
|
|
10
|
+
from mage_ai.data_preparation.models.block import Block, BlockType, CallbackBlock
|
|
11
|
+
from mage_ai.data_preparation.models.block.block_factory import BlockFactory
|
|
11
12
|
from mage_ai.data_preparation.models.block.errors import HasDownstreamDependencies
|
|
12
13
|
from mage_ai.data_preparation.models.pipeline import Pipeline
|
|
13
14
|
from mage_ai.data_preparation.repo_manager import get_repo_config
|
|
14
15
|
from mage_ai.data_preparation.variable_manager import VariableManager
|
|
15
16
|
from mage_ai.shared.path_fixer import add_root_repo_path_to_relative_path
|
|
16
17
|
from mage_ai.tests.base_test import DBTestCase
|
|
17
|
-
from mage_ai.tests.factory import
|
|
18
|
+
from mage_ai.tests.factory import (
|
|
19
|
+
create_integration_pipeline_with_blocks,
|
|
20
|
+
create_pipeline,
|
|
21
|
+
)
|
|
18
22
|
from mage_ai.tests.shared.mixins import ProjectPlatformMixin
|
|
19
23
|
|
|
20
24
|
|
|
@@ -603,7 +607,7 @@ SELECT 1 AS id;
|
|
|
603
607
|
upstream_block_uuids=['test_data_loader'],
|
|
604
608
|
)
|
|
605
609
|
|
|
606
|
-
test_block =
|
|
610
|
+
test_block = BlockFactory.get_block('test_data_loader', 'test_data_loader', 'data_loader')
|
|
607
611
|
|
|
608
612
|
self.assertRaises(HasDownstreamDependencies, block1.delete)
|
|
609
613
|
self.assertRaises(HasDownstreamDependencies, test_block.delete)
|
|
@@ -763,3 +767,37 @@ class BlockProjectPlatformTests(ProjectPlatformMixin):
|
|
|
763
767
|
)
|
|
764
768
|
|
|
765
769
|
self.assertEqual(block.file_path, add_root_repo_path_to_relative_path(path))
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
class CallbackBlockTest(DBTestCase):
|
|
773
|
+
def setUp(self):
|
|
774
|
+
self.pipeline = create_pipeline('callback_pipeline', self.repo_path)
|
|
775
|
+
|
|
776
|
+
def tearDown(self):
|
|
777
|
+
self.pipeline.delete()
|
|
778
|
+
|
|
779
|
+
def test_create_global_vars_from_parent_block(self):
|
|
780
|
+
parent_block = Block.create(
|
|
781
|
+
'test_data_loader',
|
|
782
|
+
'data_loader',
|
|
783
|
+
self.repo_path,
|
|
784
|
+
pipeline=self.pipeline,
|
|
785
|
+
)
|
|
786
|
+
callback_block = CallbackBlock.create(parent_block.name)
|
|
787
|
+
self.pipeline.add_block(callback_block)
|
|
788
|
+
parent_block = parent_block.update(
|
|
789
|
+
dict(callback_blocks=[callback_block.uuid])
|
|
790
|
+
)
|
|
791
|
+
parent_block.global_vars = dict(
|
|
792
|
+
configuration=dict(table_name='load_data_table')
|
|
793
|
+
)
|
|
794
|
+
|
|
795
|
+
global_vars = dict(
|
|
796
|
+
random_var=1,
|
|
797
|
+
)
|
|
798
|
+
new_vars = callback_block._create_global_vars(
|
|
799
|
+
global_vars,
|
|
800
|
+
parent_block=parent_block,
|
|
801
|
+
)
|
|
802
|
+
|
|
803
|
+
self.assertIsNotNone(new_vars.get('configuration'))
|
|
@@ -396,6 +396,7 @@ class PipelineSchedulerTests(DBTestCase):
|
|
|
396
396
|
error=f'Failed blocks: {block_runs[0].block_uuid}.',
|
|
397
397
|
pipeline=scheduler.pipeline,
|
|
398
398
|
pipeline_run=pipeline_run,
|
|
399
|
+
stacktrace=None,
|
|
399
400
|
)
|
|
400
401
|
|
|
401
402
|
def test_schedule_with_block_failures(self):
|
|
@@ -419,6 +420,7 @@ class PipelineSchedulerTests(DBTestCase):
|
|
|
419
420
|
error=f'Failed blocks: {block_runs[0].block_uuid}.',
|
|
420
421
|
pipeline=scheduler.pipeline,
|
|
421
422
|
pipeline_run=pipeline_run,
|
|
423
|
+
stacktrace=None,
|
|
422
424
|
)
|
|
423
425
|
|
|
424
426
|
@patch('mage_ai.orchestration.pipeline_scheduler_original.run_pipeline')
|
|
@@ -100,7 +100,7 @@ class ConfigurationOptionTest(AsyncDBTestCase):
|
|
|
100
100
|
self.faker.unique.name(),
|
|
101
101
|
os.path.join(self.repo_path, 'mage_platform'),
|
|
102
102
|
)
|
|
103
|
-
block = DBTBlock(
|
|
103
|
+
block = DBTBlock.create(
|
|
104
104
|
block_type='dbt',
|
|
105
105
|
configuration=dict(file_path='dir2/mage.sql'),
|
|
106
106
|
language='sql',
|
|
@@ -139,7 +139,7 @@ class ConfigurationOptionTest(AsyncDBTestCase):
|
|
|
139
139
|
self.faker.unique.name(),
|
|
140
140
|
os.path.join(self.repo_path, 'mage_platform'),
|
|
141
141
|
)
|
|
142
|
-
block = DBTBlock(
|
|
142
|
+
block = DBTBlock.create(
|
|
143
143
|
block_type='dbt',
|
|
144
144
|
configuration=dict(file_path='dir2/mage.sql'),
|
|
145
145
|
language='sql',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mage-ai
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.68
|
|
4
4
|
Summary: Mage is a tool for building and deploying data pipelines.
|
|
5
5
|
Home-page: https://github.com/mage-ai/mage-ai
|
|
6
6
|
Author: Mage
|
|
@@ -128,7 +128,7 @@ Requires-Dist: pyodbc ==4.0.35 ; extra == 'all'
|
|
|
128
128
|
Requires-Dist: redshift-connector ==2.0.915 ; extra == 'all'
|
|
129
129
|
Requires-Dist: lxml ==4.9.4 ; extra == 'all'
|
|
130
130
|
Requires-Dist: requests-aws4auth ==1.1.2 ; extra == 'all'
|
|
131
|
-
Requires-Dist: snowflake-connector-python ==3.
|
|
131
|
+
Requires-Dist: snowflake-connector-python ==3.5.0 ; extra == 'all'
|
|
132
132
|
Requires-Dist: sshtunnel ==0.4.0 ; extra == 'all'
|
|
133
133
|
Requires-Dist: stomp.py ==8.1.0 ; extra == 'all'
|
|
134
134
|
Requires-Dist: thefuzz[speedup] ==0.19.0 ; extra == 'all'
|
|
@@ -183,7 +183,7 @@ Provides-Extra: s3
|
|
|
183
183
|
Requires-Dist: boto3 ==1.26.60 ; extra == 's3'
|
|
184
184
|
Requires-Dist: botocore ==1.29.60 ; extra == 's3'
|
|
185
185
|
Provides-Extra: snowflake
|
|
186
|
-
Requires-Dist: snowflake-connector-python ==3.
|
|
186
|
+
Requires-Dist: snowflake-connector-python ==3.5.0 ; extra == 'snowflake'
|
|
187
187
|
Provides-Extra: spark
|
|
188
188
|
Requires-Dist: boto3 ==1.26.60 ; extra == 'spark'
|
|
189
189
|
Requires-Dist: botocore ==1.29.60 ; extra == 'spark'
|