mage-ai 0.8.25__tar.gz → 0.8.27__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mage-ai might be problematic. Click here for more details.

Files changed (921) hide show
  1. {mage-ai-0.8.25/mage_ai.egg-info → mage-ai-0.8.27}/PKG-INFO +1 -1
  2. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/sources/constants.py +1 -0
  3. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/streaming_pipeline_executor.py +2 -1
  4. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/logger_manager.py +7 -1
  5. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/__init__.py +60 -17
  6. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/__init__.py +64 -17
  7. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/utils/shared.py +49 -3
  8. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/variable.py +6 -1
  9. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/repo_manager.py +5 -2
  10. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/shared/secrets.py +6 -3
  11. mage-ai-0.8.27/mage_ai/data_preparation/templates/sensors/bigquery.py +32 -0
  12. mage-ai-0.8.27/mage_ai/data_preparation/templates/sensors/mysql.py +33 -0
  13. mage-ai-0.8.27/mage_ai/data_preparation/templates/sensors/postgres.py +33 -0
  14. mage-ai-0.8.27/mage_ai/data_preparation/templates/sensors/redshift.py +33 -0
  15. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/sensors/s3.py +11 -7
  16. mage-ai-0.8.27/mage_ai/data_preparation/templates/sensors/snowflake.py +33 -0
  17. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/postgres.py +13 -1
  18. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/constants.py +1 -1
  19. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/404.html +2 -2
  20. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/404.html.html +2 -2
  21. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/WbTBCvyjQQ9UFFLZOU1E5/_buildManifest.js +1 -0
  22. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/2344-f8ae030d6a6863ae.js +1 -0
  23. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/2626-e7fa4f83f8214c97.js +1 -0
  24. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/4178-663d9f70bffc7a47.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/4178-a6d1bd2be4706f51.js +1 -1
  25. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/4261-88b0103fad331620.js +1 -0
  26. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/4538-8a3c3e47be976ede.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/4538-347283088b83c6bf.js +1 -1
  27. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/5141-57c3868a80196da8.js +1 -0
  28. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/5477-e2cc1ca7108ebc6b.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/5477-b439f211b6146a11.js +1 -1
  29. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/5872-103815a4a043489b.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/5872-1767c45ee6690ae5.js +1 -1
  30. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/5896-f84e336fb8877027.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/5896-10a676bcc86978cc.js +1 -1
  31. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/6166-705b4fdecaf11e63.js +1 -0
  32. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/6532-b1bd0b3f422abec8.js +1 -0
  33. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/7400-26ce25ec46728ef7.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/7400-a48b270726b9eef5.js +1 -1
  34. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/8180-8de652170ea5ed93.js +1 -0
  35. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/839-15c54471a9a9bf2e.js +1 -0
  36. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/9386-4b9e157e18dd2c65.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/9386-d4cc11bab74eec8d.js +1 -1
  37. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/9832-c8b8970bb522f302.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/9832-f97919376d52e3bf.js +1 -1
  38. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-624f87faa4b5ee9a.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-5f3dbed367342a3d.js +1 -1
  39. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-3046bc53d24917c7.js +1 -0
  40. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-f6059e27e601627c.js +1 -0
  41. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-123556bdfe2e194b.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-050ef37b6672100a.js +1 -1
  42. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-5f95bb4c3a2d7d46.js +1 -0
  43. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-270c0198eeef1542.js +1 -0
  44. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-c9f1df40e0aa6981.js +1 -0
  45. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-e0eb0098dcbf27ac.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-d74850779dbe87b3.js +1 -1
  46. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-848544a58563dbec.js +1 -0
  47. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-204daac985c03b62.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-675171cfd7d7b346.js +1 -1
  48. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-44533e244974a422.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-b2955f0ff960894e.js +1 -1
  49. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-2d41695001370abc.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-219960b3cc4742e3.js +1 -1
  50. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-1767a2f57f887ef7.js +1 -0
  51. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-0f373aaa7deb98c9.js +1 -0
  52. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-181343d8eb894426.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-bea0439ca2a862ba.js +1 -1
  53. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-7446a70bdd8381a5.js +1 -0
  54. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-cd6121ffe82e3834.js → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-997acba85f777259.js +1 -1
  55. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-91fbb84976467947.js +1 -0
  56. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-d72dfc596e943cc4.js +1 -0
  57. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-c99e74aa506a6cfd.js +1 -0
  58. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-4c9ad80f8f9d1074.js +1 -0
  59. mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-783b9526167f1249.js +1 -0
  60. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/index.html +2 -2
  61. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/manage.html +4 -4
  62. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipeline-runs.html +5 -5
  63. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +5 -5
  64. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +5 -5
  65. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
  66. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +5 -5
  67. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +5 -5
  68. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +5 -5
  69. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +5 -5
  70. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +5 -5
  71. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +5 -5
  72. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +5 -5
  73. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +5 -5
  74. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +5 -5
  75. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
  76. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/pipelines.html +5 -5
  77. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/settings/account/profile.html +5 -5
  78. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/settings/workspace/preferences.html +5 -5
  79. mage-ai-0.8.25/mage_ai/server/frontend_dist/settings/workspace/sync_data.html → mage-ai-0.8.27/mage_ai/server/frontend_dist/settings/workspace/sync-data.html +5 -5
  80. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/settings/workspace/users.html +5 -5
  81. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/settings.html +2 -2
  82. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/sign-in.html +9 -9
  83. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/terminal.html +5 -5
  84. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/test.html +3 -3
  85. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/triggers.html +5 -5
  86. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/server.py +1 -6
  87. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/security.py +9 -2
  88. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/utils.py +7 -0
  89. mage-ai-0.8.27/mage_ai/tests/data_preparation/models/block/test_sql.py +42 -0
  90. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/models/test_block.py +63 -0
  91. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/shared/test_security.py +6 -6
  92. mage-ai-0.8.27/mage_ai/utils/__init__.py +0 -0
  93. {mage-ai-0.8.25 → mage-ai-0.8.27/mage_ai.egg-info}/PKG-INFO +1 -1
  94. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai.egg-info/SOURCES.txt +49 -42
  95. {mage-ai-0.8.25 → mage-ai-0.8.27}/setup.py +1 -1
  96. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/ErmV1Ii-luEqAYMZkbkmO/_buildManifest.js +0 -1
  97. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/1830-3882c19d710feadd.js +0 -1
  98. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/2344-a82a406b72fe782b.js +0 -1
  99. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/2626-501fffa58c71ee7c.js +0 -1
  100. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/3688-562e0f129b09d1cd.js +0 -1
  101. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/3699-dcc0946dd0709216.js +0 -1
  102. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/4463-777e71000be29fc4.js +0 -1
  103. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/6532-baf1818fbc89e6c1.js +0 -1
  104. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/6567-2488118bb39a9d99.js +0 -1
  105. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-11d6cbf2313f0689.js +0 -1
  106. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-c226d1e215d66129.js +0 -1
  107. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-26974ca695994804.js +0 -1
  108. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-1de289b75e9c5bf1.js +0 -1
  109. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-72011b08ef047531.js +0 -1
  110. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-3b17a6d28cdde471.js +0 -1
  111. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-c31fec2be1160dbe.js +0 -1
  112. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-3a60003fce7dfb93.js +0 -1
  113. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-0e88f39d4980fc10.js +0 -1
  114. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync_data-64e03c3a285d301e.js +0 -1
  115. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-ff24167e21f2f0cf.js +0 -1
  116. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-404d934deb8950d5.js +0 -1
  117. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-90abd9c4dfca2556.js +0 -1
  118. mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-6540e41d09691d6b.js +0 -1
  119. {mage-ai-0.8.25 → mage-ai-0.8.27}/LICENSE +0 -0
  120. {mage-ai-0.8.25 → mage-ai-0.8.27}/MANIFEST.in +0 -0
  121. {mage-ai-0.8.25 → mage-ai-0.8.27}/README.md +0 -0
  122. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/__init__.py +0 -0
  123. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/__init__.py +0 -0
  124. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/api_context.py +0 -0
  125. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/constants.py +0 -0
  126. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/errors.py +0 -0
  127. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/logging.py +0 -0
  128. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/middleware.py +0 -0
  129. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/monitors/BaseMonitor.py +0 -0
  130. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/monitors/__init__.py +0 -0
  131. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/oauth_scope.py +0 -0
  132. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/operations/__init__.py +0 -0
  133. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/operations/base.py +0 -0
  134. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/operations/constants.py +0 -0
  135. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/AutocompleteItemPolicy.py +0 -0
  136. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/BackfillPolicy.py +0 -0
  137. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/BasePolicy.py +0 -0
  138. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/BlockPolicy.py +0 -0
  139. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/BlockRunPolicy.py +0 -0
  140. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/ClusterPolicy.py +0 -0
  141. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/DataProviderPolicy.py +0 -0
  142. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/EventRulePolicy.py +0 -0
  143. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/ExtensionOptionPolicy.py +0 -0
  144. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/FileContentPolicy.py +0 -0
  145. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/FilePolicy.py +0 -0
  146. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/FileVersionPolicy.py +0 -0
  147. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/GitBranchPolicy.py +0 -0
  148. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/IntegrationDestinationPolicy.py +0 -0
  149. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/IntegrationSourcePolicy.py +0 -0
  150. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/IntegrationSourceStreamPolicy.py +0 -0
  151. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/KernelPolicy.py +0 -0
  152. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/LogPolicy.py +0 -0
  153. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/MonitorStatPolicy.py +0 -0
  154. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/OutputPolicy.py +0 -0
  155. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/PipelinePolicy.py +0 -0
  156. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/PipelineRunPolicy.py +0 -0
  157. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/PipelineSchedulePolicy.py +0 -0
  158. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/ProjectPolicy.py +0 -0
  159. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/SecretPolicy.py +0 -0
  160. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/SessionPolicy.py +0 -0
  161. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/SyncPolicy.py +0 -0
  162. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/UserPolicy.py +0 -0
  163. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/VariablePolicy.py +0 -0
  164. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/WidgetPolicy.py +0 -0
  165. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/policies/__init__.py +0 -0
  166. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/AutocompleteItemPresenter.py +0 -0
  167. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/BackfillPresenter.py +0 -0
  168. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/BasePresenter.py +0 -0
  169. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/BlockPresenter.py +0 -0
  170. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/BlockRunPresenter.py +0 -0
  171. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/ClusterPresenter.py +0 -0
  172. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/DataProviderPresenter.py +0 -0
  173. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/EventRulePresenter.py +0 -0
  174. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/ExtensionOptionPresenter.py +0 -0
  175. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/FileContentPresenter.py +0 -0
  176. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/FilePresenter.py +0 -0
  177. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/FileVersionPresenter.py +0 -0
  178. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/GitBranchPresenter.py +0 -0
  179. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/IntegrationDestinationPresenter.py +0 -0
  180. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/IntegrationSourcePresenter.py +0 -0
  181. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/IntegrationSourceStreamPresenter.py +0 -0
  182. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/KernelPresenter.py +0 -0
  183. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/LogPresenter.py +0 -0
  184. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/MonitorStatPresenter.py +0 -0
  185. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/OutputPresenter.py +0 -0
  186. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/PipelinePresenter.py +0 -0
  187. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/PipelineRunPresenter.py +0 -0
  188. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/PipelineSchedulePresenter.py +0 -0
  189. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/ProjectPresenter.py +0 -0
  190. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/SecretPresenter.py +0 -0
  191. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/SessionPresenter.py +0 -0
  192. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/SyncPresenter.py +0 -0
  193. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/UserPresenter.py +0 -0
  194. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/VariablePresenter.py +0 -0
  195. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/WidgetPresenter.py +0 -0
  196. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/__init__.py +0 -0
  197. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/mixins/__init__.py +0 -0
  198. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/presenters/mixins/users.py +0 -0
  199. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/AutocompleteItemResource.py +0 -0
  200. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/BackfillResource.py +0 -0
  201. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/BaseResource.py +0 -0
  202. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/BlockResource.py +0 -0
  203. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/BlockRunResource.py +0 -0
  204. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/ClusterResource.py +0 -0
  205. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/DataProviderResource.py +0 -0
  206. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/DatabaseResource.py +0 -0
  207. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/EventRuleResource.py +0 -0
  208. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/ExtensionOptionResource.py +0 -0
  209. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/FileContentResource.py +0 -0
  210. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/FileResource.py +0 -0
  211. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/FileVersionResource.py +0 -0
  212. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/GenericResource.py +0 -0
  213. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/GitBranchResource.py +0 -0
  214. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/IntegrationDestinationResource.py +0 -0
  215. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/IntegrationSourceResource.py +0 -0
  216. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/IntegrationSourceStreamResource.py +0 -0
  217. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/KernelResource.py +0 -0
  218. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/LogResource.py +0 -0
  219. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/MonitorStatResource.py +0 -0
  220. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/OutputResource.py +0 -0
  221. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/PipelineResource.py +0 -0
  222. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/PipelineRunResource.py +0 -0
  223. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/PipelineScheduleResource.py +0 -0
  224. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/ProjectResource.py +0 -0
  225. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/Resource.py +0 -0
  226. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/SecretResource.py +0 -0
  227. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/SessionResource.py +0 -0
  228. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/SyncResource.py +0 -0
  229. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/UserResource.py +0 -0
  230. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/VariableResource.py +0 -0
  231. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/WidgetResource.py +0 -0
  232. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/__init__.py +0 -0
  233. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/mixins/__init__.py +0 -0
  234. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/shared/__init__.py +0 -0
  235. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/shared/collections.py +0 -0
  236. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/resources/shared/collective_loaders.py +0 -0
  237. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/result_set.py +0 -0
  238. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/utils.py +0 -0
  239. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/api/views.py +0 -0
  240. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/authentication/__init__.py +0 -0
  241. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/authentication/ldap.py +0 -0
  242. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/authentication/oauth2.py +0 -0
  243. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/authentication/passwords.py +0 -0
  244. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/autocomplete/__init__.py +0 -0
  245. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/autocomplete/utils.py +0 -0
  246. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cli/__init__.py +0 -0
  247. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cli/main.py +0 -0
  248. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cli/utils.py +0 -0
  249. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/__init__.py +0 -0
  250. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/aws/__init__.py +0 -0
  251. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/aws/ecs_task_manager.py +0 -0
  252. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/aws/emr_cluster_manager.py +0 -0
  253. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/cluster_manager.py +0 -0
  254. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/constants.py +0 -0
  255. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/gcp/__init__.py +0 -0
  256. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/gcp/cloud_run_service_manager.py +0 -0
  257. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/kubernetes/__init__.py +0 -0
  258. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/cluster_manager/kubernetes/workload_manager.py +0 -0
  259. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/__init__.py +0 -0
  260. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/analysis/__init__.py +0 -0
  261. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/analysis/calculator.py +0 -0
  262. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/analysis/charts.py +0 -0
  263. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/analysis/constants.py +0 -0
  264. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/__init__.py +0 -0
  265. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/base.py +0 -0
  266. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/clean_column_names.py +0 -0
  267. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/fix_syntax_errors.py +0 -0
  268. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/impute_values.py +0 -0
  269. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/reformat_values.py +0 -0
  270. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/remove_collinear_columns.py +0 -0
  271. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_high_empty_rate.py +0 -0
  272. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_single_value.py +0 -0
  273. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/remove_duplicate_rows.py +0 -0
  274. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/cleaning_rules/remove_outliers.py +0 -0
  275. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/column_types/__init__.py +0 -0
  276. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/column_types/column_type_detector.py +0 -0
  277. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/column_types/constants.py +0 -0
  278. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/data_cleaner.py +0 -0
  279. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/estimators/__init__.py +0 -0
  280. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/estimators/base.py +0 -0
  281. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/estimators/encoders.py +0 -0
  282. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/estimators/outlier_removal.py +0 -0
  283. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/pipelines/__init__.py +0 -0
  284. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/pipelines/base.py +0 -0
  285. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/shared/__init__.py +0 -0
  286. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/shared/utils.py +0 -0
  287. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/statistics/__init__.py +0 -0
  288. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/statistics/calculator.py +0 -0
  289. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/__init__.py +0 -0
  290. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/action_code.py +0 -0
  291. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/base.py +0 -0
  292. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/column.py +0 -0
  293. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/constants.py +0 -0
  294. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/custom_action.py +0 -0
  295. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/dependency_resolution.py +0 -0
  296. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/helpers.py +0 -0
  297. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/row.py +0 -0
  298. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/shared.py +0 -0
  299. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/spark/__init__.py +0 -0
  300. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/spark/constants.py +0 -0
  301. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/spark/transformers.py +0 -0
  302. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/__init__.py +0 -0
  303. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/addition.py +0 -0
  304. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/base.py +0 -0
  305. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/constant.py +0 -0
  306. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/date_trunc.py +0 -0
  307. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/difference.py +0 -0
  308. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/distance_between.py +0 -0
  309. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/divide.py +0 -0
  310. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/formatted_date.py +0 -0
  311. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/if_else.py +0 -0
  312. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/multiply.py +0 -0
  313. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/string_replace.py +0 -0
  314. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/string_split.py +0 -0
  315. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/udf/substring.py +0 -0
  316. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/utils.py +0 -0
  317. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_cleaner/transformer_actions/variable_replacer.py +0 -0
  318. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/__init__.py +0 -0
  319. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/destinations/__init__.py +0 -0
  320. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/destinations/constants.py +0 -0
  321. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/logger/__init__.py +0 -0
  322. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/logger/utils.py +0 -0
  323. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/sources/__init__.py +0 -0
  324. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/utils/__init__.py +0 -0
  325. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/utils/config.py +0 -0
  326. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/utils/parsers.py +0 -0
  327. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_integrations/utils/scheduler.py +0 -0
  328. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/__init__.py +0 -0
  329. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/decorators.py +0 -0
  330. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/__init__.py +0 -0
  331. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/block_executor.py +0 -0
  332. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/ecs_block_executor.py +0 -0
  333. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/executor_factory.py +0 -0
  334. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/gcp_cloud_run_block_executor.py +0 -0
  335. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/k8s_block_executor.py +0 -0
  336. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/pipeline_executor.py +0 -0
  337. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/pyspark_block_executor.py +0 -0
  338. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/executors/pyspark_pipeline_executor.py +0 -0
  339. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/git/__init__.py +0 -0
  340. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/__init__.py +0 -0
  341. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/gcs_logger_manager.py +0 -0
  342. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/logger.py +0 -0
  343. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/logger_manager_factory.py +0 -0
  344. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/logging/s3_logger_manager.py +0 -0
  345. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/__init__.py +0 -0
  346. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/constants.py +0 -0
  347. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/dbt/__init__.py +0 -0
  348. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/dbt/utils/__init__.py +0 -0
  349. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/errors.py +0 -0
  350. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/extension/__init__.py +0 -0
  351. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/extension/block.py +0 -0
  352. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/extension/great_expectations.py +0 -0
  353. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/extension/utils.py +0 -0
  354. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/integration/__init__.py +0 -0
  355. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/r/__init__.py +0 -0
  356. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/r/templates/data_exporter.jinja +0 -0
  357. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/r/templates/data_loader.jinja +0 -0
  358. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/r/templates/transformer.jinja +0 -0
  359. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/bigquery.py +0 -0
  360. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/mssql.py +0 -0
  361. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/mysql.py +0 -0
  362. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/postgres.py +0 -0
  363. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/redshift.py +0 -0
  364. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/snowflake.py +0 -0
  365. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/trino.py +0 -0
  366. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/sql/utils/__init__.py +0 -0
  367. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/block/utils.py +0 -0
  368. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/constants.py +0 -0
  369. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/errors.py +0 -0
  370. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/file.py +0 -0
  371. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/pipeline.py +0 -0
  372. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/pipelines/__init__.py +0 -0
  373. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/pipelines/integration_pipeline.py +0 -0
  374. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/pipelines/utils.py +0 -0
  375. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/utils.py +0 -0
  376. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/widget/__init__.py +0 -0
  377. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/widget/charts.py +0 -0
  378. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/widget/constants.py +0 -0
  379. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/models/widget/utils.py +0 -0
  380. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/preferences.py +0 -0
  381. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/shared/__init__.py +0 -0
  382. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/shared/constants.py +0 -0
  383. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/shared/stream.py +0 -0
  384. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/shared/utils.py +0 -0
  385. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/storage/__init__.py +0 -0
  386. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/storage/base_storage.py +0 -0
  387. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/storage/local_storage.py +0 -0
  388. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/storage/s3_storage.py +0 -0
  389. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/storage/utils.py +0 -0
  390. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/sync/__init__.py +0 -0
  391. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/sync/base_sync.py +0 -0
  392. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/sync/git_sync.py +0 -0
  393. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/__init__.py +0 -0
  394. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/callbacks/default.py +0 -0
  395. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/custom/python/default.jinja +0 -0
  396. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/azure_blob_storage.py +0 -0
  397. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/bigquery.py +0 -0
  398. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/default.jinja +0 -0
  399. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/file.py +0 -0
  400. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/google_cloud_storage.py +0 -0
  401. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/mysql.py +0 -0
  402. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/postgres.py +0 -0
  403. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/pyspark/default.jinja +0 -0
  404. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/pyspark/s3.py +0 -0
  405. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/r/default.jinja +0 -0
  406. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/redshift.py +0 -0
  407. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/s3.py +0 -0
  408. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/snowflake.py +0 -0
  409. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/streaming/kafka.yaml +0 -0
  410. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/streaming/kinesis.yaml +0 -0
  411. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_exporters/streaming/opensearch.yaml +0 -0
  412. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/api.py +0 -0
  413. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/azure_blob_storage.py +0 -0
  414. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/bigquery.py +0 -0
  415. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/default.jinja +0 -0
  416. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/file.py +0 -0
  417. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/google_cloud_storage.py +0 -0
  418. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/mysql.py +0 -0
  419. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/postgres.py +0 -0
  420. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/pyspark/default.jinja +0 -0
  421. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/pyspark/s3.py +0 -0
  422. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/r/default.jinja +0 -0
  423. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/redshift.py +0 -0
  424. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/s3.py +0 -0
  425. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/snowflake.py +0 -0
  426. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/streaming/azure_event_hub.yaml +0 -0
  427. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/streaming/kafka.yaml +0 -0
  428. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/streaming/kinesis.yaml +0 -0
  429. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/data_loaders/streaming/rabbitmq.yaml +0 -0
  430. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/extensions/great_expectations/default.jinja +0 -0
  431. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/pipeline/__init__.py +0 -0
  432. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/pipeline/metadata.yaml +0 -0
  433. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/pipeline_execution/emr_bootstrap.sh +0 -0
  434. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/pipeline_execution/spark_script.jinja +0 -0
  435. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/__init__.py +0 -0
  436. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/charts/__init__.py +0 -0
  437. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/custom/__init__.py +0 -0
  438. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/data_exporters/__init__.py +0 -0
  439. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/data_exporters/export_titanic_clean.py +0 -0
  440. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/data_loaders/__init__.py +0 -0
  441. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/data_loaders/load_titanic.py +0 -0
  442. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/dbt/profiles.yml +0 -0
  443. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/extensions/__init__.py +0 -0
  444. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/io_config.yaml +0 -0
  445. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/metadata.yaml +0 -0
  446. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/pipelines/__init__.py +0 -0
  447. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/__init__.py +0 -0
  448. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/metadata.yaml +0 -0
  449. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/requirements.txt +0 -0
  450. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/scratchpads/__init__.py +0 -0
  451. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/transformers/__init__.py +0 -0
  452. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/transformers/fill_in_missing_values.py +0 -0
  453. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/repo/utils/__init__.py +0 -0
  454. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/sensors/default.py +0 -0
  455. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/template.py +0 -0
  456. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/testable.jinja +0 -0
  457. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/data_warehouse_transformer.jinja +0 -0
  458. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/default.jinja +0 -0
  459. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/default_pyspark.jinja +0 -0
  460. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/default_streaming.jinja +0 -0
  461. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/r/default.r +0 -0
  462. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/suggestion_fmt.jinja +0 -0
  463. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/action.jinja +0 -0
  464. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/average.py +0 -0
  465. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/clean_column_name.py +0 -0
  466. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count.py +0 -0
  467. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count_distinct.py +0 -0
  468. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/diff.py +0 -0
  469. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/first.py +0 -0
  470. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/fix_syntax_errors.py +0 -0
  471. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/impute.py +0 -0
  472. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/last.py +0 -0
  473. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/max.py +0 -0
  474. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/median.py +0 -0
  475. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/min.py +0 -0
  476. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/normalize.py +0 -0
  477. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/reformat.py +0 -0
  478. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove.py +0 -0
  479. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove_outliers.py +0 -0
  480. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/select.py +0 -0
  481. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_down.py +0 -0
  482. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_up.py +0 -0
  483. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/standardize.py +0 -0
  484. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/sum.py +0 -0
  485. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/drop_duplicate.py +0 -0
  486. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/filter.py +0 -0
  487. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/remove.py +0 -0
  488. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/sort.py +0 -0
  489. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/templates/utils.py +0 -0
  490. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/utils/__init__.py +0 -0
  491. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/utils/block/__init__.py +0 -0
  492. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/utils/block/convert_content.py +0 -0
  493. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/data_preparation/variable_manager.py +0 -0
  494. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/errors/__init__.py +0 -0
  495. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/errors/base.py +0 -0
  496. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/extensions/__init__.py +0 -0
  497. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/extensions/constants.py +0 -0
  498. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/extensions/great_expectations/__init__.py +0 -0
  499. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/extensions/great_expectations/constants.py +0 -0
  500. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/__init__.py +0 -0
  501. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/azure_blob_storage.py +0 -0
  502. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/base.py +0 -0
  503. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/bigquery.py +0 -0
  504. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/config.py +0 -0
  505. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/constants.py +0 -0
  506. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/export_utils.py +0 -0
  507. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/file.py +0 -0
  508. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/google_cloud_storage.py +0 -0
  509. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/io_config.py +0 -0
  510. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/mssql.py +0 -0
  511. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/mysql.py +0 -0
  512. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/redshift.py +0 -0
  513. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/s3.py +0 -0
  514. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/snowflake.py +0 -0
  515. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/sql.py +0 -0
  516. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/trino.py +0 -0
  517. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/io/utils.py +0 -0
  518. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/__init__.py +0 -0
  519. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/airflow.py +0 -0
  520. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/backfills/__init__.py +0 -0
  521. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/backfills/service.py +0 -0
  522. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/constants.py +0 -0
  523. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/__init__.py +0 -0
  524. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/alembic.ini +0 -0
  525. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/database_manager.py +0 -0
  526. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/errors.py +0 -0
  527. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/README.md +0 -0
  528. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/env.py +0 -0
  529. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/script.py.mako +0 -0
  530. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/053ee2c10d85_add_completed_at.py +0 -0
  531. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/067326f43bc3_add_variables_to_pipelinerun.py +0 -0
  532. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/1d8e65aeefdd_add_settings_to_pipeline_schedule.py +0 -0
  533. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/1f9353eddbc6_add_secrets_table.py +0 -0
  534. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/2266370f589b_add_indexes_to_pipeline_run.py +0 -0
  535. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/26305e46df52_create_backfills_table.py +0 -0
  536. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/3fafd217efa7_add_event_matcher_model.py +0 -0
  537. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/52ab80005742_add_variables_to_pipeline_schedule.py +0 -0
  538. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/5cd59ec4cf1d_add_passed_sla_to_pipeline_run.py +0 -0
  539. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/643b6e65e814_add_unique_indexes_on_authentication_.py +0 -0
  540. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/6aecc9bc451c_update_schedule_type_enum.py +0 -0
  541. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/7ac6fed06918_add_token_column_to_pipeline_schedule_.py +0 -0
  542. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/847ea6602d6f_add_upstream_failed_to_block_run_status.py +0 -0
  543. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/84de4cdd6126_add_sla_to_pipeline_schedule.py +0 -0
  544. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/8971d4cd5b39_add_event_variables_and_metadata_to_.py +0 -0
  545. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/97ff9f55a3c0_create_users_oauth2_applications_and_.py +0 -0
  546. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/b01be687e537_add_started_at_to_block_run.py +0 -0
  547. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/c07a23ff782b_add_initial_tables.py +0 -0
  548. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/migrations/versions/ec5df57a1c60_add_metrics_to_block_runs.py +0 -0
  549. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/models.py +0 -0
  550. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/db/process.py +0 -0
  551. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/execution_process_manager.py +0 -0
  552. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/job_manager.py +0 -0
  553. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/metrics/__init__.py +0 -0
  554. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/metrics/pipeline_run.py +0 -0
  555. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/monitor/__init__.py +0 -0
  556. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/monitor/monitor_stats.py +0 -0
  557. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/notification/__init__.py +0 -0
  558. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/notification/config.py +0 -0
  559. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/notification/sender.py +0 -0
  560. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/pipeline_scheduler.py +0 -0
  561. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/__init__.py +0 -0
  562. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/celery_queue.py +0 -0
  563. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/config.py +0 -0
  564. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/process_queue.py +0 -0
  565. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/queue.py +0 -0
  566. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/queue/queue_factory.py +0 -0
  567. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/run_status_checker.py +0 -0
  568. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/triggers/__init__.py +0 -0
  569. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/triggers/event_trigger.py +0 -0
  570. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/triggers/loop_time_trigger.py +0 -0
  571. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/triggers/time_trigger.py +0 -0
  572. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/utils/__init__.py +0 -0
  573. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/orchestration/utils/resources.py +0 -0
  574. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/sample_datasets/__init__.py +0 -0
  575. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/sample_datasets/product_purchases.csv +0 -0
  576. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/sample_datasets/salary_survey.csv +0 -0
  577. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/sample_datasets/titanic_survival.csv +0 -0
  578. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/sample_datasets/user_emails.csv +0 -0
  579. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/__init__.py +0 -0
  580. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/active_kernel.py +0 -0
  581. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/__init__.py +0 -0
  582. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/base.py +0 -0
  583. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/blocks.py +0 -0
  584. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/clusters.py +0 -0
  585. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/constants.py +0 -0
  586. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/errors.py +0 -0
  587. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/events.py +0 -0
  588. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/integration_sources.py +0 -0
  589. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/projects.py +0 -0
  590. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/triggers.py +0 -0
  591. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/api/v1.py +0 -0
  592. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/app.py +0 -0
  593. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/client/__init__.py +0 -0
  594. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/client/mage.py +0 -0
  595. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/data/__init__.py +0 -0
  596. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/data/base.py +0 -0
  597. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/data/models.py +0 -0
  598. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/docs_server.py +0 -0
  599. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/execution_manager.py +0 -0
  600. {mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/ErmV1Ii-luEqAYMZkbkmO → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/WbTBCvyjQQ9UFFLZOU1E5}/_middlewareManifest.js +0 -0
  601. {mage-ai-0.8.25/mage_ai/server/frontend_dist/_next/static/ErmV1Ii-luEqAYMZkbkmO → mage-ai-0.8.27/mage_ai/server/frontend_dist/_next/static/WbTBCvyjQQ9UFFLZOU1E5}/_ssgManifest.js +0 -0
  602. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/1150.1378afaa474df64a.js +0 -0
  603. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/1240.0819f45820d22263.js +0 -0
  604. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/1286-a62050b3f897c6be.js +0 -0
  605. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/1450.d383f64c169d4278.js +0 -0
  606. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/1774-aa51ef1da7217ff9.js +0 -0
  607. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2083-78a438dbdc57d1e4.js +0 -0
  608. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2125-0b537dc53fe71b18.js +0 -0
  609. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2481.0454a0e25dc7e027.js +0 -0
  610. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2508.724531e7f9cf5f36.js +0 -0
  611. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2524-6aeb9419acf5d1b4.js +0 -0
  612. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2545.8371b39c898ae92b.js +0 -0
  613. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/261.0a24b4ece1d29aa1.js +0 -0
  614. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/266.e301071d22592682.js +0 -0
  615. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/2714-1e79e9f2e998b544.js +0 -0
  616. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/29107295-989a0767a635d9d5.js +0 -0
  617. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3453.992f4b1667e9882c.js +0 -0
  618. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3467.38cd0654ba6f788f.js +0 -0
  619. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3835.df296b4e4078e985.js +0 -0
  620. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3850-6395783d820def1c.js +0 -0
  621. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3873.4b3eace753998412.js +0 -0
  622. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/3898.880191695bb05845.js +0 -0
  623. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4042.5e16d36209052351.js +0 -0
  624. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4092.536ee541241f4538.js +0 -0
  625. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4388.04098706f32e69e7.js +0 -0
  626. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/440.3ab77942f659ea0c.js +0 -0
  627. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4450.79f14f763d55c63e.js +0 -0
  628. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4454.13a2404adecaa39e.js +0 -0
  629. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4495-4f0340aa82e0c623.js +0 -0
  630. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4776.753ad29fa0a29a4a.js +0 -0
  631. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4804-01a10103ebe26ca8.js +0 -0
  632. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/4883.a5bb0edbf8f3cc8f.js +0 -0
  633. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/5008.29c2662ecc2b04c7.js +0 -0
  634. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/5104.1edcf4437c471dd4.js +0 -0
  635. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/5164.857023e800905b6f.js +0 -0
  636. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/5729.0f2748e9e6dab951.js +0 -0
  637. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/5824.628653557e904674.js +0 -0
  638. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6042.c59010de9e699437.js +0 -0
  639. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6085-692d2f784c0504f2.js +0 -0
  640. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6115.0c85e507543394ea.js +0 -0
  641. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6116.871a682ddf535aca.js +0 -0
  642. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6434.10380ee0968636ba.js +0 -0
  643. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6443.7b6d2b4e51018184.js +0 -0
  644. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6507.d3a17777d2c294e6.js +0 -0
  645. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/6958.8f39c585d36737a7.js +0 -0
  646. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/7011-81dd8269c4806d26.js +0 -0
  647. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/72fdc299.2d5ec188af5d0049.js +0 -0
  648. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/739.3d24945544b37e52.js +0 -0
  649. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/792.010ca00d79b2112f.js +0 -0
  650. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/7947.77be4bec4d47774e.js +0 -0
  651. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/7951.fee8b6c27c9ef777.js +0 -0
  652. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8018.968bf87c390e3312.js +0 -0
  653. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8097.b0345f30a7390c1d.js +0 -0
  654. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8256.290ceb269b1ffe26.js +0 -0
  655. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/826.75268ee34f93393a.js +0 -0
  656. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8277.5003e1d94bb85156.js +0 -0
  657. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8762.dff300f86bef8573.js +0 -0
  658. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8789-4f858e520d46973b.js +0 -0
  659. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8807.a68c69c8fe0a8c01.js +0 -0
  660. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8849.db0d50b4d84b09a6.js +0 -0
  661. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8901.21d26d5a1ee473fe.js +0 -0
  662. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/8920.5700e380a2999098.js +0 -0
  663. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9258.6c6ef544c701a011.js +0 -0
  664. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9307.d4baf7aebbcef1f0.js +0 -0
  665. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9361.a0820e3069f5ef74.js +0 -0
  666. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9363.6b811b4c86277e07.js +0 -0
  667. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9437.a3c32f45cf9ef69b.js +0 -0
  668. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9565-28e1c30511c95c2d.js +0 -0
  669. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9566.f8bd24768ed14ecb.js +0 -0
  670. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9633.40e5056ca1e2b22a.js +0 -0
  671. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9785.5ff26cb26d84d6a1.js +0 -0
  672. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9855.c4394a68322be9f8.js +0 -0
  673. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/9927.e82a3e1e21990d77.js +0 -0
  674. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/bd1a647f.6050372acaa5cc3c.js +0 -0
  675. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/framework-7c365855dab1bf41.js +0 -0
  676. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/main-bb0dd5375146d7fd.js +0 -0
  677. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/_error-235304e5badb19eb.js +0 -0
  678. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/index-e34a68d2f6fe16f2.js +0 -0
  679. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]-ca9457e1a6bced4b.js +0 -0
  680. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-f1844beb127841f3.js +0 -0
  681. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings-d594a66a568306da.js +0 -0
  682. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/pages/test-85cf18ae78ff535c.js +0 -0
  683. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/polyfills-5cd94c89d3acac5f.js +0 -0
  684. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/chunks/webpack-bc5e4eb2c1ff587c.js +0 -0
  685. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/_next/static/css/d1e8e64d0b07af2f.css +0 -0
  686. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/favicon.ico +0 -0
  687. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Bold.ttf +0 -0
  688. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Light.ttf +0 -0
  689. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Medium.ttf +0 -0
  690. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Regular.ttf +0 -0
  691. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Retina.ttf +0 -0
  692. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-SemiBold.ttf +0 -0
  693. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/LICENSE.txt +0 -0
  694. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Black.ttf +0 -0
  695. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
  696. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Bold.ttf +0 -0
  697. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
  698. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Italic.ttf +0 -0
  699. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Light.ttf +0 -0
  700. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
  701. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Medium.ttf +0 -0
  702. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  703. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Regular.ttf +0 -0
  704. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Thin.ttf +0 -0
  705. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
  706. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/LICENSE.txt +0 -0
  707. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/README.txt +0 -0
  708. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-Italic-VariableFont_wght.ttf +0 -0
  709. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf +0 -0
  710. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Bold.ttf +0 -0
  711. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-BoldItalic.ttf +0 -0
  712. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLight.ttf +0 -0
  713. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLightItalic.ttf +0 -0
  714. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Italic.ttf +0 -0
  715. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Light.ttf +0 -0
  716. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-LightItalic.ttf +0 -0
  717. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Medium.ttf +0 -0
  718. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-MediumItalic.ttf +0 -0
  719. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Regular.ttf +0 -0
  720. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBold.ttf +0 -0
  721. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBoldItalic.ttf +0 -0
  722. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Thin.ttf +0 -0
  723. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ThinItalic.ttf +0 -0
  724. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/backfill.jpg +0 -0
  725. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/banner-shape-purple-peach.jpg +0 -0
  726. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/dashboard-api-key.webp +0 -0
  727. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/extensions/great_expectations/logo.png +0 -0
  728. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/extra.jpg +0 -0
  729. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/monitor.jpg +0 -0
  730. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/run B.jpg +0 -0
  731. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/images/sessions/abstract.png +0 -0
  732. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/frontend_dist/vercel.svg +0 -0
  733. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/kernel_output_parser.py +0 -0
  734. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/kernels.py +0 -0
  735. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/scheduler_manager.py +0 -0
  736. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/subscriber.py +0 -0
  737. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/utils/__init__.py +0 -0
  738. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/utils/frontend_renderer.py +0 -0
  739. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/utils/output_display.py +0 -0
  740. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/server/websocket_server.py +0 -0
  741. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/__init__.py +0 -0
  742. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/__init__.py +0 -0
  743. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/client.py +0 -0
  744. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/config.py +0 -0
  745. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/constants.py +0 -0
  746. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/exceptions.py +0 -0
  747. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/airbyte/server.py +0 -0
  748. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/__init__.py +0 -0
  749. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/ecs/__init__.py +0 -0
  750. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/ecs/config.py +0 -0
  751. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/ecs/ecs.py +0 -0
  752. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/__init__.py +0 -0
  753. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/config.py +0 -0
  754. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/emr.py +0 -0
  755. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/emr_basics.py +0 -0
  756. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/launcher.py +0 -0
  757. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/emr/resource_manager.py +0 -0
  758. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/events/__init__.py +0 -0
  759. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/events/events.py +0 -0
  760. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/s3/__init__.py +0 -0
  761. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/s3/s3.py +0 -0
  762. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/secrets_manager/__init__.py +0 -0
  763. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/aws/secrets_manager/secrets_manager.py +0 -0
  764. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/datadog/__init__.py +0 -0
  765. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/dbt/__init__.py +0 -0
  766. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/dbt/config.py +0 -0
  767. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/dbt/constants.py +0 -0
  768. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/dbt/dbt.py +0 -0
  769. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/email/__init__.py +0 -0
  770. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/email/config.py +0 -0
  771. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/email/email.py +0 -0
  772. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/gcp/__init__.py +0 -0
  773. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/gcp/cloud_run/__init__.py +0 -0
  774. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/gcp/cloud_run/cloud_run.py +0 -0
  775. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/gcp/cloud_run/config.py +0 -0
  776. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/hightouch/__init__.py +0 -0
  777. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/hightouch/config.py +0 -0
  778. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/hightouch/constants.py +0 -0
  779. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/hightouch/hightouch.py +0 -0
  780. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/k8s/__init__.py +0 -0
  781. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/k8s/constants.py +0 -0
  782. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/k8s/job_manager.py +0 -0
  783. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/metaplane/__init__.py +0 -0
  784. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/metaplane/config.py +0 -0
  785. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/metaplane/metaplane.py +0 -0
  786. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/slack/__init__.py +0 -0
  787. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/slack/config.py +0 -0
  788. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/slack/slack.py +0 -0
  789. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/stitch/__init__.py +0 -0
  790. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/stitch/config.py +0 -0
  791. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/stitch/constants.py +0 -0
  792. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/stitch/stitch.py +0 -0
  793. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/teams/__init__.py +0 -0
  794. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/teams/config.py +0 -0
  795. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/teams/teams.py +0 -0
  796. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/tracking/__init__.py +0 -0
  797. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/services/tracking/metrics.py +0 -0
  798. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/settings/__init__.py +0 -0
  799. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/__init__.py +0 -0
  800. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/array.py +0 -0
  801. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/code.py +0 -0
  802. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/config.py +0 -0
  803. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/constants.py +0 -0
  804. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/conversions.py +0 -0
  805. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/custom_types.py +0 -0
  806. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/dates.py +0 -0
  807. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/environments.py +0 -0
  808. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/hash.py +0 -0
  809. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/http_client.py +0 -0
  810. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/io.py +0 -0
  811. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/logger.py +0 -0
  812. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/multi.py +0 -0
  813. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/parsers.py +0 -0
  814. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/retry.py +0 -0
  815. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/strings.py +0 -0
  816. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/shared/urls.py +0 -0
  817. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/__init__.py +0 -0
  818. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/constants.py +0 -0
  819. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/__init__.py +0 -0
  820. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/base.py +0 -0
  821. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/kafka.py +0 -0
  822. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/kinesis.py +0 -0
  823. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/opensearch.py +0 -0
  824. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sinks/sink_factory.py +0 -0
  825. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/__init__.py +0 -0
  826. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/azure_event_hub.py +0 -0
  827. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/base.py +0 -0
  828. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/kafka.py +0 -0
  829. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/kinesis.py +0 -0
  830. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/rabbitmq.py +0 -0
  831. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/streaming/sources/source_factory.py +0 -0
  832. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/__init__.py +0 -0
  833. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/__init__.py +0 -0
  834. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/operations/__init__.py +0 -0
  835. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/operations/base.py +0 -0
  836. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/operations/test_operations.py +0 -0
  837. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/operations/test_sessions.py +0 -0
  838. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/api/operations/test_users.py +0 -0
  839. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/base_test.py +0 -0
  840. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/__init__.py +0 -0
  841. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/__init__.py +0 -0
  842. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_clean_column_names.py +0 -0
  843. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_fix_syntax_error.py +0 -0
  844. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_impute_values.py +0 -0
  845. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_reformat_values.py +0 -0
  846. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_collinear_columns.py +0 -0
  847. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_high_empty_rate.py +0 -0
  848. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_single_value.py +0 -0
  849. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_duplicate_rows.py +0 -0
  850. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_outliers.py +0 -0
  851. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/statistics/__init__.py +0 -0
  852. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/statistics/test_calculator.py +0 -0
  853. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/test_column_type_detector.py +0 -0
  854. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/__init__.py +0 -0
  855. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/shared.py +0 -0
  856. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_base.py +0 -0
  857. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_column.py +0 -0
  858. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_custom_actions.py +0 -0
  859. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_helpers.py +0 -0
  860. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_row.py +0 -0
  861. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_utils.py +0 -0
  862. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_cleaner/transformer_actions/test_variable_replacer.py +0 -0
  863. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/__init__.py +0 -0
  864. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/models/__init__.py +0 -0
  865. {mage-ai-0.8.25/mage_ai/tests/io → mage-ai-0.8.27/mage_ai/tests/data_preparation/models/block}/__init__.py +0 -0
  866. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/models/test_pipeline.py +0 -0
  867. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/models/test_variable.py +0 -0
  868. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/test_templates.py +0 -0
  869. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/data_preparation/test_variable_manager.py +0 -0
  870. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/factory.py +0 -0
  871. {mage-ai-0.8.25/mage_ai/tests/orchestration → mage-ai-0.8.27/mage_ai/tests/io}/__init__.py +0 -0
  872. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/io/test_config.py +0 -0
  873. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/io/test_export_utils.py +0 -0
  874. {mage-ai-0.8.25/mage_ai/tests/orchestration/db → mage-ai-0.8.27/mage_ai/tests/orchestration}/__init__.py +0 -0
  875. {mage-ai-0.8.25/mage_ai/tests/orchestration/notification → mage-ai-0.8.27/mage_ai/tests/orchestration/db}/__init__.py +0 -0
  876. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/db/test_models.py +0 -0
  877. {mage-ai-0.8.25/mage_ai/tests/orchestration/queue → mage-ai-0.8.27/mage_ai/tests/orchestration/notification}/__init__.py +0 -0
  878. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/notification/constants.py +0 -0
  879. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/notification/test_config.py +0 -0
  880. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/notification/test_sender.py +0 -0
  881. {mage-ai-0.8.25/mage_ai/tests/orchestration/triggers → mage-ai-0.8.27/mage_ai/tests/orchestration/queue}/__init__.py +0 -0
  882. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/queue/test_process_queue.py +0 -0
  883. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/test_execution_process_manager.py +0 -0
  884. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/test_job_manager.py +0 -0
  885. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/test_pipeline_scheduler.py +0 -0
  886. {mage-ai-0.8.25/mage_ai/tests/services → mage-ai-0.8.27/mage_ai/tests/orchestration/triggers}/__init__.py +0 -0
  887. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/triggers/test_event_trigger.py +0 -0
  888. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/orchestration/triggers/test_loop_time_trigger.py +0 -0
  889. {mage-ai-0.8.25/mage_ai/tests/services/aws → mage-ai-0.8.27/mage_ai/tests/services}/__init__.py +0 -0
  890. {mage-ai-0.8.25/mage_ai/tests/services/aws/s3 → mage-ai-0.8.27/mage_ai/tests/services/aws}/__init__.py +0 -0
  891. {mage-ai-0.8.25/mage_ai/tests/services/datadog → mage-ai-0.8.27/mage_ai/tests/services/aws/s3}/__init__.py +0 -0
  892. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/services/aws/s3/test_s3.py +0 -0
  893. {mage-ai-0.8.25/mage_ai/tests/services/k8s → mage-ai-0.8.27/mage_ai/tests/services/datadog}/__init__.py +0 -0
  894. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/services/datadog/test_datadog.py +0 -0
  895. {mage-ai-0.8.25/mage_ai/tests/shared → mage-ai-0.8.27/mage_ai/tests/services/k8s}/__init__.py +0 -0
  896. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/services/k8s/test_job_manager.py +0 -0
  897. {mage-ai-0.8.25/mage_ai/tests/streaming → mage-ai-0.8.27/mage_ai/tests/shared}/__init__.py +0 -0
  898. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/shared/test_io.py +0 -0
  899. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/shared/test_retry.py +0 -0
  900. {mage-ai-0.8.25/mage_ai/tests/streaming/sinks → mage-ai-0.8.27/mage_ai/tests/streaming}/__init__.py +0 -0
  901. {mage-ai-0.8.25/mage_ai/tests/streaming/sources → mage-ai-0.8.27/mage_ai/tests/streaming/sinks}/__init__.py +0 -0
  902. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sinks/test_kinesis.py +0 -0
  903. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sinks/test_opensearch.py +0 -0
  904. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sinks/test_sink_factory.py +0 -0
  905. {mage-ai-0.8.25/mage_ai/utils → mage-ai-0.8.27/mage_ai/tests/streaming/sources}/__init__.py +0 -0
  906. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sources/test_azure_event_hub.py +0 -0
  907. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sources/test_kafka.py +0 -0
  908. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sources/test_kinesis.py +0 -0
  909. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sources/test_rabbitmq.py +0 -0
  910. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/streaming/sources/test_source_factory.py +0 -0
  911. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/tests/test_shared.py +0 -0
  912. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/utils/code.py +0 -0
  913. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/utils/logger/__init__.py +0 -0
  914. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai/utils/logger/constants.py +0 -0
  915. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai.egg-info/dependency_links.txt +0 -0
  916. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai.egg-info/entry_points.txt +0 -0
  917. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai.egg-info/requires.txt +0 -0
  918. {mage-ai-0.8.25 → mage-ai-0.8.27}/mage_ai.egg-info/top_level.txt +0 -0
  919. {mage-ai-0.8.25 → mage-ai-0.8.27}/pyproject.toml +0 -0
  920. {mage-ai-0.8.25 → mage-ai-0.8.27}/requirements.txt +0 -0
  921. {mage-ai-0.8.25 → mage-ai-0.8.27}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mage-ai
