mage-ai 0.8.47__tar.gz → 0.8.49__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.

Files changed (929) hide show
  1. {mage-ai-0.8.47/mage_ai.egg-info → mage-ai-0.8.49}/PKG-INFO +2 -1
  2. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/DataProviderResource.py +13 -1
  3. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/git/__init__.py +1 -1
  4. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/__init__.py +5 -0
  5. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/__init__.py +68 -8
  6. mage-ai-0.8.49/mage_ai/data_preparation/models/block/sql/clickhouse.py +38 -0
  7. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/utils.py +4 -2
  8. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/file.py +4 -3
  9. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/pipeline.py +36 -3
  10. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/io_config.yaml +12 -0
  11. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/base.py +1 -0
  12. mage-ai-0.8.49/mage_ai/io/clickhouse.py +237 -0
  13. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/config.py +19 -0
  14. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/io_config.py +1 -0
  15. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/snowflake.py +0 -1
  16. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/sql.py +4 -1
  17. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/constants.py +1 -1
  18. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/404.html +2 -2
  19. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/404.html.html +2 -2
  20. mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/I2bRLK9B7Lap2LvCicTKv/_buildManifest.js +1 -0
  21. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/2249-50d2156ae3ce5933.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/2249-59feb0a0585ef7c1.js +1 -1
  22. mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/2407-35c362852abff411.js +1 -0
  23. mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/2524-ecbe3dd70d06cbe4.js +1 -0
  24. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/3014-26ba07eb6a78e31c.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/3014-a01e16bc067500ad.js +1 -1
  25. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/4506-ce5fa63b65f6fa5f.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/4506-a3c53b0033972626.js +1 -1
  26. mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/4741-5fbecd08232ba3f9.js +1 -0
  27. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/5477-793cd2120261d023.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/5477-b439f211b6146a11.js +1 -1
  28. mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/5716-c5952e5ca9c8e139.js +1 -0
  29. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/5872-103815a4a043489b.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/5872-1767c45ee6690ae5.js +1 -1
  30. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/5896-f84e336fb8877027.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/5896-10a676bcc86978cc.js +1 -1
  31. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/6166-5fc2768ef661e7da.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/6166-97cb3cc7d00d645c.js +1 -1
  32. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/6532-b0fd357eb359c127.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/6532-5f86e9e1f32adf3a.js +1 -1
  33. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/7400-acab00d6265bd4dc.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/7400-033fb12e7c46f62e.js +1 -1
  34. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/9832-c8b8970bb522f302.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/9832-f97919376d52e3bf.js +1 -1
  35. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-96c89b2a2689f80c.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-8a7b2b707c7038fb.js +1 -1
  36. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-294eccc0163c80a1.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-832218136947bf56.js +1 -1
  37. mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-c48a45cea6df6192.js +1 -0
  38. mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-dd637dcb042ff771.js +1 -0
  39. mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-5541c3e13297ddbc.js +1 -0
  40. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-0e6935a2b7f8e1ed.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-caa9fade2bc783b9.js +1 -1
  41. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-0e02bcdfcd533830.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-1b44f28966826dbe.js +1 -1
  42. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-baf8bb6da01976db.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-44029312dc580504.js +1 -1
  43. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-d42158676a75b451.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-9b46466e066d6372.js +1 -1
  44. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-4049561456ea2314.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-5f78885afc7758df.js +1 -1
  45. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-bebeee2854c734fc.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-43f2c1658cd3d03d.js +1 -1
  46. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-b95afd173fb265df.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-8fb53eb8dd0267e1.js +1 -1
  47. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-e46a9b03e0fff91a.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-c92351b1a81f7a13.js +1 -1
  48. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-6a95567766a1d00e.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-ca76f5938bdff8a7.js +1 -1
  49. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-c259bd9d385404fa.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-4e9518882c8730b1.js +1 -1
  50. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-0900be641ce4e6ec.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-c46347f0308ab09a.js +1 -1
  51. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-25735fdf80f95015.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-45c40fb24c8a5139.js +1 -1
  52. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-abfaa2b15eef72a0.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-6e80afa0c9b90cdf.js +1 -1
  53. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-5d0c51213b9bba8e.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-12a90f932ff4fc9d.js +1 -1
  54. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-24eb5df948cc9a7e.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-cc54b4d4e5295101.js +1 -1
  55. mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/test-bd801bde63db7c9e.js +1 -0
  56. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-6ff85ea842bde8c2.js → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-08774e473ea4a96b.js +1 -1
  57. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/index.html +2 -2
  58. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/manage.html +2 -2
  59. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipeline-runs.html +2 -2
  60. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +2 -2
  61. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +2 -2
  62. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
  63. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +2 -2
  64. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +2 -2
  65. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
  66. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +2 -2
  67. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +2 -2
  68. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +2 -2
  69. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +2 -2
  70. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +2 -2
  71. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +2 -2
  72. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +2 -2
  73. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
  74. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/pipelines.html +2 -2
  75. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/settings/account/profile.html +2 -2
  76. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/settings/workspace/preferences.html +2 -2
  77. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/settings/workspace/sync-data.html +2 -2
  78. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/settings/workspace/users.html +2 -2
  79. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/settings.html +2 -2
  80. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/sign-in.html +2 -2
  81. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/terminal.html +2 -2
  82. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/test.html +3 -3
  83. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/triggers.html +2 -2
  84. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/utils/output_display.py +1 -3
  85. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/websocket_server.py +0 -1
  86. {mage-ai-0.8.47 → mage-ai-0.8.49/mage_ai.egg-info}/PKG-INFO +2 -1
  87. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai.egg-info/SOURCES.txt +41 -39
  88. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai.egg-info/requires.txt +4 -0
  89. {mage-ai-0.8.47 → mage-ai-0.8.49}/requirements.txt +1 -0
  90. {mage-ai-0.8.47 → mage-ai-0.8.49}/setup.py +5 -1
  91. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/2083-78a438dbdc57d1e4.js +0 -1
  92. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/2524-6aeb9419acf5d1b4.js +0 -1
  93. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/4538-8a3c3e47be976ede.js +0 -1
  94. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/4741-acfe40cf3b06659e.js +0 -1
  95. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-e512333242e02c60.js +0 -1
  96. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-774dd41941497640.js +0 -1
  97. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-c6179a9e737009c9.js +0 -1
  98. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/chunks/pages/test-85cf18ae78ff535c.js +0 -1
  99. mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/xTScbs8HLliQCDHzVPx5E/_buildManifest.js +0 -1
  100. {mage-ai-0.8.47 → mage-ai-0.8.49}/LICENSE +0 -0
  101. {mage-ai-0.8.47 → mage-ai-0.8.49}/MANIFEST.in +0 -0
  102. {mage-ai-0.8.47 → mage-ai-0.8.49}/README.md +0 -0
  103. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/__init__.py +0 -0
  104. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/__init__.py +0 -0
  105. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/api_context.py +0 -0
  106. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/constants.py +0 -0
  107. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/errors.py +0 -0
  108. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/logging.py +0 -0
  109. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/middleware.py +0 -0
  110. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/monitors/BaseMonitor.py +0 -0
  111. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/monitors/__init__.py +0 -0
  112. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/oauth_scope.py +0 -0
  113. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/operations/__init__.py +0 -0
  114. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/operations/base.py +0 -0
  115. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/operations/constants.py +0 -0
  116. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/AutocompleteItemPolicy.py +0 -0
  117. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/BackfillPolicy.py +0 -0
  118. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/BasePolicy.py +0 -0
  119. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/BlockPolicy.py +0 -0
  120. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/BlockRunPolicy.py +0 -0
  121. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/ClusterPolicy.py +0 -0
  122. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/DataProviderPolicy.py +0 -0
  123. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/EventRulePolicy.py +0 -0
  124. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/ExtensionOptionPolicy.py +0 -0
  125. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/FileContentPolicy.py +0 -0
  126. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/FilePolicy.py +0 -0
  127. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/FileVersionPolicy.py +0 -0
  128. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/GitBranchPolicy.py +0 -0
  129. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/IntegrationDestinationPolicy.py +0 -0
  130. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/IntegrationSourcePolicy.py +0 -0
  131. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/IntegrationSourceStreamPolicy.py +0 -0
  132. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/KernelPolicy.py +0 -0
  133. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/LogPolicy.py +0 -0
  134. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/MonitorStatPolicy.py +0 -0
  135. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/OutputPolicy.py +0 -0
  136. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/PipelinePolicy.py +0 -0
  137. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/PipelineRunPolicy.py +0 -0
  138. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/PipelineSchedulePolicy.py +0 -0
  139. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/ProjectPolicy.py +0 -0
  140. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/SecretPolicy.py +0 -0
  141. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/SessionPolicy.py +0 -0
  142. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/SyncPolicy.py +0 -0
  143. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/UserPolicy.py +0 -0
  144. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/VariablePolicy.py +0 -0
  145. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/WidgetPolicy.py +0 -0
  146. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/policies/__init__.py +0 -0
  147. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/AutocompleteItemPresenter.py +0 -0
  148. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/BackfillPresenter.py +0 -0
  149. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/BasePresenter.py +0 -0
  150. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/BlockPresenter.py +0 -0
  151. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/BlockRunPresenter.py +0 -0
  152. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/ClusterPresenter.py +0 -0
  153. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/DataProviderPresenter.py +0 -0
  154. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/EventRulePresenter.py +0 -0
  155. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/ExtensionOptionPresenter.py +0 -0
  156. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/FileContentPresenter.py +0 -0
  157. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/FilePresenter.py +0 -0
  158. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/FileVersionPresenter.py +0 -0
  159. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/GitBranchPresenter.py +0 -0
  160. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/IntegrationDestinationPresenter.py +0 -0
  161. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/IntegrationSourcePresenter.py +0 -0
  162. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/IntegrationSourceStreamPresenter.py +0 -0
  163. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/KernelPresenter.py +0 -0
  164. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/LogPresenter.py +0 -0
  165. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/MonitorStatPresenter.py +0 -0
  166. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/OutputPresenter.py +0 -0
  167. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/PipelinePresenter.py +0 -0
  168. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/PipelineRunPresenter.py +0 -0
  169. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/PipelineSchedulePresenter.py +0 -0
  170. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/ProjectPresenter.py +0 -0
  171. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/SecretPresenter.py +0 -0
  172. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/SessionPresenter.py +0 -0
  173. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/SyncPresenter.py +0 -0
  174. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/UserPresenter.py +0 -0
  175. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/VariablePresenter.py +0 -0
  176. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/WidgetPresenter.py +0 -0
  177. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/__init__.py +0 -0
  178. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/mixins/__init__.py +0 -0
  179. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/presenters/mixins/users.py +0 -0
  180. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/AutocompleteItemResource.py +0 -0
  181. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/BackfillResource.py +0 -0
  182. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/BaseResource.py +0 -0
  183. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/BlockResource.py +0 -0
  184. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/BlockRunResource.py +0 -0
  185. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/ClusterResource.py +0 -0
  186. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/DatabaseResource.py +0 -0
  187. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/EventRuleResource.py +0 -0
  188. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/ExtensionOptionResource.py +0 -0
  189. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/FileContentResource.py +0 -0
  190. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/FileResource.py +0 -0
  191. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/FileVersionResource.py +0 -0
  192. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/GenericResource.py +0 -0
  193. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/GitBranchResource.py +0 -0
  194. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/IntegrationDestinationResource.py +0 -0
  195. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/IntegrationSourceResource.py +0 -0
  196. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/IntegrationSourceStreamResource.py +0 -0
  197. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/KernelResource.py +0 -0
  198. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/LogResource.py +0 -0
  199. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/MonitorStatResource.py +0 -0
  200. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/OutputResource.py +0 -0
  201. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/PipelineResource.py +0 -0
  202. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/PipelineRunResource.py +0 -0
  203. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/PipelineScheduleResource.py +0 -0
  204. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/ProjectResource.py +0 -0
  205. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/Resource.py +0 -0
  206. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/SecretResource.py +0 -0
  207. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/SessionResource.py +0 -0
  208. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/SyncResource.py +0 -0
  209. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/UserResource.py +0 -0
  210. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/VariableResource.py +0 -0
  211. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/WidgetResource.py +0 -0
  212. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/__init__.py +0 -0
  213. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/mixins/__init__.py +0 -0
  214. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/shared/__init__.py +0 -0
  215. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/shared/collections.py +0 -0
  216. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/resources/shared/collective_loaders.py +0 -0
  217. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/result_set.py +0 -0
  218. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/utils.py +0 -0
  219. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/api/views.py +0 -0
  220. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/authentication/__init__.py +0 -0
  221. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/authentication/ldap.py +0 -0
  222. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/authentication/oauth2.py +0 -0
  223. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/authentication/passwords.py +0 -0
  224. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/autocomplete/__init__.py +0 -0
  225. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/autocomplete/utils.py +0 -0
  226. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cli/__init__.py +0 -0
  227. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cli/main.py +0 -0
  228. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cli/utils.py +0 -0
  229. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/__init__.py +0 -0
  230. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/aws/__init__.py +0 -0
  231. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/aws/ecs_task_manager.py +0 -0
  232. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/aws/emr_cluster_manager.py +0 -0
  233. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/cluster_manager.py +0 -0
  234. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/constants.py +0 -0
  235. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/gcp/__init__.py +0 -0
  236. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/gcp/cloud_run_service_manager.py +0 -0
  237. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/kubernetes/__init__.py +0 -0
  238. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/cluster_manager/kubernetes/workload_manager.py +0 -0
  239. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/__init__.py +0 -0
  240. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/analysis/__init__.py +0 -0
  241. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/analysis/calculator.py +0 -0
  242. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/analysis/charts.py +0 -0
  243. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/analysis/constants.py +0 -0
  244. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/__init__.py +0 -0
  245. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/base.py +0 -0
  246. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/clean_column_names.py +0 -0
  247. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/fix_syntax_errors.py +0 -0
  248. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/impute_values.py +0 -0
  249. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/reformat_values.py +0 -0
  250. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/remove_collinear_columns.py +0 -0
  251. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_high_empty_rate.py +0 -0
  252. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_single_value.py +0 -0
  253. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/remove_duplicate_rows.py +0 -0
  254. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/cleaning_rules/remove_outliers.py +0 -0
  255. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/column_types/__init__.py +0 -0
  256. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/column_types/column_type_detector.py +0 -0
  257. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/column_types/constants.py +0 -0
  258. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/data_cleaner.py +0 -0
  259. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/estimators/__init__.py +0 -0
  260. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/estimators/base.py +0 -0
  261. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/estimators/encoders.py +0 -0
  262. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/estimators/outlier_removal.py +0 -0
  263. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/pipelines/__init__.py +0 -0
  264. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/pipelines/base.py +0 -0
  265. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/shared/__init__.py +0 -0
  266. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/shared/utils.py +0 -0
  267. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/statistics/__init__.py +0 -0
  268. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/statistics/calculator.py +0 -0
  269. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/__init__.py +0 -0
  270. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/action_code.py +0 -0
  271. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/base.py +0 -0
  272. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/column.py +0 -0
  273. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/constants.py +0 -0
  274. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/custom_action.py +0 -0
  275. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/dependency_resolution.py +0 -0
  276. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/helpers.py +0 -0
  277. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/row.py +0 -0
  278. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/shared.py +0 -0
  279. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/spark/__init__.py +0 -0
  280. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/spark/constants.py +0 -0
  281. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/spark/transformers.py +0 -0
  282. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/__init__.py +0 -0
  283. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/addition.py +0 -0
  284. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/base.py +0 -0
  285. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/constant.py +0 -0
  286. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/date_trunc.py +0 -0
  287. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/difference.py +0 -0
  288. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/distance_between.py +0 -0
  289. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/divide.py +0 -0
  290. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/formatted_date.py +0 -0
  291. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/if_else.py +0 -0
  292. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/multiply.py +0 -0
  293. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/string_replace.py +0 -0
  294. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/string_split.py +0 -0
  295. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/udf/substring.py +0 -0
  296. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/utils.py +0 -0
  297. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_cleaner/transformer_actions/variable_replacer.py +0 -0
  298. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/__init__.py +0 -0
  299. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/destinations/__init__.py +0 -0
  300. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/destinations/constants.py +0 -0
  301. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/logger/__init__.py +0 -0
  302. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/logger/utils.py +0 -0
  303. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/sources/__init__.py +0 -0
  304. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/sources/constants.py +0 -0
  305. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/utils/__init__.py +0 -0
  306. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/utils/config.py +0 -0
  307. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/utils/parsers.py +0 -0
  308. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_integrations/utils/scheduler.py +0 -0
  309. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/__init__.py +0 -0
  310. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/decorators.py +0 -0
  311. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/__init__.py +0 -0
  312. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/block_executor.py +0 -0
  313. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/ecs_block_executor.py +0 -0
  314. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/executor_factory.py +0 -0
  315. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/gcp_cloud_run_block_executor.py +0 -0
  316. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/k8s_block_executor.py +0 -0
  317. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/pipeline_executor.py +0 -0
  318. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/pyspark_block_executor.py +0 -0
  319. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/pyspark_pipeline_executor.py +0 -0
  320. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/executors/streaming_pipeline_executor.py +0 -0
  321. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/__init__.py +0 -0
  322. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/gcs_logger_manager.py +0 -0
  323. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/logger.py +0 -0
  324. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/logger_manager.py +0 -0
  325. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/logger_manager_factory.py +0 -0
  326. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/logging/s3_logger_manager.py +0 -0
  327. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/__init__.py +0 -0
  328. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/constants.py +0 -0
  329. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/dbt/__init__.py +0 -0
  330. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/dbt/utils/__init__.py +0 -0
  331. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/errors.py +0 -0
  332. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/extension/__init__.py +0 -0
  333. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/extension/block.py +0 -0
  334. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/extension/great_expectations.py +0 -0
  335. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/extension/utils.py +0 -0
  336. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/integration/__init__.py +0 -0
  337. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/r/__init__.py +0 -0
  338. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/r/templates/data_exporter.jinja +0 -0
  339. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/r/templates/data_loader.jinja +0 -0
  340. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/r/templates/transformer.jinja +0 -0
  341. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/bigquery.py +0 -0
  342. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/mssql.py +0 -0
  343. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/mysql.py +0 -0
  344. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/postgres.py +0 -0
  345. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/redshift.py +0 -0
  346. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/snowflake.py +0 -0
  347. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/trino.py +0 -0
  348. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/utils/__init__.py +0 -0
  349. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/block/sql/utils/shared.py +0 -0
  350. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/constants.py +0 -0
  351. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/errors.py +0 -0
  352. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/pipelines/__init__.py +0 -0
  353. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/pipelines/integration_pipeline.py +0 -0
  354. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/pipelines/utils.py +0 -0
  355. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/triggers/__init__.py +0 -0
  356. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/utils.py +0 -0
  357. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/variable.py +0 -0
  358. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/widget/__init__.py +0 -0
  359. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/widget/charts.py +0 -0
  360. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/widget/constants.py +0 -0
  361. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/models/widget/utils.py +0 -0
  362. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/preferences.py +0 -0
  363. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/repo_manager.py +0 -0
  364. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/shared/__init__.py +0 -0
  365. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/shared/constants.py +0 -0
  366. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/shared/secrets.py +0 -0
  367. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/shared/stream.py +0 -0
  368. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/shared/utils.py +0 -0
  369. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/storage/__init__.py +0 -0
  370. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/storage/base_storage.py +0 -0
  371. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/storage/local_storage.py +0 -0
  372. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/storage/s3_storage.py +0 -0
  373. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/storage/utils.py +0 -0
  374. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/sync/__init__.py +0 -0
  375. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/sync/base_sync.py +0 -0
  376. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/sync/git_sync.py +0 -0
  377. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/__init__.py +0 -0
  378. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/callbacks/default.py +0 -0
  379. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/custom/python/default.jinja +0 -0
  380. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/azure_blob_storage.py +0 -0
  381. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/bigquery.py +0 -0
  382. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/default.jinja +0 -0
  383. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/file.py +0 -0
  384. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/google_cloud_storage.py +0 -0
  385. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/mysql.py +0 -0
  386. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/postgres.py +0 -0
  387. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/pyspark/default.jinja +0 -0
  388. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/pyspark/s3.py +0 -0
  389. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/r/default.jinja +0 -0
  390. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/redshift.py +0 -0
  391. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/s3.py +0 -0
  392. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/snowflake.py +0 -0
  393. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/streaming/kafka.yaml +0 -0
  394. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/streaming/kinesis.yaml +0 -0
  395. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/streaming/opensearch.yaml +0 -0
  396. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_exporters/streaming/s3.yaml +0 -0
  397. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/api.py +0 -0
  398. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/azure_blob_storage.py +0 -0
  399. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/bigquery.py +0 -0
  400. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/default.jinja +0 -0
  401. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/file.py +0 -0
  402. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/google_cloud_storage.py +0 -0
  403. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/mysql.py +0 -0
  404. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/postgres.py +0 -0
  405. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/pyspark/default.jinja +0 -0
  406. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/pyspark/s3.py +0 -0
  407. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/r/default.jinja +0 -0
  408. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/redshift.py +0 -0
  409. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/s3.py +0 -0
  410. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/snowflake.py +0 -0
  411. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/streaming/azure_event_hub.yaml +0 -0
  412. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/streaming/kafka.yaml +0 -0
  413. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/streaming/kinesis.yaml +0 -0
  414. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/data_loaders/streaming/rabbitmq.yaml +0 -0
  415. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/extensions/great_expectations/default.jinja +0 -0
  416. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/pipeline/__init__.py +0 -0
  417. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/pipeline/metadata.yaml +0 -0
  418. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/pipeline_execution/emr_bootstrap.sh +0 -0
  419. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/pipeline_execution/spark_script.jinja +0 -0
  420. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/__init__.py +0 -0
  421. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/charts/__init__.py +0 -0
  422. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/custom/__init__.py +0 -0
  423. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/data_exporters/__init__.py +0 -0
  424. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/data_exporters/export_titanic_clean.py +0 -0
  425. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/data_loaders/__init__.py +0 -0
  426. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/data_loaders/load_titanic.py +0 -0
  427. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/dbt/profiles.yml +0 -0
  428. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/extensions/__init__.py +0 -0
  429. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/metadata.yaml +0 -0
  430. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/pipelines/__init__.py +0 -0
  431. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/__init__.py +0 -0
  432. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/metadata.yaml +0 -0
  433. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/requirements.txt +0 -0
  434. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/scratchpads/__init__.py +0 -0
  435. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/transformers/__init__.py +0 -0
  436. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/transformers/fill_in_missing_values.py +0 -0
  437. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/repo/utils/__init__.py +0 -0
  438. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/bigquery.py +0 -0
  439. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/default.py +0 -0
  440. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/mysql.py +0 -0
  441. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/postgres.py +0 -0
  442. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/redshift.py +0 -0
  443. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/s3.py +0 -0
  444. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/sensors/snowflake.py +0 -0
  445. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/template.py +0 -0
  446. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/testable.jinja +0 -0
  447. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/data_warehouse_transformer.jinja +0 -0
  448. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/default.jinja +0 -0
  449. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/default_pyspark.jinja +0 -0
  450. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/default_streaming.jinja +0 -0
  451. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/r/default.r +0 -0
  452. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/suggestion_fmt.jinja +0 -0
  453. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/action.jinja +0 -0
  454. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/average.py +0 -0
  455. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/clean_column_name.py +0 -0
  456. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count.py +0 -0
  457. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count_distinct.py +0 -0
  458. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/diff.py +0 -0
  459. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/first.py +0 -0
  460. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/fix_syntax_errors.py +0 -0
  461. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/impute.py +0 -0
  462. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/last.py +0 -0
  463. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/max.py +0 -0
  464. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/median.py +0 -0
  465. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/min.py +0 -0
  466. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/normalize.py +0 -0
  467. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/reformat.py +0 -0
  468. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove.py +0 -0
  469. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove_outliers.py +0 -0
  470. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/select.py +0 -0
  471. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_down.py +0 -0
  472. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_up.py +0 -0
  473. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/standardize.py +0 -0
  474. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/sum.py +0 -0
  475. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/drop_duplicate.py +0 -0
  476. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/filter.py +0 -0
  477. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/remove.py +0 -0
  478. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/sort.py +0 -0
  479. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/templates/utils.py +0 -0
  480. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/utils/__init__.py +0 -0
  481. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/utils/block/__init__.py +0 -0
  482. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/utils/block/convert_content.py +0 -0
  483. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/data_preparation/variable_manager.py +0 -0
  484. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/errors/__init__.py +0 -0
  485. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/errors/base.py +0 -0
  486. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/extensions/__init__.py +0 -0
  487. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/extensions/constants.py +0 -0
  488. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/extensions/great_expectations/__init__.py +0 -0
  489. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/extensions/great_expectations/constants.py +0 -0
  490. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/__init__.py +0 -0
  491. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/azure_blob_storage.py +0 -0
  492. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/bigquery.py +0 -0
  493. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/constants.py +0 -0
  494. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/export_utils.py +0 -0
  495. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/file.py +0 -0
  496. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/google_cloud_storage.py +0 -0
  497. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/mssql.py +0 -0
  498. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/mysql.py +0 -0
  499. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/postgres.py +0 -0
  500. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/redshift.py +0 -0
  501. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/s3.py +0 -0
  502. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/trino.py +0 -0
  503. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/io/utils.py +0 -0
  504. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/__init__.py +0 -0
  505. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/airflow.py +0 -0
  506. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/backfills/__init__.py +0 -0
  507. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/backfills/service.py +0 -0
  508. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/constants.py +0 -0
  509. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/__init__.py +0 -0
  510. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/alembic.ini +0 -0
  511. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/database_manager.py +0 -0
  512. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/errors.py +0 -0
  513. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/README.md +0 -0
  514. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/env.py +0 -0
  515. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/script.py.mako +0 -0
  516. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/053ee2c10d85_add_completed_at.py +0 -0
  517. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/067326f43bc3_add_variables_to_pipelinerun.py +0 -0
  518. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/1a737bdee53b_add_preferences_to_user.py +0 -0
  519. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/1d8e65aeefdd_add_settings_to_pipeline_schedule.py +0 -0
  520. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/1f9353eddbc6_add_secrets_table.py +0 -0
  521. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/2266370f589b_add_indexes_to_pipeline_run.py +0 -0
  522. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/26305e46df52_create_backfills_table.py +0 -0
  523. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/3fafd217efa7_add_event_matcher_model.py +0 -0
  524. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/52ab80005742_add_variables_to_pipeline_schedule.py +0 -0
  525. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/5cd59ec4cf1d_add_passed_sla_to_pipeline_run.py +0 -0
  526. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/643b6e65e814_add_unique_indexes_on_authentication_.py +0 -0
  527. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/6aecc9bc451c_update_schedule_type_enum.py +0 -0
  528. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/7ac6fed06918_add_token_column_to_pipeline_schedule_.py +0 -0
  529. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/847ea6602d6f_add_upstream_failed_to_block_run_status.py +0 -0
  530. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/84de4cdd6126_add_sla_to_pipeline_schedule.py +0 -0
  531. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/8971d4cd5b39_add_event_variables_and_metadata_to_.py +0 -0
  532. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/97ff9f55a3c0_create_users_oauth2_applications_and_.py +0 -0
  533. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/b01be687e537_add_started_at_to_block_run.py +0 -0
  534. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/c07a23ff782b_add_initial_tables.py +0 -0
  535. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/migrations/versions/ec5df57a1c60_add_metrics_to_block_runs.py +0 -0
  536. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/models/__init__.py +0 -0
  537. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/models/base.py +0 -0
  538. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/models/oauth.py +0 -0
  539. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/models/schedules.py +0 -0
  540. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/models/secrets.py +0 -0
  541. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/db/process.py +0 -0
  542. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/execution_process_manager.py +0 -0
  543. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/job_manager.py +0 -0
  544. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/metrics/__init__.py +0 -0
  545. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/metrics/pipeline_run.py +0 -0
  546. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/monitor/__init__.py +0 -0
  547. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/monitor/monitor_stats.py +0 -0
  548. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/notification/__init__.py +0 -0
  549. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/notification/config.py +0 -0
  550. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/notification/sender.py +0 -0
  551. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/pipeline_scheduler.py +0 -0
  552. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/__init__.py +0 -0
  553. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/celery_queue.py +0 -0
  554. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/config.py +0 -0
  555. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/process_queue.py +0 -0
  556. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/queue.py +0 -0
  557. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/queue/queue_factory.py +0 -0
  558. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/run_status_checker.py +0 -0
  559. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/triggers/__init__.py +0 -0
  560. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/triggers/event_trigger.py +0 -0
  561. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/triggers/loop_time_trigger.py +0 -0
  562. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/triggers/time_trigger.py +0 -0
  563. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/utils/__init__.py +0 -0
  564. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/orchestration/utils/resources.py +0 -0
  565. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/sample_datasets/__init__.py +0 -0
  566. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/sample_datasets/product_purchases.csv +0 -0
  567. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/sample_datasets/salary_survey.csv +0 -0
  568. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/sample_datasets/titanic_survival.csv +0 -0
  569. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/sample_datasets/user_emails.csv +0 -0
  570. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/__init__.py +0 -0
  571. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/active_kernel.py +0 -0
  572. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/__init__.py +0 -0
  573. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/base.py +0 -0
  574. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/blocks.py +0 -0
  575. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/clusters.py +0 -0
  576. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/constants.py +0 -0
  577. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/errors.py +0 -0
  578. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/events.py +0 -0
  579. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/integration_sources.py +0 -0
  580. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/projects.py +0 -0
  581. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/triggers.py +0 -0
  582. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/api/v1.py +0 -0
  583. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/app.py +0 -0
  584. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/client/__init__.py +0 -0
  585. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/client/mage.py +0 -0
  586. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/data/__init__.py +0 -0
  587. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/data/base.py +0 -0
  588. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/data/models.py +0 -0
  589. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/docs_server.py +0 -0
  590. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/execution_manager.py +0 -0
  591. {mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/xTScbs8HLliQCDHzVPx5E → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/I2bRLK9B7Lap2LvCicTKv}/_middlewareManifest.js +0 -0
  592. {mage-ai-0.8.47/mage_ai/server/frontend_dist/_next/static/xTScbs8HLliQCDHzVPx5E → mage-ai-0.8.49/mage_ai/server/frontend_dist/_next/static/I2bRLK9B7Lap2LvCicTKv}/_ssgManifest.js +0 -0
  593. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/1150.1378afaa474df64a.js +0 -0
  594. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/1240.0819f45820d22263.js +0 -0
  595. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/1286-a62050b3f897c6be.js +0 -0
  596. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/1450.d383f64c169d4278.js +0 -0
  597. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/1774-aa51ef1da7217ff9.js +0 -0
  598. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2125-0b537dc53fe71b18.js +0 -0
  599. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2344-dfe377eef1a29642.js +0 -0
  600. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2481.0454a0e25dc7e027.js +0 -0
  601. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2508.724531e7f9cf5f36.js +0 -0
  602. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2545.8371b39c898ae92b.js +0 -0
  603. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/261.0a24b4ece1d29aa1.js +0 -0
  604. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/266.e301071d22592682.js +0 -0
  605. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/2714-1e79e9f2e998b544.js +0 -0
  606. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/29107295-989a0767a635d9d5.js +0 -0
  607. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3453.992f4b1667e9882c.js +0 -0
  608. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3467.38cd0654ba6f788f.js +0 -0
  609. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3688-8b5ea6bc36ea7420.js +0 -0
  610. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3835.df296b4e4078e985.js +0 -0
  611. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3850-6395783d820def1c.js +0 -0
  612. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3873.4b3eace753998412.js +0 -0
  613. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/3898.880191695bb05845.js +0 -0
  614. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4042.5e16d36209052351.js +0 -0
  615. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4092.536ee541241f4538.js +0 -0
  616. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4388.04098706f32e69e7.js +0 -0
  617. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/440.3ab77942f659ea0c.js +0 -0
  618. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4450.79f14f763d55c63e.js +0 -0
  619. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4454.13a2404adecaa39e.js +0 -0
  620. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4495-4f0340aa82e0c623.js +0 -0
  621. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4776.753ad29fa0a29a4a.js +0 -0
  622. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4804-01a10103ebe26ca8.js +0 -0
  623. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/4883.a5bb0edbf8f3cc8f.js +0 -0
  624. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/5008.29c2662ecc2b04c7.js +0 -0
  625. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/5104.1edcf4437c471dd4.js +0 -0
  626. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/5164.857023e800905b6f.js +0 -0
  627. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/5729.0f2748e9e6dab951.js +0 -0
  628. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/5824.628653557e904674.js +0 -0
  629. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6042.c59010de9e699437.js +0 -0
  630. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6085-692d2f784c0504f2.js +0 -0
  631. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6115.0c85e507543394ea.js +0 -0
  632. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6116.871a682ddf535aca.js +0 -0
  633. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6195-d2f77d91834552cc.js +0 -0
  634. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6214-fbd3bb34e1f95ff4.js +0 -0
  635. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6434.10380ee0968636ba.js +0 -0
  636. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6443.7b6d2b4e51018184.js +0 -0
  637. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6507.d3a17777d2c294e6.js +0 -0
  638. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/6958.8f39c585d36737a7.js +0 -0
  639. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/7011-81dd8269c4806d26.js +0 -0
  640. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/72fdc299.2d5ec188af5d0049.js +0 -0
  641. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/739.3d24945544b37e52.js +0 -0
  642. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/792.010ca00d79b2112f.js +0 -0
  643. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/7947.77be4bec4d47774e.js +0 -0
  644. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/7951.fee8b6c27c9ef777.js +0 -0
  645. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8018.968bf87c390e3312.js +0 -0
  646. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8097.b0345f30a7390c1d.js +0 -0
  647. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8180-8de652170ea5ed93.js +0 -0
  648. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8256.290ceb269b1ffe26.js +0 -0
  649. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/826.75268ee34f93393a.js +0 -0
  650. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8277.5003e1d94bb85156.js +0 -0
  651. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8762.dff300f86bef8573.js +0 -0
  652. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8789-4f858e520d46973b.js +0 -0
  653. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8807.a68c69c8fe0a8c01.js +0 -0
  654. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8849.db0d50b4d84b09a6.js +0 -0
  655. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8901.21d26d5a1ee473fe.js +0 -0
  656. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/8920.5700e380a2999098.js +0 -0
  657. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9258.6c6ef544c701a011.js +0 -0
  658. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9307.d4baf7aebbcef1f0.js +0 -0
  659. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9361.a0820e3069f5ef74.js +0 -0
  660. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9363.6b811b4c86277e07.js +0 -0
  661. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9437.a3c32f45cf9ef69b.js +0 -0
  662. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9565-28e1c30511c95c2d.js +0 -0
  663. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9566.f8bd24768ed14ecb.js +0 -0
  664. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9633.40e5056ca1e2b22a.js +0 -0
  665. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9785.5ff26cb26d84d6a1.js +0 -0
  666. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9855.c4394a68322be9f8.js +0 -0
  667. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/9927.e82a3e1e21990d77.js +0 -0
  668. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/bd1a647f.6050372acaa5cc3c.js +0 -0
  669. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/framework-7c365855dab1bf41.js +0 -0
  670. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/main-bb0dd5375146d7fd.js +0 -0
  671. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-eb08d8e4cfb01405.js +0 -0
  672. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/_error-235304e5badb19eb.js +0 -0
  673. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/index-e34a68d2f6fe16f2.js +0 -0
  674. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]-ca9457e1a6bced4b.js +0 -0
  675. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-5dd3b2221e6566e5.js +0 -0
  676. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings-d594a66a568306da.js +0 -0
  677. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-404d934deb8950d5.js +0 -0
  678. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/polyfills-5cd94c89d3acac5f.js +0 -0
  679. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/chunks/webpack-bc5e4eb2c1ff587c.js +0 -0
  680. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/_next/static/css/d1e8e64d0b07af2f.css +0 -0
  681. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/favicon.ico +0 -0
  682. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Bold.ttf +0 -0
  683. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Light.ttf +0 -0
  684. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Medium.ttf +0 -0
  685. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Regular.ttf +0 -0
  686. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Retina.ttf +0 -0
  687. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-SemiBold.ttf +0 -0
  688. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/LICENSE.txt +0 -0
  689. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Black.ttf +0 -0
  690. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
  691. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Bold.ttf +0 -0
  692. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
  693. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Italic.ttf +0 -0
  694. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Light.ttf +0 -0
  695. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
  696. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Medium.ttf +0 -0
  697. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  698. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Regular.ttf +0 -0
  699. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Thin.ttf +0 -0
  700. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
  701. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/LICENSE.txt +0 -0
  702. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/README.txt +0 -0
  703. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-Italic-VariableFont_wght.ttf +0 -0
  704. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf +0 -0
  705. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Bold.ttf +0 -0
  706. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-BoldItalic.ttf +0 -0
  707. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLight.ttf +0 -0
  708. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLightItalic.ttf +0 -0
  709. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Italic.ttf +0 -0
  710. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Light.ttf +0 -0
  711. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-LightItalic.ttf +0 -0
  712. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Medium.ttf +0 -0
  713. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-MediumItalic.ttf +0 -0
  714. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Regular.ttf +0 -0
  715. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBold.ttf +0 -0
  716. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBoldItalic.ttf +0 -0
  717. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Thin.ttf +0 -0
  718. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ThinItalic.ttf +0 -0
  719. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/backfill.jpg +0 -0
  720. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/banner-shape-purple-peach.jpg +0 -0
  721. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/dashboard-api-key.webp +0 -0
  722. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/extensions/great_expectations/logo.png +0 -0
  723. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/extra.jpg +0 -0
  724. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/monitor.jpg +0 -0
  725. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/run B.jpg +0 -0
  726. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/images/sessions/abstract.png +0 -0
  727. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/frontend_dist/vercel.svg +0 -0
  728. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/kernel_output_parser.py +0 -0
  729. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/kernels.py +0 -0
  730. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/logger.py +0 -0
  731. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/scheduler_manager.py +0 -0
  732. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/server.py +0 -0
  733. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/subscriber.py +0 -0
  734. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/terminal_server.py +0 -0
  735. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/utils/__init__.py +0 -0
  736. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/server/utils/frontend_renderer.py +0 -0
  737. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/__init__.py +0 -0
  738. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/__init__.py +0 -0
  739. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/client.py +0 -0
  740. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/config.py +0 -0
  741. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/constants.py +0 -0
  742. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/exceptions.py +0 -0
  743. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/airbyte/server.py +0 -0
  744. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/__init__.py +0 -0
  745. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/ecs/__init__.py +0 -0
  746. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/ecs/config.py +0 -0
  747. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/ecs/ecs.py +0 -0
  748. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/__init__.py +0 -0
  749. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/config.py +0 -0
  750. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/emr.py +0 -0
  751. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/emr_basics.py +0 -0
  752. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/launcher.py +0 -0
  753. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/emr/resource_manager.py +0 -0
  754. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/events/__init__.py +0 -0
  755. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/events/events.py +0 -0
  756. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/s3/__init__.py +0 -0
  757. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/s3/s3.py +0 -0
  758. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/secrets_manager/__init__.py +0 -0
  759. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/aws/secrets_manager/secrets_manager.py +0 -0
  760. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/datadog/__init__.py +0 -0
  761. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/dbt/__init__.py +0 -0
  762. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/dbt/config.py +0 -0
  763. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/dbt/constants.py +0 -0
  764. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/dbt/dbt.py +0 -0
  765. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/email/__init__.py +0 -0
  766. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/email/config.py +0 -0
  767. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/email/email.py +0 -0
  768. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/gcp/__init__.py +0 -0
  769. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/gcp/cloud_run/__init__.py +0 -0
  770. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/gcp/cloud_run/cloud_run.py +0 -0
  771. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/gcp/cloud_run/config.py +0 -0
  772. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/google_chat/__init__.py +0 -0
  773. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/google_chat/config.py +0 -0
  774. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/google_chat/google_chat.py +0 -0
  775. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/hightouch/__init__.py +0 -0
  776. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/hightouch/config.py +0 -0
  777. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/hightouch/constants.py +0 -0
  778. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/hightouch/hightouch.py +0 -0
  779. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/k8s/__init__.py +0 -0
  780. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/k8s/config.py +0 -0
  781. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/k8s/constants.py +0 -0
  782. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/k8s/job_manager.py +0 -0
  783. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/metaplane/__init__.py +0 -0
  784. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/metaplane/config.py +0 -0
  785. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/metaplane/metaplane.py +0 -0
  786. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/slack/__init__.py +0 -0
  787. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/slack/config.py +0 -0
  788. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/slack/slack.py +0 -0
  789. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/stitch/__init__.py +0 -0
  790. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/stitch/config.py +0 -0
  791. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/stitch/constants.py +0 -0
  792. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/stitch/stitch.py +0 -0
  793. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/teams/__init__.py +0 -0
  794. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/teams/config.py +0 -0
  795. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/teams/teams.py +0 -0
  796. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/tracking/__init__.py +0 -0
  797. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/services/tracking/metrics.py +0 -0
  798. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/settings/__init__.py +0 -0
  799. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/__init__.py +0 -0
  800. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/array.py +0 -0
  801. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/code.py +0 -0
  802. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/config.py +0 -0
  803. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/constants.py +0 -0
  804. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/conversions.py +0 -0
  805. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/custom_types.py +0 -0
  806. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/dates.py +0 -0
  807. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/environments.py +0 -0
  808. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/hash.py +0 -0
  809. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/http_client.py +0 -0
  810. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/io.py +0 -0
  811. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/logger.py +0 -0
  812. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/multi.py +0 -0
  813. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/parsers.py +0 -0
  814. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/retry.py +0 -0
  815. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/security.py +0 -0
  816. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/strings.py +0 -0
  817. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/urls.py +0 -0
  818. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/shared/utils.py +0 -0
  819. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/__init__.py +0 -0
  820. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/constants.py +0 -0
  821. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/__init__.py +0 -0
  822. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/amazon_s3.py +0 -0
  823. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/base.py +0 -0
  824. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/kafka.py +0 -0
  825. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/kinesis.py +0 -0
  826. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/opensearch.py +0 -0
  827. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sinks/sink_factory.py +0 -0
  828. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/__init__.py +0 -0
  829. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/azure_event_hub.py +0 -0
  830. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/base.py +0 -0
  831. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/kafka.py +0 -0
  832. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/kinesis.py +0 -0
  833. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/rabbitmq.py +0 -0
  834. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/streaming/sources/source_factory.py +0 -0
  835. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/__init__.py +0 -0
  836. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/__init__.py +0 -0
  837. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/operations/__init__.py +0 -0
  838. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/operations/base.py +0 -0
  839. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/operations/test_operations.py +0 -0
  840. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/operations/test_sessions.py +0 -0
  841. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/api/operations/test_users.py +0 -0
  842. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/base_test.py +0 -0
  843. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/__init__.py +0 -0
  844. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/__init__.py +0 -0
  845. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_clean_column_names.py +0 -0
  846. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_fix_syntax_error.py +0 -0
  847. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_impute_values.py +0 -0
  848. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_reformat_values.py +0 -0
  849. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_collinear_columns.py +0 -0
  850. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_high_empty_rate.py +0 -0
  851. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_single_value.py +0 -0
  852. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_duplicate_rows.py +0 -0
  853. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_outliers.py +0 -0
  854. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/statistics/__init__.py +0 -0
  855. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/statistics/test_calculator.py +0 -0
  856. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/test_column_type_detector.py +0 -0
  857. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/__init__.py +0 -0
  858. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/shared.py +0 -0
  859. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_base.py +0 -0
  860. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_column.py +0 -0
  861. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_custom_actions.py +0 -0
  862. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_helpers.py +0 -0
  863. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_row.py +0 -0
  864. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_utils.py +0 -0
  865. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_cleaner/transformer_actions/test_variable_replacer.py +0 -0
  866. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/__init__.py +0 -0
  867. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/git/__init__.py +0 -0
  868. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/git/test_git.py +0 -0
  869. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/__init__.py +0 -0
  870. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/block/__init__.py +0 -0
  871. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/block/test_sql.py +0 -0
  872. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/test_block.py +0 -0
  873. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/test_pipeline.py +0 -0
  874. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/models/test_variable.py +0 -0
  875. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/test_templates.py +0 -0
  876. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/data_preparation/test_variable_manager.py +0 -0
  877. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/factory.py +0 -0
  878. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/io/__init__.py +0 -0
  879. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/io/test_config.py +0 -0
  880. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/io/test_export_utils.py +0 -0
  881. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/__init__.py +0 -0
  882. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/db/__init__.py +0 -0
  883. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/db/test_models.py +0 -0
  884. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/notification/__init__.py +0 -0
  885. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/notification/constants.py +0 -0
  886. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/notification/test_config.py +0 -0
  887. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/notification/test_sender.py +0 -0
  888. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/queue/__init__.py +0 -0
  889. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/queue/test_process_queue.py +0 -0
  890. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/test_execution_process_manager.py +0 -0
  891. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/test_job_manager.py +0 -0
  892. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/test_pipeline_scheduler.py +0 -0
  893. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/triggers/__init__.py +0 -0
  894. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/triggers/test_event_trigger.py +0 -0
  895. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/orchestration/triggers/test_loop_time_trigger.py +0 -0
  896. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/__init__.py +0 -0
  897. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/aws/__init__.py +0 -0
  898. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/aws/s3/__init__.py +0 -0
  899. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/aws/s3/test_s3.py +0 -0
  900. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/datadog/__init__.py +0 -0
  901. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/datadog/test_datadog.py +0 -0
  902. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/k8s/__init__.py +0 -0
  903. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/services/k8s/test_job_manager.py +0 -0
  904. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/shared/__init__.py +0 -0
  905. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/shared/test_io.py +0 -0
  906. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/shared/test_retry.py +0 -0
  907. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/shared/test_security.py +0 -0
  908. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/__init__.py +0 -0
  909. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sinks/__init__.py +0 -0
  910. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sinks/test_amazon_s3.py +0 -0
  911. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sinks/test_kinesis.py +0 -0
  912. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sinks/test_opensearch.py +0 -0
  913. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sinks/test_sink_factory.py +0 -0
  914. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/__init__.py +0 -0
  915. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/test_azure_event_hub.py +0 -0
  916. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/test_kafka.py +0 -0
  917. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/test_kinesis.py +0 -0
  918. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/test_rabbitmq.py +0 -0
  919. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/streaming/sources/test_source_factory.py +0 -0
  920. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/tests/test_shared.py +0 -0
  921. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/utils/__init__.py +0 -0
  922. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/utils/code.py +0 -0
  923. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/utils/logger/__init__.py +0 -0
  924. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai/utils/logger/constants.py +0 -0
  925. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai.egg-info/dependency_links.txt +0 -0
  926. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai.egg-info/entry_points.txt +0 -0
  927. {mage-ai-0.8.47 → mage-ai-0.8.49}/mage_ai.egg-info/top_level.txt +0 -0
  928. {mage-ai-0.8.47 → mage-ai-0.8.49}/pyproject.toml +0 -0
  929. {mage-ai-0.8.47 → mage-ai-0.8.49}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mage-ai
