mage-ai 0.8.78__tar.gz → 0.8.80__tar.gz
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-0.8.78/mage_ai.egg-info → mage-ai-0.8.80}/PKG-INFO +1 -1
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/PipelineRunPolicy.py +1 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/StatusPolicy.py +4 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/StatusPresenter.py +1 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/LogResource.py +12 -3
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/StatusResource.py +2 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/streaming_pipeline_executor.py +73 -57
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/__init__.py +30 -7
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/constants.py +2 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/widget/charts.py +23 -4
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/models/schedules.py +2 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/notification/sender.py +18 -5
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/pipeline_scheduler.py +26 -9
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/constants.py +1 -1
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/404.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/404.html.html +2 -2
- {mage-ai-0.8.78/mage_ai/server/frontend_dist/_next/static/m8Ltx9sPofwrShNBHkhe- → mage-ai-0.8.80/mage_ai/server/frontend_dist/_next/static/K62oaHK5x3k16vVxdvIWf}/_buildManifest.js +1 -1
- mage-ai-0.8.80/mage_ai/server/frontend_dist/_next/static/chunks/5682-c0d87b28bf381aae.js +1 -0
- mage-ai-0.8.80/mage_ai/server/frontend_dist/_next/static/chunks/8312-71137409aea5d028.js +1 -0
- mage-ai-0.8.80/mage_ai/server/frontend_dist/_next/static/chunks/8957-6edafc5a2521efdf.js +1 -0
- mage-ai-0.8.80/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-d90d32812b2be89e.js +1 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/index.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/manage.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipeline-runs.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/pipelines.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/settings/account/profile.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/settings/workspace/preferences.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/settings/workspace/sync-data.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/settings/workspace/users.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/settings.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/sign-in.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/terminal.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/test.html +3 -3
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/triggers.html +2 -2
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/kernel_output_parser.py +5 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/gcp/cloud_run/cloud_run.py +37 -18
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/gcp/cloud_run/config.py +2 -1
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/db/test_models.py +21 -10
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/notification/test_sender.py +6 -4
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/usage_statistics/logger.py +2 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80/mage_ai.egg-info}/PKG-INFO +1 -1
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai.egg-info/SOURCES.txt +7 -7
- {mage-ai-0.8.78 → mage-ai-0.8.80}/setup.py +1 -1
- mage-ai-0.8.78/mage_ai/server/frontend_dist/_next/static/chunks/5682-83f92c7d6ec974f5.js +0 -1
- mage-ai-0.8.78/mage_ai/server/frontend_dist/_next/static/chunks/8312-3bb169298804c401.js +0 -1
- mage-ai-0.8.78/mage_ai/server/frontend_dist/_next/static/chunks/8957-0c39a705c8215858.js +0 -1
- mage-ai-0.8.78/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-22d76e8fa386ba37.js +0 -1
- {mage-ai-0.8.78 → mage-ai-0.8.80}/LICENSE +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/MANIFEST.in +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/README.md +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/api_context.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/errors.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/logging.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/middleware.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/monitors/BaseMonitor.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/monitors/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/oauth_scope.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/operations/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/operations/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/operations/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/AutocompleteItemPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/BackfillPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/BasePolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/BlockOutputPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/BlockPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/BlockRunPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/BlockTemplatePolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/ClusterPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/DataProviderPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/EventRulePolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/ExtensionOptionPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/FileContentPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/FilePolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/FileVersionPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/GitBranchPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/IntegrationDestinationPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/IntegrationSourcePolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/IntegrationSourceStreamPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/KernelPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/LogPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/MonitorStatPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/OutputPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/PipelinePolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/PipelineSchedulePolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/ProjectPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/SchedulerPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/SecretPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/SessionPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/SyncPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/UserPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/VariablePolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/WidgetPolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/WorkspacePolicy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/policies/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/AutocompleteItemPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/BackfillPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/BasePresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/BlockOutputPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/BlockPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/BlockRunPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/BlockTemplatePresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/ClusterPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/DataProviderPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/EventRulePresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/ExtensionOptionPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/FileContentPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/FilePresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/FileVersionPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/GitBranchPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/IntegrationDestinationPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/IntegrationSourcePresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/IntegrationSourceStreamPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/KernelPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/LogPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/MonitorStatPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/OutputPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/PipelinePresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/PipelineRunPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/PipelineSchedulePresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/ProjectPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/SchedulerPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/SecretPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/SessionPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/SyncPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/UserPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/VariablePresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/WidgetPresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/WorkspacePresenter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/mixins/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/presenters/mixins/users.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/AutocompleteItemResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/BackfillResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/BaseResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/BlockOutputResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/BlockResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/BlockRunResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/BlockTemplateResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/ClusterResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/DataProviderResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/DatabaseResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/EventRuleResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/ExtensionOptionResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/FileContentResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/FileResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/FileVersionResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/GenericResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/GitBranchResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/IntegrationDestinationResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/IntegrationSourceResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/IntegrationSourceStreamResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/KernelResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/MonitorStatResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/OutputResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/PipelineResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/PipelineRunResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/PipelineScheduleResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/ProjectResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/Resource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/SchedulerResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/SecretResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/SessionResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/SyncResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/UserResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/VariableResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/WidgetResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/WorkspaceResource.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/mixins/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/shared/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/shared/collections.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/resources/shared/collective_loaders.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/result_set.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/api/views.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/authentication/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/authentication/ldap.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/authentication/oauth2.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/authentication/passwords.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/autocomplete/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/autocomplete/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cli/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cli/main.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cli/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cluster_manager/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cluster_manager/aws/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cluster_manager/aws/ecs_task_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cluster_manager/aws/emr_cluster_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cluster_manager/cluster_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cluster_manager/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cluster_manager/gcp/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cluster_manager/gcp/cloud_run_service_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cluster_manager/kubernetes/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/cluster_manager/kubernetes/workload_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/analysis/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/analysis/calculator.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/analysis/charts.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/analysis/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/clean_column_names.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/fix_syntax_errors.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/impute_values.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/reformat_values.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/remove_collinear_columns.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_high_empty_rate.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_single_value.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/remove_duplicate_rows.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/cleaning_rules/remove_outliers.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/column_types/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/column_types/column_type_detector.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/column_types/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/data_cleaner.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/estimators/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/estimators/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/estimators/encoders.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/estimators/outlier_removal.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/pipelines/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/pipelines/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/shared/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/shared/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/statistics/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/statistics/calculator.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/action_code.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/column.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/custom_action.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/dependency_resolution.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/helpers.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/row.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/shared.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/spark/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/spark/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/spark/transformers.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/addition.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/constant.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/date_trunc.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/difference.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/distance_between.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/divide.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/formatted_date.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/if_else.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/multiply.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/string_replace.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/string_split.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/udf/substring.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_cleaner/transformer_actions/variable_replacer.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/destinations/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/destinations/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/logger/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/logger/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/sources/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/sources/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/utils/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/utils/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/utils/parsers.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_integrations/utils/scheduler.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/decorators.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/block_executor.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/ecs_block_executor.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/executor_factory.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/gcp_cloud_run_block_executor.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/k8s_block_executor.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/k8s_pipeline_executor.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/pipeline_executor.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/pyspark_block_executor.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/pyspark_pipeline_executor.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/git/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/logging/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/logging/gcs_logger_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/logging/logger.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/logging/logger_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/logging/logger_manager_factory.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/logging/s3_logger_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/dbt/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/dbt/utils/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/errors.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/extension/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/extension/block.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/extension/great_expectations.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/extension/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/integration/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/r/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/r/templates/data_exporter.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/r/templates/data_loader.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/r/templates/transformer.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/bigquery.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/clickhouse.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/druid.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/mssql.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/mysql.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/postgres.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/redshift.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/snowflake.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/spark.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/trino.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/utils/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/sql/utils/shared.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/block/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/errors.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/file.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/pipeline.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/pipelines/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/pipelines/integration_pipeline.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/pipelines/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/project.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/triggers/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/variable.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/widget/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/widget/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/models/widget/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/preferences.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/repo_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/shared/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/shared/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/shared/secrets.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/shared/stream.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/shared/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/storage/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/storage/base_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/storage/local_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/storage/s3_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/storage/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/sync/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/sync/base_sync.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/sync/git_sync.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/callbacks/base.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/callbacks/default.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/callbacks/orchestration/triggers/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/custom/python/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/azure_blob_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/bigquery.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/deltalake/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/deltalake/azure_blob_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/deltalake/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/deltalake/gcs.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/deltalake/s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/file.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/google_cloud_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/mongodb.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/mysql.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/orchestration/triggers/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/postgres.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/pyspark/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/pyspark/s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/r/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/redshift.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/snowflake.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/streaming/dummy.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/streaming/kafka.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/streaming/kinesis.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/streaming/mongodb.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/streaming/opensearch.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_exporters/streaming/s3.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/api.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/azure_blob_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/bigquery.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/deltalake/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/deltalake/azure_blob_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/deltalake/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/deltalake/gcs.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/deltalake/s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/druid.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/file.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/google_cloud_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/mongodb.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/mysql.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/orchestration/triggers/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/postgres.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/pyspark/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/pyspark/s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/r/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/redshift.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/snowflake.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/streaming/amazon_sqs.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/streaming/azure_event_hub.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/streaming/google_cloud_pubsub.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/streaming/kafka.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/streaming/kinesis.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/data_loaders/streaming/rabbitmq.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/extensions/great_expectations/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/main/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/main/metadata.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/main/projects/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/pipeline/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/pipeline/metadata.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/pipeline_execution/emr_bootstrap.sh +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/pipeline_execution/spark_script.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/charts/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/custom/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/data_exporters/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/data_exporters/export_titanic_clean.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/data_loaders/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/data_loaders/load_titanic.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/dbt/profiles.yml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/extensions/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/io_config.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/metadata.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/pipelines/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/metadata.yaml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/requirements.txt +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/scratchpads/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/transformers/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/transformers/fill_in_missing_values.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/repo/utils/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/sensors/bigquery.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/sensors/default.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/sensors/mysql.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/sensors/postgres.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/sensors/redshift.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/sensors/s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/sensors/snowflake.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/template.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/testable.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/data_warehouse_transformer.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/default.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/default_pyspark.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/default_streaming.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/r/default.r +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/suggestion_fmt.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/action.jinja +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/average.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/clean_column_name.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count_distinct.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/diff.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/first.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/fix_syntax_errors.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/impute.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/last.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/max.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/median.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/min.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/normalize.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/reformat.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove_outliers.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/select.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_down.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_up.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/standardize.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/sum.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/drop_duplicate.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/filter.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/remove.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/sort.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/templates/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/utils/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/utils/block/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/utils/block/convert_content.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/variable_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/errors/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/errors/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/extensions/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/extensions/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/extensions/dbt/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/extensions/dbt/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/extensions/great_expectations/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/extensions/great_expectations/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/azure_blob_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/bigquery.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/clickhouse.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/druid.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/export_utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/file.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/google_cloud_storage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/io_config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/mongodb.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/mssql.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/mysql.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/postgres.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/redshift.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/snowflake.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/spark.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/sql.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/trino.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/io/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/airflow.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/backfills/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/backfills/service.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/alembic.ini +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/database_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/errors.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/README.md +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/env.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/script.py.mako +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/053ee2c10d85_add_completed_at.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/067326f43bc3_add_variables_to_pipelinerun.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/1a737bdee53b_add_preferences_to_user.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/1d8e65aeefdd_add_settings_to_pipeline_schedule.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/1f9353eddbc6_add_secrets_table.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/21e31d66ccea_add_pipeline_uuid_index_to_pipeline_.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/2266370f589b_add_indexes_to_pipeline_run.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/26305e46df52_create_backfills_table.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/3fafd217efa7_add_event_matcher_model.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/52ab80005742_add_variables_to_pipeline_schedule.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/5cd59ec4cf1d_add_passed_sla_to_pipeline_run.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/643b6e65e814_add_unique_indexes_on_authentication_.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/66e67039b8a2_add_executor_type_to_pipeline_run.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/6aecc9bc451c_update_schedule_type_enum.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/7ac6fed06918_add_token_column_to_pipeline_schedule_.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/847ea6602d6f_add_upstream_failed_to_block_run_status.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/84de4cdd6126_add_sla_to_pipeline_schedule.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/8971d4cd5b39_add_event_variables_and_metadata_to_.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/97ff9f55a3c0_create_users_oauth2_applications_and_.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/b01be687e537_add_started_at_to_block_run.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/c07a23ff782b_add_initial_tables.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/migrations/versions/ec5df57a1c60_add_metrics_to_block_runs.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/models/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/models/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/models/oauth.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/models/secrets.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/db/process.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/execution_process_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/job_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/metrics/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/metrics/pipeline_run.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/monitor/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/monitor/monitor_stats.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/notification/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/notification/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/queue/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/queue/celery_queue.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/queue/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/queue/process_queue.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/queue/queue.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/queue/queue_factory.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/run_status_checker.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/triggers/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/triggers/api.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/triggers/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/triggers/event_trigger.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/triggers/loop_time_trigger.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/triggers/time_trigger.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/utils/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/orchestration/utils/resources.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/sample_datasets/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/sample_datasets/product_purchases.csv +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/sample_datasets/salary_survey.csv +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/sample_datasets/titanic_survival.csv +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/sample_datasets/user_emails.csv +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/active_kernel.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/blocks.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/clusters.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/errors.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/events.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/integration_sources.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/projects.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/triggers.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/api/v1.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/app.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/client/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/client/mage.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/data/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/data/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/data/models.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/docs_server.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/execution_manager.py +0 -0
- {mage-ai-0.8.78/mage_ai/server/frontend_dist/_next/static/m8Ltx9sPofwrShNBHkhe- → mage-ai-0.8.80/mage_ai/server/frontend_dist/_next/static/K62oaHK5x3k16vVxdvIWf}/_middlewareManifest.js +0 -0
- {mage-ai-0.8.78/mage_ai/server/frontend_dist/_next/static/m8Ltx9sPofwrShNBHkhe- → mage-ai-0.8.80/mage_ai/server/frontend_dist/_next/static/K62oaHK5x3k16vVxdvIWf}/_ssgManifest.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/1005-38fa861ca54679db.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/1150.1378afaa474df64a.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/1240.0819f45820d22263.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/1286-a62050b3f897c6be.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/1424-fbc7f741303c0aa0.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/1450.d383f64c169d4278.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/1774-aa51ef1da7217ff9.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/2125-0b537dc53fe71b18.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/2481.0454a0e25dc7e027.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/2508.724531e7f9cf5f36.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/2545.8371b39c898ae92b.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/261.0a24b4ece1d29aa1.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/266.e301071d22592682.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/2714-1e79e9f2e998b544.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/29107295-989a0767a635d9d5.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/3077-187a4db6073d95df.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/3453.992f4b1667e9882c.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/3467.38cd0654ba6f788f.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/3835.df296b4e4078e985.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/3873.4b3eace753998412.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/3898.880191695bb05845.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/4042.5e16d36209052351.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/4092.536ee541241f4538.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/4388.04098706f32e69e7.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/440.3ab77942f659ea0c.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/4450.79f14f763d55c63e.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/4454.13a2404adecaa39e.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/4495-4f0340aa82e0c623.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/4776.753ad29fa0a29a4a.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/4804-01a10103ebe26ca8.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/4883.a5bb0edbf8f3cc8f.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/5008.29c2662ecc2b04c7.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/5104.1edcf4437c471dd4.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/5164.857023e800905b6f.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/547-833b70469e82cb2b.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/5540-1025c6b3e65558b3.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/5729.0f2748e9e6dab951.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/5824.628653557e904674.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/5872-1767c45ee6690ae5.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/5896-10a676bcc86978cc.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/6042.c59010de9e699437.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/6115.0c85e507543394ea.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/6116.871a682ddf535aca.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/6434.10380ee0968636ba.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/6443.7b6d2b4e51018184.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/6507.d3a17777d2c294e6.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/6567-2488118bb39a9d99.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/6958.8f39c585d36737a7.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/7011-81dd8269c4806d26.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/7107-b89772bb2a2669df.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/72fdc299.2d5ec188af5d0049.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/739.3d24945544b37e52.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/7607-324c3a1e4e7d0628.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/792.010ca00d79b2112f.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/7947.77be4bec4d47774e.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/7951.fee8b6c27c9ef777.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8018.968bf87c390e3312.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8097.b0345f30a7390c1d.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8180-325d712ecbed97ce.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8256.290ceb269b1ffe26.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/826.75268ee34f93393a.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8277.5003e1d94bb85156.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/844-1e171f361e63b36d.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8762.dff300f86bef8573.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8789-4f858e520d46973b.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8807.a68c69c8fe0a8c01.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8849.db0d50b4d84b09a6.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8901.21d26d5a1ee473fe.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/8920.5700e380a2999098.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9129-8ae88897c3817909.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9258.6c6ef544c701a011.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9307.d4baf7aebbcef1f0.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9350-1ff50f1d7b9ee754.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9361.a0820e3069f5ef74.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9363.6b811b4c86277e07.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9437.a3c32f45cf9ef69b.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9566.f8bd24768ed14ecb.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9633.40e5056ca1e2b22a.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9785.5ff26cb26d84d6a1.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9832-f97919376d52e3bf.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9855.c4394a68322be9f8.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/9927.e82a3e1e21990d77.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/bd1a647f.6050372acaa5cc3c.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/framework-7c365855dab1bf41.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/main-bb0dd5375146d7fd.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-b25383366d854e8e.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/_error-235304e5badb19eb.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/index-b6cd94a079629572.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-eba67ac0edfdea1b.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-128dd171c6fff7ac.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-9e519ad50f639e00.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-f08b51d9dc56eab5.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-0751190c3f720f8c.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-302e1bd9fbf39994.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-7635e7031335de0f.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-5244d6c5d80af010.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-90170de1e6fe8f04.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-88994d0bcf41cf9e.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-3c42f05001416811.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-891c3d3f7a2b634b.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-456d84426ffe5025.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-05f43f9eaf6528db.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]-ca9457e1a6bced4b.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-c73dab1d63317556.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-f5626eb662337ad5.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-292e840e9386335e.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-353dc1ef2fadf70b.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-cd838435ed1b8383.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings-d594a66a568306da.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-56fb21d1b7d55ca9.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-d15ea617ef145b32.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/test-bd801bde63db7c9e.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-df30a0006fd775b8.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/polyfills-5cd94c89d3acac5f.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/chunks/webpack-bc5e4eb2c1ff587c.js +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/_next/static/css/d1e8e64d0b07af2f.css +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/favicon.ico +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Bold.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Light.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Medium.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Regular.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Retina.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-SemiBold.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/LICENSE.txt +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Black.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Bold.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Italic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Light.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Medium.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Regular.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Thin.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/LICENSE.txt +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/README.txt +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-Italic-VariableFont_wght.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Bold.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-BoldItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLight.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLightItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Italic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Light.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-LightItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Medium.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-MediumItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Regular.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBold.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBoldItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Thin.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ThinItalic.ttf +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/images/backfill.jpg +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/images/banner-shape-purple-peach.jpg +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/images/dashboard-api-key.webp +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/images/extensions/dbt/logo.png +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/images/extensions/great_expectations/logo.png +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/images/extra.jpg +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/images/monitor.jpg +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/images/run B.jpg +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/images/sessions/abstract.png +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/frontend_dist/vercel.svg +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/kernels.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/logger.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/scheduler_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/server.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/subscriber.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/terminal_server.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/utils/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/utils/frontend_renderer.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/utils/output_display.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/server/websocket_server.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/airbyte/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/airbyte/client.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/airbyte/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/airbyte/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/airbyte/exceptions.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/airbyte/server.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/ecs/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/ecs/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/ecs/ecs.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/emr/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/emr/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/emr/emr.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/emr/emr_basics.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/emr/launcher.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/emr/resource_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/events/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/events/events.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/s3/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/s3/s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/secrets_manager/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/aws/secrets_manager/secrets_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/datadog/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/dbt/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/dbt/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/dbt/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/dbt/dbt.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/email/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/email/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/email/email.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/gcp/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/gcp/cloud_run/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/google_chat/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/google_chat/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/google_chat/google_chat.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/hightouch/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/hightouch/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/hightouch/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/hightouch/hightouch.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/k8s/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/k8s/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/k8s/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/k8s/job_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/metaplane/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/metaplane/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/metaplane/metaplane.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/opsgenie/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/opsgenie/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/opsgenie/opsgenie.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/slack/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/slack/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/slack/slack.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/stitch/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/stitch/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/stitch/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/stitch/stitch.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/teams/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/teams/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/teams/teams.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/tracking/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/services/tracking/metrics.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/settings/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/array.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/code.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/conversions.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/custom_types.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/dates.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/environments.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/hash.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/http_client.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/io.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/logger.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/multi.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/parsers.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/retry.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/security.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/strings.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/urls.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/shared/utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sinks/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sinks/amazon_s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sinks/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sinks/dummy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sinks/kafka.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sinks/kinesis.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sinks/mongodb.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sinks/opensearch.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sinks/sink_factory.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sources/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sources/amazon_sqs.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sources/azure_event_hub.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sources/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sources/google_cloud_pubsub.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sources/kafka.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sources/kinesis.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sources/rabbitmq.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sources/shared.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/streaming/sources/source_factory.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/api/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/api/operations/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/api/operations/base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/api/operations/test_operations.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/api/operations/test_sessions.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/api/operations/test_users.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/base_test.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/cleaning_rules/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/cleaning_rules/test_clean_column_names.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/cleaning_rules/test_fix_syntax_error.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/cleaning_rules/test_impute_values.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/cleaning_rules/test_reformat_values.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_collinear_columns.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_high_empty_rate.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_single_value.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_duplicate_rows.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_outliers.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/statistics/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/statistics/test_calculator.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/test_column_type_detector.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/transformer_actions/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/transformer_actions/shared.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/transformer_actions/test_base.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/transformer_actions/test_column.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/transformer_actions/test_custom_actions.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/transformer_actions/test_helpers.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/transformer_actions/test_row.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/transformer_actions/test_utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_cleaner/transformer_actions/test_variable_replacer.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/git/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/git/test_git.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/models/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/models/block/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/models/block/test_sql.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/models/test_block.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/models/test_pipeline.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/models/test_variable.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/test_templates.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/data_preparation/test_variable_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/factory.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/io/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/io/test_config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/io/test_export_utils.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/db/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/notification/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/notification/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/notification/test_config.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/queue/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/queue/test_process_queue.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/test_execution_process_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/test_job_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/test_pipeline_scheduler.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/triggers/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/triggers/test_event_trigger.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/orchestration/triggers/test_loop_time_trigger.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/services/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/services/aws/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/services/aws/s3/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/services/aws/s3/test_s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/services/datadog/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/services/datadog/test_datadog.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/services/k8s/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/services/k8s/test_job_manager.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/shared/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/shared/test_io.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/shared/test_retry.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/shared/test_security.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sinks/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sinks/test_amazon_s3.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sinks/test_dummy.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sinks/test_kinesis.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sinks/test_mongodb.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sinks/test_opensearch.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sinks/test_sink_factory.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sources/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sources/test_amazon_sqs.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sources/test_azure_event_hub.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sources/test_google_cloud_pubsub.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sources/test_kafka.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sources/test_kinesis.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sources/test_rabbitmq.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/streaming/sources/test_source_factory.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/tests/test_shared.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/usage_statistics/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/usage_statistics/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/utils/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/utils/code.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/utils/logger/__init__.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/utils/logger/constants.py +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai.egg-info/dependency_links.txt +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai.egg-info/entry_points.txt +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai.egg-info/requires.txt +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai.egg-info/top_level.txt +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/pyproject.toml +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/requirements.txt +0 -0
- {mage-ai-0.8.78 → mage-ai-0.8.80}/setup.cfg +0 -0
|
@@ -12,10 +12,12 @@ StatusPolicy.allow_actions([
|
|
|
12
12
|
constants.LIST,
|
|
13
13
|
], scopes=[
|
|
14
14
|
OauthScope.CLIENT_PRIVATE,
|
|
15
|
-
|
|
15
|
+
OauthScope.CLIENT_PUBLIC,
|
|
16
|
+
])
|
|
16
17
|
|
|
17
18
|
StatusPolicy.allow_read(StatusPresenter.default_attributes, scopes=[
|
|
18
19
|
OauthScope.CLIENT_PRIVATE,
|
|
20
|
+
OauthScope.CLIENT_PUBLIC,
|
|
19
21
|
], on_action=[
|
|
20
22
|
constants.LIST,
|
|
21
|
-
]
|
|
23
|
+
])
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
|
+
from typing import Dict, List
|
|
3
|
+
|
|
4
|
+
from sqlalchemy.orm import aliased
|
|
5
|
+
|
|
2
6
|
from mage_ai.api.errors import ApiError
|
|
3
7
|
from mage_ai.api.operations.constants import META_KEY_LIMIT
|
|
4
8
|
from mage_ai.api.resources.GenericResource import GenericResource
|
|
5
9
|
from mage_ai.data_preparation.models.pipeline import Pipeline
|
|
6
10
|
from mage_ai.orchestration.db import safe_db_query
|
|
7
|
-
from mage_ai.orchestration.db.models.schedules import
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
from mage_ai.orchestration.db.models.schedules import (
|
|
12
|
+
BlockRun,
|
|
13
|
+
PipelineRun,
|
|
14
|
+
PipelineSchedule,
|
|
15
|
+
)
|
|
10
16
|
|
|
11
17
|
MAX_LOG_FILES = 20
|
|
12
18
|
|
|
@@ -96,6 +102,7 @@ class LogResource(GenericResource):
|
|
|
96
102
|
a.pipeline_schedule_id,
|
|
97
103
|
a.pipeline_schedule_id,
|
|
98
104
|
a.pipeline_uuid,
|
|
105
|
+
a.variables,
|
|
99
106
|
]
|
|
100
107
|
|
|
101
108
|
total_pipeline_run_log_count = 0
|
|
@@ -155,6 +162,7 @@ class LogResource(GenericResource):
|
|
|
155
162
|
model.execution_date = row.execution_date
|
|
156
163
|
model.pipeline_schedule_id = row.pipeline_schedule_id
|
|
157
164
|
model.pipeline_uuid = row.pipeline_uuid
|
|
165
|
+
model.variables = row.variables
|
|
158
166
|
logs = await model.logs_async()
|
|
159
167
|
pipeline_log_file_path = logs.get('path')
|
|
160
168
|
if pipeline_log_file_path not in processed_pipeline_run_log_files:
|
|
@@ -235,6 +243,7 @@ class LogResource(GenericResource):
|
|
|
235
243
|
model.execution_date = row.execution_date
|
|
236
244
|
model.pipeline_schedule_id = row.pipeline_schedule_id
|
|
237
245
|
model.pipeline_uuid = row.pipeline_uuid
|
|
246
|
+
model.variables = row.variables
|
|
238
247
|
|
|
239
248
|
model2 = BlockRun()
|
|
240
249
|
model2.block_uuid = row.block_uuid
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
|
|
3
3
|
from mage_ai.api.resources.GenericResource import GenericResource
|
|
4
|
+
from mage_ai.data_preparation.models.constants import MAX_PRINT_OUTPUT_LINES
|
|
4
5
|
from mage_ai.data_preparation.repo_manager import (
|
|
5
6
|
ProjectType,
|
|
6
7
|
get_project_type,
|
|
@@ -53,6 +54,7 @@ class StatusResource(GenericResource):
|
|
|
53
54
|
'scheduler_status': scheduler_manager.get_status(),
|
|
54
55
|
'instance_type': instance_type,
|
|
55
56
|
'disable_pipeline_edit_access': is_disable_pipeline_edit_access(),
|
|
57
|
+
'max_print_output_lines': MAX_PRINT_OUTPUT_LINES,
|
|
56
58
|
'require_user_authentication': REQUIRE_USER_AUTHENTICATION,
|
|
57
59
|
}
|
|
58
60
|
return self.build_result_set([status], user, **kwargs)
|
{mage-ai-0.8.78 → mage-ai-0.8.80}/mage_ai/data_preparation/executors/streaming_pipeline_executor.py
RENAMED
|
@@ -1,15 +1,18 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import copy
|
|
3
|
+
import logging
|
|
4
|
+
import os
|
|
1
5
|
from contextlib import redirect_stderr, redirect_stdout
|
|
6
|
+
from typing import Callable, Dict, List, Union
|
|
7
|
+
|
|
8
|
+
import yaml
|
|
9
|
+
|
|
2
10
|
from mage_ai.data_preparation.executors.pipeline_executor import PipelineExecutor
|
|
3
11
|
from mage_ai.data_preparation.logging.logger import DictLogger
|
|
4
12
|
from mage_ai.data_preparation.models.constants import BlockType
|
|
5
13
|
from mage_ai.data_preparation.models.pipeline import Pipeline
|
|
6
14
|
from mage_ai.data_preparation.shared.stream import StreamToLogger
|
|
7
15
|
from mage_ai.shared.hash import merge_dict
|
|
8
|
-
from typing import Callable, Dict, List, Union
|
|
9
|
-
import asyncio
|
|
10
|
-
import logging
|
|
11
|
-
import os
|
|
12
|
-
import yaml
|
|
13
16
|
|
|
14
17
|
|
|
15
18
|
class StreamingPipelineExecutor(PipelineExecutor):
|
|
@@ -21,7 +24,9 @@ class StreamingPipelineExecutor(PipelineExecutor):
|
|
|
21
24
|
def parse_and_validate_blocks(self):
|
|
22
25
|
"""
|
|
23
26
|
Find the first valid streaming pipeline is in the structure:
|
|
24
|
-
source ->
|
|
27
|
+
source -> transformer1 -> sink2
|
|
28
|
+
-> transformer2 -> sink2
|
|
29
|
+
-> transformer3 -> sink3
|
|
25
30
|
"""
|
|
26
31
|
blocks = self.pipeline.blocks_by_uuid.values()
|
|
27
32
|
source_blocks = []
|
|
@@ -29,24 +34,23 @@ class StreamingPipelineExecutor(PipelineExecutor):
|
|
|
29
34
|
transformer_blocks = []
|
|
30
35
|
for b in blocks:
|
|
31
36
|
if b.type == BlockType.DATA_LOADER:
|
|
37
|
+
# Data loader block should be root block
|
|
32
38
|
if len(b.upstream_blocks or []) > 0:
|
|
33
39
|
raise Exception(f'Data loader {b.uuid} can\'t have upstream blocks.')
|
|
34
|
-
if len(b.downstream_blocks or [])
|
|
35
|
-
raise Exception(f'Data loader {b.uuid} must have one transformer or
|
|
36
|
-
' exporter as the downstream block.')
|
|
40
|
+
if len(b.downstream_blocks or []) < 1:
|
|
41
|
+
raise Exception(f'Data loader {b.uuid} must have at least one transformer or'
|
|
42
|
+
' data exporter as the downstream block.')
|
|
37
43
|
source_blocks.append(b)
|
|
38
44
|
if b.type == BlockType.DATA_EXPORTER:
|
|
45
|
+
# Data exporter block should be leaf block
|
|
39
46
|
if len(b.downstream_blocks or []) > 0:
|
|
40
47
|
raise Exception(f'Data expoter {b.uuid} can\'t have downstream blocks.')
|
|
41
48
|
if len(b.upstream_blocks or []) != 1:
|
|
42
|
-
raise Exception(f'Data
|
|
43
|
-
'
|
|
49
|
+
raise Exception(f'Data exporter {b.uuid} must have a transformer or data'
|
|
50
|
+
' loader as the upstream block.')
|
|
44
51
|
sink_blocks.append(b)
|
|
45
52
|
if b.type == BlockType.TRANSFORMER:
|
|
46
|
-
|
|
47
|
-
raise Exception(
|
|
48
|
-
f'Transformer {b.uuid} should (only) have one downstream block.',
|
|
49
|
-
)
|
|
53
|
+
# Each transformer block can only have one upstream block
|
|
50
54
|
if len(b.upstream_blocks or []) != 1:
|
|
51
55
|
raise Exception(f'Transformer {b.uuid} should (only) have one upstream block.')
|
|
52
56
|
transformer_blocks.append(b)
|
|
@@ -54,15 +58,8 @@ class StreamingPipelineExecutor(PipelineExecutor):
|
|
|
54
58
|
if len(source_blocks) != 1:
|
|
55
59
|
raise Exception('Please provide (only) one data loader block as the source.')
|
|
56
60
|
|
|
57
|
-
if len(transformer_blocks) > 1:
|
|
58
|
-
raise Exception('Please provide no more than one transformer block.')
|
|
59
|
-
|
|
60
|
-
if len(sink_blocks) != 1:
|
|
61
|
-
raise Exception('Please provide (only) one data expoter block as the sink.')
|
|
62
|
-
|
|
63
61
|
self.source_block = source_blocks[0]
|
|
64
|
-
self.
|
|
65
|
-
self.transformer_block = transformer_blocks[0] if len(transformer_blocks) > 0 else None
|
|
62
|
+
self.sink_blocks = sink_blocks
|
|
66
63
|
|
|
67
64
|
def execute(
|
|
68
65
|
self,
|
|
@@ -97,11 +94,10 @@ class StreamingPipelineExecutor(PipelineExecutor):
|
|
|
97
94
|
raise e
|
|
98
95
|
|
|
99
96
|
def __execute_in_python(self, build_block_output_stdout: Callable[..., object] = None):
|
|
97
|
+
from mage_ai.streaming.sinks.sink_factory import SinkFactory
|
|
100
98
|
from mage_ai.streaming.sources.base import SourceConsumeMethod
|
|
101
99
|
from mage_ai.streaming.sources.source_factory import SourceFactory
|
|
102
|
-
from mage_ai.streaming.sinks.sink_factory import SinkFactory
|
|
103
100
|
source_config = yaml.safe_load(self.source_block.content)
|
|
104
|
-
sink_config = yaml.safe_load(self.sink_block.content)
|
|
105
101
|
source = SourceFactory.get_source(
|
|
106
102
|
source_config,
|
|
107
103
|
checkpoint_path=os.path.join(
|
|
@@ -109,47 +105,67 @@ class StreamingPipelineExecutor(PipelineExecutor):
|
|
|
109
105
|
'streaming_checkpoint',
|
|
110
106
|
),
|
|
111
107
|
)
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
108
|
+
|
|
109
|
+
sinks_by_uuid = dict()
|
|
110
|
+
for sink_block in self.sink_blocks:
|
|
111
|
+
sink_config = yaml.safe_load(sink_block.content)
|
|
112
|
+
sinks_by_uuid[sink_block.uuid] = SinkFactory.get_sink(
|
|
113
|
+
sink_config,
|
|
114
|
+
buffer_path=os.path.join(
|
|
115
|
+
self.pipeline.pipeline_variables_dir,
|
|
116
|
+
'buffer',
|
|
117
|
+
),
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
def handle_batch_events_recursively(curr_block, outputs_by_block: Dict, **kwargs):
|
|
121
|
+
curr_block_output = outputs_by_block[curr_block.uuid]
|
|
122
|
+
for downstream_block in curr_block.downstream_blocks:
|
|
123
|
+
if downstream_block.type == BlockType.TRANSFORMER:
|
|
124
|
+
execute_block_kwargs = dict(
|
|
125
|
+
global_vars=kwargs,
|
|
126
|
+
input_args=[copy.deepcopy(curr_block_output)],
|
|
127
|
+
logger=self.logger,
|
|
128
|
+
)
|
|
129
|
+
if build_block_output_stdout:
|
|
130
|
+
execute_block_kwargs['build_block_output_stdout'] = \
|
|
131
|
+
build_block_output_stdout
|
|
132
|
+
outputs_by_block[downstream_block.uuid] = \
|
|
133
|
+
downstream_block.execute_block(
|
|
134
|
+
**execute_block_kwargs,
|
|
135
|
+
)['output']
|
|
136
|
+
elif downstream_block.type == BlockType.DATA_EXPORTER:
|
|
137
|
+
sinks_by_uuid[downstream_block.uuid].batch_write(
|
|
138
|
+
copy.deepcopy(curr_block_output))
|
|
139
|
+
if downstream_block.downstream_blocks:
|
|
140
|
+
handle_batch_events_recursively(
|
|
141
|
+
downstream_block,
|
|
142
|
+
outputs_by_block,
|
|
143
|
+
**kwargs,
|
|
144
|
+
)
|
|
119
145
|
|
|
120
146
|
def handle_batch_events(messages: List[Union[Dict, str]], **kwargs):
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if build_block_output_stdout:
|
|
128
|
-
execute_block_kwargs['build_block_output_stdout'] = build_block_output_stdout
|
|
129
|
-
messages = self.transformer_block.execute_block(
|
|
130
|
-
**execute_block_kwargs,
|
|
131
|
-
)['output']
|
|
132
|
-
sink.batch_write(messages)
|
|
147
|
+
# Handle the events with DFS
|
|
148
|
+
|
|
149
|
+
outputs_by_block = dict()
|
|
150
|
+
outputs_by_block[self.source_block.uuid] = messages
|
|
151
|
+
|
|
152
|
+
handle_batch_events_recursively(self.source_block, outputs_by_block)
|
|
133
153
|
|
|
134
154
|
async def handle_event_async(message, **kwargs):
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
logger=self.logger,
|
|
140
|
-
)
|
|
141
|
-
if build_block_output_stdout:
|
|
142
|
-
execute_block_kwargs['build_block_output_stdout'] = build_block_output_stdout
|
|
143
|
-
messages = self.transformer_block.execute_block(
|
|
144
|
-
**execute_block_kwargs,
|
|
145
|
-
)['output']
|
|
146
|
-
sink.batch_write(messages)
|
|
155
|
+
outputs_by_block = dict()
|
|
156
|
+
outputs_by_block[self.source_block.uuid] = [message]
|
|
157
|
+
|
|
158
|
+
handle_batch_events_recursively(self.source_block, outputs_by_block)
|
|
147
159
|
|
|
148
160
|
# Long running method
|
|
149
161
|
if source.consume_method == SourceConsumeMethod.BATCH_READ:
|
|
150
162
|
source.batch_read(handler=handle_batch_events)
|
|
151
163
|
elif source.consume_method == SourceConsumeMethod.READ_ASYNC:
|
|
152
|
-
asyncio.
|
|
164
|
+
loop = asyncio.get_event_loop()
|
|
165
|
+
if loop is not None:
|
|
166
|
+
loop.run_until_complete(source.read_async(handler=handle_event_async))
|
|
167
|
+
else:
|
|
168
|
+
asyncio.run(source.read_async(handler=handle_event_async))
|
|
153
169
|
|
|
154
170
|
def __excute_in_flink(self):
|
|
155
171
|
"""
|
|
@@ -227,9 +227,11 @@ class Block:
|
|
|
227
227
|
status: BlockStatus = BlockStatus.NOT_EXECUTED,
|
|
228
228
|
pipeline=None,
|
|
229
229
|
language: BlockLanguage = BlockLanguage.PYTHON,
|
|
230
|
-
configuration: Dict =
|
|
230
|
+
configuration: Dict = None,
|
|
231
231
|
has_callback: bool = False,
|
|
232
232
|
):
|
|
233
|
+
if configuration is None:
|
|
234
|
+
configuration = dict()
|
|
233
235
|
self.name = name or uuid
|
|
234
236
|
self._uuid = uuid
|
|
235
237
|
self.type = block_type
|
|
@@ -614,7 +616,7 @@ class Block:
|
|
|
614
616
|
self,
|
|
615
617
|
global_vars: Dict = None,
|
|
616
618
|
logger: Logger = None,
|
|
617
|
-
logging_tags: Dict =
|
|
619
|
+
logging_tags: Dict = None,
|
|
618
620
|
**kwargs
|
|
619
621
|
):
|
|
620
622
|
"""
|
|
@@ -623,6 +625,9 @@ class Block:
|
|
|
623
625
|
websocket as a way to test the code in the callback. To run a block in a pipeline
|
|
624
626
|
run, use a BlockExecutor.
|
|
625
627
|
"""
|
|
628
|
+
if logging_tags is None:
|
|
629
|
+
logging_tags = dict()
|
|
630
|
+
|
|
626
631
|
arr = []
|
|
627
632
|
if self.callback_block:
|
|
628
633
|
arr.append(self.callback_block)
|
|
@@ -643,6 +648,7 @@ class Block:
|
|
|
643
648
|
global_vars=global_vars,
|
|
644
649
|
logger=logger,
|
|
645
650
|
logging_tags=logging_tags,
|
|
651
|
+
parent_block=self,
|
|
646
652
|
)
|
|
647
653
|
raise e
|
|
648
654
|
|
|
@@ -652,6 +658,7 @@ class Block:
|
|
|
652
658
|
global_vars=global_vars,
|
|
653
659
|
logger=logger,
|
|
654
660
|
logging_tags=logging_tags,
|
|
661
|
+
parent_block=self,
|
|
655
662
|
)
|
|
656
663
|
|
|
657
664
|
return output
|
|
@@ -664,7 +671,7 @@ class Block:
|
|
|
664
671
|
execution_partition: str = None,
|
|
665
672
|
global_vars: Dict = None,
|
|
666
673
|
logger: Logger = None,
|
|
667
|
-
logging_tags: Dict =
|
|
674
|
+
logging_tags: Dict = None,
|
|
668
675
|
run_all_blocks: bool = False,
|
|
669
676
|
test_execution: bool = False,
|
|
670
677
|
update_status: bool = True,
|
|
@@ -678,6 +685,9 @@ class Block:
|
|
|
678
685
|
run_settings: Dict = None,
|
|
679
686
|
**kwargs,
|
|
680
687
|
) -> Dict:
|
|
688
|
+
if logging_tags is None:
|
|
689
|
+
logging_tags = dict()
|
|
690
|
+
|
|
681
691
|
try:
|
|
682
692
|
if not run_all_blocks:
|
|
683
693
|
not_executed_upstream_blocks = list(
|
|
@@ -873,7 +883,7 @@ class Block:
|
|
|
873
883
|
execution_partition: str = None,
|
|
874
884
|
input_args: List = None,
|
|
875
885
|
logger: Logger = None,
|
|
876
|
-
logging_tags: Dict =
|
|
886
|
+
logging_tags: Dict = None,
|
|
877
887
|
global_vars: Dict = None,
|
|
878
888
|
test_execution: bool = False,
|
|
879
889
|
input_from_output: Dict = None,
|
|
@@ -883,6 +893,9 @@ class Block:
|
|
|
883
893
|
run_settings: Dict = None,
|
|
884
894
|
**kwargs,
|
|
885
895
|
) -> Dict:
|
|
896
|
+
if logging_tags is None:
|
|
897
|
+
logging_tags = dict()
|
|
898
|
+
|
|
886
899
|
# Add pipeline uuid and block uuid to global_vars
|
|
887
900
|
global_vars = merge_dict(
|
|
888
901
|
global_vars or dict(),
|
|
@@ -951,7 +964,7 @@ class Block:
|
|
|
951
964
|
execution_partition: str = None,
|
|
952
965
|
input_vars: List = None,
|
|
953
966
|
logger: Logger = None,
|
|
954
|
-
logging_tags: Dict =
|
|
967
|
+
logging_tags: Dict = None,
|
|
955
968
|
global_vars: Dict = None,
|
|
956
969
|
test_execution: bool = False,
|
|
957
970
|
input_from_output: Dict = None,
|
|
@@ -960,6 +973,9 @@ class Block:
|
|
|
960
973
|
run_settings: Dict = None,
|
|
961
974
|
**kwargs,
|
|
962
975
|
) -> List:
|
|
976
|
+
if logging_tags is None:
|
|
977
|
+
logging_tags = dict()
|
|
978
|
+
|
|
963
979
|
decorated_functions = []
|
|
964
980
|
test_functions = []
|
|
965
981
|
|
|
@@ -1531,13 +1547,18 @@ df = get_variable('{self.pipeline.uuid}', '{block_uuid}', 'df')
|
|
|
1531
1547
|
build_block_output_stdout: Callable[..., object] = None,
|
|
1532
1548
|
custom_code: str = None,
|
|
1533
1549
|
execution_partition: str = None,
|
|
1534
|
-
global_vars: Dict =
|
|
1550
|
+
global_vars: Dict = None,
|
|
1535
1551
|
logger: Logger = None,
|
|
1536
|
-
logging_tags: Dict =
|
|
1552
|
+
logging_tags: Dict = None,
|
|
1537
1553
|
update_tests: bool = True,
|
|
1538
1554
|
dynamic_block_uuid: str = None,
|
|
1539
1555
|
from_notebook: bool = False,
|
|
1540
1556
|
) -> None:
|
|
1557
|
+
if global_vars is None:
|
|
1558
|
+
global_vars = dict()
|
|
1559
|
+
if logging_tags is None:
|
|
1560
|
+
logging_tags = dict()
|
|
1561
|
+
|
|
1541
1562
|
self.dynamic_block_uuid = dynamic_block_uuid
|
|
1542
1563
|
|
|
1543
1564
|
if self.pipeline \
|
|
@@ -2133,6 +2154,8 @@ class CallbackBlock(Block):
|
|
|
2133
2154
|
pipeline_run=pipeline_run,
|
|
2134
2155
|
),
|
|
2135
2156
|
)
|
|
2157
|
+
if parent_block:
|
|
2158
|
+
global_vars['parent_block_uuid'] = parent_block.uuid
|
|
2136
2159
|
|
|
2137
2160
|
if parent_block and \
|
|
2138
2161
|
parent_block.pipeline and \
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import os
|
|
1
2
|
from enum import Enum
|
|
2
3
|
|
|
3
4
|
PIPELINES_FOLDER = 'pipelines'
|
|
@@ -19,6 +20,7 @@ DATAFRAME_ANALYSIS_MAX_COLUMNS = 100
|
|
|
19
20
|
DATAFRAME_SAMPLE_COUNT_PREVIEW = 10
|
|
20
21
|
DATAFRAME_SAMPLE_COUNT = 1000
|
|
21
22
|
DATAFRAME_SAMPLE_MAX_COLUMNS = 1000
|
|
23
|
+
MAX_PRINT_OUTPUT_LINES = int(os.getenv('MAX_PRINT_OUTPUT_LINES', 1000) or 1000)
|
|
22
24
|
VARIABLE_DIR = '.variables'
|
|
23
25
|
LOGS_DIR = '.logs'
|
|
24
26
|
|
|
@@ -82,10 +82,29 @@ def build_time_series_buckets(df, datetime_column, time_interval, metrics):
|
|
|
82
82
|
return []
|
|
83
83
|
|
|
84
84
|
datetimes = datetimes.unique()
|
|
85
|
-
min_value_datetime =
|
|
86
|
-
max_value_datetime =
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
min_value_datetime = datetimes.min()
|
|
86
|
+
max_value_datetime = datetimes.max()
|
|
87
|
+
|
|
88
|
+
if type(min_value_datetime) is str:
|
|
89
|
+
min_value_datetime = dateutil.parser.parse(min_value_datetime)
|
|
90
|
+
if type(max_value_datetime) is str:
|
|
91
|
+
max_value_datetime = dateutil.parser.parse(max_value_datetime)
|
|
92
|
+
|
|
93
|
+
# If you manually convert the datetime column to a datetime, Pandas will use numpy.datetime64
|
|
94
|
+
# type. This type does not have the methods year, month, day, etc that is used down below.
|
|
95
|
+
datetimes_temp = []
|
|
96
|
+
for dt in datetimes:
|
|
97
|
+
if type(dt) is np.datetime64:
|
|
98
|
+
datetimes_temp.append(pd.to_datetime(dt.astype(datetime)).to_pydatetime())
|
|
99
|
+
else:
|
|
100
|
+
datetimes_temp.append(dt)
|
|
101
|
+
datetimes = datetimes_temp
|
|
102
|
+
if type(min_value_datetime) is np.datetime64:
|
|
103
|
+
min_value_datetime = pd.to_datetime(min_value_datetime.astype(datetime)).to_pydatetime()
|
|
104
|
+
if type(max_value_datetime) is np.datetime64:
|
|
105
|
+
max_value_datetime = pd.to_datetime(max_value_datetime.astype(datetime)).to_pydatetime()
|
|
106
|
+
|
|
107
|
+
a, b = [dateutil.parser.parse(d) if type(d) is str else d for d in sorted(datetimes)[:2]]
|
|
89
108
|
|
|
90
109
|
year = min_value_datetime.year
|
|
91
110
|
month = min_value_datetime.month
|
|
@@ -237,6 +237,8 @@ class PipelineRun(BaseModel):
|
|
|
237
237
|
|
|
238
238
|
@property
|
|
239
239
|
def execution_partition(self) -> str:
|
|
240
|
+
if self.variables and self.variables.get('execution_partition'):
|
|
241
|
+
return self.variables.get('execution_partition')
|
|
240
242
|
if self.execution_date is None:
|
|
241
243
|
return str(self.pipeline_schedule_id)
|
|
242
244
|
else:
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
1
3
|
from mage_ai.orchestration.notification.config import AlertOn, NotificationConfig
|
|
2
4
|
from mage_ai.services.email.email import send_email
|
|
5
|
+
from mage_ai.services.google_chat.google_chat import send_google_chat_message
|
|
3
6
|
from mage_ai.services.opsgenie.opsgenie import send_opsgenie_alert
|
|
4
7
|
from mage_ai.services.slack.slack import send_slack_message
|
|
5
8
|
from mage_ai.services.teams.teams import send_teams_message
|
|
6
|
-
from mage_ai.services.google_chat.google_chat import send_google_chat_message
|
|
7
9
|
from mage_ai.settings import MAGE_PUBLIC_HOST
|
|
8
|
-
import os
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class NotificationSender:
|
|
@@ -18,10 +19,17 @@ class NotificationSender:
|
|
|
18
19
|
summary: str = None,
|
|
19
20
|
details: str = None,
|
|
20
21
|
) -> None:
|
|
22
|
+
"""Send messages to the notification channels.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
title (str, optional): Short sentence, used as title (e.g. Email subject)
|
|
26
|
+
summary (str, optional): Mid-length sentences, used as the summary of the message.
|
|
27
|
+
details (str, optional): Long message, used as the body of the message (e.g. Email body)
|
|
28
|
+
"""
|
|
21
29
|
if summary is None:
|
|
22
30
|
return
|
|
23
31
|
if self.config.slack_config is not None and self.config.slack_config.is_valid:
|
|
24
|
-
send_slack_message(self.config.slack_config, summary)
|
|
32
|
+
send_slack_message(self.config.slack_config, details or summary)
|
|
25
33
|
|
|
26
34
|
if self.config.teams_config is not None and self.config.teams_config.is_valid:
|
|
27
35
|
send_teams_message(self.config.teams_config, summary)
|
|
@@ -75,9 +83,14 @@ class NotificationSender:
|
|
|
75
83
|
f'at execution time `{pipeline_run.execution_date}`.'
|
|
76
84
|
)
|
|
77
85
|
email_content = f'{message}\n'
|
|
78
|
-
if os.getenv('ENV') != 'production':
|
|
86
|
+
if os.getenv('ENV') != 'production' or MAGE_PUBLIC_HOST != 'http://localhost:6789':
|
|
87
|
+
"""
|
|
88
|
+
Include the URL for the following cases
|
|
89
|
+
1. Dev environment: Use the default localhost as host in URL
|
|
90
|
+
2. Production environment: If MAGE_PUBLIC_HOST is set, use it as host.
|
|
91
|
+
"""
|
|
79
92
|
email_content += f'Open {self.__pipeline_run_url(pipeline, pipeline_run)} '\
|
|
80
|
-
|
|
93
|
+
'to check pipeline run results and logs.'
|
|
81
94
|
self.send(
|
|
82
95
|
title=f'Failed to run Mage pipeline {pipeline.uuid}',
|
|
83
96
|
summary=message,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import os
|
|
1
2
|
import traceback
|
|
2
3
|
from datetime import datetime, timedelta
|
|
3
4
|
from typing import Any, Dict, List, Tuple
|
|
@@ -274,7 +275,9 @@ class PipelineScheduler:
|
|
|
274
275
|
tags=merge_dict(tags, dict(metrics=self.pipeline_run.metrics)),
|
|
275
276
|
)
|
|
276
277
|
|
|
277
|
-
def memory_usage_failure(self, tags: Dict =
|
|
278
|
+
def memory_usage_failure(self, tags: Dict = None) -> None:
|
|
279
|
+
if tags is None:
|
|
280
|
+
tags = dict()
|
|
278
281
|
msg = 'Memory usage across all pipeline runs has reached or exceeded the maximum '\
|
|
279
282
|
f'limit of {int(MEMORY_USAGE_MAXIMUM * 100)}%.'
|
|
280
283
|
self.logger.info(msg, tags=tags)
|
|
@@ -603,7 +606,8 @@ def run_integration_pipeline(
|
|
|
603
606
|
while True:
|
|
604
607
|
block_runs_in_order.append(
|
|
605
608
|
find(
|
|
606
|
-
lambda b: b.block_uuid ==
|
|
609
|
+
lambda b: b.block_uuid ==
|
|
610
|
+
f'{current_block.uuid}:{tap_stream_id}:{idx}', # noqa: B023
|
|
607
611
|
all_block_runs,
|
|
608
612
|
)
|
|
609
613
|
)
|
|
@@ -616,11 +620,11 @@ def run_integration_pipeline(
|
|
|
616
620
|
data_exporter_uuid = f'{data_exporter_block.uuid}:{tap_stream_id}:{idx}'
|
|
617
621
|
|
|
618
622
|
data_loader_block_run = find(
|
|
619
|
-
lambda b: b.block_uuid == data_loader_uuid,
|
|
623
|
+
lambda b: b.block_uuid == data_loader_uuid, # noqa: B023
|
|
620
624
|
all_block_runs,
|
|
621
625
|
)
|
|
622
626
|
data_exporter_block_run = find(
|
|
623
|
-
lambda b: b.block_uuid == data_exporter_uuid,
|
|
627
|
+
lambda b: b.block_uuid == data_exporter_uuid, # noqa: B023
|
|
624
628
|
block_runs_for_stream,
|
|
625
629
|
)
|
|
626
630
|
if not data_loader_block_run or not data_exporter_block_run:
|
|
@@ -653,7 +657,7 @@ def run_integration_pipeline(
|
|
|
653
657
|
block_runs_and_configs = block_runs_and_configs[1:]
|
|
654
658
|
|
|
655
659
|
block_failed = False
|
|
656
|
-
for
|
|
660
|
+
for _, tup in enumerate(block_runs_and_configs):
|
|
657
661
|
block_run, template_runtime_configuration = tup
|
|
658
662
|
|
|
659
663
|
tags_updated = merge_dict(tags, dict(
|
|
@@ -813,7 +817,7 @@ def run_block(
|
|
|
813
817
|
block_grandparent_uuid,
|
|
814
818
|
)
|
|
815
819
|
|
|
816
|
-
for idx,
|
|
820
|
+
for idx, _ in enumerate(values):
|
|
817
821
|
if idx < len(block_metadata):
|
|
818
822
|
metadata = block_metadata[idx].copy()
|
|
819
823
|
else:
|
|
@@ -880,8 +884,10 @@ def run_pipeline(pipeline_run_id, variables, tags):
|
|
|
880
884
|
def configure_pipeline_run_payload(
|
|
881
885
|
pipeline_schedule: PipelineSchedule,
|
|
882
886
|
pipeline_type: PipelineType,
|
|
883
|
-
payload: Dict =
|
|
887
|
+
payload: Dict = None,
|
|
884
888
|
) -> Tuple[Dict, bool]:
|
|
889
|
+
if payload is None:
|
|
890
|
+
payload = dict()
|
|
885
891
|
if 'variables' not in payload:
|
|
886
892
|
payload['variables'] = {}
|
|
887
893
|
|
|
@@ -893,6 +899,13 @@ def configure_pipeline_run_payload(
|
|
|
893
899
|
elif not isinstance(execution_date, datetime):
|
|
894
900
|
payload['execution_date'] = datetime.fromisoformat(execution_date)
|
|
895
901
|
|
|
902
|
+
# Set execution_partition in variables
|
|
903
|
+
payload['variables']['execution_partition'] = \
|
|
904
|
+
os.sep.join([
|
|
905
|
+
str(pipeline_schedule.id),
|
|
906
|
+
payload['execution_date'].strftime(format='%Y%m%dT%H%M%S_%f'),
|
|
907
|
+
])
|
|
908
|
+
|
|
896
909
|
is_integration = PipelineType.INTEGRATION == pipeline_type
|
|
897
910
|
if is_integration:
|
|
898
911
|
payload['create_block_runs'] = False
|
|
@@ -1115,7 +1128,9 @@ def schedule_all():
|
|
|
1115
1128
|
job_manager.clean_up_jobs()
|
|
1116
1129
|
|
|
1117
1130
|
|
|
1118
|
-
def schedule_with_event(event: Dict =
|
|
1131
|
+
def schedule_with_event(event: Dict = None):
|
|
1132
|
+
if event is None:
|
|
1133
|
+
event = dict()
|
|
1119
1134
|
logger.info(f'Schedule with event {event}')
|
|
1120
1135
|
all_event_matchers = EventMatcher.active_event_matchers()
|
|
1121
1136
|
for e in all_event_matchers:
|
|
@@ -1145,7 +1160,9 @@ def sync_schedules(pipeline_uuids: List[str]):
|
|
|
1145
1160
|
PipelineSchedule.create_or_update(pipeline_trigger)
|
|
1146
1161
|
|
|
1147
1162
|
|
|
1148
|
-
def get_variables(pipeline_run, extra_variables: Dict =
|
|
1163
|
+
def get_variables(pipeline_run, extra_variables: Dict = None) -> Dict:
|
|
1164
|
+
if extra_variables is None:
|
|
1165
|
+
extra_variables = dict()
|
|
1149
1166
|
if not pipeline_run:
|
|
1150
1167
|
return {}
|
|
1151
1168
|
|