3
- Version: 0.8.25
3
+ Version: 0.8.27
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
@@ -31,6 +31,7 @@ SOURCES = sorted([
31
31
  dict(name='Monday'),
32
32
  dict(name='Outreach'),
33
33
  dict(name='Paystack'),
34
+ dict(name='Pipedrive'),
34
35
  dict(name='Postmark'),
35
36
  dict(name='Salesforce'),
36
37
  dict(name='Stripe'),
@@ -3,6 +3,7 @@ from mage_ai.data_preparation.executors.pipeline_executor import PipelineExecuto
3
3
  from mage_ai.data_preparation.models.constants import BlockType
4
4
  from mage_ai.data_preparation.models.pipeline import Pipeline
5
5
  from mage_ai.data_preparation.shared.stream import StreamToLogger
6
+ from mage_ai.shared.hash import merge_dict
6
7
  from typing import Callable, Dict, List, Union
7
8
  import os
8
9
  import yaml
@@ -83,7 +84,7 @@ class StreamingPipelineExecutor(PipelineExecutor):
83
84
  if not build_block_output_stdout:
84
85
  self.logger.exception(
85
86
  f'Failed to execute streaming pipeline {self.pipeline.uuid}',
86
- error=e,
87
+ **merge_dict(dict(error=e), tags),
87
88
  )
88
89
  raise e
89
90
 
@@ -7,6 +7,8 @@ import io
7
7
  import logging
8
8
  import os
9
9
 
10
+ MAX_LOG_FILE_SIZE = 5 * 1024 * 1024
11
+
10
12
 
11
13
  class LoggerManager:
12
14
  def __init__(
@@ -50,7 +52,11 @@ class LoggerManager:
50
52
  handler = self.create_stream_handler()
51
53
  else:
52
54
  log_filepath = self.get_log_filepath(create_dir=True)
53
- handler = logging.FileHandler(log_filepath)
55
+ handler = logging.handlers.RotatingFileHandler(
56
+ log_filepath,
57
+ backupCount=10,
58
+ maxBytes=MAX_LOG_FILE_SIZE,
59
+ )
54
60
 
55
61
  handler.setLevel(self.log_level)
56
62
  handler.setFormatter(self.formatter)
@@ -4,6 +4,7 @@ from inspect import Parameter, signature
4
4
  from logging import Logger
5
5
  from mage_ai.data_cleaner.shared.utils import (
6
6
  is_geo_dataframe,
7
+ is_spark_dataframe,
7
8
  )
8
9
  from mage_ai.data_preparation.models.block.extension.utils import handle_run_tests
9
10
  from mage_ai.data_preparation.models.block.utils import (
@@ -251,6 +252,10 @@ class Block:
251
252
  self.dynamic_block_uuid = None
252
253
  self.dynamic_upstream_block_uuids = None
253
254
 
255
+ # Spark session
256
+ self.spark = None
257
+ self.spark_init = False
258
+
254
259
  @property
255
260
  def uuid(self):
256
261
  return self.dynamic_block_uuid or self._uuid
@@ -347,23 +352,22 @@ class Block:
347
352
  @property
348
353
  def full_table_name(self) -> str:
349
354
  from mage_ai.data_preparation.models.block.sql.utils.shared import (
350
- extract_and_replace_text_between_strings,
355
+ extract_create_statement_table_name,
356
+ extract_insert_statement_table_names,
351
357
  )
352
358
 
353
359
  if not self.content:
354
360
  return None
355
361
 
356
- create_statement_partial, _ = extract_and_replace_text_between_strings(
357
- self.content,
358
- 'create',
359
- r'\(',
360
- )
362
+ table_name = extract_create_statement_table_name(self.content)
363
+ if table_name:
364
+ return table_name
361
365
 
362
- if not create_statement_partial:
366
+ matches = extract_insert_statement_table_names(self.content)
367
+ if len(matches) == 0:
363
368
  return None
364
369
 
365
- parts = create_statement_partial[:len(create_statement_partial) - 1].strip().split(' ')
366
- return parts[-1]
370
+ return matches[len(matches) - 1]
367
371
 
368
372
  @classmethod
369
373
  def after_create(self, block: 'Block', **kwargs):
@@ -1041,7 +1045,6 @@ class Block:
1041
1045
  block_uuid,
1042
1046
  partition=execution_partition,
1043
1047
  )
1044
-
1045
1048
  if not include_print_outputs:
1046
1049
  all_variables = self.output_variables(execution_partition=execution_partition)
1047
1050
 
@@ -1051,6 +1054,7 @@ class Block:
1051
1054
  block_uuid,
1052
1055
  v,
1053
1056
  partition=execution_partition,
1057
+ spark=self.__get_spark_session(),
1054
1058
  )
1055
1059
 
1056
1060
  if variable_type is not None and variable_object.variable_type != variable_type:
@@ -1059,6 +1063,7 @@ class Block:
1059
1063
  data = variable_object.read_data(
1060
1064
  sample=True,
1061
1065
  sample_count=sample_count,
1066
+ spark=self.__get_spark_session(),
1062
1067
  )
1063
1068
  if type(data) is pd.DataFrame:
1064
1069
  try:
@@ -1118,6 +1123,19 @@ df = get_variable('{self.pipeline.uuid}', '{self.uuid}', 'df')
1118
1123
  type=DataType.TEXT,
1119
1124
  variable_uuid=v,
1120
1125
  )
1126
+ elif is_spark_dataframe(data):
1127
+ df = data.toPandas()
1128
+ columns_to_display = df.columns.tolist()[:DATAFRAME_ANALYSIS_MAX_COLUMNS]
1129
+ data = dict(
1130
+ sample_data=dict(
1131
+ columns=columns_to_display,
1132
+ rows=json.loads(df[columns_to_display].to_json(orient='split'))['data']
1133
+ ),
1134
+ type=DataType.TABLE,
1135
+ variable_uuid=v,
1136
+ )
1137
+ data_products.append(data)
1138
+ continue
1121
1139
  outputs.append(data)
1122
1140
  return outputs + data_products
1123
1141
 
@@ -1154,6 +1172,7 @@ df = get_variable('{self.pipeline.uuid}', '{self.uuid}', 'df')
1154
1172
  block_uuid,
1155
1173
  v,
1156
1174
  partition=execution_partition,
1175
+ spark=self.__get_spark_session(),
1157
1176
  )