3
- Version: 0.8.47
3
+ Version: 0.8.49
4
4
  Summary: Mage is a tool for building and deploying data pipelines.
5
5
  Home-page: https://github.com/mage-ai/mage-ai
6
6
  Author: Mage
@@ -12,6 +12,7 @@ Requires-Python: >=3.6
12
12
  Description-Content-Type: text/markdown
13
13
  Provides-Extra: azure
14
14
  Provides-Extra: bigquery
15
+ Provides-Extra: clickhouse
15
16
  Provides-Extra: dbt
16
17
  Provides-Extra: google-cloud-storage
17
18
  Provides-Extra: hdf5
@@ -8,12 +8,24 @@ import yaml
8
8
 
9
9
  DATA_PROVIDERS = [
10
10
  DataSource.BIGQUERY,
11
+ DataSource.CLICKHOUSE,
11
12
  DataSource.MSSQL,
12
13
  DataSource.MYSQL,
13
14
  DataSource.POSTGRES,
14
15
  DataSource.REDSHIFT,
15
16
  DataSource.SNOWFLAKE,
17
+ DataSource.TRINO,
16
18
  ]
19
+ DATA_PROVIDERS_NAME = {
20
+ DataSource.BIGQUERY: 'BigQuery',
21
+ DataSource.CLICKHOUSE: 'ClickHouse',
22
+ DataSource.MSSQL: 'Microsoft SQL Server',
23
+ DataSource.MYSQL: 'MySQL',
24
+ DataSource.POSTGRES: 'PostgreSQL',
25
+ DataSource.REDSHIFT: 'Redshift',
26
+ DataSource.SNOWFLAKE: 'Snowflake',
27
+ DataSource.TRINO: 'Trino',
28
+ }
17
29
 
