mage-ai 0.8.25__tar.gz → 0.8.27__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.25/mage_ai.egg-info → mage-ai-0.8.27}/PKG-INFO +1 -1
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/sources/constants.py +1 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/streaming_pipeline_executor.py +2 -1
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/logger_manager.py +7 -1
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/__init__.py +60 -17
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/__init__.py +64 -17
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/utils/shared.py +49 -3
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/variable.py +6 -1
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/repo_manager.py +5 -2
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/shared/secrets.py +6 -3
- mage-ai-0.8.27/mage_ai/data_preparation/templates/sensors/bigquery.py +32 -0
- mage-ai-0.8.27/mage_ai/data_preparation/templates/sensors/mysql.py +33 -0
- mage-ai-0.8.27/mage_ai/data_preparation/templates/sensors/postgres.py +33 -0
- mage-ai-0.8.27/mage_ai/data_preparation/templates/sensors/redshift.py +33 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/sensors/s3.py +11 -7
- mage-ai-0.8.27/mage_ai/data_preparation/templates/sensors/snowflake.py +33 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/postgres.py +13 -1
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/constants.py +1 -1
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/404.html +2 -2
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/404.html.html +2 -2
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/WbTBCvyjQQ9UFFLZOU1E5/_buildManifest.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/2344-f8ae030d6a6863ae.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/2626-e7fa4f83f8214c97.js +1 -0
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/4178-663d9f70bffc7a47.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/4178-a6d1bd2be4706f51.js +1 -1
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/4261-88b0103fad331620.js +1 -0
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/4538-8a3c3e47be976ede.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/4538-347283088b83c6bf.js +1 -1
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/5141-57c3868a80196da8.js +1 -0
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/5477-e2cc1ca7108ebc6b.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/5477-b439f211b6146a11.js +1 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/5872-103815a4a043489b.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/5872-1767c45ee6690ae5.js +1 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/5896-f84e336fb8877027.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/5896-10a676bcc86978cc.js +1 -1
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/6166-705b4fdecaf11e63.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/6532-b1bd0b3f422abec8.js +1 -0
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/7400-26ce25ec46728ef7.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/7400-a48b270726b9eef5.js +1 -1
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/8180-8de652170ea5ed93.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/839-15c54471a9a9bf2e.js +1 -0
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/9386-4b9e157e18dd2c65.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/9386-d4cc11bab74eec8d.js +1 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/9832-c8b8970bb522f302.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/9832-f97919376d52e3bf.js +1 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-624f87faa4b5ee9a.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-5f3dbed367342a3d.js +1 -1
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-3046bc53d24917c7.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-f6059e27e601627c.js +1 -0
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-123556bdfe2e194b.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-050ef37b6672100a.js +1 -1
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-5f95bb4c3a2d7d46.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-270c0198eeef1542.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-c9f1df40e0aa6981.js +1 -0
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-e0eb0098dcbf27ac.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-d74850779dbe87b3.js +1 -1
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-848544a58563dbec.js +1 -0
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-204daac985c03b62.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-675171cfd7d7b346.js +1 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-44533e244974a422.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-b2955f0ff960894e.js +1 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-2d41695001370abc.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-219960b3cc4742e3.js +1 -1
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-1767a2f57f887ef7.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-0f373aaa7deb98c9.js +1 -0
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-181343d8eb894426.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-bea0439ca2a862ba.js +1 -1
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-7446a70bdd8381a5.js +1 -0
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-cd6121ffe82e3834.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-997acba85f777259.js +1 -1
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-91fbb84976467947.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-d72dfc596e943cc4.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-c99e74aa506a6cfd.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-4c9ad80f8f9d1074.js +1 -0
- mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-783b9526167f1249.js +1 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/index.html +2 -2
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/manage.html +4 -4
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipeline-runs.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/settings/account/profile.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/settings/workspace/preferences.html +5 -5
- mage-ai-0.8.25/mage_ai/server/frontend_dist/settings/workspace/sync_data.html → mage-ai-0.8.27/mage_ai/server/frontend_dist/settings/workspace/sync-data.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/settings/workspace/users.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/settings.html +2 -2
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/sign-in.html +9 -9
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/terminal.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/test.html +3 -3
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/triggers.html +5 -5
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/server.py +1 -6
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/security.py +9 -2
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/utils.py +7 -0
- mage-ai-0.8.27/mage_ai/tests/data_preparation/models/block/test_sql.py +42 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/models/test_block.py +63 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/shared/test_security.py +6 -6
- mage-ai-0.8.27/mage_ai/utils/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27/mage_ai.egg-info}/PKG-INFO +1 -1
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai.egg-info/SOURCES.txt +49 -42
- {mage-ai-0.8.25 → mage-ai-0.8.27}/setup.py +1 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/ErmV1Ii-luEqAYMZkbkmO/_buildManifest.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/1830-3882c19d710feadd.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/2344-a82a406b72fe782b.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/2626-501fffa58c71ee7c.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/3688-562e0f129b09d1cd.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/3699-dcc0946dd0709216.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/4463-777e71000be29fc4.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/6532-baf1818fbc89e6c1.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/6567-2488118bb39a9d99.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-11d6cbf2313f0689.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-c226d1e215d66129.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-26974ca695994804.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-1de289b75e9c5bf1.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-72011b08ef047531.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-3b17a6d28cdde471.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-c31fec2be1160dbe.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-3a60003fce7dfb93.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-0e88f39d4980fc10.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync_data-64e03c3a285d301e.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-ff24167e21f2f0cf.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-404d934deb8950d5.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-90abd9c4dfca2556.js +0 -1
- mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-6540e41d09691d6b.js +0 -1
- {mage-ai-0.8.25 → mage-ai-0.8.27}/LICENSE +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/MANIFEST.in +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/README.md +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/api_context.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/errors.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/logging.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/middleware.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/monitors/BaseMonitor.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/monitors/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/oauth_scope.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/operations/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/operations/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/operations/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/AutocompleteItemPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/BackfillPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/BasePolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/BlockPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/BlockRunPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/ClusterPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/DataProviderPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/EventRulePolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/ExtensionOptionPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/FileContentPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/FilePolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/FileVersionPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/GitBranchPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/IntegrationDestinationPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/IntegrationSourcePolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/IntegrationSourceStreamPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/KernelPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/LogPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/MonitorStatPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/OutputPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/PipelinePolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/PipelineRunPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/PipelineSchedulePolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/ProjectPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/SecretPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/SessionPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/SyncPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/UserPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/VariablePolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/WidgetPolicy.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/AutocompleteItemPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/BackfillPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/BasePresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/BlockPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/BlockRunPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/ClusterPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/DataProviderPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/EventRulePresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/ExtensionOptionPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/FileContentPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/FilePresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/FileVersionPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/GitBranchPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/IntegrationDestinationPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/IntegrationSourcePresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/IntegrationSourceStreamPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/KernelPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/LogPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/MonitorStatPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/OutputPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/PipelinePresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/PipelineRunPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/PipelineSchedulePresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/ProjectPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/SecretPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/SessionPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/SyncPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/UserPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/VariablePresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/WidgetPresenter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/mixins/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/mixins/users.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/AutocompleteItemResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/BackfillResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/BaseResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/BlockResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/BlockRunResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/ClusterResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/DataProviderResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/DatabaseResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/EventRuleResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/ExtensionOptionResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/FileContentResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/FileResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/FileVersionResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/GenericResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/GitBranchResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/IntegrationDestinationResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/IntegrationSourceResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/IntegrationSourceStreamResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/KernelResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/LogResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/MonitorStatResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/OutputResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/PipelineResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/PipelineRunResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/PipelineScheduleResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/ProjectResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/Resource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/SecretResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/SessionResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/SyncResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/UserResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/VariableResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/WidgetResource.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/mixins/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/shared/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/shared/collections.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/shared/collective_loaders.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/result_set.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/views.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/authentication/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/authentication/ldap.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/authentication/oauth2.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/authentication/passwords.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/autocomplete/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/autocomplete/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cli/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cli/main.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cli/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/aws/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/aws/ecs_task_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/aws/emr_cluster_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/cluster_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/gcp/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/gcp/cloud_run_service_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/kubernetes/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/kubernetes/workload_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/analysis/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/analysis/calculator.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/analysis/charts.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/analysis/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/clean_column_names.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/fix_syntax_errors.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/impute_values.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/reformat_values.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/remove_collinear_columns.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_high_empty_rate.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_single_value.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/remove_duplicate_rows.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/remove_outliers.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/column_types/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/column_types/column_type_detector.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/column_types/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/data_cleaner.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/estimators/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/estimators/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/estimators/encoders.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/estimators/outlier_removal.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/pipelines/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/pipelines/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/shared/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/shared/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/statistics/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/statistics/calculator.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/action_code.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/column.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/custom_action.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/dependency_resolution.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/helpers.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/row.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/shared.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/spark/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/spark/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/spark/transformers.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/addition.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/constant.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/date_trunc.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/difference.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/distance_between.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/divide.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/formatted_date.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/if_else.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/multiply.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/string_replace.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/string_split.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/substring.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/variable_replacer.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/destinations/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/destinations/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/logger/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/logger/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/sources/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/utils/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/utils/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/utils/parsers.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/utils/scheduler.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/decorators.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/block_executor.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/ecs_block_executor.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/executor_factory.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/gcp_cloud_run_block_executor.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/k8s_block_executor.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/pipeline_executor.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/pyspark_block_executor.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/pyspark_pipeline_executor.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/git/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/gcs_logger_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/logger.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/logger_manager_factory.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/s3_logger_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/dbt/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/dbt/utils/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/errors.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/extension/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/extension/block.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/extension/great_expectations.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/extension/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/integration/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/r/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/r/templates/data_exporter.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/r/templates/data_loader.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/r/templates/transformer.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/bigquery.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/mssql.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/mysql.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/postgres.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/redshift.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/snowflake.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/trino.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/utils/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/errors.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/file.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/pipeline.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/pipelines/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/pipelines/integration_pipeline.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/pipelines/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/widget/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/widget/charts.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/widget/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/widget/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/preferences.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/shared/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/shared/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/shared/stream.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/shared/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/storage/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/storage/base_storage.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/storage/local_storage.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/storage/s3_storage.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/storage/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/sync/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/sync/base_sync.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/sync/git_sync.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/callbacks/default.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/custom/python/default.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/azure_blob_storage.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/bigquery.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/default.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/file.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/google_cloud_storage.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/mysql.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/postgres.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/pyspark/default.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/pyspark/s3.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/r/default.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/redshift.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/s3.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/snowflake.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/streaming/kafka.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/streaming/kinesis.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/streaming/opensearch.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/api.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/azure_blob_storage.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/bigquery.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/default.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/file.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/google_cloud_storage.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/mysql.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/postgres.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/pyspark/default.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/pyspark/s3.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/r/default.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/redshift.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/s3.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/snowflake.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/streaming/azure_event_hub.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/streaming/kafka.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/streaming/kinesis.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/streaming/rabbitmq.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/extensions/great_expectations/default.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/pipeline/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/pipeline/metadata.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/pipeline_execution/emr_bootstrap.sh +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/pipeline_execution/spark_script.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/charts/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/custom/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/data_exporters/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/data_exporters/export_titanic_clean.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/data_loaders/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/data_loaders/load_titanic.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/dbt/profiles.yml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/extensions/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/io_config.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/metadata.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/pipelines/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/metadata.yaml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/requirements.txt +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/scratchpads/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/transformers/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/transformers/fill_in_missing_values.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/utils/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/sensors/default.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/template.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/testable.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/data_warehouse_transformer.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/default.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/default_pyspark.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/default_streaming.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/r/default.r +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/suggestion_fmt.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/action.jinja +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/average.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/clean_column_name.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count_distinct.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/diff.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/first.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/fix_syntax_errors.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/impute.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/last.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/max.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/median.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/min.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/normalize.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/reformat.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove_outliers.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/select.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_down.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_up.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/standardize.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/sum.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/drop_duplicate.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/filter.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/remove.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/sort.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/utils/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/utils/block/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/utils/block/convert_content.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/variable_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/errors/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/errors/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/extensions/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/extensions/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/extensions/great_expectations/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/extensions/great_expectations/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/azure_blob_storage.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/bigquery.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/export_utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/file.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/google_cloud_storage.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/io_config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/mssql.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/mysql.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/redshift.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/s3.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/snowflake.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/sql.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/trino.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/airflow.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/backfills/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/backfills/service.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/alembic.ini +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/database_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/errors.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/README.md +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/env.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/script.py.mako +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/053ee2c10d85_add_completed_at.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/067326f43bc3_add_variables_to_pipelinerun.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/1d8e65aeefdd_add_settings_to_pipeline_schedule.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/1f9353eddbc6_add_secrets_table.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/2266370f589b_add_indexes_to_pipeline_run.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/26305e46df52_create_backfills_table.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/3fafd217efa7_add_event_matcher_model.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/52ab80005742_add_variables_to_pipeline_schedule.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/5cd59ec4cf1d_add_passed_sla_to_pipeline_run.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/643b6e65e814_add_unique_indexes_on_authentication_.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/6aecc9bc451c_update_schedule_type_enum.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/7ac6fed06918_add_token_column_to_pipeline_schedule_.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/847ea6602d6f_add_upstream_failed_to_block_run_status.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/84de4cdd6126_add_sla_to_pipeline_schedule.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/8971d4cd5b39_add_event_variables_and_metadata_to_.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/97ff9f55a3c0_create_users_oauth2_applications_and_.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/b01be687e537_add_started_at_to_block_run.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/c07a23ff782b_add_initial_tables.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/ec5df57a1c60_add_metrics_to_block_runs.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/models.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/process.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/execution_process_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/job_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/metrics/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/metrics/pipeline_run.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/monitor/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/monitor/monitor_stats.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/notification/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/notification/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/notification/sender.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/pipeline_scheduler.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/celery_queue.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/process_queue.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/queue.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/queue_factory.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/run_status_checker.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/triggers/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/triggers/event_trigger.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/triggers/loop_time_trigger.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/triggers/time_trigger.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/utils/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/utils/resources.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/sample_datasets/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/sample_datasets/product_purchases.csv +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/sample_datasets/salary_survey.csv +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/sample_datasets/titanic_survival.csv +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/sample_datasets/user_emails.csv +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/active_kernel.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/blocks.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/clusters.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/errors.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/events.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/integration_sources.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/projects.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/triggers.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/v1.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/app.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/client/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/client/mage.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/data/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/data/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/data/models.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/docs_server.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/execution_manager.py +0 -0
- {mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/ErmV1Ii-luEqAYMZkbkmO → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/WbTBCvyjQQ9UFFLZOU1E5}/_middlewareManifest.js +0 -0
- {mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/ErmV1Ii-luEqAYMZkbkmO → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/WbTBCvyjQQ9UFFLZOU1E5}/_ssgManifest.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/1150.1378afaa474df64a.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/1240.0819f45820d22263.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/1286-a62050b3f897c6be.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/1450.d383f64c169d4278.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/1774-aa51ef1da7217ff9.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2083-78a438dbdc57d1e4.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2125-0b537dc53fe71b18.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2481.0454a0e25dc7e027.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2508.724531e7f9cf5f36.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2524-6aeb9419acf5d1b4.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2545.8371b39c898ae92b.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/261.0a24b4ece1d29aa1.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/266.e301071d22592682.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2714-1e79e9f2e998b544.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/29107295-989a0767a635d9d5.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3453.992f4b1667e9882c.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3467.38cd0654ba6f788f.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3835.df296b4e4078e985.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3850-6395783d820def1c.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3873.4b3eace753998412.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3898.880191695bb05845.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4042.5e16d36209052351.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4092.536ee541241f4538.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4388.04098706f32e69e7.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/440.3ab77942f659ea0c.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4450.79f14f763d55c63e.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4454.13a2404adecaa39e.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4495-4f0340aa82e0c623.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4776.753ad29fa0a29a4a.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4804-01a10103ebe26ca8.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4883.a5bb0edbf8f3cc8f.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/5008.29c2662ecc2b04c7.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/5104.1edcf4437c471dd4.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/5164.857023e800905b6f.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/5729.0f2748e9e6dab951.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/5824.628653557e904674.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6042.c59010de9e699437.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6085-692d2f784c0504f2.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6115.0c85e507543394ea.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6116.871a682ddf535aca.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6434.10380ee0968636ba.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6443.7b6d2b4e51018184.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6507.d3a17777d2c294e6.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6958.8f39c585d36737a7.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/7011-81dd8269c4806d26.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/72fdc299.2d5ec188af5d0049.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/739.3d24945544b37e52.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/792.010ca00d79b2112f.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/7947.77be4bec4d47774e.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/7951.fee8b6c27c9ef777.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8018.968bf87c390e3312.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8097.b0345f30a7390c1d.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8256.290ceb269b1ffe26.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/826.75268ee34f93393a.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8277.5003e1d94bb85156.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8762.dff300f86bef8573.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8789-4f858e520d46973b.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8807.a68c69c8fe0a8c01.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8849.db0d50b4d84b09a6.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8901.21d26d5a1ee473fe.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8920.5700e380a2999098.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9258.6c6ef544c701a011.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9307.d4baf7aebbcef1f0.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9361.a0820e3069f5ef74.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9363.6b811b4c86277e07.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9437.a3c32f45cf9ef69b.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9565-28e1c30511c95c2d.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9566.f8bd24768ed14ecb.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9633.40e5056ca1e2b22a.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9785.5ff26cb26d84d6a1.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9855.c4394a68322be9f8.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9927.e82a3e1e21990d77.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/bd1a647f.6050372acaa5cc3c.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/framework-7c365855dab1bf41.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/main-bb0dd5375146d7fd.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/_error-235304e5badb19eb.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/index-e34a68d2f6fe16f2.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]-ca9457e1a6bced4b.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-f1844beb127841f3.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings-d594a66a568306da.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/test-85cf18ae78ff535c.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/polyfills-5cd94c89d3acac5f.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/webpack-bc5e4eb2c1ff587c.js +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/css/d1e8e64d0b07af2f.css +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/favicon.ico +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Bold.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Light.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Medium.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Regular.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Retina.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-SemiBold.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/LICENSE.txt +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Black.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Bold.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Italic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Light.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Medium.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Regular.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Thin.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/LICENSE.txt +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/README.txt +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-Italic-VariableFont_wght.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Bold.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-BoldItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLight.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLightItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Italic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Light.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-LightItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Medium.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-MediumItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Regular.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBold.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBoldItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Thin.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ThinItalic.ttf +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/backfill.jpg +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/banner-shape-purple-peach.jpg +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/dashboard-api-key.webp +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/extensions/great_expectations/logo.png +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/extra.jpg +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/monitor.jpg +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/run B.jpg +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/sessions/abstract.png +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/vercel.svg +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/kernel_output_parser.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/kernels.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/scheduler_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/subscriber.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/utils/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/utils/frontend_renderer.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/utils/output_display.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/websocket_server.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/client.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/exceptions.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/server.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/ecs/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/ecs/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/ecs/ecs.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/emr.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/emr_basics.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/launcher.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/resource_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/events/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/events/events.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/s3/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/s3/s3.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/secrets_manager/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/secrets_manager/secrets_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/datadog/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/dbt/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/dbt/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/dbt/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/dbt/dbt.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/email/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/email/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/email/email.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/gcp/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/gcp/cloud_run/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/gcp/cloud_run/cloud_run.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/gcp/cloud_run/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/hightouch/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/hightouch/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/hightouch/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/hightouch/hightouch.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/k8s/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/k8s/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/k8s/job_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/metaplane/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/metaplane/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/metaplane/metaplane.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/slack/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/slack/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/slack/slack.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/stitch/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/stitch/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/stitch/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/stitch/stitch.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/teams/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/teams/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/teams/teams.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/tracking/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/tracking/metrics.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/settings/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/array.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/code.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/conversions.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/custom_types.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/dates.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/environments.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/hash.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/http_client.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/io.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/logger.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/multi.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/parsers.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/retry.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/strings.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/urls.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/kafka.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/kinesis.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/opensearch.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/sink_factory.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/azure_event_hub.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/kafka.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/kinesis.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/rabbitmq.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/source_factory.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/operations/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/operations/base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/operations/test_operations.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/operations/test_sessions.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/operations/test_users.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/base_test.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_clean_column_names.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_fix_syntax_error.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_impute_values.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_reformat_values.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_collinear_columns.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_high_empty_rate.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_single_value.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_duplicate_rows.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_outliers.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/statistics/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/statistics/test_calculator.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/test_column_type_detector.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/shared.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_base.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_column.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_custom_actions.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_helpers.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_row.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_utils.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_variable_replacer.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/models/__init__.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/io → mage-ai-0.8.27/mage_ai/tests/data_preparation/models/block}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/models/test_pipeline.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/models/test_variable.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/test_templates.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/test_variable_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/factory.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/orchestration → mage-ai-0.8.27/mage_ai/tests/io}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/io/test_config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/io/test_export_utils.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/orchestration/db → mage-ai-0.8.27/mage_ai/tests/orchestration}/__init__.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/orchestration/notification → mage-ai-0.8.27/mage_ai/tests/orchestration/db}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/db/test_models.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/orchestration/queue → mage-ai-0.8.27/mage_ai/tests/orchestration/notification}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/notification/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/notification/test_config.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/notification/test_sender.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/orchestration/triggers → mage-ai-0.8.27/mage_ai/tests/orchestration/queue}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/queue/test_process_queue.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/test_execution_process_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/test_job_manager.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/test_pipeline_scheduler.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/services → mage-ai-0.8.27/mage_ai/tests/orchestration/triggers}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/triggers/test_event_trigger.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/triggers/test_loop_time_trigger.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/services/aws → mage-ai-0.8.27/mage_ai/tests/services}/__init__.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/services/aws/s3 → mage-ai-0.8.27/mage_ai/tests/services/aws}/__init__.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/services/datadog → mage-ai-0.8.27/mage_ai/tests/services/aws/s3}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/services/aws/s3/test_s3.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/services/k8s → mage-ai-0.8.27/mage_ai/tests/services/datadog}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/services/datadog/test_datadog.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/shared → mage-ai-0.8.27/mage_ai/tests/services/k8s}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/services/k8s/test_job_manager.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/streaming → mage-ai-0.8.27/mage_ai/tests/shared}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/shared/test_io.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/shared/test_retry.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/streaming/sinks → mage-ai-0.8.27/mage_ai/tests/streaming}/__init__.py +0 -0
- {mage-ai-0.8.25/mage_ai/tests/streaming/sources → mage-ai-0.8.27/mage_ai/tests/streaming/sinks}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sinks/test_kinesis.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sinks/test_opensearch.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sinks/test_sink_factory.py +0 -0
- {mage-ai-0.8.25/mage_ai/utils → mage-ai-0.8.27/mage_ai/tests/streaming/sources}/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sources/test_azure_event_hub.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sources/test_kafka.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sources/test_kinesis.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sources/test_rabbitmq.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sources/test_source_factory.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/test_shared.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/utils/code.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/utils/logger/__init__.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/utils/logger/constants.py +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai.egg-info/dependency_links.txt +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai.egg-info/entry_points.txt +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai.egg-info/requires.txt +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai.egg-info/top_level.txt +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/pyproject.toml +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/requirements.txt +0 -0
- {mage-ai-0.8.25 → mage-ai-0.8.27}/setup.cfg +0 -0
{mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/streaming_pipeline_executor.py
RENAMED
|
@@ -3,6 +3,7 @@ from mage_ai.data_preparation.executors.pipeline_executor import PipelineExecuto
|
|
|
3
3
|
from mage_ai.data_preparation.models.constants import BlockType
|
|
4
4
|
from mage_ai.data_preparation.models.pipeline import Pipeline
|
|
5
5
|
from mage_ai.data_preparation.shared.stream import StreamToLogger
|
|
6
|
+
from mage_ai.shared.hash import merge_dict
|
|
6
7
|
from typing import Callable, Dict, List, Union
|
|
7
8
|
import os
|
|
8
9
|
import yaml
|
|
@@ -83,7 +84,7 @@ class StreamingPipelineExecutor(PipelineExecutor):
|
|
|
83
84
|
if not build_block_output_stdout:
|
|
84
85
|
self.logger.exception(
|
|
85
86
|
f'Failed to execute streaming pipeline {self.pipeline.uuid}',
|
|
86
|
-
error=e,
|
|
87
|
+
**merge_dict(dict(error=e), tags),
|
|
87
88
|
)
|
|
88
89
|
raise e
|
|
89
90
|
|
|
@@ -7,6 +7,8 @@ import io
|
|
|
7
7
|
import logging
|
|
8
8
|
import os
|
|
9
9
|
|
|
10
|
+
MAX_LOG_FILE_SIZE = 5 * 1024 * 1024
|
|
11
|
+
|
|
10
12
|
|
|
11
13
|
class LoggerManager:
|
|
12
14
|
def __init__(
|
|
@@ -50,7 +52,11 @@ class LoggerManager:
|
|
|
50
52
|
handler = self.create_stream_handler()
|
|
51
53
|
else:
|
|
52
54
|
log_filepath = self.get_log_filepath(create_dir=True)
|
|
53
|
-
handler = logging.
|
|
55
|
+
handler = logging.handlers.RotatingFileHandler(
|
|
56
|
+
log_filepath,
|
|
57
|
+
backupCount=10,
|
|
58
|
+
maxBytes=MAX_LOG_FILE_SIZE,
|
|
59
|
+
)
|
|
54
60
|
|
|
55
61
|
handler.setLevel(self.log_level)
|
|
56
62
|
handler.setFormatter(self.formatter)
|
|
@@ -4,6 +4,7 @@ from inspect import Parameter, signature
|
|
|
4
4
|
from logging import Logger
|
|
5
5
|
from mage_ai.data_cleaner.shared.utils import (
|
|
6
6
|
is_geo_dataframe,
|
|
7
|
+
is_spark_dataframe,
|
|
7
8
|
)
|
|
8
9
|
from mage_ai.data_preparation.models.block.extension.utils import handle_run_tests
|
|
9
10
|
from mage_ai.data_preparation.models.block.utils import (
|
|
@@ -251,6 +252,10 @@ class Block:
|
|
|
251
252
|
self.dynamic_block_uuid = None
|
|
252
253
|
self.dynamic_upstream_block_uuids = None
|
|
253
254
|
|
|
255
|
+
# Spark session
|
|
256
|
+
self.spark = None
|
|
257
|
+
self.spark_init = False
|
|
258
|
+
|
|
254
259
|
@property
|
|
255
260
|
def uuid(self):
|
|
256
261
|
return self.dynamic_block_uuid or self._uuid
|
|
@@ -347,23 +352,22 @@ class Block:
|
|
|
347
352
|
@property
|
|
348
353
|
def full_table_name(self) -> str:
|
|
349
354
|
from mage_ai.data_preparation.models.block.sql.utils.shared import (
|
|
350
|
-
|
|
355
|
+
extract_create_statement_table_name,
|
|
356
|
+
extract_insert_statement_table_names,
|
|
351
357
|
)
|
|
352
358
|
|
|
353
359
|
if not self.content:
|
|
354
360
|
return None
|
|
355
361
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
r'\(',
|
|
360
|
-
)
|
|
362
|
+
table_name = extract_create_statement_table_name(self.content)
|
|
363
|
+
if table_name:
|
|
364
|
+
return table_name
|
|
361
365
|
|
|
362
|
-
|
|
366
|
+
matches = extract_insert_statement_table_names(self.content)
|
|
367
|
+
if len(matches) == 0:
|
|
363
368
|
return None
|
|
364
369
|
|
|
365
|
-
|
|
366
|
-
return parts[-1]
|
|
370
|
+
return matches[len(matches) - 1]
|
|
367
371
|
|
|
368
372
|
@classmethod
|
|
369
373
|
def after_create(self, block: 'Block', **kwargs):
|
|
@@ -1041,7 +1045,6 @@ class Block:
|
|
|
1041
1045
|
block_uuid,
|
|
1042
1046
|
partition=execution_partition,
|
|
1043
1047
|
)
|
|
1044
|
-
|
|
1045
1048
|
if not include_print_outputs:
|
|
1046
1049
|
all_variables = self.output_variables(execution_partition=execution_partition)
|
|
1047
1050
|
|
|
@@ -1051,6 +1054,7 @@ class Block:
|
|
|
1051
1054
|
block_uuid,
|
|
1052
1055
|
v,
|
|
1053
1056
|
partition=execution_partition,
|
|
1057
|
+
spark=self.__get_spark_session(),
|
|
1054
1058
|
)
|
|
1055
1059
|
|
|
1056
1060
|
if variable_type is not None and variable_object.variable_type != variable_type:
|
|
@@ -1059,6 +1063,7 @@ class Block:
|
|
|
1059
1063
|
data = variable_object.read_data(
|
|
1060
1064
|
sample=True,
|
|
1061
1065
|
sample_count=sample_count,
|
|
1066
|
+
spark=self.__get_spark_session(),
|
|
1062
1067
|
)
|
|
1063
1068
|
if type(data) is pd.DataFrame:
|
|
1064
1069
|
try:
|
|
@@ -1118,6 +1123,19 @@ df = get_variable('{self.pipeline.uuid}', '{self.uuid}', 'df')
|
|
|
1118
1123
|
type=DataType.TEXT,
|
|
1119
1124
|
variable_uuid=v,
|
|
1120
1125
|
)
|
|
1126
|
+
elif is_spark_dataframe(data):
|
|
1127
|
+
df = data.toPandas()
|
|
1128
|
+
columns_to_display = df.columns.tolist()[:DATAFRAME_ANALYSIS_MAX_COLUMNS]
|
|
1129
|
+
data = dict(
|
|
1130
|
+
sample_data=dict(
|
|
1131
|
+
columns=columns_to_display,
|
|
1132
|
+
rows=json.loads(df[columns_to_display].to_json(orient='split'))['data']
|
|
1133
|
+
),
|
|
1134
|
+
type=DataType.TABLE,
|
|
1135
|
+
variable_uuid=v,
|
|
1136
|
+
)
|
|
1137
|
+
data_products.append(data)
|
|
1138
|
+
continue
|
|
1121
1139
|
outputs.append(data)
|
|
1122
1140
|
return outputs + data_products
|
|
1123
1141
|
|
|
@@ -1154,6 +1172,7 @@ df = get_variable('{self.pipeline.uuid}', '{self.uuid}', 'df')
|
|
|
1154
1172
|
block_uuid,
|
|
1155
1173
|
v,
|
|
1156
1174
|
partition=execution_partition,
|
|
1175
|
+
spark=self.__get_spark_session(),
|
|
1157
1176
|
)
|
|
1158
1177
|
|
|
1159
1178
|
if variable_type is not None and variable_object.variable_type != variable_type:
|
|
@@ -1162,6 +1181,7 @@ df = get_variable('{self.pipeline.uuid}', '{self.uuid}', 'df')
|
|
|
1162
1181
|
data = await variable_object.read_data_async(
|
|
1163
1182
|
sample=True,
|
|
1164
1183
|
sample_count=sample_count,
|
|
1184
|
+
spark=self.__get_spark_session(),
|
|
1165
1185
|
)
|
|
1166
1186
|
if type(data) is pd.DataFrame:
|
|
1167
1187
|
try:
|
|
@@ -1221,6 +1241,19 @@ df = get_variable('{self.pipeline.uuid}', '{block_uuid}', 'df')
|
|
|
1221
1241
|
type=DataType.TEXT,
|
|
1222
1242
|
variable_uuid=v,
|
|
1223
1243
|
)
|
|
1244
|
+
elif is_spark_dataframe(data):
|
|
1245
|
+
df = data.toPandas()
|
|
1246
|
+
columns_to_display = df.columns.tolist()[:DATAFRAME_ANALYSIS_MAX_COLUMNS]
|
|
1247
|
+
data = dict(
|
|
1248
|
+
sample_data=dict(
|
|
1249
|
+
columns=columns_to_display,
|
|
1250
|
+
rows=json.loads(df[columns_to_display].to_json(orient='split'))['data']
|
|
1251
|
+
),
|
|
1252
|
+
type=DataType.TABLE,
|
|
1253
|
+
variable_uuid=v,
|
|
1254
|
+
)
|
|
1255
|
+
data_products.append(data)
|
|
1256
|
+
continue
|
|
1224
1257
|
outputs.append(data)
|
|
1225
1258
|
return outputs + data_products
|
|
1226
1259
|
|
|
@@ -1651,14 +1684,23 @@ df = get_variable('{self.pipeline.uuid}', '{block_uuid}', 'df')
|
|
|
1651
1684
|
is_spark_env()):
|
|
1652
1685
|
global_vars = global_vars or dict()
|
|
1653
1686
|
if not global_vars.get('spark'):
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
global_vars['spark'] =
|
|
1657
|
-
os.getenv('SPARK_MASTER_HOST', 'local')).getOrCreate()
|
|
1658
|
-
except Exception:
|
|
1659
|
-
pass
|
|
1687
|
+
spark = self.__get_spark_session()
|
|
1688
|
+
if spark is not None:
|
|
1689
|
+
global_vars['spark'] = spark
|
|
1660
1690
|
return global_vars
|
|
1661
1691
|
|
|
1692
|
+
def __get_spark_session(self):
|
|
1693
|
+
if self.spark_init:
|
|
1694
|
+
return self.spark
|
|
1695
|
+
try:
|
|
1696
|
+
from pyspark.sql import SparkSession
|
|
1697
|
+
self.spark = SparkSession.builder.master(
|
|
1698
|
+
os.getenv('SPARK_MASTER_HOST', 'local')).getOrCreate()
|
|
1699
|
+
except Exception:
|
|
1700
|
+
self.spark = None
|
|
1701
|
+
self.spark_init = True
|
|
1702
|
+
return self.spark
|
|
1703
|
+
|
|
1662
1704
|
def __store_variables_prepare(
|
|
1663
1705
|
self,
|
|
1664
1706
|
variable_mapping: Dict,
|
|
@@ -1710,7 +1752,8 @@ df = get_variable('{self.pipeline.uuid}', '{block_uuid}', 'df')
|
|
|
1710
1752
|
dynamic_block_uuid,
|
|
1711
1753
|
)
|
|
1712
1754
|
for uuid, data in variables_data['variable_mapping'].items():
|
|
1713
|
-
if spark is not None and type
|
|
1755
|
+
if spark is not None and self.pipeline.type == PipelineType.PYSPARK \
|
|
1756
|
+
and type(data) is pd.DataFrame:
|
|
1714
1757
|
data = spark.createDataFrame(data)
|
|
1715
1758
|
self.pipeline.variable_manager.add_variable(
|
|
1716
1759
|
self.pipeline.uuid,
|
|
@@ -9,6 +9,7 @@ from mage_ai.data_preparation.models.block.sql import (
|
|
|
9
9
|
trino,
|
|
10
10
|
)
|
|
11
11
|
from mage_ai.data_preparation.models.block.sql.utils.shared import (
|
|
12
|
+
has_create_or_insert_statement,
|
|
12
13
|
interpolate_vars,
|
|
13
14
|
)
|
|
14
15
|
from mage_ai.data_preparation.models.constants import BlockType
|
|
@@ -18,7 +19,9 @@ from mage_ai.io.config import ConfigFileLoader
|
|
|
18
19
|
from os import path
|
|
19
20
|
from time import sleep
|
|
20
21
|
from typing import Any, Dict, List
|
|
22
|
+
import re
|
|
21
23
|
|
|
24
|
+
MAGE_SEMI_COLON = '__MAGE_SEMI_COLON__'
|
|
22
25
|
PREVIEWABLE_BLOCK_TYPES = [
|
|
23
26
|
BlockType.DATA_EXPORTER,
|
|
24
27
|
BlockType.DATA_LOADER,
|
|
@@ -82,6 +85,7 @@ def execute_sql_code(
|
|
|
82
85
|
loader,
|
|
83
86
|
block,
|
|
84
87
|
query_string,
|
|
88
|
+
configuration=configuration,
|
|
85
89
|
should_query=should_query,
|
|
86
90
|
)
|
|
87
91
|
else:
|
|
@@ -132,6 +136,7 @@ def execute_sql_code(
|
|
|
132
136
|
loader,
|
|
133
137
|
block,
|
|
134
138
|
query_string,
|
|
139
|
+
configuration=configuration,
|
|
135
140
|
should_query=should_query,
|
|
136
141
|
)
|
|
137
142
|
else:
|
|
@@ -172,6 +177,7 @@ def execute_sql_code(
|
|
|
172
177
|
loader,
|
|
173
178
|
block,
|
|
174
179
|
query_string,
|
|
180
|
+
configuration=configuration,
|
|
175
181
|
should_query=should_query,
|
|
176
182
|
)
|
|
177
183
|
else:
|
|
@@ -209,6 +215,7 @@ def execute_sql_code(
|
|
|
209
215
|
loader,
|
|
210
216
|
block,
|
|
211
217
|
query_string,
|
|
218
|
+
configuration=configuration,
|
|
212
219
|
should_query=should_query,
|
|
213
220
|
)
|
|
214
221
|
else:
|
|
@@ -246,6 +253,7 @@ def execute_sql_code(
|
|
|
246
253
|
loader,
|
|
247
254
|
block,
|
|
248
255
|
query_string,
|
|
256
|
+
configuration=configuration,
|
|
249
257
|
should_query=should_query,
|
|
250
258
|
)
|
|
251
259
|
else:
|
|
@@ -287,6 +295,7 @@ def execute_sql_code(
|
|
|
287
295
|
loader,
|
|
288
296
|
block,
|
|
289
297
|
query_string,
|
|
298
|
+
configuration=configuration,
|
|
290
299
|
should_query=should_query,
|
|
291
300
|
)
|
|
292
301
|
else:
|
|
@@ -329,6 +338,7 @@ def execute_sql_code(
|
|
|
329
338
|
loader,
|
|
330
339
|
block,
|
|
331
340
|
query_string,
|
|
341
|
+
configuration=configuration,
|
|
332
342
|
should_query=should_query,
|
|
333
343
|
)
|
|
334
344
|
else:
|
|
@@ -354,36 +364,73 @@ def execute_sql_code(
|
|
|
354
364
|
]
|
|
355
365
|
|
|
356
366
|
|
|
367
|
+
def split_query_string(query_string: str) -> List[str]:
|
|
368
|
+
text_parts = []
|
|
369
|
+
|
|
370
|
+
matches = re.finditer(r"'(.*?)'|\"(.*?)\"", query_string, re.IGNORECASE)
|
|
371
|
+
|
|
372
|
+
previous_idx = 0
|
|
373
|
+
|
|
374
|
+
for idx, match in enumerate(matches):
|
|
375
|
+
matched_string = match.group()
|
|
376
|
+
updated_string = re.sub(r';', MAGE_SEMI_COLON, matched_string)
|
|
377
|
+
|
|
378
|
+
start_idx, end_idx = match.span()
|
|
379
|
+
|
|
380
|
+
previous_chunk = query_string[previous_idx:start_idx]
|
|
381
|
+
text_parts.append(previous_chunk)
|
|
382
|
+
text_parts.append(updated_string)
|
|
383
|
+
previous_idx = end_idx
|
|
384
|
+
|
|
385
|
+
text_parts.append(query_string[previous_idx:])
|
|
386
|
+
|
|
387
|
+
text_combined = ''.join(text_parts)
|
|
388
|
+
queries = text_combined.split(';')
|
|
389
|
+
|
|
390
|
+
arr = []
|
|
391
|
+
for query in queries:
|
|
392
|
+
query = query.strip()
|
|
393
|
+
if not query:
|
|
394
|
+
continue
|
|
395
|
+
|
|
396
|
+
lines = query.split('\n')
|
|
397
|
+
query = '\n'.join(list(filter(lambda x: not x.startswith('--'), lines)))
|
|
398
|
+
query = query.strip()
|
|
399
|
+
query = re.sub(MAGE_SEMI_COLON, ';', query)
|
|
400
|
+
|
|
401
|
+
if query:
|
|
402
|
+
arr.append(query)
|
|
403
|
+
|
|
404
|
+
return arr
|
|
405
|
+
|
|
406
|
+
|
|
357
407
|
def execute_raw_sql(
|
|
358
408
|
loader,
|
|
359
409
|
block: 'Block',
|
|
360
410
|
query_string: str,
|
|
411
|
+
configuration: Dict = {},
|
|
361
412
|
should_query: bool = False,
|
|
362
413
|
) -> List[Any]:
|
|
363
414
|
queries = []
|
|
364
415
|
fetch_query_at_indexes = []
|
|
365
416
|
|
|
366
|
-
|
|
367
|
-
# query_string,
|
|
368
|
-
# 'create',
|
|
369
|
-
# ';',
|
|
370
|
-
# case_sensitive=True,
|
|
371
|
-
# )
|
|
372
|
-
|
|
373
|
-
# if create_statement:
|
|
374
|
-
# queries.append(create_statement)
|
|
375
|
-
# fetch_query_at_indexes.append(False)
|
|
376
|
-
|
|
377
|
-
# queries.append(query_statement)
|
|
378
|
-
# fetch_query_at_indexes.append(False)
|
|
417
|
+
has_create_or_insert = has_create_or_insert_statement(query_string)
|
|
379
418
|
|
|
380
|
-
for query in query_string
|
|
381
|
-
|
|
382
|
-
if query and not query.startswith('--'):
|
|
419
|
+
for query in split_query_string(query_string):
|
|
420
|
+
if has_create_or_insert:
|
|
383
421
|
queries.append(query)
|
|
384
422
|
fetch_query_at_indexes.append(False)
|
|
423
|
+
else:
|
|
424
|
+
if should_query:
|
|
425
|
+
query = f"""SELECT *
|
|
426
|
+
FROM (
|
|
427
|
+
{query}
|
|
428
|
+
) AS {block.table_name}__limit
|
|
429
|
+
LIMIT 1000"""
|
|
430
|
+
queries.append(query)
|
|
431
|
+
fetch_query_at_indexes.append(True)
|
|
385
432
|
|
|
386
|
-
if should_query:
|
|
433
|
+
if should_query and has_create_or_insert:
|
|
387
434
|
queries.append(f'SELECT * FROM {block.full_table_name} LIMIT 1000')
|
|
388
435
|
fetch_query_at_indexes.append(block.full_table_name)
|
|
389
436
|
|
|
@@ -47,23 +47,33 @@ def interpolate_input(block, query, replace_func=None):
|
|
|
47
47
|
for idx, upstream_block in enumerate(block.upstream_blocks):
|
|
48
48
|
matcher1 = '{} df_{} {}'.format('{{', idx + 1, '}}')
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
is_sql = BlockLanguage.SQL == upstream_block.language
|
|
51
|
+
if is_sql:
|
|
51
52
|
configuration = upstream_block.configuration
|
|
52
53
|
else:
|
|
53
54
|
configuration = block.configuration
|
|
55
|
+
use_raw_sql = configuration.get('use_raw_sql')
|
|
54
56
|
|
|
55
57
|
database = configuration.get('data_provider_database', '')
|
|
56
58
|
schema = configuration.get('data_provider_schema', '')
|
|
57
59
|
|
|
60
|
+
replace_with = __replace_func(database, schema, upstream_block.table_name)
|
|
61
|
+
upstream_block_content = upstream_block.content
|
|
62
|
+
if is_sql and use_raw_sql and not has_create_or_insert_statement(upstream_block_content):
|
|
63
|
+
upstream_query = interpolate_input(upstream_block, upstream_block_content)
|
|
64
|
+
replace_with = f"""(
|
|
65
|
+
{upstream_query}
|
|
66
|
+
) AS {upstream_block.table_name}"""
|
|
67
|
+
|
|
58
68
|
query = re.sub(
|
|
59
69
|
'{}[ ]*df_{}[ ]*{}'.format(r'\{\{', idx + 1, r'\}\}'),
|
|
60
|
-
|
|
70
|
+
replace_with,
|
|
61
71
|
query,
|
|
62
72
|
)
|
|
63
73
|
|
|
64
74
|
query = query.replace(
|
|
65
75
|
f'{matcher1}',
|
|
66
|
-
|
|
76
|
+
replace_with,
|
|
67
77
|
)
|
|
68
78
|
|
|
69
79
|
return query
|
|
@@ -170,3 +180,39 @@ def extract_and_replace_text_between_strings(
|
|
|
170
180
|
new_text = text[0:max(start_idx - 1, 0)] + replace_string + text[end_idx + 1:]
|
|
171
181
|
|
|
172
182
|
return extracted_text, new_text
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def remove_comments(text: str) -> str:
|
|
186
|
+
lines = text.split('\n')
|
|
187
|
+
return '\n'.join(line for line in lines if not line.startswith('--'))
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def extract_create_statement_table_name(text: str) -> str:
|
|
191
|
+
statement_partial, _ = extract_and_replace_text_between_strings(
|
|
192
|
+
remove_comments(text),
|
|
193
|
+
r'create table(?: if not exists)*',
|
|
194
|
+
r'\(',
|
|
195
|
+
)
|
|
196
|
+
if not statement_partial:
|
|
197
|
+
return None
|
|
198
|
+
|
|
199
|
+
parts = statement_partial[:len(statement_partial) - 1].strip().split(' ')
|
|
200
|
+
return parts[-1]
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def extract_insert_statement_table_names(text: str) -> List[str]:
|
|
204
|
+
matches = re.findall(
|
|
205
|
+
r'insert(?: overwrite)*(?: into)*[\s]+([\w.]+)',
|
|
206
|
+
remove_comments(text),
|
|
207
|
+
re.IGNORECASE,
|
|
208
|
+
)
|
|
209
|
+
return matches
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def has_create_or_insert_statement(text: str) -> bool:
|
|
213
|
+
table_name = extract_create_statement_table_name(text)
|
|
214
|
+
if table_name:
|
|
215
|
+
return True
|
|
216
|
+
|
|
217
|
+
matches = extract_insert_statement_table_names(text)
|
|
218
|
+
return len(matches) >= 1
|
|
@@ -175,6 +175,8 @@ class Variable:
|
|
|
175
175
|
"""
|
|
176
176
|
if self.variable_type == VariableType.DATAFRAME:
|
|
177
177
|
return self.__read_parquet(sample=sample, sample_count=sample_count)
|
|
178
|
+
elif self.variable_type == VariableType.SPARK_DATAFRAME:
|
|
179
|
+
return self.__read_spark_parquet(sample=sample, sample_count=sample_count, spark=spark)
|
|
178
180
|
elif self.variable_type == VariableType.DATAFRAME_ANALYSIS:
|
|
179
181
|
return await self.__read_dataframe_analysis_async(
|
|
180
182
|
dataframe_analysis_keys=dataframe_analysis_keys,
|
|
@@ -367,7 +369,7 @@ class Variable:
|
|
|
367
369
|
def __read_spark_parquet(self, sample: bool = False, sample_count: int = None, spark=None):
|
|
368
370
|
if spark is None:
|
|
369
371
|
return None
|
|
370
|
-
|
|
372
|
+
df = (
|
|
371
373
|
spark.read
|
|
372
374
|
.format('csv')
|
|
373
375
|
.option('header', 'true')
|
|
@@ -375,6 +377,9 @@ class Variable:
|
|
|
375
377
|
.option('delimiter', ',')
|
|
376
378
|
.load(self.variable_path)
|
|
377
379
|
)
|
|
380
|
+
if sample and sample_count:
|
|
381
|
+
df = df.limit(sample_count)
|
|
382
|
+
return df
|
|
378
383
|
|
|
379
384
|
def __write_geo_dataframe(self, data) -> None:
|
|
380
385
|
os.makedirs(self.variable_path, exist_ok=True)
|
|
@@ -114,12 +114,15 @@ def init_repo(repo_path: str) -> None:
|
|
|
114
114
|
if os.path.exists(repo_path):
|
|
115
115
|
raise FileExistsError(f'Repository {repo_path} already exists')
|
|
116
116
|
|
|
117
|
-
os.makedirs(
|
|
117
|
+
os.makedirs(
|
|
118
|
+
os.getenv(MAGE_DATA_DIR_ENV_VAR) or DEFAULT_MAGE_DATA_DIR,
|
|
119
|
+
exist_ok=True,
|
|
120
|
+
)
|
|
118
121
|
copy_template_directory('repo', repo_path)
|
|
119
122
|
|
|
120
123
|
|
|
121
124
|
def get_data_dir() -> str:
|
|
122
|
-
return os.getenv(MAGE_DATA_DIR_ENV_VAR
|
|
125
|
+
return os.getenv(MAGE_DATA_DIR_ENV_VAR) or DEFAULT_MAGE_DATA_DIR
|
|
123
126
|
|
|
124
127
|
|
|
125
128
|
def get_repo_name() -> str:
|
|
@@ -66,6 +66,9 @@ def get_secret_value(name: str) -> str:
|
|
|
66
66
|
from mage_ai.orchestration.db.models import Secret
|
|
67
67
|
fernet = Fernet(get_encryption_key())
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
try:
|
|
70
|
+
secret = Secret.query.filter(Secret.name == name).one_or_none()
|
|
71
|
+
if secret:
|
|
72
|
+
return fernet.decrypt(secret.value.encode('utf-8')).decode('utf-8')
|
|
73
|
+
except Exception:
|
|
74
|
+
print(f'WARNING: Could not find secret value for secret {name}')
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from mage_ai.data_preparation.repo_manager import get_repo_path
|
|
2
|
+
from mage_ai.io.bigquery import BigQuery
|
|
3
|
+
from mage_ai.io.config import ConfigFileLoader
|
|
4
|
+
from os import path
|
|
5
|
+
|
|
6
|
+
if 'sensor' not in globals():
|
|
7
|
+
from mage_ai.data_preparation.decorators import sensor
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@sensor
|
|
11
|
+
def query_bigquery_and_check_condition(**kwargs) -> bool:
|
|
12
|
+
"""
|
|
13
|
+
Template code for checking the results of a BigQuery query.
|
|
14
|
+
Specify your configuration settings in 'io_config.yaml'.
|
|
15
|
+
|
|
16
|
+
Return: True if the sensor should complete, False if it should
|
|
17
|
+
keep waiting
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
config_path = path.join(get_repo_path(), 'io_config.yaml')
|
|
21
|
+
config_profile = 'default'
|
|
22
|
+
|
|
23
|
+
query = 'Your BigQuery query' # Specify your SQL query here
|
|
24
|
+
|
|
25
|
+
loader = BigQuery.with_config(ConfigFileLoader(config_path, config_profile))
|
|
26
|
+
df = loader.load(query)
|
|
27
|
+
|
|
28
|
+
# Add your checks here
|
|
29
|
+
if df.empty:
|
|
30
|
+
return False
|
|
31
|
+
|
|
32
|
+
return True
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from mage_ai.data_preparation.repo_manager import get_repo_path
|
|
2
|
+
from mage_ai.io.config import ConfigFileLoader
|
|
3
|
+
from mage_ai.io.mysql import MySQL
|
|
4
|
+
from os import path
|
|
5
|
+
|
|
6
|
+
if 'sensor' not in globals():
|
|
7
|
+
from mage_ai.data_preparation.decorators import sensor
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@sensor
|
|
11
|
+
def query_mysql_and_check_condition(**kwargs) -> bool:
|
|
12
|
+
"""
|
|
13
|
+
Template code for checking the results of a MySQL query.
|
|
14
|
+
Specify your configuration settings in 'io_config.yaml'.
|
|
15
|
+
|
|
16
|
+
Return: True if the sensor should complete, False if it should
|
|
17
|
+
keep waiting
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
config_path = path.join(get_repo_path(), 'io_config.yaml')
|
|
21
|
+
config_profile = 'default'
|
|
22
|
+
|
|
23
|
+
query = 'Your MySQL query' # Specify your SQL query here
|
|
24
|
+
|
|
25
|
+
with MySQL.with_config(
|
|
26
|
+
ConfigFileLoader(config_path, config_profile)) as loader:
|
|
27
|
+
df = loader.load(query)
|
|
28
|
+
|
|
29
|
+
# Add your checks here
|
|
30
|
+
if df.empty:
|
|
31
|
+
return False
|
|
32
|
+
|
|
33
|
+
return True
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from mage_ai.data_preparation.repo_manager import get_repo_path
|
|
2
|
+
from mage_ai.io.config import ConfigFileLoader
|
|
3
|
+
from mage_ai.io.postgres import Postgres
|
|
4
|
+
from os import path
|
|
5
|
+
|
|
6
|
+
if 'sensor' not in globals():
|
|
7
|
+
from mage_ai.data_preparation.decorators import sensor
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@sensor
|
|
11
|
+
def query_postgres_and_check_condition(**kwargs) -> bool:
|
|
12
|
+
"""
|
|
13
|
+
Template code for checking the results of a Postgres query.
|
|
14
|
+
Specify your configuration settings in 'io_config.yaml'.
|
|
15
|
+
|
|
16
|
+
Return: True if the sensor should complete, False if it should
|
|
17
|
+
keep waiting
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
config_path = path.join(get_repo_path(), 'io_config.yaml')
|
|
21
|
+
config_profile = 'default'
|
|
22
|
+
|
|
23
|
+
query = 'Your Postgres query' # Specify your SQL query here
|
|
24
|
+
|
|
25
|
+
with Postgres.with_config(
|
|
26
|
+
ConfigFileLoader(config_path, config_profile)) as loader:
|
|
27
|
+
df = loader.load(query)
|
|
28
|
+
|
|
29
|
+
# Add your checks here
|
|
30
|
+
if df.empty:
|
|
31
|
+
return False
|
|
32
|
+
|
|
33
|
+
return True
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from mage_ai.data_preparation.repo_manager import get_repo_path
|
|
2
|
+
from mage_ai.io.config import ConfigFileLoader
|
|
3
|
+
from mage_ai.io.redshift import Redshift
|
|
4
|
+
from os import path
|
|
5
|
+
|
|
6
|
+
if 'sensor' not in globals():
|
|
7
|
+
from mage_ai.data_preparation.decorators import sensor
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@sensor
|
|
11
|
+
def query_redshift_and_check_condition(**kwargs) -> bool:
|
|
12
|
+
"""
|
|
13
|
+
Template code for checking the results of a Redshift query.
|
|
14
|
+
Specify your configuration settings in 'io_config.yaml'.
|
|
15
|
+
|
|
16
|
+
Return: True if the sensor should complete, False if it should
|
|
17
|
+
keep waiting
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
config_path = path.join(get_repo_path(), 'io_config.yaml')
|
|
21
|
+
config_profile = 'default'
|
|
22
|
+
|
|
23
|
+
query = 'Your Redshift query' # Specify your SQL query here
|
|
24
|
+
|
|
25
|
+
with Redshift.with_config(
|
|
26
|
+
ConfigFileLoader(config_path, config_profile)) as loader:
|
|
27
|
+
df = loader.load(query)
|
|
28
|
+
|
|
29
|
+
# Add your checks here
|
|
30
|
+
if df.empty:
|
|
31
|
+
return False
|
|
32
|
+
|
|
33
|
+
return True
|