1158
1177
 
1159
1178
  if variable_type is not None and variable_object.variable_type != variable_type:
@@ -1162,6 +1181,7 @@ df = get_variable('{self.pipeline.uuid}', '{self.uuid}', 'df')
1162
1181
  data = await variable_object.read_data_async(
1163
1182
  sample=True,
1164
1183
  sample_count=sample_count,
1184
+ spark=self.__get_spark_session(),
1165
1185
  )
1166
1186
  if type(data) is pd.DataFrame:
1167
1187
  try:
@@ -1221,6 +1241,19 @@ df = get_variable('{self.pipeline.uuid}', '{block_uuid}', 'df')
1221
1241
  type=DataType.TEXT,
1222
1242
  variable_uuid=v,
1223
1243
  )
1244
+ elif is_spark_dataframe(data):
1245
+ df = data.toPandas()
1246
+ columns_to_display = df.columns.tolist()[:DATAFRAME_ANALYSIS_MAX_COLUMNS]
1247
+ data = dict(
1248
+ sample_data=dict(
1249
+ columns=columns_to_display,
1250
+ rows=json.loads(df[columns_to_display].to_json(orient='split'))['data']
1251
+ ),
1252
+ type=DataType.TABLE,
1253
+ variable_uuid=v,
1254
+ )
1255
+ data_products.append(data)
1256
+ continue
1224
1257
  outputs.append(data)
