mage-ai 0.9.73__py3-none-any.whl → 0.9.75__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (430) hide show
  1. mage_ai/ai/constants.py +2 -2
  2. mage_ai/ai/llm_pipeline_wizard.py +11 -7
  3. mage_ai/ai/openai_client.py +18 -5
  4. mage_ai/api/constants.py +4 -5
  5. mage_ai/api/oauth_scope.py +2 -2
  6. mage_ai/api/operations/constants.py +2 -2
  7. mage_ai/api/presenters/SyncPresenter.py +4 -1
  8. mage_ai/authentication/oauth/constants.py +2 -2
  9. mage_ai/authentication/operation_history/constants.py +2 -2
  10. mage_ai/authentication/permissions/constants.py +5 -6
  11. mage_ai/cache/constants.py +2 -2
  12. mage_ai/cache/dbt/constants.py +2 -3
  13. mage_ai/cluster_manager/constants.py +2 -2
  14. mage_ai/cluster_manager/kubernetes/workload_manager.py +3 -2
  15. mage_ai/command_center/constants.py +13 -13
  16. mage_ai/data_cleaner/column_types/constants.py +2 -2
  17. mage_ai/data_cleaner/transformer_actions/column.py +19 -7
  18. mage_ai/data_cleaner/transformer_actions/constants.py +10 -9
  19. mage_ai/data_integrations/destinations/constants.py +1 -0
  20. mage_ai/data_integrations/sources/constants.py +2 -0
  21. mage_ai/data_preparation/git/utils.py +4 -1
  22. mage_ai/data_preparation/logging/__init__.py +2 -2
  23. mage_ai/data_preparation/logging/logger.py +3 -3
  24. mage_ai/data_preparation/models/block/__init__.py +6 -0
  25. mage_ai/data_preparation/models/block/data_integration/constants.py +2 -2
  26. mage_ai/data_preparation/models/block/dbt/constants.py +3 -3
  27. mage_ai/data_preparation/models/block/dynamic/factory.py +40 -3
  28. mage_ai/data_preparation/models/block/dynamic/utils.py +31 -33
  29. mage_ai/data_preparation/models/block/dynamic/variables.py +1 -1
  30. mage_ai/data_preparation/models/block/settings/dynamic/constants.py +3 -3
  31. mage_ai/data_preparation/models/block/settings/dynamic/mixins.py +63 -4
  32. mage_ai/data_preparation/models/block/settings/global_data_products/models.py +2 -2
  33. mage_ai/data_preparation/models/constants.py +11 -11
  34. mage_ai/data_preparation/models/global_hooks/constants.py +7 -8
  35. mage_ai/data_preparation/models/global_hooks/models.py +5 -5
  36. mage_ai/data_preparation/models/pipeline.py +5 -0
  37. mage_ai/data_preparation/models/project/constants.py +2 -2
  38. mage_ai/data_preparation/models/triggers/__init__.py +6 -4
  39. mage_ai/data_preparation/models/variables/constants.py +5 -5
  40. mage_ai/data_preparation/models/widget/constants.py +5 -5
  41. mage_ai/data_preparation/preferences.py +9 -16
  42. mage_ai/data_preparation/repo_manager.py +2 -2
  43. mage_ai/data_preparation/sync/__init__.py +2 -2
  44. mage_ai/data_preparation/templates/data_exporters/streaming/elasticsearch.yaml +3 -0
  45. mage_ai/data_preparation/templates/data_exporters/streaming/generic_python.py +1 -1
  46. mage_ai/data_preparation/templates/data_loaders/streaming/nats.yaml +9 -3
  47. mage_ai/errors/constants.py +2 -2
  48. mage_ai/io/base.py +57 -16
  49. mage_ai/io/config.py +3 -3
  50. mage_ai/io/export_utils.py +2 -2
  51. mage_ai/io/google_cloud_storage.py +3 -2
  52. mage_ai/io/io_config.py +3 -2
  53. mage_ai/io/oracledb.py +2 -4
  54. mage_ai/io/postgres.py +40 -20
  55. mage_ai/io/utils.py +18 -0
  56. mage_ai/kernels/magic/constants.py +4 -4
  57. mage_ai/orchestration/constants.py +2 -2
  58. mage_ai/orchestration/db/__init__.py +3 -3
  59. mage_ai/orchestration/db/constants.py +2 -2
  60. mage_ai/orchestration/db/models/oauth.py +5 -5
  61. mage_ai/orchestration/db/models/schedules.py +28 -8
  62. mage_ai/orchestration/db/models/schedules_project_platform.py +10 -8
  63. mage_ai/orchestration/job_manager.py +2 -2
  64. mage_ai/orchestration/monitor/monitor_stats.py +2 -2
  65. mage_ai/orchestration/notification/config.py +2 -2
  66. mage_ai/orchestration/pipeline_scheduler_original.py +4 -12
  67. mage_ai/orchestration/queue/config.py +2 -2
  68. mage_ai/orchestration/queue/process_queue.py +3 -3
  69. mage_ai/presenters/charts/data_sources/constants.py +2 -2
  70. mage_ai/presenters/interactions/constants.py +4 -4
  71. mage_ai/presenters/pages/models/constants.py +4 -4
  72. mage_ai/server/constants.py +1 -1
  73. mage_ai/server/frontend_dist/404.html +3 -3
  74. mage_ai/server/frontend_dist/_next/static/38-PtskJFUTYUpRhT1qF_/_buildManifest.js +1 -0
  75. mage_ai/server/frontend_dist/_next/static/chunks/{1187-839336d276186105.js → 1187-4560c3895e1d7099.js} +1 -1
  76. mage_ai/server/frontend_dist/_next/static/chunks/{1598-0adca9dce3ba4c60.js → 1598-cbf3f5a6078fc3f5.js} +1 -1
  77. mage_ai/server/frontend_dist/_next/static/chunks/2717-638a944d24d5abde.js +1 -0
  78. mage_ai/server/frontend_dist/_next/static/chunks/3548-36f746b1824004f2.js +1 -0
  79. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/3763-39a5174f6a3924db.js → frontend_dist/_next/static/chunks/3763-aabe2703076636b0.js} +1 -1
  80. mage_ai/server/frontend_dist/_next/static/chunks/3782-3e2acb5ed45b582b.js +1 -0
  81. mage_ai/server/frontend_dist/_next/static/chunks/449-f689774546860ca4.js +1 -0
  82. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/5627-d5e559859dd0e1e0.js → frontend_dist/_next/static/chunks/5627-10e76bafa5a26f5f.js} +1 -1
  83. mage_ai/server/frontend_dist/_next/static/chunks/{5699-e49718dfc9eb2854.js → 5699-e99379e332bd0b41.js} +1 -1
  84. mage_ai/server/frontend_dist/_next/static/chunks/{7966-163da2621b8c987c.js → 7966-a5a7db345ce81263.js} +1 -1
  85. mage_ai/server/frontend_dist/_next/static/chunks/pages/{_app-663c909dcda4c23a.js → _app-13bf3b7dcef50c29.js} +2 -2
  86. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/compute-ed67fa8e81662e8b.js → frontend_dist/_next/static/chunks/pages/compute-9e2dea78024e3bb4.js} +1 -1
  87. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/files-e0ecd7ced09a63b2.js → frontend_dist/_next/static/chunks/pages/files-e08c7fe76f968f9c.js} +1 -1
  88. mage_ai/server/frontend_dist/_next/static/chunks/pages/global-data-products/{[...slug]-c7a729477ecda50e.js → [...slug]-30c3807057a4e65b.js} +1 -1
  89. mage_ai/server/frontend_dist/_next/static/chunks/pages/{global-data-products-fd6ae6a358a60a0c.js → global-data-products-8dcb3b31af9e0e39.js} +1 -1
  90. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-8e50243797a7fe59.js → frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-85a64b64d27214b6.js} +1 -1
  91. mage_ai/server/frontend_dist/_next/static/chunks/pages/{global-hooks-d0c003446332dc0d.js → global-hooks-4ff959d51b8a9502.js} +1 -1
  92. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{files-a69ed8e9f814490c.js → files-d08a460641d0efaa.js} +1 -1
  93. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage/overview-1aad7093c6d39257.js → frontend_dist/_next/static/chunks/pages/manage/overview-aae747f487e08d51.js} +1 -1
  94. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{pipeline-runs-528d30e0d13b0cc7.js → pipeline-runs-09a842d64a6ada62.js} +1 -1
  95. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{settings-fb9201d9cf63031d.js → settings-2e98e57d9376a458.js} +1 -1
  96. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/{[user]-000f5a980a07da39.js → [user]-7be6e41ad66089bb.js} +1 -1
  97. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-e4e613f6e817a733.js → frontend_dist/_next/static/chunks/pages/manage/users/new-4c088833063bfa07.js} +1 -1
  98. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{users-a5e9d77ed5b50205.js → users-b99379d0aa6a8c25.js} +1 -1
  99. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/manage-34d718b8a4066c23.js → frontend_dist/_next/static/chunks/pages/manage-868fcd8cbeb265f0.js} +1 -1
  100. mage_ai/server/frontend_dist/_next/static/chunks/pages/{oauth-3bfd1b8d7f036726.js → oauth-6ceceb62191dfe8a.js} +1 -1
  101. mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-e51cd04bd4d1fffe.js +1 -0
  102. mage_ai/server/frontend_dist/_next/static/chunks/pages/{pipeline-runs-5f8c100e648efa8a.js → pipeline-runs-2d0136b51b57de93.js} +1 -1
  103. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/{[...slug]-688c652f3296bb9c.js → [...slug]-1ad5238742e25b4c.js} +1 -1
  104. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-bd11e87d026bfbf9.js +1 -0
  105. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{dashboard-1236e36d39b1637d.js → dashboard-0f4f47f721b0723f.js} +1 -1
  106. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-432da20df91511fb.js +1 -0
  107. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-fe91dfb0091f6bc6.js +1 -0
  108. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-0d68d4bf6290fefb.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-cf794b2d22a80f31.js} +1 -1
  109. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-9254358d58f07714.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-a964caef91bed9e1.js} +1 -1
  110. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{monitors-821001e690caebe2.js → monitors-80bebb4401eefe25.js} +1 -1
  111. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-2eae7cb017027682.js +1 -0
  112. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs-2d4b2a0800a66b33.js → frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-e3d7fdfeb7f806f7.js} +1 -1
  113. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{settings-cd49372ae1702963.js → settings-0abf8a1b7243f93b.js} +1 -1
  114. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-707ed8ca942ca802.js +1 -0
  115. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/{[...slug]-259143ed3cf59e31.js → [...slug]-8429f17d4146e1ec.js} +1 -1
  116. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-193045d9836d8d80.js +1 -0
  117. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-b578b075a8d857e3.js → frontend_dist/_next/static/chunks/pages/pipelines-38187954b6ec4b40.js} +1 -1
  118. mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks/{[...slug]-5eeec927e4202b63.js → [...slug]-6834ae87bd668cb2.js} +1 -1
  119. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks-fbe9ad995d46d837.js → frontend_dist/_next/static/chunks/pages/platform/global-hooks-b3f7309a23e592b2.js} +1 -1
  120. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/{profile-fc659962d4015cb3.js → profile-f8b7374385e1f1bf.js} +1 -1
  121. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-8de68502a9afa299.js +1 -0
  122. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-a4f88c334414402b.js → frontend_dist/_next/static/chunks/pages/settings/platform/settings-50fb6a34f3913f1f.js} +1 -1
  123. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-4deb9579ef99a3c6.js → [...slug]-2e5c098c21ea32b7.js} +1 -1
  124. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{permissions-e0cda2f2bfce8d61.js → permissions-54e4b15b9585bfc4.js} +1 -1
  125. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-040f83d75d0f6537.js +1 -0
  126. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-910257d16c604ebd.js → [...slug]-95088f43034e3c95.js} +1 -1
  127. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{roles-4f7a0756806cee34.js → roles-e9149e1fcf218f42.js} +1 -1
  128. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{sync-data-208d6f955204d704.js → sync-data-75b67ae4a00818ef.js} +1 -1
  129. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users/{[...slug]-c89dc67e5a1706a8.js → [...slug]-557dda05ca6c6124.js} +1 -1
  130. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{users-5212c01a9dc558da.js → users-3ee783f5139c76a1.js} +1 -1
  131. mage_ai/server/frontend_dist/_next/static/chunks/pages/{sign-in-054b33312d3193c3.js → sign-in-593c40985d63fcf7.js} +1 -1
  132. mage_ai/server/frontend_dist/_next/static/chunks/pages/templates/{[...slug]-b6ed6a5d818bfd20.js → [...slug]-252c4b6b818345d5.js} +1 -1
  133. mage_ai/server/frontend_dist/_next/static/chunks/pages/{templates-852357bc983af2ea.js → templates-ca528bc607753ab8.js} +1 -1
  134. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/terminal-1f9c56d671bbc67d.js → frontend_dist/_next/static/chunks/pages/terminal-287362c1defcc96b.js} +1 -1
  135. mage_ai/server/frontend_dist/_next/static/chunks/pages/test-2f83af8c9f1378fe.js +1 -0
  136. mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-d9de73fb799efed8.js +1 -0
  137. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/version-control-ae3469b992a341d6.js → frontend_dist/_next/static/chunks/pages/version-control-573f0225d7a703ed.js} +1 -1
  138. mage_ai/server/frontend_dist/_next/static/chunks/{webpack-43534cc51fce8644.js → webpack-0bc44da590c7cf85.js} +1 -1
  139. mage_ai/server/frontend_dist/block-layout.html +3 -3
  140. mage_ai/server/frontend_dist/compute.html +6 -6
  141. mage_ai/server/frontend_dist/files.html +6 -6
  142. mage_ai/server/frontend_dist/global-data-products/[...slug].html +6 -6
  143. mage_ai/server/frontend_dist/global-data-products.html +6 -6
  144. mage_ai/server/frontend_dist/global-hooks/[...slug].html +6 -6
  145. mage_ai/server/frontend_dist/global-hooks.html +6 -6
  146. mage_ai/server/frontend_dist/index.html +3 -3
  147. mage_ai/server/frontend_dist/manage/files.html +6 -6
  148. mage_ai/server/frontend_dist/manage/overview.html +6 -6
  149. mage_ai/server/frontend_dist/manage/pipeline-runs.html +6 -6
  150. mage_ai/server/frontend_dist/manage/settings.html +6 -6
  151. mage_ai/server/frontend_dist/manage/users/[user].html +6 -6
  152. mage_ai/server/frontend_dist/manage/users/new.html +6 -6
  153. mage_ai/server/frontend_dist/manage/users.html +6 -6
  154. mage_ai/server/frontend_dist/manage.html +6 -6
  155. mage_ai/server/frontend_dist/oauth.html +4 -4
  156. mage_ai/server/frontend_dist/overview.html +6 -6
  157. mage_ai/server/frontend_dist/pipeline-runs.html +6 -6
  158. mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +6 -6
  159. mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +6 -6
  160. mage_ai/server/frontend_dist/pipelines/[pipeline]/dashboard.html +6 -6
  161. mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +3 -3
  162. mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +6 -6
  163. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +6 -6
  164. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +6 -6
  165. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +6 -6
  166. mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +6 -6
  167. mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +6 -6
  168. mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +6 -6
  169. mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +6 -6
  170. mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +6 -6
  171. mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +6 -6
  172. mage_ai/server/frontend_dist/pipelines/[pipeline].html +3 -3
  173. mage_ai/server/frontend_dist/pipelines.html +6 -6
  174. mage_ai/server/frontend_dist/platform/global-hooks/[...slug].html +6 -6
  175. mage_ai/server/frontend_dist/platform/global-hooks.html +6 -6
  176. mage_ai/server/frontend_dist/settings/account/profile.html +6 -6
  177. mage_ai/server/frontend_dist/settings/platform/preferences.html +6 -6
  178. mage_ai/server/frontend_dist/settings/platform/settings.html +6 -6
  179. mage_ai/server/frontend_dist/settings/workspace/permissions/[...slug].html +6 -6
  180. mage_ai/server/frontend_dist/settings/workspace/permissions.html +6 -6
  181. mage_ai/server/frontend_dist/settings/workspace/preferences.html +6 -6
  182. mage_ai/server/frontend_dist/settings/workspace/roles/[...slug].html +6 -6
  183. mage_ai/server/frontend_dist/settings/workspace/roles.html +6 -6
  184. mage_ai/server/frontend_dist/settings/workspace/sync-data.html +6 -6
  185. mage_ai/server/frontend_dist/settings/workspace/users/[...slug].html +6 -6
  186. mage_ai/server/frontend_dist/settings/workspace/users.html +6 -6
  187. mage_ai/server/frontend_dist/settings.html +3 -3
  188. mage_ai/server/frontend_dist/sign-in.html +7 -7
  189. mage_ai/server/frontend_dist/templates/[...slug].html +6 -6
  190. mage_ai/server/frontend_dist/templates.html +6 -6
  191. mage_ai/server/frontend_dist/terminal.html +6 -6
  192. mage_ai/server/frontend_dist/test.html +3 -3
  193. mage_ai/server/frontend_dist/triggers.html +6 -6
  194. mage_ai/server/frontend_dist/v2/canvas.html +2 -2
  195. mage_ai/server/frontend_dist/v2.html +2 -2
  196. mage_ai/server/frontend_dist/version-control.html +6 -6
  197. mage_ai/server/frontend_dist_base_path_template/404.html +3 -3
  198. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{1187-839336d276186105.js → 1187-4560c3895e1d7099.js} +1 -1
  199. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{1598-0adca9dce3ba4c60.js → 1598-cbf3f5a6078fc3f5.js} +1 -1
  200. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-638a944d24d5abde.js +1 -0
  201. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-36f746b1824004f2.js +1 -0
  202. mage_ai/server/{frontend_dist/_next/static/chunks/3763-39a5174f6a3924db.js → frontend_dist_base_path_template/_next/static/chunks/3763-aabe2703076636b0.js} +1 -1
  203. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3782-3e2acb5ed45b582b.js +1 -0
  204. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/449-f689774546860ca4.js +1 -0
  205. mage_ai/server/{frontend_dist/_next/static/chunks/5627-d5e559859dd0e1e0.js → frontend_dist_base_path_template/_next/static/chunks/5627-10e76bafa5a26f5f.js} +1 -1
  206. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{5699-e49718dfc9eb2854.js → 5699-e99379e332bd0b41.js} +1 -1
  207. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{7966-163da2621b8c987c.js → 7966-a5a7db345ce81263.js} +1 -1
  208. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{_app-bb4a0e0d783622a8.js → _app-0392ef723ea2c6f8.js} +2 -2
  209. mage_ai/server/{frontend_dist/_next/static/chunks/pages/compute-ed67fa8e81662e8b.js → frontend_dist_base_path_template/_next/static/chunks/pages/compute-9e2dea78024e3bb4.js} +1 -1
  210. mage_ai/server/{frontend_dist/_next/static/chunks/pages/files-e0ecd7ced09a63b2.js → frontend_dist_base_path_template/_next/static/chunks/pages/files-e08c7fe76f968f9c.js} +1 -1
  211. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-data-products/{[...slug]-c7a729477ecda50e.js → [...slug]-30c3807057a4e65b.js} +1 -1
  212. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{global-data-products-fd6ae6a358a60a0c.js → global-data-products-8dcb3b31af9e0e39.js} +1 -1
  213. mage_ai/server/{frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-8e50243797a7fe59.js → frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-85a64b64d27214b6.js} +1 -1
  214. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{global-hooks-d0c003446332dc0d.js → global-hooks-4ff959d51b8a9502.js} +1 -1
  215. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/{files-a69ed8e9f814490c.js → files-d08a460641d0efaa.js} +1 -1
  216. mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage/overview-1aad7093c6d39257.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage/overview-aae747f487e08d51.js} +1 -1
  217. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/{pipeline-runs-528d30e0d13b0cc7.js → pipeline-runs-09a842d64a6ada62.js} +1 -1
  218. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/{settings-fb9201d9cf63031d.js → settings-2e98e57d9376a458.js} +1 -1
  219. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/{[user]-000f5a980a07da39.js → [user]-7be6e41ad66089bb.js} +1 -1
  220. mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage/users/new-e4e613f6e817a733.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-4c088833063bfa07.js} +1 -1
  221. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/{users-a5e9d77ed5b50205.js → users-b99379d0aa6a8c25.js} +1 -1
  222. mage_ai/server/{frontend_dist/_next/static/chunks/pages/manage-34d718b8a4066c23.js → frontend_dist_base_path_template/_next/static/chunks/pages/manage-868fcd8cbeb265f0.js} +1 -1
  223. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{oauth-3bfd1b8d7f036726.js → oauth-6ceceb62191dfe8a.js} +1 -1
  224. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-e51cd04bd4d1fffe.js +1 -0
  225. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{pipeline-runs-5f8c100e648efa8a.js → pipeline-runs-2d0136b51b57de93.js} +1 -1
  226. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills/{[...slug]-688c652f3296bb9c.js → [...slug]-1ad5238742e25b4c.js} +1 -1
  227. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-bd11e87d026bfbf9.js +1 -0
  228. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{dashboard-1236e36d39b1637d.js → dashboard-0f4f47f721b0723f.js} +1 -1
  229. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-432da20df91511fb.js +1 -0
  230. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-fe91dfb0091f6bc6.js +1 -0
  231. mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-0d68d4bf6290fefb.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-cf794b2d22a80f31.js} +1 -1
  232. mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-9254358d58f07714.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-a964caef91bed9e1.js} +1 -1
  233. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{monitors-821001e690caebe2.js → monitors-80bebb4401eefe25.js} +1 -1
  234. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-2eae7cb017027682.js +1 -0
  235. mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-2d4b2a0800a66b33.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs-e3d7fdfeb7f806f7.js} +1 -1
  236. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/{settings-cd49372ae1702963.js → settings-0abf8a1b7243f93b.js} +1 -1
  237. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-707ed8ca942ca802.js +1 -0
  238. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers/{[...slug]-259143ed3cf59e31.js → [...slug]-8429f17d4146e1ec.js} +1 -1
  239. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-193045d9836d8d80.js +1 -0
  240. mage_ai/server/{frontend_dist/_next/static/chunks/pages/pipelines-b578b075a8d857e3.js → frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-38187954b6ec4b40.js} +1 -1
  241. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks/{[...slug]-5eeec927e4202b63.js → [...slug]-6834ae87bd668cb2.js} +1 -1
  242. mage_ai/server/{frontend_dist/_next/static/chunks/pages/platform/global-hooks-fbe9ad995d46d837.js → frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks-b3f7309a23e592b2.js} +1 -1
  243. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/account/{profile-fc659962d4015cb3.js → profile-f8b7374385e1f1bf.js} +1 -1
  244. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-8de68502a9afa299.js +1 -0
  245. mage_ai/server/{frontend_dist/_next/static/chunks/pages/settings/platform/settings-a4f88c334414402b.js → frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-50fb6a34f3913f1f.js} +1 -1
  246. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-4deb9579ef99a3c6.js → [...slug]-2e5c098c21ea32b7.js} +1 -1
  247. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{permissions-e0cda2f2bfce8d61.js → permissions-54e4b15b9585bfc4.js} +1 -1
  248. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-040f83d75d0f6537.js +1 -0
  249. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-910257d16c604ebd.js → [...slug]-95088f43034e3c95.js} +1 -1
  250. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{roles-4f7a0756806cee34.js → roles-e9149e1fcf218f42.js} +1 -1
  251. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{sync-data-208d6f955204d704.js → sync-data-75b67ae4a00818ef.js} +1 -1
  252. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/users/{[...slug]-c89dc67e5a1706a8.js → [...slug]-557dda05ca6c6124.js} +1 -1
  253. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{users-5212c01a9dc558da.js → users-3ee783f5139c76a1.js} +1 -1
  254. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{sign-in-054b33312d3193c3.js → sign-in-593c40985d63fcf7.js} +1 -1
  255. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates/{[...slug]-b6ed6a5d818bfd20.js → [...slug]-252c4b6b818345d5.js} +1 -1
  256. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{templates-852357bc983af2ea.js → templates-ca528bc607753ab8.js} +1 -1
  257. mage_ai/server/{frontend_dist/_next/static/chunks/pages/terminal-1f9c56d671bbc67d.js → frontend_dist_base_path_template/_next/static/chunks/pages/terminal-287362c1defcc96b.js} +1 -1
  258. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/test-2f83af8c9f1378fe.js +1 -0
  259. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-d9de73fb799efed8.js +1 -0
  260. mage_ai/server/{frontend_dist/_next/static/chunks/pages/version-control-ae3469b992a341d6.js → frontend_dist_base_path_template/_next/static/chunks/pages/version-control-573f0225d7a703ed.js} +1 -1
  261. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{webpack-9eb1dd2ee735aaac.js → webpack-12ad70eb5c31aa92.js} +1 -1
  262. mage_ai/server/frontend_dist_base_path_template/_next/static/dxnSzgIvSG4Ke5LM-tPQX/_buildManifest.js +1 -0
  263. mage_ai/server/frontend_dist_base_path_template/block-layout.html +3 -3
  264. mage_ai/server/frontend_dist_base_path_template/compute.html +6 -6
  265. mage_ai/server/frontend_dist_base_path_template/files.html +6 -6
  266. mage_ai/server/frontend_dist_base_path_template/global-data-products/[...slug].html +6 -6
  267. mage_ai/server/frontend_dist_base_path_template/global-data-products.html +6 -6
  268. mage_ai/server/frontend_dist_base_path_template/global-hooks/[...slug].html +6 -6
  269. mage_ai/server/frontend_dist_base_path_template/global-hooks.html +6 -6
  270. mage_ai/server/frontend_dist_base_path_template/index.html +3 -3
  271. mage_ai/server/frontend_dist_base_path_template/manage/files.html +6 -6
  272. mage_ai/server/frontend_dist_base_path_template/manage/overview.html +6 -6
  273. mage_ai/server/frontend_dist_base_path_template/manage/pipeline-runs.html +6 -6
  274. mage_ai/server/frontend_dist_base_path_template/manage/settings.html +6 -6
  275. mage_ai/server/frontend_dist_base_path_template/manage/users/[user].html +6 -6
  276. mage_ai/server/frontend_dist_base_path_template/manage/users/new.html +6 -6
  277. mage_ai/server/frontend_dist_base_path_template/manage/users.html +6 -6
  278. mage_ai/server/frontend_dist_base_path_template/manage.html +6 -6
  279. mage_ai/server/frontend_dist_base_path_template/oauth.html +5 -5
  280. mage_ai/server/frontend_dist_base_path_template/overview.html +6 -6
  281. mage_ai/server/frontend_dist_base_path_template/pipeline-runs.html +6 -6
  282. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills/[...slug].html +6 -6
  283. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills.html +6 -6
  284. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/dashboard.html +6 -6
  285. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/edit.html +3 -3
  286. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/logs.html +6 -6
  287. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runs.html +6 -6
  288. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runtime.html +6 -6
  289. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors.html +6 -6
  290. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs/[run].html +6 -6
  291. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs.html +6 -6
  292. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/settings.html +6 -6
  293. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/syncs.html +6 -6
  294. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers/[...slug].html +6 -6
  295. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers.html +6 -6
  296. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline].html +3 -3
  297. mage_ai/server/frontend_dist_base_path_template/pipelines.html +6 -6
  298. mage_ai/server/frontend_dist_base_path_template/platform/global-hooks/[...slug].html +6 -6
  299. mage_ai/server/frontend_dist_base_path_template/platform/global-hooks.html +6 -6
  300. mage_ai/server/frontend_dist_base_path_template/settings/account/profile.html +6 -6
  301. mage_ai/server/frontend_dist_base_path_template/settings/platform/preferences.html +6 -6
  302. mage_ai/server/frontend_dist_base_path_template/settings/platform/settings.html +6 -6
  303. mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions/[...slug].html +6 -6
  304. mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions.html +6 -6
  305. mage_ai/server/frontend_dist_base_path_template/settings/workspace/preferences.html +6 -6
  306. mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles/[...slug].html +6 -6
  307. mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles.html +6 -6
  308. mage_ai/server/frontend_dist_base_path_template/settings/workspace/sync-data.html +6 -6
  309. mage_ai/server/frontend_dist_base_path_template/settings/workspace/users/[...slug].html +6 -6
  310. mage_ai/server/frontend_dist_base_path_template/settings/workspace/users.html +6 -6
  311. mage_ai/server/frontend_dist_base_path_template/settings.html +3 -3
  312. mage_ai/server/frontend_dist_base_path_template/sign-in.html +7 -7
  313. mage_ai/server/frontend_dist_base_path_template/templates/[...slug].html +6 -6
  314. mage_ai/server/frontend_dist_base_path_template/templates.html +6 -6
  315. mage_ai/server/frontend_dist_base_path_template/terminal.html +6 -6
  316. mage_ai/server/frontend_dist_base_path_template/test.html +3 -3
  317. mage_ai/server/frontend_dist_base_path_template/triggers.html +6 -6
  318. mage_ai/server/frontend_dist_base_path_template/v2/canvas.html +2 -2
  319. mage_ai/server/frontend_dist_base_path_template/v2.html +2 -2
  320. mage_ai/server/frontend_dist_base_path_template/version-control.html +6 -6
  321. mage_ai/server/kernel_output_parser.py +2 -3
  322. mage_ai/server/kernels.py +2 -3
  323. mage_ai/server/scheduler_manager.py +2 -2
  324. mage_ai/server/server.py +21 -0
  325. mage_ai/server/websockets/constants.py +4 -4
  326. mage_ai/services/compute/aws/constants.py +2 -2
  327. mage_ai/services/compute/aws/steps.py +16 -10
  328. mage_ai/services/compute/constants.py +4 -4
  329. mage_ai/services/compute/models.py +4 -4
  330. mage_ai/services/k8s/config.py +4 -0
  331. mage_ai/services/k8s/job_manager.py +2 -0
  332. mage_ai/services/spark/constants.py +3 -3
  333. mage_ai/services/spark/models/jobs.py +2 -2
  334. mage_ai/services/spark/models/sqls.py +2 -2
  335. mage_ai/services/spark/models/stages.py +4 -4
  336. mage_ai/services/spark/models/threads.py +2 -2
  337. mage_ai/services/teams/config.py +13 -2
  338. mage_ai/services/teams/teams.py +13 -11
  339. mage_ai/settings/backends.py +3 -2
  340. mage_ai/settings/models/configuration_option.py +3 -3
  341. mage_ai/settings/server.py +5 -0
  342. mage_ai/shared/constants.py +4 -2
  343. mage_ai/shared/custom_logger.py +13 -13
  344. mage_ai/shared/enum.py +8 -0
  345. mage_ai/shared/environments.py +27 -3
  346. mage_ai/shared/logger.py +2 -2
  347. mage_ai/shared/models.py +2 -1
  348. mage_ai/streaming/constants.py +3 -3
  349. mage_ai/streaming/sinks/elasticsearch.py +15 -5
  350. mage_ai/streaming/sinks/kafka.py +2 -2
  351. mage_ai/streaming/sinks/postgres.py +6 -0
  352. mage_ai/streaming/sources/amazon_sqs.py +2 -2
  353. mage_ai/streaming/sources/base.py +2 -2
  354. mage_ai/streaming/sources/kafka.py +20 -4
  355. mage_ai/streaming/sources/nats_js.py +10 -3
  356. mage_ai/streaming/sources/shared.py +3 -2
  357. mage_ai/system/constants.py +2 -2
  358. mage_ai/tests/api/endpoints/test_blocks.py +1 -101
  359. mage_ai/tests/api/endpoints/test_configuration_options.py +1 -48
  360. mage_ai/tests/api/endpoints/test_configuration_options_project_platform.py +68 -0
  361. mage_ai/tests/api/endpoints/test_custom_designs.py +1 -106
  362. mage_ai/tests/api/endpoints/test_custom_designs_project_platform.py +132 -0
  363. mage_ai/tests/api/endpoints/test_dbt_blocks.py +111 -0
  364. mage_ai/tests/api/endpoints/test_file_contents.py +0 -48
  365. mage_ai/tests/api/endpoints/test_file_contents_with_project_platform.py +66 -0
  366. mage_ai/tests/api/endpoints/test_pipelines.py +0 -134
  367. mage_ai/tests/api/endpoints/test_pipelines_with_project_platform.py +143 -0
  368. mage_ai/tests/api/policies/permissions/test_base_policy_with_permissions.py +2 -2
  369. mage_ai/tests/data_cleaner/transformer_actions/test_trim_transformer.py +161 -0
  370. mage_ai/tests/data_preparation/models/block/dbt/test_profiles.py +1 -1
  371. mage_ai/tests/data_preparation/models/block/dynamic/test_combos.py +1 -1
  372. mage_ai/tests/data_preparation/models/block/hook/test_hook_block.py +3 -2
  373. mage_ai/tests/data_preparation/models/test_block.py +7 -0
  374. mage_ai/tests/data_preparation/models/test_blocks_helper.py +1 -1
  375. mage_ai/tests/data_preparation/models/variables/test_summarizer.py +1 -1
  376. mage_ai/tests/data_preparation/sync/test_git_sync.py +6 -6
  377. mage_ai/tests/data_preparation/test_repo_manager.py +0 -63
  378. mage_ai/tests/data_preparation/test_repo_manager_project_platform.py +67 -0
  379. mage_ai/tests/data_preparation/test_variable_manager.py +0 -51
  380. mage_ai/tests/data_preparation/test_variable_manager_project_platform.py +41 -0
  381. mage_ai/tests/io/create_table/test_postgresql.py +27 -0
  382. mage_ai/tests/orchestration/notification/test_config.py +3 -3
  383. mage_ai/tests/orchestration/queue/test_process_queue.py +3 -2
  384. mage_ai/tests/orchestration/test_pipeline_scheduler.py +1 -0
  385. mage_ai/tests/settings/test_platform.py +2 -2
  386. mage_ai/tests/streaming/sinks/test_generic_io.py +25 -21
  387. mage_ai/usage_statistics/constants.py +4 -4
  388. mage_ai-0.9.75.dist-info/METADATA +377 -0
  389. {mage_ai-0.9.73.dist-info → mage_ai-0.9.75.dist-info}/RECORD +397 -388
  390. {mage_ai-0.9.73.dist-info → mage_ai-0.9.75.dist-info}/WHEEL +1 -1
  391. mage_ai/server/frontend_dist/_next/static/chunks/1557-1ad0c64c2d08e569.js +0 -1
  392. mage_ai/server/frontend_dist/_next/static/chunks/2717-d65056b6b5e124eb.js +0 -1
  393. mage_ai/server/frontend_dist/_next/static/chunks/3548-b2c5edfb710886a6.js +0 -1
  394. mage_ai/server/frontend_dist/_next/static/chunks/3782-4b3091e550f809a2.js +0 -1
  395. mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-69af3253ad0d0d89.js +0 -1
  396. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-fe112809feb25b05.js +0 -1
  397. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-e9ca358209cdf93d.js +0 -1
  398. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-a29f1615d2e7d330.js +0 -1
  399. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-6d382ae5bad9745c.js +0 -1
  400. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-135be8974f7f5f2b.js +0 -1
  401. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-3af13e89adff4d6c.js +0 -1
  402. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-058d283ee178c038.js +0 -1
  403. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-7b02bb70462144cb.js +0 -1
  404. mage_ai/server/frontend_dist/_next/static/chunks/pages/test-86b12cc12d4a625f.js +0 -1
  405. mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-2481c40b18d5b6d4.js +0 -1
  406. mage_ai/server/frontend_dist/_next/static/kxGpiudO3f9aX6FAiqydf/_buildManifest.js +0 -1
  407. mage_ai/server/frontend_dist_base_path_template/_next/static/H5pcGxWf1BkhXDRs2BqiI/_buildManifest.js +0 -1
  408. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1557-1ad0c64c2d08e569.js +0 -1
  409. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-d65056b6b5e124eb.js +0 -1
  410. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-b2c5edfb710886a6.js +0 -1
  411. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3782-4b3091e550f809a2.js +0 -1
  412. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-69af3253ad0d0d89.js +0 -1
  413. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-fe112809feb25b05.js +0 -1
  414. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-e9ca358209cdf93d.js +0 -1
  415. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-a29f1615d2e7d330.js +0 -1
  416. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-6d382ae5bad9745c.js +0 -1
  417. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-135be8974f7f5f2b.js +0 -1
  418. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-3af13e89adff4d6c.js +0 -1
  419. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-058d283ee178c038.js +0 -1
  420. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-7b02bb70462144cb.js +0 -1
  421. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/test-86b12cc12d4a625f.js +0 -1
  422. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-2481c40b18d5b6d4.js +0 -1
  423. mage_ai-0.9.73.dist-info/METADATA +0 -543
  424. /mage_ai/server/frontend_dist/_next/static/{kxGpiudO3f9aX6FAiqydf → 38-PtskJFUTYUpRhT1qF_}/_ssgManifest.js +0 -0
  425. /mage_ai/server/frontend_dist/_next/static/chunks/pages/{_app-663c909dcda4c23a.js.LICENSE.txt → _app-13bf3b7dcef50c29.js.LICENSE.txt} +0 -0
  426. /mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{_app-bb4a0e0d783622a8.js.LICENSE.txt → _app-0392ef723ea2c6f8.js.LICENSE.txt} +0 -0
  427. /mage_ai/server/frontend_dist_base_path_template/_next/static/{H5pcGxWf1BkhXDRs2BqiI → dxnSzgIvSG4Ke5LM-tPQX}/_ssgManifest.js +0 -0
  428. {mage_ai-0.9.73.dist-info → mage_ai-0.9.75.dist-info}/LICENSE +0 -0
  429. {mage_ai-0.9.73.dist-info → mage_ai-0.9.75.dist-info}/entry_points.txt +0 -0
  430. {mage_ai-0.9.73.dist-info → mage_ai-0.9.75.dist-info}/top_level.txt +0 -0