18
30
 
19
31
  class DataProviderResource(GenericResource):
@@ -27,7 +39,7 @@ class DataProviderResource(GenericResource):
27
39
  print(exc)
28
40
 
29
41
  collection = [dict(
30
- id=ds.title(),
42
+ id=DATA_PROVIDERS_NAME[ds.value],
31
43
  profiles=[p for p in profiles if p != 'version'],
32
44
  value=ds.value,
33
45
  ) for ds in DATA_PROVIDERS]
@@ -5,7 +5,6 @@ from mage_ai.orchestration.db.models.oauth import User
5
5
  from urllib.parse import urlparse
6
6
  import asyncio
7
7
  import base64
8
- import git
9
8
  import os
10
9
  import subprocess
11
10
 
@@ -15,6 +14,7 @@ REMOTE_NAME = 'mage-repo'
15
14
 
16
15
  class Git:
17
16
  def __init__(self, git_config: GitConfig):
17
+ import git
18
18
  self.remote_repo_link = git_config.remote_repo_link
19
19
  self.repo_path = git_config.repo_path or os.getcwd()
20
20
  os.makedirs(self.repo_path, exist_ok=True)
@@ -655,6 +655,7 @@ class Block:
655
655
  dynamic_block_uuid: str = None,
656
656
  dynamic_upstream_block_uuids: List[str] = None,