1225
1258
  return outputs + data_products
1226
1259
 
@@ -1651,14 +1684,23 @@ df = get_variable('{self.pipeline.uuid}', '{block_uuid}', 'df')
1651
1684
  is_spark_env()):
1652
1685
  global_vars = global_vars or dict()
1653
1686
  if not global_vars.get('spark'):
1654
- try:
1655
- from pyspark.sql import SparkSession
1656
- global_vars['spark'] = SparkSession.builder.master(
1657
- os.getenv('SPARK_MASTER_HOST', 'local')).getOrCreate()
1658
- except Exception:
1659
- pass
1687
+ spark = self.__get_spark_session()
1688
+ if spark is not None:
1689
+ global_vars['spark'] = spark
1660
1690
  return global_vars
1661
1691
 
1692
+ def __get_spark_session(self):
1693
+ if self.spark_init:
1694
+ return self.spark
1695
+ try:
1696
+ from pyspark.sql import SparkSession
1697
+ self.spark = SparkSession.builder.master(
1698
+ os.getenv('SPARK_MASTER_HOST', 'local')).getOrCreate()
1699
+ except Exception:
1700
+ self.spark = None
1701
+ self.spark_init = True
1702
+ return self.spark
1703
+
1662
1704
  def __store_variables_prepare(
1663
1705
  self,
1664
1706
  variable_mapping: Dict,
@@ -1710,7 +1752,8 @@ df = get_variable('{self.pipeline.uuid}', '{block_uuid}', 'df')
1710
1752
  dynamic_block_uuid,
1711
1753
  )