mage_ai/ai/constants.py CHANGED
@@ -1,7 +1,7 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
 
4
- class LLMUseCase(str, Enum):
4
+ class LLMUseCase(StrEnum):
5
5
  GENERATE_DOC_FOR_BLOCK = 'generate_doc_for_block'
6
6
  GENERATE_DOC_FOR_PIPELINE = 'generate_doc_for_pipeline'
7
7
  GENERATE_BLOCK_WITH_DESCRIPTION = 'generate_block_with_description'
@@ -30,6 +30,7 @@ from mage_ai.data_preparation.templates.template import (
30
30
  from mage_ai.io.base import DataSource
31
31
  from mage_ai.orchestration.ai.config import AIConfig
32
32
  from mage_ai.server.logger import Logger
33
+ from mage_ai.settings import ENABLE_HUGGING_FACE, ENABLE_OPEN_AI
33
34
 
34
35
  logger = Logger().new_server_logger(__name__)
35
36
 
@@ -155,16 +156,18 @@ TEMPLATE_CLASSIFICATION_FUNCTION = [
155
156
  "type": "string",
156
157
  "description": "Programming language of the code block. "
157
158
  f"Default value is {BlockLanguage.__name__}__python.",
158
- "enum": [f"{BlockLanguage.__name__}__{type.name.lower()}"
159
- for type in BlockLanguage]
159
+ "enum": [
160
+ f"{BlockLanguage.__name__}__{type.name.lower()}"
161
+ for type in BlockLanguage]
160
162
  },
161
163
  PipelineType.__name__: {
162
164
  "type": "string",
163
165
  "description": "Type of pipeline to build. Default value is "
164
166
  f"{PipelineType.__name__}__python if pipeline type "
165
167
  "is not mentioned in the description.",
166
- "enum": [f"{PipelineType.__name__}__{type.name.lower()}"
167
- for type in PipelineType]
168
+ "enum": [
169
+ f"{PipelineType.__name__}__{type.name.lower()}"
170
+ for type in PipelineType]
168
171
  },
169
172
  ActionType.__name__: {
170
173
  "type": "string",
@@ -190,12 +193,13 @@ TEMPLATE_CLASSIFICATION_FUNCTION = [
190
193
  class LLMPipelineWizard:
191
194
  def __init__(self):
192
195
  ai_config = AIConfig.load(config=get_repo_config().ai_config)
193
- if ai_config.mode == AIMode.OPEN_AI:
196
+ if ENABLE_OPEN_AI and ai_config.mode == AIMode.OPEN_AI:
194
197
  self.client = OpenAIClient(ai_config.open_ai_config)
195
- elif ai_config.mode == AIMode.HUGGING_FACE:
198
+ elif ENABLE_HUGGING_FACE and ai_config.mode == AIMode.HUGGING_FACE:
196
199
  self.client = HuggingFaceClient(ai_config.hugging_face_config)
197
200
  else:
198
- raise Exception('AI Mode is not available.')
201
+ raise Exception('AI Mode is not available. ENABLE_OPEN_AI: '
202
+ f'{ENABLE_OPEN_AI}, ENABLE_HUGGING_FACE: {ENABLE_HUGGING_FACE}')
199
203
 
200
204
  async def __async_llm_call(
201
205
  self,
@@ -42,16 +42,18 @@ tools = [
42
42
  "type": "string",
43
43
  "description": "Programming language of the code block. "
44
44
  f"Default value is {BlockLanguage.__name__}__python.",
45
- "enum": [f"{BlockLanguage.__name__}__{type.name.lower()}"
46
- for type in BlockLanguage]
45
+ "enum": [
46
+ f"{BlockLanguage.__name__}__{type.name.lower()}"
47
+ for type in BlockLanguage]
47
48
  },
48
49
  PipelineType.__name__: {
49
50
  "type": "string",
50
51
  "description": "Type of pipeline to build. Default value is "
51
52
  f"{PipelineType.__name__}__python if pipeline type "
52
53
  "is not mentioned in the description.",
53
- "enum": [f"{PipelineType.__name__}__{type.name.lower()}"
54
- for type in PipelineType]
54
+ "enum": [
55
+ f"{PipelineType.__name__}__{type.name.lower()}"
56
+ for type in PipelineType]
55
57
  },
56
58
  ActionType.__name__: {
57
59
  "type": "string",
@@ -85,7 +87,7 @@ class OpenAIClient(AIClient):
85
87
  open_ai_config.openai_api_key or os.getenv('OPENAI_API_KEY')
86
88
  openai.api_key = openai_api_key
87
89
  self.llm = OpenAI(openai_api_key=openai_api_key, temperature=0)
88
- self.openai_client = OpenAILib()
90
+ self.openai_client = OpenAILib(api_key=openai_api_key)
89
91
 
90
92
  def __chat_completion_request(self, messages):
91
93
  try:
@@ -187,7 +189,18 @@ class OpenAIClient(AIClient):
187
189
  self,
188
190
  block_description: str):
189
191
  messages = [{'role': 'user', 'content': block_description}]
192
+ # Fetch response form API call with retries
193
+ # retry __chat_completion_request twice.
194
+ # If it still returns error, raise error in find_block_params.
195
+ # If not error anymore, proceed with rest of the code change.
196
+ max_retries = 2
197
+ attempt = 0
190
198
  response = self.__chat_completion_request(messages)
199
+ while attempt <= max_retries and isinstance(response, Exception):
200
+ response = self.__chat_completion_request(messages)
201
+ attempt += 1
202
+ if isinstance(response, Exception):
203
+ raise Exception("Error in __chat_completion_request after retries: " + str(response))
191
204
  arguments = response.choices[0].message.tool_calls[0].function.arguments
192
205
  if arguments:
193
206
  function_args = json.loads(arguments)
mage_ai/api/constants.py CHANGED
@@ -1,20 +1,19 @@
1
- from enum import Enum
2
-
3
1
  from mage_ai.api.operations.constants import OperationType
4
2
  from mage_ai.orchestration.db.models.oauth import Permission
3
+ from mage_ai.shared.enum import StrEnum
5
4
 
6
5
 
7
- class AttributeOperationType(str, Enum):
6
+ class AttributeOperationType(StrEnum):
8
7
  QUERY = 'query'
9
8
  READ = 'read'
10
9
  WRITE = 'write'
11
10
 
12
11
 
13
- class AttributeType(str, Enum):
12
+ class AttributeType(StrEnum):
14
13
  ALL = '__*MAGE*__'
15
14
 
16
15
 
17
- class AuthorizeStatusType(str, Enum):
16
+ class AuthorizeStatusType(StrEnum):
18
17
  ALL = 'all'
19
18
  FAILED = 'failed'
20
19
  SUCCEEDED = 'succeeded'
@@ -1,4 +1,4 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
 
4
4
  class OauthScope():
@@ -18,7 +18,7 @@ class OauthScope():
18
18
  TOKEN_SCOPES = []
19
19
 
20
20
 
21
- class OauthScopeType(str, Enum):
21
+ class OauthScopeType(StrEnum):
22
22
  CLIENT_ALL = 'all'
23
23
  CLIENT_INTERNAL = 'internal'
24
24
  CLIENT_PRIVATE = 'private'
@@ -1,4 +1,4 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
  ALL = 'all'
4
4
  CREATE = 'create'
@@ -20,7 +20,7 @@ META_KEY_ORDER_BY = '_order_by[]'
20
20
  COOKIE_PREFIX = '__COOKIE__'
21
21
 
22
22
 
23
- class OperationType(str, Enum):
23
+ class OperationType(StrEnum):
24
24
  ALL = ALL
25
25
  CREATE = CREATE
26
26
  DELETE = DELETE
@@ -1,3 +1,5 @@
1
+ from typing import Any, Union
2
+
1
3
  from mage_ai.api.presenters.BasePresenter import BasePresenter
2
4
  from mage_ai.data_preparation.shared.secrets import get_secret_value
3
5
  from mage_ai.settings.repo import get_repo_path
@@ -16,6 +18,7 @@ class SyncPresenter(BasePresenter):
16
18
  'ssh_private_key_secret_name',
17
19
  'ssh_public_key',
18
20
  'ssh_public_key_secret_name',
21
+ 'sync_on_executor_start',
19
22
  'sync_on_pipeline_run',
20
23
  'sync_on_start',
21
24
  'sync_submodules',
@@ -24,7 +27,7 @@ class SyncPresenter(BasePresenter):
24
27
  'username',
25
28
  ]
26
29
 
27
- def present(self, **kwargs):
30
+ async def prepare_present(self, **kwargs) -> Union[Any, None]:
28
31
  data = self.model
29
32
 
30
33
  def filter_invalid_secret_values(data):
@@ -1,8 +1,8 @@
1
- from enum import Enum
2
1
  from typing import Optional
3
2
 
4
3
  from mage_ai.settings import get_settings_value
5
4
  from mage_ai.settings.keys import GHE_HOSTNAME
5
+ from mage_ai.shared.enum import StrEnum
6
6
 
7
7
  ACTIVE_DIRECTORY_CLIENT_ID = '51aec820-9d49-40a9-b046-17c1f28f620d'
8
8
 
@@ -10,7 +10,7 @@ GITHUB_CLIENT_ID = '8577f13ddc81e2848b07'
10
10
  GITHUB_STATE = '1337'
11
11
 
12
12
 
13
- class ProviderName(str, Enum):
13
+ class ProviderName(StrEnum):
14
14
  ACTIVE_DIRECTORY = 'active_directory'
15
15
  AZURE_DEVOPS = 'azure_devops'
16
16
  BITBUCKET = 'bitbucket'
@@ -1,8 +1,8 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
  MAGE_OPERATION_HISTORY_DIRECTORY_DEFAULT = '.operation_history'
4
4
  MAGE_OPERATION_HISTORY_DIRECTORY_ENVIRONMENT_VARIABLE_NAME = 'MAGE_OPERATION_HISTORY_DIRECTORY'
5
5
 
6
6
 
7
- class ResourceType(str, Enum):
7
+ class ResourceType(StrEnum):
8
8
  PIPELINE = 'pipeline'
@@ -1,10 +1,9 @@
1
- from enum import Enum
2
-
3
1
  from mage_ai.api.operations.constants import OperationType
4
2
  from mage_ai.data_preparation.models.constants import BlockType, PipelineType
3
+ from mage_ai.shared.enum import IntEnum, StrEnum
5
4
 
6
5
 
7
- class EntityName(str, Enum):
6
+ class EntityName(StrEnum):
8
7
  ALL = 'ALL'
9
8
  ALL_EXCEPT_RESERVED = 'ALL_EXCEPT_RESERVED'
10
9
  AutocompleteItem = 'AutocompleteItem'
@@ -109,7 +108,7 @@ RESERVED_ENTITY_NAMES = [
109
108
  ]
110
109
 
111
110
 
112
- class BaseEntityType(str, Enum):
111
+ class BaseEntityType(StrEnum):
113
112
  pass
114
113
 
115
114
 
@@ -137,7 +136,7 @@ class PipelineEntityType(BaseEntityType):
137
136
  STREAMING = PipelineType.STREAMING.value
138
137
 
139
138
 
140
- class PermissionAccess(int, Enum):
139
+ class PermissionAccess(IntEnum):
141
140
  OWNER = 1
142
141
  ADMIN = 2
143
142
  # Editor: list, detail, create, update, delete
@@ -177,7 +176,7 @@ class PermissionAccess(int, Enum):
177
176
  DISABLE_UNLESS_CONDITIONS = 1073741824
178
177
 
179
178
 
180
- class PermissionCondition(str, Enum):
179
+ class PermissionCondition(StrEnum):
181
180
  HAS_NOTEBOOK_EDIT_ACCESS = 'HAS_NOTEBOOK_EDIT_ACCESS'
182
181
  HAS_PIPELINE_EDIT_ACCESS = 'HAS_PIPELINE_EDIT_ACCESS'
183
182
  USER_OWNS_ENTITY = 'USER_OWNS_ENTITY'
@@ -1,4 +1,4 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
  CACHE_KEY_BLOCKS_TO_PIPELINE_MAPPING = 'blocks_to_pipeline_mapping'
4
4
  CACHE_KEY_BLOCK_ACTION_OBJECTS_MAPPING = 'block_action_objects_mapping'
@@ -11,5 +11,5 @@ MAGE_CACHE_DIRECTORY_DEFAULT = '.cache'
11
11
  MAGE_CACHE_DIRECTORY_ENVIRONMENT_VARIABLE_NAME = 'MAGE_CACHE_DIRECTORY'
12
12
 
13
13
 
14
- class CacheItemType(str, Enum):
14
+ class CacheItemType(StrEnum):
15
15
  DBT = 'dbt'
@@ -1,10 +1,9 @@
1
- from enum import Enum
2
-
3
1
  from mage_ai.data_preparation.models.constants import (
4
2
  BLOCK_TYPE_DIRECTORY_NAME,
5
3
  PIPELINES_FOLDER,
6
4
  BlockType,
7
5
  )
6
+ from mage_ai.shared.enum import StrEnum
8
7
  from mage_ai.shared.hash import merge_dict
9
8
 
10
9
  IGNORE_DIRECTORY_NAMES = merge_dict(
@@ -19,7 +18,7 @@ PROJECT_FILENAME = 'dbt_project.yml'
19
18
  PROJECT_FILENAMES = [PROJECT_FILENAME, 'dbt_project.yaml']
20
19
 
21
20
 
22
- class FileType(str, Enum):
21
+ class FileType(StrEnum):
23
22
  MODEL = 'model'
24
23
  PROFILES = 'profiles'
25
24
  PROJECT = 'project'
@@ -1,4 +1,4 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
  # ECS environment variables
4
4
  ECS_CLUSTER_NAME = 'ECS_CLUSTER_NAME'
@@ -29,7 +29,7 @@ GCP_BACKEND_CONFIG_ANNOTATION = 'cloud.google.com/backend-config'
29
29
  NODE_PORT_SERVICE_TYPE = 'NodePort'
30
30
 
31
31
 
32
- class ClusterType(str, Enum):
32
+ class ClusterType(StrEnum):
33
33
  EMR = 'emr'
34
34
  ECS = 'ecs'
35
35
  CLOUD_RUN = 'cloud_run'
@@ -43,7 +43,7 @@ from mage_ai.services.k8s.constants import (
43
43
  )
44
44
  from mage_ai.settings import MAGE_SETTINGS_ENVIRONMENT_VARIABLES
45
45
  from mage_ai.shared.array import find
46
- from mage_ai.shared.hash import safe_dig
46
+ from mage_ai.shared.hash import merge_dict, safe_dig
47
47
 
48
48
 
49
49
  class WorkloadManager:
@@ -391,6 +391,7 @@ class WorkloadManager:
391
391
  )
392
392
 
393
393
  pod_spec = self.pod_config.spec.to_dict() if self.pod_config else dict()
394
+ pod_labels = self.pod_config.metadata.labels or dict()
394
395
  stateful_set_template_spec = dict(
395
396
  imagePullSecrets=pod_spec.get('image_pull_secrets'),
396
397
  initContainers=init_containers,
@@ -410,7 +411,7 @@ class WorkloadManager:
410
411
  'replicas': 1,
411
412
  'minReadySeconds': 10,
412
413
  'template': {
413
- 'metadata': {'labels': {'app': name}},
414
+ 'metadata': merge_dict(pod_labels, {'labels': {'app': name}}),
414
415
  'spec': stateful_set_template_spec,
415
416
  },
416
417
  'volumeClaimTemplates': [
@@ -1,14 +1,14 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
  SETTINGS_FILENAME = '.command_center.yaml'
4
4
 
5
5
 
6
- class ItemTagEnum(str, Enum):
6
+ class ItemTagEnum(StrEnum):
7
7
  PINNED = 'pinned'
8
8
  RECENT = 'recent'
9
9
 
10
10
 
11
- class ItemType(str, Enum):
11
+ class ItemType(StrEnum):
12
12
  ACTION = 'action' # Cast spell
13
13
  CREATE = 'create' # Conjure
14
14
  DELETE = 'delete'
@@ -22,7 +22,7 @@ class ItemType(str, Enum):
22
22
  UPDATE = 'update'
23
23
 
24
24
 
25
- class ObjectType(str, Enum):
25
+ class ObjectType(StrEnum):
26
26
  APPLICATION = 'application'
27
27
  APPLICATION_EXPANSION = 'application_expansion'
28
28
  AUTHENTICATION = 'authentication'
@@ -42,11 +42,11 @@ class ObjectType(str, Enum):
42
42
  VERSION_CONTROL_FILE = 'version_control_file'
43
43
 
44
44
 
45
- class ModeType(str, Enum):
45
+ class ModeType(StrEnum):
46
46
  VERSION_CONTROL = 'version_control'
47
47
 
48
48
 
49
- class FileExtension(str, Enum):
49
+ class FileExtension(StrEnum):
50
50
  CSV = 'csv'
51
51
  JSON = 'json'
52
52
  MD = 'md'
@@ -59,7 +59,7 @@ class FileExtension(str, Enum):
59
59
  YML = 'yml'
60
60
 
61
61
 
62
- class ButtonActionType(str, Enum):
62
+ class ButtonActionType(StrEnum):
63
63
  ADD_APPLICATION = 'add_application'
64
64
  CLOSE_APPLICATION = 'close_application' # Go back out of the current application.
65
65
  CLOSE_COMMAND_CENTER = 'close_command_center'
@@ -70,7 +70,7 @@ class ButtonActionType(str, Enum):
70
70
  SELECT_ITEM_FROM_REQUEST = 'select_item_from_request'
71
71
 
72
72
 
73
- class InteractionType(str, Enum):
73
+ class InteractionType(StrEnum):
74
74
  CLICK = 'click'
75
75
  CLOSE_APPLICATION = ButtonActionType.CLOSE_APPLICATION.value
76
76
  CLOSE_COMMAND_CENTER = ButtonActionType.CLOSE_COMMAND_CENTER.value
@@ -81,7 +81,7 @@ class InteractionType(str, Enum):
81
81
  SELECT_ITEM = 'select_item'
82
82
 
83
83
 
84
- class ApplicationType(str, Enum):
84
+ class ApplicationType(StrEnum):
85
85
  DETAIL = 'detail'
86
86
  DETAIL_LIST = 'detail_list'
87
87
  EXPANSION = 'expansion'
@@ -89,22 +89,22 @@ class ApplicationType(str, Enum):
89
89
  LIST = 'list'
90
90
 
91
91
 
92
- class ValidationType(str, Enum):
92
+ class ValidationType(StrEnum):
93
93
  CONFIRMATION = 'confirmation'
94
94
  CUSTOM_VALIDATION_PARSERS = 'custom_validation_parsers'
95
95
 
96
96
 
97
- class RenderLocationType(str, Enum):
97
+ class RenderLocationType(StrEnum):
98
98
  ITEMS_CONTAINER_AFTER = 'items_container_after'
99
99
 
100
100
 
101
- class ApplicationExpansionUUID(str, Enum):
101
+ class ApplicationExpansionUUID(StrEnum):
102
102
  ArcaneLibrary = 'ArcaneLibrary'
103
103
  PortalTerminal = 'PortalTerminal'
104
104
  VersionControlFileDiffs = 'VersionControlFileDiffs'
105
105
 
106
106
 
107
- class ApplicationExpansionStatus(str, Enum):
107
+ class ApplicationExpansionStatus(StrEnum):
108
108
  ACTIVE = 'ACTIVE'
109
109
  CLOSED = 'CLOSED'
110
110
  INACTIVE = 'INACTIVE'
@@ -1,7 +1,7 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
 
4
- class ColumnType(str, Enum):
4
+ class ColumnType(StrEnum):
5
5
  CATEGORY = 'category'
6
6
  CATEGORY_HIGH_CARDINALITY = 'category_high_cardinality'
7
7
  DATETIME = 'datetime'
@@ -1,3 +1,8 @@
1
+ import logging
2
+
3
+ import numpy as np
4
+ import pandas as pd
5
+
1
6
  from mage_ai.data_cleaner.column_types.column_type_detector import find_syntax_errors
2
7
  from mage_ai.data_cleaner.column_types.constants import NUMBER_TYPES, ColumnType
3
8
  from mage_ai.data_cleaner.estimators.outlier_removal import OutlierRemover
@@ -15,11 +20,10 @@ from mage_ai.data_cleaner.transformer_actions.helpers import (
15
20
  get_time_window_str,
16
21
  )
17
22
  from mage_ai.data_cleaner.transformer_actions.udf.base import execute_udf
18
- from mage_ai.data_cleaner.transformer_actions.utils import clean_column_name, generate_string_cols
19
- import logging
20
- import pandas as pd
21
- import numpy as np
22
-
23
+ from mage_ai.data_cleaner.transformer_actions.utils import (
24
+ clean_column_name,
25
+ generate_string_cols,
26
+ )
23
27
 
24
28
  logger = logging.getLogger(__name__)
25
29
 
@@ -115,7 +119,8 @@ def impute(df, action, **kwargs):
115
119
  mode = df[column].mode().iloc[0]
116
120
  if dtype == ColumnType.LIST:
117
121
  df[column] = df[column].apply(
118
- lambda element: element if element not in [None, np.nan] else mode
122
+ lambda element, mode=mode: element if element not in [
123
+ None, np.nan] else mode
119
124
  )
120
125
  else:
121
126
  df[columns] = df[columns].fillna(mode)
@@ -180,7 +185,6 @@ def reformat(df, action, **kwargs):
180
185
  columns = action['action_arguments']
181
186
  options = action['action_options']
182
187
  reformat_action = options['reformat']
183
- df.loc[:, columns] = df[columns].replace(r'^\s*$', np.nan, regex=True)
184
188
 
185
189
  if reformat_action == 'caps_standardization':
186
190
  capitalization = options['capitalization']
@@ -189,6 +193,8 @@ def reformat(df, action, **kwargs):
189
193
  df.loc[:, column] = df[columns][column].str.upper()
190
194
  else:
191
195
  df.loc[:, column] = df[columns][column].str.lower()
196
+ # Convert empty strings to NaN for this action
197
+ df.loc[:, columns] = df[columns].replace(r'^\s*$', np.nan, regex=True)
192
198
  elif reformat_action == 'currency_to_num':
193
199
  for column in generate_string_cols(df, columns):
194
200
  clean_col = df[column].replace(CURRENCY_SYMBOLS, '', regex=True)
@@ -215,6 +221,12 @@ def reformat(df, action, **kwargs):
215
221
  df.loc[:, column] = pd.to_datetime(
216
222
  clean_col, infer_datetime_format=True, errors='coerce'
217
223
  )
224
+ elif reformat_action == 'trim':
225
+ for column in columns:
226
+ df[column] = df[column].str.strip()
227
+ else:
228
+ # Apply NaN replacement only for other actions
229
+ df.loc[:, columns] = df[columns].replace(r'^\s*$', np.nan, regex=True)
218
230
 
219
231
  return df
220
232
 
@@ -1,9 +1,10 @@
1
- from mage_ai.data_cleaner.column_types.constants import ColumnType
2
- from enum import Enum
3
- import pandas as pd
4
- import numpy as np
5
1
  import re
6
2
 
3
+ import numpy as np
4
+ import pandas as pd
5
+
6
+ from mage_ai.data_cleaner.column_types.constants import ColumnType
7
+ from mage_ai.shared.enum import StrEnum
7
8
 
8
9
  CONSTANT_IMPUTATION_DEFAULTS = {
9
10
  ColumnType.CATEGORY: 'missing',
@@ -34,7 +35,7 @@ INVALID_VALUE_PLACEHOLDERS = {
34
35
  }
35
36
 
36
37
 
37
- class ActionType(str, Enum):
38
+ class ActionType(StrEnum):
38
39
  ADD = 'add'
39
40
  AVERAGE = 'average'
40
41
  CLEAN_COLUMN_NAME = 'clean_column_name'
@@ -73,18 +74,18 @@ class ActionType(str, Enum):
73
74
  STANDARDIZE = 'standardize'
74
75
 
75
76
 
76
- class Axis(str, Enum):
77
+ class Axis(StrEnum):
77
78
  COLUMN = 'column'
78
79
  ROW = 'row'
79
80
 
80
81
 
81
- class VariableType(str, Enum):
82
+ class VariableType(StrEnum):
82
83
  FEATURE = 'feature'
83
84
  FEATURE_SET = 'feature_set'
84
85
  FEATURE_SET_VERSION = 'feature_set_version'
85
86
 
86
87
 
87
- class Operator(str, Enum):
88
+ class Operator(StrEnum):
88
89
  CONTAINS = 'contains'
89
90
  NOT_CONTAINS = 'not contains'
90
91
  EQUALS = '=='
@@ -95,7 +96,7 @@ class Operator(str, Enum):
95
96
  LESS_THAN_OR_EQUALS = '<='
96
97
 
97
98
 
98
- class ImputationStrategy(str, Enum):
99
+ class ImputationStrategy(StrEnum):
99
100
  AVERAGE = 'average'
100
101
  COLUMN = 'column'
101
102
  CONSTANT = 'constant'
@@ -1,4 +1,5 @@
1
1
  DESTINATIONS = [
2
+ dict(name='Airtable'),
2
3
  dict(name='Amazon S3'),
3
4
  dict(name='BigQuery'),
4
5
  dict(name='Clickhouse'),
@@ -17,6 +17,7 @@ SQL_SOURCES = [
17
17
  SQL_SOURCES_MAPPING = index_by(get_uuid, SQL_SOURCES)
18
18
 
19
19
  SOURCES = sorted([
20
+ dict(name='Airtable'),
20
21
  dict(name='Amazon S3'),
21
22
  dict(name='Amplitude'),
22
23
  dict(name='Api'),
@@ -33,6 +34,7 @@ SOURCES = sorted([
33
34
  dict(name='GitHub'),
34
35
  dict(name='Google Ads'),
35
36
  dict(name='Google Analytics'),
37
+ dict(name='Google Cloud Storage'),
36
38
  dict(name='Google Search Console'),
37
39
  dict(name='Google Sheets'),
38
40
  dict(name='HubSpot'),
@@ -172,7 +172,10 @@ def get_access_token(git_config, repo_path: str) -> str:
172
172
  def build_authenticated_remote_url(remote_url: str, username: str, token: str) -> str:
173
173
  # https://[username]:[token]@github.com/[remote_url]
174
174
  url = urlsplit(remote_url)
175
- url = url._replace(netloc=f'{username}:{token}@{url.netloc}')
175
+ if remote_url.startswith('https://bitbucket.org/'):
176
+ url = url._replace(netloc=f'x-token-auth:{token}@{url.netloc}')
177
+ else:
178
+ url = url._replace(netloc=f'{username}:{token}@{url.netloc}')
176
179
  return urlunsplit(url)
177
180
 
178
181
 
@@ -1,12 +1,12 @@
1
1
  from dataclasses import dataclass, field
2
- from enum import Enum
3
2
  from typing import Dict
4
3
 
5
4
  from mage_ai.shared.config import BaseConfig
5
+ from mage_ai.shared.enum import StrEnum
6
6
  from mage_ai.shared.logger import LoggingLevel
7
7
 
8
8
 
9
- class LoggerType(str, Enum):
9
+ class LoggerType(StrEnum):
10
10
  DEFAULT = 'file'
11
11
  S3 = 's3'
12
12
  GCS = 'gcs'
@@ -61,9 +61,9 @@ class DictLogger():
61
61
  )
62
62
 
63
63
  if error:
64
- data['error'] = traceback.format_exc(),
65
- data['error_stack'] = traceback.format_stack(),
66
- data['error_stacktrace'] = str(error),
64
+ data['error'] = traceback.format_exc()
65
+ data['error_stack'] = traceback.format_stack()
66
+ data['error_stacktrace'] = str(error)
67
67
 
68
68
  msg = simplejson.dumps(
69
69
  merge_dict(self.logging_tags or dict(), merge_dict(kwargs, data)),
@@ -1006,6 +1006,12 @@ class Block(
1006
1006
 
1007
1007
  return extract_full_table_name(self.content)
1008
1008
 
1009
+ def get_typed_content(
1010
+ self,
1011
+ content: str,
1012
+ ) -> str:
1013
+ return f'@{self.type}\n{content}'
1014
+
1009
1015
  @classmethod
1010
1016
  def after_create(cls, block: 'Block', **kwargs) -> None:
1011
1017
  widget = kwargs.get('widget')
@@ -1,4 +1,4 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
  BLOCK_CATALOG_FILENAME = 'catalog.json'
4
4
  REPLICATION_METHOD_INCREMENTAL = 'INCREMENTAL'
@@ -81,6 +81,6 @@ MAX_QUERY_STRING_SIZE = 10 * MB_1
81
81
  VARIABLE_BOOKMARK_VALUES_KEY = '__bookmark_values__'
82
82
 
83
83
 
84
- class IngestMode(str, Enum):
84
+ class IngestMode(StrEnum):
85
85
  DISK = 'disk'
86
86
  MEMORY = 'memory'