657
657
  run_settings: Dict = None,
658
+ **kwargs,
658
659
  ) -> Dict:
659
660
  try:
660
661
  if not run_all_blocks:
@@ -685,6 +686,7 @@ class Block:
685
686
  dynamic_block_index=dynamic_block_index,
686
687
  dynamic_upstream_block_uuids=dynamic_upstream_block_uuids,
687
688
  run_settings=run_settings,
689
+ **kwargs,
688
690
  )
689
691
  block_output = self.post_process_output(output)
690
692
  variable_mapping = dict()
@@ -867,6 +869,7 @@ class Block:
867
869
  dynamic_block_index: int = None,
868
870
  dynamic_upstream_block_uuids: List[str] = None,
869
871
  run_settings: Dict = None,
872
+ **kwargs,
870
873
  ) -> Dict:
871
874
  # Add pipeline uuid and block uuid to global_vars
872
875
  global_vars = merge_dict(
@@ -922,6 +925,7 @@ class Block:
922
925
  runtime_arguments=runtime_arguments,
923
926
  upstream_block_uuids=upstream_block_uuids,
924
927
  run_settings=run_settings,
928
+ **kwargs,
925
929
  )
926
930
 
927
931
  output_message = dict(output=outputs)
@@ -942,6 +946,7 @@ class Block:
942
946
  runtime_arguments: Dict = None,