1712
1754
  for uuid, data in variables_data['variable_mapping'].items():
1713
- if spark is not None and type(data) is pd.DataFrame:
1755
+ if spark is not None and self.pipeline.type == PipelineType.PYSPARK \
1756
+ and type(data) is pd.DataFrame:
1714
1757
  data = spark.createDataFrame(data)
1715
1758
  self.pipeline.variable_manager.add_variable(
1716
1759
  self.pipeline.uuid,
@@ -9,6 +9,7 @@ from mage_ai.data_preparation.models.block.sql import (
9
9
  trino,
10
10
  )
11
11
  from mage_ai.data_preparation.models.block.sql.utils.shared import (
12
+ has_create_or_insert_statement,
12
13
  interpolate_vars,
13
14
  )
14
15
  from mage_ai.data_preparation.models.constants import BlockType
@@ -18,7 +19,9 @@ from mage_ai.io.config import ConfigFileLoader
18
19
  from os import path
19
20
  from time import sleep
20
21
  from typing import Any, Dict, List
22
+ import re
21
23
 
24
+ MAGE_SEMI_COLON = '__MAGE_SEMI_COLON__'
22
25
  PREVIEWABLE_BLOCK_TYPES = [
23
26
  BlockType.DATA_EXPORTER,
24
27
  BlockType.DATA_LOADER,
@@ -82,6 +85,7 @@ def execute_sql_code(
82
85
  loader,
83
86
  block,
84
87
  query_string,
88
+ configuration=configuration,
85
89
  should_query=should_query,
86
90
  )
87
91
  else:
@@ -132,6 +136,7 @@ def execute_sql_code(
132
136
  loader,
133
137
  block,
134
138
  query_string,
139
+ configuration=configuration,
135
140
  should_query=should_query,
136
141
  )
137
142
  else:
@@ -172,6 +177,7 @@ def execute_sql_code(
172
177
  loader,
173
178
  block,
174
179
  query_string,
180
+ configuration=configuration,
175
181
  should_query=should_query,
176
182
  )
177
183
  else:
@@ -209,6 +215,7 @@ def execute_sql_code(
209
215
  loader,
210
216
  block,
211
217
  query_string,
218
+ configuration=configuration,
212
219
  should_query=should_query,
213
220
  )
214
221
  else:
@@ -246,6 +253,7 @@ def execute_sql_code(
246
253
  loader,
247
254
  block,
248
255
  query_string,
256
+ configuration=configuration,
249
257
  should_query=should_query,
250
258
  )
251
259
  else:
@@ -287,6 +295,7 @@ def execute_sql_code(
287
295
  loader,
288
296
  block,
289
297
  query_string,
298
+ configuration=configuration,
290
299
  should_query=should_query,
291
300
  )
292
301
  else:
@@ -329,6 +338,7 @@ def execute_sql_code(
329
338
  loader,
330
339
  block,
331
340
  query_string,
341
+ configuration=configuration,
332
342
  should_query=should_query,
333
343
  )
334
344
  else:
@@ -354,36 +364,73 @@ def execute_sql_code(
354
364
  ]
355
365
 
356
366
 
367
+ def split_query_string(query_string: str) -> List[str]:
368
+ text_parts = []
369
+
370
+ matches = re.finditer(r"'(.*?)'|\"(.*?)\"", query_string, re.IGNORECASE)
371
+
372
+ previous_idx = 0
373
+
374
+ for idx, match in enumerate(matches):
375
+ matched_string = match.group()
376
+ updated_string = re.sub(r';', MAGE_SEMI_COLON, matched_string)
377
+
378
+ start_idx, end_idx = match.span()
379
+
380
+ previous_chunk = query_string[previous_idx:start_idx]
381
+ text_parts.append(previous_chunk)
382
+ text_parts.append(updated_string)
383
+ previous_idx = end_idx
384
+
385
+ text_parts.append(query_string[previous_idx:])
386
+
387
+ text_combined = ''.join(text_parts)
388
+ queries = text_combined.split(';')
389
+
390
+ arr = []
391
+ for query in queries:
392
+ query = query.strip()
393
+ if not query:
394
+ continue
395
+
396
+ lines = query.split('\n')
397
+ query = '\n'.join(list(filter(lambda x: not x.startswith('--'), lines)))
398
+ query = query.strip()
399
+ query = re.sub(MAGE_SEMI_COLON, ';', query)
400
+
401
+ if query:
402
+ arr.append(query)
403
+
404
+ return arr
405
+
406
+
357
407
  def execute_raw_sql(
358
408
  loader,
359
409
  block: 'Block',
360
410
  query_string: str,
411
+ configuration: Dict = {},
361
412
  should_query: bool = False,
362
413
  ) -> List[Any]:
363
414
  queries = []
364
415
  fetch_query_at_indexes = []
365
416
 
366
- # create_statement, query_statement = extract_and_replace_text_between_strings(
367
- # query_string,
368
- # 'create',
369
- # ';',
370
- # case_sensitive=True,
371
- # )
372
-
373
- # if create_statement:
374
- # queries.append(create_statement)
375
- # fetch_query_at_indexes.append(False)
376
-
377
- # queries.append(query_statement)
378
- # fetch_query_at_indexes.append(False)
417
+ has_create_or_insert = has_create_or_insert_statement(query_string)
379
418
 
380
- for query in query_string.split(';'):
381
- query = query.strip()
382
- if query and not query.startswith('--'):
419
+ for query in split_query_string(query_string):
420
+ if has_create_or_insert:
383
421
  queries.append(query)
384
422
  fetch_query_at_indexes.append(False)
423
+ else:
424
+ if should_query:
425
+ query = f"""SELECT *
426
+ FROM (
427
+ {query}
428
+ ) AS {block.table_name}__limit
429
+ LIMIT 1000"""
430
+ queries.append(query)
431
+ fetch_query_at_indexes.append(True)
385
432
 
386
- if should_query:
433
+ if should_query and has_create_or_insert:
387
434
  queries.append(f'SELECT * FROM {block.full_table_name} LIMIT 1000')
388
435
  fetch_query_at_indexes.append(block.full_table_name)
389
436
 
@@ -47,23 +47,33 @@ def interpolate_input(block, query, replace_func=None):
47
47
  for idx, upstream_block in enumerate(block.upstream_blocks):
48
48
  matcher1 = '{} df_{} {}'.format('{{', idx + 1, '}}')
49
49
 
50
- if BlockLanguage.SQL == upstream_block.type:
50
+ is_sql = BlockLanguage.SQL == upstream_block.language
51
+ if is_sql:
51
52
  configuration = upstream_block.configuration
52
53
  else:
53
54
  configuration = block.configuration
55
+ use_raw_sql = configuration.get('use_raw_sql')
54
56
 
55
57
  database = configuration.get('data_provider_database', '')
56
58
  schema = configuration.get('data_provider_schema', '')
57
59
 
60
+ replace_with = __replace_func(database, schema, upstream_block.table_name)
61
+ upstream_block_content = upstream_block.content
62
+ if is_sql and use_raw_sql and not has_create_or_insert_statement(upstream_block_content):
63
+ upstream_query = interpolate_input(upstream_block, upstream_block_content)
64
+ replace_with = f"""(
65
+ {upstream_query}
66
+ ) AS {upstream_block.table_name}"""
67
+
58
68
  query = re.sub(
59
69
  '{}[ ]*df_{}[ ]*{}'.format(r'\{\{', idx + 1, r'\}\}'),
60
- __replace_func(database, schema, upstream_block.table_name),
70
+ replace_with,
61
71
  query,
62
72
  )
63
73
 
64
74
  query = query.replace(
65
75
  f'{matcher1}',
66
- __replace_func(database, schema, upstream_block.table_name),
76
+ replace_with,
67
77
  )
68
78
 
69
79
  return query
@@ -170,3 +180,39 @@ def extract_and_replace_text_between_strings(
170
180
  new_text = text[0:max(start_idx - 1, 0)] + replace_string + text[end_idx + 1:]
171
181
 
172
182
  return extracted_text, new_text
183
+
184
+
185
+ def remove_comments(text: str) -> str:
186
+ lines = text.split('\n')
187
+ return '\n'.join(line for line in lines if not line.startswith('--'))
188
+
189
+
190
+ def extract_create_statement_table_name(text: str) -> str:
191
+ statement_partial, _ = extract_and_replace_text_between_strings(
192
+ remove_comments(text),
193
+ r'create table(?: if not exists)*',
194
+ r'\(',
195
+ )
196
+ if not statement_partial:
197
+ return None
198
+
199
+ parts = statement_partial[:len(statement_partial) - 1].strip().split(' ')
200
+ return parts[-1]
201
+
202
+
203
+ def extract_insert_statement_table_names(text: str) -> List[str]:
204
+ matches = re.findall(
205
+ r'insert(?: overwrite)*(?: into)*[\s]+([\w.]+)',
206
+ remove_comments(text),
207
+ re.IGNORECASE,
208
+ )
209
+ return matches
210
+
211
+
212
+ def has_create_or_insert_statement(text: str) -> bool:
213
+ table_name = extract_create_statement_table_name(text)
214
+ if table_name:
215
+ return True
216
+
217
+ matches = extract_insert_statement_table_names(text)
218
+ return len(matches) >= 1
@@ -175,6 +175,8 @@ class Variable:
175
175
  """
176
176
  if self.variable_type == VariableType.DATAFRAME:
177
177
  return self.__read_parquet(sample=sample, sample_count=sample_count)
178
+ elif self.variable_type == VariableType.SPARK_DATAFRAME:
179
+ return self.__read_spark_parquet(sample=sample, sample_count=sample_count, spark=spark)
178
180
  elif self.variable_type == VariableType.DATAFRAME_ANALYSIS:
179
181
  return await self.__read_dataframe_analysis_async(
180
182
  dataframe_analysis_keys=dataframe_analysis_keys,
@@ -367,7 +369,7 @@ class Variable:
367
369
  def __read_spark_parquet(self, sample: bool = False, sample_count: int = None, spark=None):
368
370
  if spark is None:
369
371
  return None
370
- return (
372
+ df = (
371
373
  spark.read
372
374
  .format('csv')
373
375
  .option('header', 'true')
@@ -375,6 +377,9 @@ class Variable:
375
377
  .option('delimiter', ',')
376
378
  .load(self.variable_path)
377
379
  )
380
+ if sample and sample_count:
381
+ df = df.limit(sample_count)
382
+ return df
378
383
 
379
384
  def __write_geo_dataframe(self, data) -> None:
380
385
  os.makedirs(self.variable_path, exist_ok=True)
@@ -114,12 +114,15 @@ def init_repo(repo_path: str) -> None:
114
114
  if os.path.exists(repo_path):
115
115
  raise FileExistsError(f'Repository {repo_path} already exists')
116
116
 
117
- os.makedirs(os.getenv(MAGE_DATA_DIR_ENV_VAR, DEFAULT_MAGE_DATA_DIR), exist_ok=True)
117
+ os.makedirs(
118
+ os.getenv(MAGE_DATA_DIR_ENV_VAR) or DEFAULT_MAGE_DATA_DIR,
119
+ exist_ok=True,
120
+ )
118
121
  copy_template_directory('repo', repo_path)
119
122
 
120
123
 
121
124
  def get_data_dir() -> str:
122
- return os.getenv(MAGE_DATA_DIR_ENV_VAR, DEFAULT_MAGE_DATA_DIR)
125
+ return os.getenv(MAGE_DATA_DIR_ENV_VAR) or DEFAULT_MAGE_DATA_DIR
123
126
 
124
127
 
125
128
  def get_repo_name() -> str:
@@ -66,6 +66,9 @@ def get_secret_value(name: str) -> str:
66
66
  from mage_ai.orchestration.db.models import Secret
67
67
  fernet = Fernet(get_encryption_key())
68
68
 
69
- secret = Secret.query.filter(Secret.name == name).one_or_none()
70
- if secret:
71
- return fernet.decrypt(secret.value.encode('utf-8')).decode('utf-8')
69
+ try:
70
+ secret = Secret.query.filter(Secret.name == name).one_or_none()
71
+ if secret:
72
+ return fernet.decrypt(secret.value.encode('utf-8')).decode('utf-8')
73
+ except Exception:
74
+ print(f'WARNING: Could not find secret value for secret {name}')
@@ -0,0 +1,32 @@
1
+ from mage_ai.data_preparation.repo_manager import get_repo_path
2
+ from mage_ai.io.bigquery import BigQuery
3
+ from mage_ai.io.config import ConfigFileLoader
4
+ from os import path
5
+
6
+ if 'sensor' not in globals():
7
+ from mage_ai.data_preparation.decorators import sensor
8
+
9
+
10
+ @sensor
11
+ def query_bigquery_and_check_condition(**kwargs) -> bool:
12
+ """
13
+ Template code for checking the results of a BigQuery query.
14
+ Specify your configuration settings in 'io_config.yaml'.
15
+
16
+ Return: True if the sensor should complete, False if it should
17
+ keep waiting
18
+ """
19
+
20
+ config_path = path.join(get_repo_path(), 'io_config.yaml')
21
+ config_profile = 'default'
22
+
23
+ query = 'Your BigQuery query' # Specify your SQL query here
24
+
25
+ loader = BigQuery.with_config(ConfigFileLoader(config_path, config_profile))
26
+ df = loader.load(query)
27
+
28
+ # Add your checks here
29
+ if df.empty:
30
+ return False
31
+
32
+ return True
@@ -0,0 +1,33 @@
1
+ from mage_ai.data_preparation.repo_manager import get_repo_path
2
+ from mage_ai.io.config import ConfigFileLoader
3
+ from mage_ai.io.mysql import MySQL
4
+ from os import path
5
+
6
+ if 'sensor' not in globals():
7
+ from mage_ai.data_preparation.decorators import sensor
8
+
9
+
10
+ @sensor
11
+ def query_mysql_and_check_condition(**kwargs) -> bool:
12
+ """
13
+ Template code for checking the results of a MySQL query.
14
+ Specify your configuration settings in 'io_config.yaml'.
15
+
16
+ Return: True if the sensor should complete, False if it should
17
+ keep waiting
18
+ """
19
+
20
+ config_path = path.join(get_repo_path(), 'io_config.yaml')
21
+ config_profile = 'default'
22
+
23
+ query = 'Your MySQL query' # Specify your SQL query here
24
+
25
+ with MySQL.with_config(
26
+ ConfigFileLoader(config_path, config_profile)) as loader:
27
+ df = loader.load(query)
28
+
29
+ # Add your checks here
30
+ if df.empty:
31
+ return False
32
+
33
+ return True
@@ -0,0 +1,33 @@
1
+ from mage_ai.data_preparation.repo_manager import get_repo_path
2
+ from mage_ai.io.config import ConfigFileLoader
3
+ from mage_ai.io.postgres import Postgres
4
+ from os import path
5
+
6
+ if 'sensor' not in globals():
7
+ from mage_ai.data_preparation.decorators import sensor
8
+
9
+
10
+ @sensor
11
+ def query_postgres_and_check_condition(**kwargs) -> bool:
12
+ """
13
+ Template code for checking the results of a Postgres query.
14
+ Specify your configuration settings in 'io_config.yaml'.
15
+
16
+ Return: True if the sensor should complete, False if it should
17
+ keep waiting
18
+ """
19
+
20
+ config_path = path.join(get_repo_path(), 'io_config.yaml')
21
+ config_profile = 'default'
22
+
23
+ query = 'Your Postgres query' # Specify your SQL query here
24
+
25
+ with Postgres.with_config(
26
+ ConfigFileLoader(config_path, config_profile)) as loader:
27
+ df = loader.load(query)
28
+
29
+ # Add your checks here
30
+ if df.empty:
31
+ return False
32
+
33
+ return True
@@ -0,0 +1,33 @@
1
+ from mage_ai.data_preparation.repo_manager import get_repo_path
2
+ from mage_ai.io.config import ConfigFileLoader
3
+ from mage_ai.io.redshift import Redshift
4
+ from os import path
5
+
6
+ if 'sensor' not in globals():
7
+ from mage_ai.data_preparation.decorators import sensor
8
+
9
+
10
+ @sensor
11
+ def query_redshift_and_check_condition(**kwargs) -> bool:
12
+ """
13
+ Template code for checking the results of a Redshift query.
14
+ Specify your configuration settings in 'io_config.yaml'.
15
+
16
+ Return: True if the sensor should complete, False if it should
17
+ keep waiting
18
+ """
19
+
20
+ config_path = path.join(get_repo_path(), 'io_config.yaml')
21
+ config_profile = 'default'
22
+
23
+ query = 'Your Redshift query' # Specify your SQL query here
24
+
25
+ with Redshift.with_config(
26
+ ConfigFileLoader(config_path, config_profile)) as loader:
27
+ df = loader.load(query)
28
+
29
+ # Add your checks here
30
+ if df.empty:
31
+ return False
32
+
33
+ return True