943
947
  upstream_block_uuids: List[str] = None,
944
948
  run_settings: Dict = None,
949
+ **kwargs,
945
950
  ) -> List:
946
951
  decorated_functions = []
947
952
  test_functions = []
@@ -1,6 +1,7 @@
1
1
  from mage_ai.data_preparation.models.block import Block
2
2
  from mage_ai.data_preparation.models.block.sql import (
3
3
  bigquery,
4
+ clickhouse,
4
5
  mssql,
5
6
  mysql,
6
7
  postgres,
@@ -14,8 +15,12 @@ from mage_ai.data_preparation.models.block.sql.utils.shared import (
14
15
  )
15
16
  from mage_ai.data_preparation.models.constants import BlockType
16
17
  from mage_ai.data_preparation.repo_manager import get_repo_path
17
- from mage_ai.io.base import DataSource, ExportWritePolicy
18
- from mage_ai.io.config import ConfigFileLoader
18
+ from mage_ai.io.base import (
19
+ DataSource,
20
+ ExportWritePolicy,
21
+ QUERY_ROW_LIMIT,
22
+ )
23
+ from mage_ai.io.config import ConfigFileLoader, ConfigKey
19
24
  from os import path
20
25
  from time import sleep
21
26
  from typing import Any, Dict, List
@@ -37,6 +42,7 @@ def execute_sql_code(
37
42
  global_vars: Dict = None,
38
43
  config_file_loader: Any = None,
39
44
  configuration: Dict = None,
45
+ test_execution: bool = False,
40
46
  ) -> List[Any]:
41
47
  configuration = configuration if configuration else block.configuration
42
48
  use_raw_sql = configuration.get('use_raw_sql')
@@ -66,6 +72,12 @@ def execute_sql_code(
66
72
  verbose=BlockType.DATA_EXPORTER == block.type,
67
73
  )
68
74
 
75
+ limit = int(configuration.get('limit') or QUERY_ROW_LIMIT)
76
+ if test_execution:
77
+ limit = min(limit, QUERY_ROW_LIMIT)
78
+ else:
79
+ limit = QUERY_ROW_LIMIT
80
+
69
81
  if DataSource.BIGQUERY.value == data_provider:
70
82
  from mage_ai.io.bigquery import BigQuery
71
83
 
@@ -111,12 +123,54 @@ def execute_sql_code(
111
123
  try:
112
124
  result = loader.load(
113
125
  f'SELECT * FROM {database}.{schema}.{table_name}',
126
+ limit=limit,
114
127
  verbose=False,
115
128
  )
116
129
  return [result]
117
130
  except Exception as err:
118
131
  if '404' not in str(err):
119
132
  raise err
133
+ elif DataSource.CLICKHOUSE.value == data_provider:
134
+ from mage_ai.io.clickhouse import ClickHouse
135
+
136
+ loader = ClickHouse.with_config(config_file_loader)
137
+ clickhouse.create_upstream_block_tables(
138
+ loader,
139
+ block,
140
+ configuration=configuration,
141
+ execution_partition=execution_partition,
142
+ )
143
+
144
+ query_string = clickhouse.interpolate_input_data(block, query)
145
+ query_string = interpolate_vars(
146
+ query_string, global_vars=global_vars)
147
+
148
+ database = database or 'default'
149
+
150
+ if use_raw_sql:
151
+ return execute_raw_sql(
152
+ loader,
153
+ block,
154
+ query_string,
155
+ configuration=configuration,
156
+ should_query=should_query,
157
+ )
158
+ else:
159
+ loader.export(
160
+ None,
161
+ table_name=table_name,
162
+ database=database,
163
+ query_string=query_string,
164
+ **kwargs_shared,
165
+ )
166
+
167
+ if should_query:
168
+ return [
169
+ loader.load(
170
+ f'SELECT * FROM {database}.{table_name}',
171
+ verbose=False,
172
+ ),
173
+ ]
120
174
  elif DataSource.MSSQL.value == data_provider:
121
175
  from mage_ai.io.mssql import MSSQL
122
176
 
@@ -155,6 +209,7 @@ def execute_sql_code(
155
209
  return [
156
210
  loader.load(
157
211
  f'SELECT * FROM {table_name}',
212
+ limit=limit,
158
213
  verbose=False,
159
214
  ),
160
215
  ]
@@ -193,6 +248,7 @@ def execute_sql_code(
193
248
  return [
194
249
  loader.load(
195
250
  f'SELECT * FROM {table_name}',
251
+ limit=limit,
196
252
  verbose=False,
197
253
  ),
198
254
  ]
@@ -231,6 +287,7 @@ def execute_sql_code(
231
287
  return [
232
288
  loader.load(
233
289
  f'SELECT * FROM {schema}.{table_name}',
290
+ limit=limit,
234
291
  verbose=False,
235
292
  ),
236
293
  ]
@@ -269,6 +326,7 @@ def execute_sql_code(
269
326
  return [
270
327
  loader.load(
271
328
  f'SELECT * FROM {schema}.{table_name}',
329
+ limit=limit,
272
330
  verbose=False,
273
331
  ),
274
332
  ]
@@ -316,6 +374,7 @@ def execute_sql_code(
316
374
  database=database,
317
375
  schema=schema,
318
376
  table_name=table_name,
377
+ limit=limit,
319
378
  verbose=False,
320
379
  ),
321
380
  ]
@@ -344,21 +403,20 @@ def execute_sql_code(
344
403
  else:
345
404
  loader.export(
346
405
  None,
347
- table_name,
348
- database,
349
406
  schema,
407
+ table_name,
350
408
  if_exists=export_write_policy,
351
409
  query_string=query_string,
352
410
  verbose=BlockType.DATA_EXPORTER == block.type,
353
411
  )
354
412
 
355
413
  if should_query:
414
+ catalog = config_file_loader[ConfigKey.TRINO_CATALOG]
415
+
356
416
  return [
357
417
  loader.load(
358
- f'SELECT * FROM "{database}"."{schema}"."{table_name}"',
359
- database=database,
360
- schema=schema,
361
- table_name=table_name,
418
+ f'SELECT * FROM "{catalog}"."{schema}"."{table_name}"',
419
+ limit=limit,
362
420
  verbose=False,
363
421
  ),
364
422
  ]
@@ -449,9 +507,11 @@ class SQLBlock(Block):
449
507
  global_vars=None,
450
508
  **kwargs,
451
509
  ) -> List:
510
+ test_execution = kwargs.get('test_execution')
452
511
  return execute_sql_code(
453
512
  self,
454
513
  custom_code or self.content,
455
514
  execution_partition=execution_partition,
456
515
  global_vars=global_vars,
516
+ test_execution=test_execution,
457
517
  )
@@ -0,0 +1,38 @@
1
+ from mage_ai.data_preparation.models.block.sql.utils.shared import (
2
+ create_upstream_block_tables as create_upstream_block_tables_orig,
3
+ interpolate_input,
4
+ )
5
+ from mage_ai.io.config import ConfigKey
6
+ from typing import Dict
7
+
8
+
9
+ def create_upstream_block_tables(
10
+ loader,
11
+ block,
12
+ cascade_on_drop: bool = False,
13
+ configuration: Dict = None,
14
+ execution_partition: str = None,
15
+ cache_upstream_dbt_models: bool = False,
16
+ ):
17
+ create_upstream_block_tables_orig(
18
+ loader,
19
+ block,
20
+ cascade_on_drop,
21
+ configuration,
22
+ execution_partition,
23
+ cache_upstream_dbt_models,
24
+ cache_keys=[
25
+ ConfigKey.CLICKHOUSE_DATABASE,
26
+ ConfigKey.CLICKHOUSE_HOST,
27
+ ConfigKey.CLICKHOUSE_PORT,
28
+ ],
29
+ no_schema=True,
30
+ )
31
+
32
+
33
+ def interpolate_input_data(block, query):
34
+ return interpolate_input(
35
+ block,
36
+ query,
37
+ lambda db, schema, tn: tn,
38
+ )
@@ -163,8 +163,10 @@ def create_block_runs_from_dynamic_block(
163
163
  skip_creating_downstream = True
164
164
  break
165
165
 
166
- down_uuids = [down.uuid for down in dynamic_ancestor.downstream_blocks]
167
- down_uuids_as_ancestors = [i for i in down_uuids if i in ancestors_uuids]
166
+ down_uuids_as_ancestors = []
167
+ for down in dynamic_ancestor.downstream_blocks:
168
+ if down.uuid in ancestors_uuids and not should_reduce_output(down):
169
+ down_uuids_as_ancestors.append(down.uuid)
168
170
  skip_creating_downstream = len(down_uuids_as_ancestors) >= 2
169
171
 
170
172
  # Only create downstream block runs if it doesn’t have dynamically created upstream
@@ -20,7 +20,7 @@ INACCESSIBLE_DIRS = frozenset(['__pycache__'])
20
20
  MAX_DEPTH = 30
21
21
  MAX_NUMBER_OF_FILE_VERSIONS = int(os.getenv('MAX_NUMBER_OF_FILE_VERSIONS', 100) or 100)
22
22
 
23
- PIPELINES_FOLDER_PREFIX = 'pipelines/'
23
+ PIPELINES_FOLDER_PREFIX = f'pipelines{os.sep}'
24
24
 
25
25
 
26
26
  class File:
@@ -118,8 +118,9 @@ class File:
118
118
  filename: str,
119
119
  ) -> Tuple[str, str]:
120
120
  return os.path.join(
121
- f'{repo_path}/{FILE_VERSIONS_DIR}',
122
- dir_path.replace(repo_path, f'{repo_path}/{FILE_VERSIONS_DIR}'),
121
+ repo_path,
122
+ FILE_VERSIONS_DIR,
123
+ dir_path.replace(repo_path, os.path.join(repo_path, FILE_VERSIONS_DIR)),
123
124
  filename,
124
125
  )
125
126
 
@@ -21,7 +21,7 @@ from mage_ai.data_preparation.templates.utils import copy_template_directory
21
21
  from mage_ai.data_preparation.variable_manager import VariableManager
22
22
  from mage_ai.orchestration.db import db_connection, safe_db_query
23
23
  from mage_ai.shared.array import find
24
- from mage_ai.shared.hash import extract, ignore_keys, merge_dict
24
+ from mage_ai.shared.hash import extract, index_by, ignore_keys, merge_dict
25
25
  from mage_ai.shared.io import safe_write, safe_write_async
26
26
  from mage_ai.shared.strings import format_enum
27
27
  from mage_ai.shared.utils import clean_name
@@ -674,6 +674,12 @@ class Pipeline:
674
674
  )
675
675
  should_save = True
676
676
 
677
+ blocks = data.get('blocks', [])
678
+
679
+ if blocks:
680
+ if not should_save and self.__update_block_order(blocks):
681
+ should_save = True
682
+
677
683
  if should_save:
678
684
  self.save()
679
685
 
@@ -682,8 +688,8 @@ class Pipeline:
682
688
 
683
689
  arr = []
684
690
 
685
- if 'blocks' in data:
686
- arr.append(('blocks', data['blocks'], self.blocks_by_uuid))
691
+ if blocks:
692
+ arr.append(('blocks', blocks, self.blocks_by_uuid))
687
693
  if 'widgets' in data:
688
694
  arr.append(('widgets', data['widgets'], self.widgets_by_uuid))
689
695
 
@@ -778,6 +784,33 @@ class Pipeline:
778
784
  if should_save_async:
779
785
  await self.save_async(widget=widget)
780
786
 
787
+ def __update_block_order(self, blocks: List[Dict]) -> bool:
788
+ uuids_new = [b['uuid'] for b in blocks]
789
+ uuids_old = [b['uuid'] for b in self.block_configs]
790
+
791
+ min_length = min(len(uuids_new), len(uuids_old))
792
+
793
+ # If there are no blocks or the order has changed
794
+ if min_length == 0 or uuids_new[:min_length] == uuids_old[:min_length]:
795
+ return False
796
+
797
+ block_configs_by_uuids = index_by(lambda x: x['uuid'], self.block_configs)
798
+
799
+ block_configs = []
800
+ blocks_by_uuid = {}
801
+
802
+ for block_uuid in uuids_new:
803
+ if block_uuid in block_configs_by_uuids:
804
+ block_configs.append(block_configs_by_uuids[block_uuid])
805
+
806
+ if block_uuid in self.blocks_by_uuid:
807
+ blocks_by_uuid[block_uuid] = self.blocks_by_uuid[block_uuid]
808
+
809
+ self.block_configs = block_configs
810
+ self.blocks_by_uuid = blocks_by_uuid
811
+
812
+ return True
813
+
781
814
  def __add_block_to_mapping(
782
815
  self,
783
816
  blocks_by_uuid,
@@ -10,6 +10,12 @@ default:
10
10
  AZURE_CLIENT_SECRET: "{{ env_var('AZURE_CLIENT_SECRET') }}"
11
11
  AZURE_STORAGE_ACCOUNT_NAME: "{{ env_var('AZURE_STORAGE_ACCOUNT_NAME') }}"
12
12
  AZURE_TENANT_ID: "{{ env_var('AZURE_TENANT_ID') }}"
13
+ CLICKHOUSE_DATABASE: default
14
+ CLICKHOUSE_HOST: host.docker.internal
15
+ CLICKHOUSE_INTERFACE: http
16
+ CLICKHOUSE_PASSWORD: null
17
+ CLICKHOUSE_PORT: 8123
18
+ CLICKHOUSE_USERNAME: null
13
19
  GOOGLE_SERVICE_ACC_KEY:
14
20
  type: service_account
15
21
  project_id: project-id
@@ -46,3 +52,9 @@ default:
46
52
  SNOWFLAKE_DEFAULT_DB: optional_default_database
47
53
  SNOWFLAKE_DEFAULT_SCHEMA: optional_default_schema
48
54
  SNOWFLAKE_ROLE: role
55
+ TRINO_CATALOG: catalog
56
+ TRINO_HOST: '127.0.0.1'
57
+ TRINO_PASSWORD: pasword
58
+ TRINO_PORT: 8080
59
+ TRINO_SCHEMA: schema
60
+ TRINO_USER: user
@@ -14,6 +14,7 @@ QUERY_ROW_LIMIT = 10_000_000
14
14
  class DataSource(str, Enum):
15
15
  API = 'api'
16
16
  BIGQUERY = 'bigquery'
17
+ CLICKHOUSE = 'clickhouse'
17
18
  FILE = 'file'
18
19
  GOOGLE_CLOUD_STORAGE = 'google_cloud_storage'
19
20
  KAFKA = 'kafka'
@@ -0,0 +1,237 @@
1
+ from mage_ai.io.base import BaseSQLDatabase, ExportWritePolicy, QUERY_ROW_LIMIT
2
+ from mage_ai.io.config import BaseConfigLoader, ConfigKey
3
+ from mage_ai.io.export_utils import (
4
+ clean_df_for_export,
5
+ infer_dtypes,
6
+ )
7
+ from pandas import DataFrame
8
+ from typing import Dict, List, Union
9
+ import clickhouse_connect
10
+
11
+
12
+ class ClickHouse(BaseSQLDatabase):
13
+ """
14
+ Handles data transfer betwee a ClickHouse data warehouse and the Mage app.
15
+ """
16
+ def __init__(self, **kwargs) -> None:
17
+ """
18
+ Initializes settings for connecting to a ClickHouse warehouse.
19
+
20
+ To authenticate (and authorize) access to a ClickHouse warehouse,
21
+ credentials, i.e., username and password, must be provided.
22
+
23
+ All keyword arguments will be passed to the ClickHouse client.
24
+ """
25
+ if kwargs.get('verbose') is not None:
26
+ kwargs.pop('verbose')
27
+ super().__init__(verbose=kwargs.get('verbose', True))
28
+ with self.printer.print_msg('Connecting to ClickHouse'):
29
+ self.client = clickhouse_connect.get_client(**kwargs)
30
+
31
+ @classmethod
32
+ def with_config(cls, config: BaseConfigLoader) -> 'ClickHouse':
33
+ """
34
+ Initializes ClickHouse client from configuration loader
35
+
36
+ Args:
37
+ config (BaseConfigLoader): Configuration loader object
38
+ """
39
+ if ConfigKey.CLICKHOUSE_HOST not in config:
40
+ raise ValueError(
41
+ 'No valid configuration settings found for ClickHouse. '
42
+ 'You must specify host.'
43
+ )
44
+ return cls(
45
+ database=config[ConfigKey.CLICKHOUSE_DATABASE],
46
+ host=config[ConfigKey.CLICKHOUSE_HOST],
47
+ interface=config[ConfigKey.CLICKHOUSE_INTERFACE],
48
+ password=config[ConfigKey.CLICKHOUSE_PASSWORD],
49
+ port=config[ConfigKey.CLICKHOUSE_PORT],
50
+ username=config[ConfigKey.CLICKHOUSE_USERNAME],
51
+ )
52
+
53
+ def execute(self, command_string: str, **kwargs) -> None:
54
+ """
55
+ Sends command to the connected ClickHouse warehouse.
56
+
57
+ Args:
58
+ command_string (str): Command to execute on the ClickHouse warehouse.
59
+ **kwargs: Additional arguments to pass to command, such as configurations
60
+ """
61
+ with self.printer.print_msg(f'Executing query \'{command_string}\''):
62
+ command_string = self._clean_query(command_string)
63
+ self.client.command(command_string, **kwargs)
64
+
65
+ def execute_query(
66
+ self,
67
+ query: str,
68
+ parameters: Dict = None,
69
+ **kwargs,
70
+ ) -> DataFrame:
71
+ """
72
+ Sends query to the connected ClickHouse warehouse.
73
+
74
+ Args:
75
+ query (str): Query to execute on the ClickHouse warehouse.
76
+ **kwargs: Additional arguments to pass to query, such as query configurations
77
+ """
78
+ query = self._clean_query(query)
79
+ with self.printer.print_msg(f'Executing query \'{query}\''):
80
+ result = self.client.query_df(query, parameters=parameters)
81
+
82
+ return result
83
+
84
+ def execute_queries(
85
+ self,
86
+ queries: List[str],
87
+ query_variables: List[Dict] = None,
88
+ fetch_query_at_indexes: List[bool] = None,
89
+ **kwargs,
90
+ ) -> List:
91
+ results = []
92
+
93
+ for idx, query in enumerate(queries):
94
+ parameters = query_variables[idx] \
95
+ if query_variables and idx < len(query_variables) \
96
+ else {}
97
+ query = self._clean_query(query)
98
+
99
+ if fetch_query_at_indexes and idx < len(fetch_query_at_indexes) and \
100
+ fetch_query_at_indexes[idx]:
101
+ result = self.client.query_df(query, parameters=parameters)
102
+ else:
103
+ result = self.client.command(query, parameters=parameters)
104
+
105
+ results.append(result)
106
+
107
+ return results
108
+
109
+ def load(
110
+ self,
111
+ query_string: str,
112
+ limit: int = QUERY_ROW_LIMIT,
113
+ display_query: Union[str, None] = None,
114
+ verbose: bool = True,
115
+ **kwargs,
116
+ ) -> DataFrame:
117
+ """
118
+ Loads data from ClickHouse into a Pandas data frame based on the query given.
119
+ This will fail if the query returns no data from the database. When a select query
120
+ is provided, this function will load at maximum 10,000,000 rows of data. To operate on more
121
+ data, consider performing data transformations in warehouse.
122
+
123
+ Args:
124
+ query_string (str): Query to fetch a table or subset of a table.
125
+ limit (int, Optional): The number of rows to limit the loaded dataframe to. Defaults to
126
+ 10,000,000.
127
+ **kwargs: Additional arguments to pass to query, such as query configurations
128
+
129
+ Returns:
130
+ DataFrame: Data frame associated with the given query.
131
+ """
132
+
133
+ print_message = 'Loading data'
134
+ if verbose:
135
+ print_message += ' with query'
136
+
137
+ if display_query:
138
+ for line in display_query.split('\n'):
139
+ print_message += f'\n{line}'
140
+ else:
141
+ print_message += f'\n{query_string}'
142
+
143
+ query_string = self._clean_query(query_string)
144
+
145
+ with self.printer.print_msg(print_message):
146
+ return self.client.query_df(
147
+ self._enforce_limit(query_string, limit), **kwargs
148
+ )
149
+
150
+ def export(
151
+ self,
152
+ df: DataFrame,
153
+ table_name: str,
154
+ database: str = 'default',
155
+ if_exists: str = 'append',
156
+ index: bool = False,
157
+ query_string: Union[str, None] = None,
158
+ create_table_statement: Union[str, None] = None,
159
+ verbose: bool = True,
160
+ **kwargs,
161
+ ) -> None:
162
+ """
163
+ Exports a Pandas data frame to a ClickHouse warehouse based on the table name.
164
+ If table doesn't exist, the table is automatically created.
165
+
166
+ Args:
167
+ df (DataFrame): Data frame to export
168
+ table_name (str): Name of the table to export data to (excluding database).
169
+ If this table exists, the table schema must match the data frame schema.
170
+ If this table doesn't exist, query_string must be specified to create the new table.
171
+ database (str): Name of the database in which the table is located.
172
+ if_exists (str, optional): Specifies export policy if table exists. Either
173
+ - `'fail'`: throw an error.
174
+ - `'replace'`: drops existing table and creates new table of same name.
175
+ - `'append'`: appends data frame to existing table. In this case the schema must
176
+ match the original table.
177
+ Defaults to `'append'`.
178
+ **kwargs: Additional arguments to pass to writer
179
+ """
180
+
181
+ if type(df) is dict:
182
+ df = DataFrame([df])
183
+ elif type(df) is list:
184
+ df = DataFrame(df)
185
+
186
+ if not query_string:
187
+ if index:
188
+ df = df.reset_index()
189
+
190
+ dtypes = infer_dtypes(df)
191
+ df = clean_df_for_export(df, self.clean, dtypes)
192
+
193
+ def __process(database: Union[str, None]):
194
+
195
+ df_existing = self.client.query_df(f"""
196
+ EXISTS TABLE {database}.{table_name}
197
+ """)
198
+
199
+ table_exists = not df_existing.empty and df_existing.iloc[0, 0] == 1
200
+ should_create_table = not table_exists
201
+
202
+ if table_exists:
203
+ if ExportWritePolicy.FAIL == if_exists:
204
+ raise ValueError(
205
+ f'Table \'{table_name}\' already'
206
+ ' exists in database {database}.',
207
+ )
208
+ elif ExportWritePolicy.REPLACE == if_exists:
209
+ self.client.command(
210
+ f'DROP TABLE IF EXISTS {database}.{table_name}')
211
+ should_create_table = True
212
+
213
+ if query_string:
214
+ self.client.command(f'USE {database}')
215
+
216
+ if should_create_table:
217
+ self.client.command(f"""
218
+ CREATE TABLE IF NOT EXISTS {database}.{table_name} ENGINE = Memory AS
219
+ {query_string}
220
+ """)
221
+ else:
222
+ self.client.command(f"""
223
+ INSERT INTO {database}.{table_name}
224
+ {query_string}
225
+ """)
226
+ else:
227
+ if should_create_table:
228
+ self.client.command(create_table_statement)
229
+
230
+ self.client.insert_df(f'{database}.{table_name}', df)
231
+
232
+ if verbose:
233
+ with self.printer.print_msg(
234
+ f'Exporting data to table \'{database}.{table_name}\''):
235
+ __process(database=database)
236
+ else:
237
+ __process(database=database)