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
@@ -37,15 +37,13 @@ ENV_VAR_TO_CONFIG_KEY = {
37
37
  GIT_SYNC_SUBMODULES: 'sync_submodules',
38
38
  }
39
39
 
40
- BOOLEAN_ENV_VARS = set(
41
- [
42
- GIT_SYNC_ON_PIPELINE_RUN,
43
- GIT_SYNC_ON_START,
44
- GIT_SYNC_ON_EXECUTOR_START,
45
- GIT_SYNC_SUBMODULES,
46
- GIT_ENABLE_GIT_INTEGRATION,
47
- ]
48
- )
40
+ BOOLEAN_ENV_VARS = set([
41
+ GIT_SYNC_ON_PIPELINE_RUN,
42
+ GIT_SYNC_ON_START,
43
+ GIT_SYNC_ON_EXECUTOR_START,
44
+ GIT_SYNC_SUBMODULES,
45
+ GIT_ENABLE_GIT_INTEGRATION,
46
+ ])
49
47
 
50
48
 
51
49
  def get_value_for_sync_config(env_var, value) -> bool:
@@ -67,10 +65,7 @@ def build_sync_config(project_sync_config: Dict) -> Dict:
67
65
  }
68
66
 
69
67
  # Read settings from settings backend
70
- config_from_settings = {
71
- k: get_settings_value(k)
72
- for k in ENV_VAR_TO_CONFIG_KEY.keys()
73
- }
68
+ config_from_settings = {k: get_settings_value(k) for k in ENV_VAR_TO_CONFIG_KEY.keys()}
74
69
 
75
70
  if any([v is not None for v in config_from_settings.values()]):
76
71
  # Map sync config keys to settings values
@@ -153,9 +148,7 @@ class Preferences:
153
148
  def get_preferences(repo_path=None, user: User = None) -> Preferences:
154
149
  default_preferences = Preferences(repo_path=repo_path)
155
150
  if user:
156
- if user.preferences is None and os.path.exists(
157
- default_preferences.preferences_file_path
158
- ):
151
+ if user.preferences is None and os.path.exists(default_preferences.preferences_file_path):
159
152
  return default_preferences
160
153
  else:
161
154
  return Preferences(user=user, repo_path=repo_path)
@@ -3,7 +3,6 @@ import logging
3
3
  import os
4
4
  import traceback
5
5
  import uuid
6
- from enum import Enum
7
6
  from typing import Dict, Optional
8
7
  from warnings import warn
9
8
 
@@ -25,6 +24,7 @@ from mage_ai.settings.repo import get_repo_path as get_repo_path_new
25
24
  from mage_ai.settings.repo import get_variables_dir
26
25
  from mage_ai.settings.repo import set_repo_path as set_repo_path_new
27
26
  from mage_ai.settings.utils import base_repo_path
27
+ from mage_ai.shared.enum import StrEnum
28
28
  from mage_ai.shared.environments import is_debug
29
29
  from mage_ai.shared.yaml import load_yaml, trim_strings
30
30
 
@@ -36,7 +36,7 @@ yml.indent(mapping=2, sequence=2, offset=0)
36
36
  logger = logging.getLogger(__name__)
37
37
 
38
38
 
39
- class ProjectType(str, Enum):
39
+ class ProjectType(StrEnum):
40
40
  MAIN = 'main'
41
41
  SUB = 'sub'
42
42
  STANDALONE = 'standalone'
@@ -1,16 +1,16 @@
1
1
  import inspect
2
2
  import os
3
3
  from dataclasses import dataclass
4
- from enum import Enum
5
4
 
6
5
  from mage_ai.shared.config import BaseConfig
6
+ from mage_ai.shared.enum import StrEnum
7
7
 
8
8
  GIT_ACCESS_TOKEN_SECRET_NAME = 'mage_git_access_token'
9
9
  GIT_SSH_PRIVATE_KEY_SECRET_NAME = 'mage_git_ssh_private_key_b64'
10
10
  GIT_SSH_PUBLIC_KEY_SECRET_NAME = 'mage_git_ssh_public_key_b64'
11
11
 
12
12
 
13
- class AuthType(str, Enum):
13
+ class AuthType(StrEnum):
14
14
  SSH = 'ssh'
15
15
  HTTPS = 'https'
16
16
  OAUTH = 'oauth'
@@ -2,6 +2,9 @@ connector_type: elasticsearch
2
2
  host: http://localhost
3
3
  index_name: elastic_index
4
4
  api_key: api_key_for_elastic_search
5
+ # # When using Data streams this must be set to create as they are Append-only indexes
6
+ # _op_type: None / index, create or update
7
+ # _source: None (Default '_doc') / Specify the source field
5
8
  # # Whether to verify SSL certificates to authenticate.
6
9
  # verify_certs: true
7
10
  # ca_cert: "certificate.cert"
@@ -1,5 +1,5 @@
1
1
  from mage_ai.streaming.sinks.base_python import BasePythonSink
2
- from typing import Callable
2
+ from typing import Callable, Dict, List
3
3
 
4
4
  if 'streaming_sink' not in globals():
5
5
  from mage_ai.data_preparation.decorators import streaming_sink
@@ -17,12 +17,18 @@ timeout: 5
17
17
 
18
18
  # Optional: TLS configuration
19
19
  use_tls: false
20
- # cafile: "path/to/ca.pem"
21
- # certfile: "path/to/client-cert.pem"
22
- # keyfile: "path/to/client-key.pem"
20
+
21
+ # Optional: SSL configuration
22
+ # ssl_config:
23
+ # cafile: "path/to/ca.pem"
24
+ # certfile: "path/to/client-cert.pem"
25
+ # keyfile: "path/to/client-key.pem"
23
26
 
24
27
  # Optional: NKEY seed string
25
28
  # nkeys_seed_str: "SUAPAEYJQOQHJ4"
26
29
 
30
+ # Optional: user credentials
31
+ # user_credentials: "path/to/credentials.creds"
32
+
27
33
  # Optional: Consumer name for a durable consumer identifier, will use stream name if not provided
28
34
  consumer_name: "my_consumer"
@@ -1,4 +1,4 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import IntEnum
2
2
 
3
3
  """
4
4
  - **400 Bad Request**: The server could not understand the request due to invalid syntax.
@@ -13,7 +13,7 @@ from enum import Enum
13
13
  """
14
14
 
15
15
 
16
- class ErrorCode(int, Enum):
16
+ class ErrorCode(IntEnum):
17
17
  CODE_400 = 400
18
18
  CODE_401 = 401
19
19
  CODE_402 = 402
mage_ai/io/base.py CHANGED
@@ -1,12 +1,13 @@
1
1
  import os
2
2
  from abc import ABC, abstractmethod
3
- from enum import Enum
4
3
  from typing import IO, Any, Callable, Dict, Union
5
4
 
6
5
  import pandas as pd
6
+ import polars as pl
7
7
  from pandas import DataFrame
8
8
 
9
9
  from mage_ai.io.constants import SQL_RESERVED_WORDS
10
+ from mage_ai.shared.enum import StrEnum
10
11
  from mage_ai.shared.logger import VerbosePrintHandler
11
12
  from mage_ai.shared.models import BaseEnum
12
13
  from mage_ai.shared.utils import clean_name
@@ -14,7 +15,7 @@ from mage_ai.shared.utils import clean_name
14
15
  QUERY_ROW_LIMIT = 10_000_000
15
16
 
16
17
 
17
- class DataSource(str, Enum):
18
+ class DataSource(StrEnum):
18
19
  ALGOLIA = 'algolia'
19
20
  API = 'api'
20
21
  BIGQUERY = 'bigquery'
@@ -40,12 +41,32 @@ class DataSource(str, Enum):
40
41
  WEAVIATE = 'weaviate'
41
42
 
42
43
 
43
- class FileFormat(str, Enum):
44
+ class FileFormat(StrEnum):
44
45
  CSV = 'csv'
45
46
  JSON = 'json'
46
47
  PARQUET = 'parquet'
47
48
  HDF5 = 'hdf5'
48
49
  XML = 'xml'
50
+ EXCEL = 'excel'
51
+
52
+ @classmethod
53
+ def from_extension(cls, ext: str):
54
+ if ext == 'csv':
55
+ return cls.CSV
56
+ elif ext == 'json':
57
+ return cls.JSON
58
+ elif ext == 'parquet':
59
+ return cls.PARQUET
60
+ elif ext == 'hdf5':
61
+ return cls.HDF5
62
+ elif ext == 'xml':
63
+ return cls.XML
64
+ elif ext in ('xls', 'xlsx'):
65
+ return cls.EXCEL
66
+ else:
67
+ raise ValueError(
68
+ f'None file format found for this file extension: {ext}'
69
+ )
49
70
 
50
71
 
51
72
  class ExportWritePolicy(BaseEnum):
@@ -125,7 +146,9 @@ class BaseFile(BaseIO):
125
146
  pass
126
147
 
127
148
  def _get_file_format(self, filepath: Union[os.PathLike, str]) -> str:
128
- return os.path.splitext(os.path.basename(filepath))[-1][1:]
149
+ return FileFormat.from_extension(
150
+ os.path.splitext(os.path.basename(filepath))[-1][1:]
151
+ )
129
152
 
130
153
  def __get_reader(self, format: Union[FileFormat, str, None]) -> Callable:
131
154
  """
@@ -150,6 +173,8 @@ class BaseFile(BaseIO):
150
173
  return pd.read_hdf
151
174
  elif format == FileFormat.XML:
152
175
  return pd.read_xml
176
+ elif format == FileFormat.EXCEL:
177
+ return pd.read_excel
153
178
  else:
154
179
  raise ValueError(f"Invalid format '{format}' specified.")
155
180
 
@@ -190,7 +215,7 @@ class BaseFile(BaseIO):
190
215
 
191
216
  def _write(
192
217
  self,
193
- df: DataFrame,
218
+ df,
194
219
  format: Union[FileFormat, str, None],
195
220
  output: Union[IO, os.PathLike, str],
196
221
  **kwargs,
@@ -218,7 +243,7 @@ class BaseFile(BaseIO):
218
243
  raise ValueError('Cannot write HDF5 file to buffer of any type.')
219
244
  name = os.path.splitext(os.path.basename(output))[0]
220
245
  kwargs.setdefault('key', name)
221
- elif format == FileFormat.PARQUET:
246
+ elif format == FileFormat.PARQUET and isinstance(df, DataFrame):
222
247
  if 'coerce_timestamps' not in kwargs:
223
248
  kwargs['coerce_timestamps'] = 'ms'
224
249
  kwargs['allow_truncated_timestamps'] = True
@@ -226,7 +251,7 @@ class BaseFile(BaseIO):
226
251
 
227
252
  def __get_writer(
228
253
  self,
229
- df: DataFrame,
254
+ df,
230
255
  format: Union[FileFormat, str, None],
231
256
  ) -> Callable:
232
257
  """
@@ -239,15 +264,31 @@ class BaseFile(BaseIO):
239
264
  Returns:
240
265
  Callable: File writer method
241
266
  """
242
- if format == FileFormat.CSV:
243
- return df.to_csv
244
- elif format == FileFormat.JSON:
245
- return df.to_json
246
- elif format == FileFormat.HDF5:
247
- return df.to_hdf
248
- elif format == FileFormat.XML:
249
- return df.to_xml
250
- return df.to_parquet
267
+ if isinstance(df, pl.DataFrame): # polars DataFrame
268
+ if format == FileFormat.CSV:
269
+ return df.write_csv
270
+ elif format == FileFormat.JSON:
271
+ return df.write_json
272
+ elif format == FileFormat.HDF5:
273
+ return df.write_hdf5
274
+ elif format == FileFormat.XML:
275
+ return df.write_xml
276
+ elif format == FileFormat.EXCEL:
277
+ return df.write_excel
278
+ return df.write_parquet
279
+
280
+ elif isinstance(df, DataFrame): # pandas DataFrame
281
+ if format == FileFormat.CSV:
282
+ return df.to_csv
283
+ elif format == FileFormat.JSON:
284
+ return df.to_json
285
+ elif format == FileFormat.HDF5:
286
+ return df.to_hdf
287
+ elif format == FileFormat.XML:
288
+ return df.to_xml
289
+ elif format == FileFormat.EXCEL:
290
+ return df.to_excel
291
+ return df.to_parquet
251
292
 
252
293
  def __del__(self):
253
294
  if self.verbose and self.printer.exists_previous_message:
mage_ai/io/config.py CHANGED
@@ -1,6 +1,5 @@
1
1
  import os
2
2
  from abc import ABC, abstractmethod
3
- from enum import Enum
4
3
  from pathlib import Path
5
4
  from typing import Any, Dict, Union
6
5
 
@@ -9,9 +8,10 @@ from jinja2 import Template
9
8
 
10
9
  from mage_ai.data_preparation.shared.utils import get_template_vars
11
10
  from mage_ai.settings.repo import get_repo_path
11
+ from mage_ai.shared.enum import StrEnum
12
12
 
13
13
 
14
- class ConfigKey(str, Enum):
14
+ class ConfigKey(StrEnum):
15
15
  """
16
16
  List of configuration settings for use with data IO clients.
17
17
  """
@@ -333,7 +333,7 @@ class EnvironmentVariableLoader(BaseConfigLoader):
333
333
  return os.getenv(env_var)
334
334
 
335
335
 
336
- class VerboseConfigKey(str, Enum):
336
+ class VerboseConfigKey(StrEnum):
337
337
  """
338
338
  Config key headers for the verbose configuration file format.
339
339
  """
@@ -1,9 +1,9 @@
1
- from enum import Enum
2
1
  from typing import Callable, Dict, List, Mapping
3
2
 
4
3
  from pandas import DataFrame, Series
5
4
  from pandas.api.types import infer_dtype
6
5
 
6
+ from mage_ai.shared.enum import StrEnum
7
7
  from mage_ai.shared.utils import clean_name
8
8
 
9
9
  """
@@ -19,7 +19,7 @@ class BadConversionError(Exception):
19
19
  pass
20
20
 
21
21
 
22
- class PandasTypes(str, Enum):
22
+ class PandasTypes(StrEnum):
23
23
  """
24
24
  Internal datatypes defined by the pandas Public API
25
25
  """
@@ -1,6 +1,7 @@
1
1
  from io import BytesIO
2
2
  from typing import Union
3
3
 
4
+ import polars as pl
4
5
  from google.cloud import storage
5
6
  from google.oauth2 import service_account
6
7
  from pandas import DataFrame
@@ -103,7 +104,7 @@ class GoogleCloudStorage(BaseFile):
103
104
 
104
105
  def export(
105
106
  self,
106
- data: Union[DataFrame, str],
107
+ data: Union[DataFrame, pl.DataFrame, str],
107
108
  bucket_name: str,
108
109
  object_key: str,
109
110
  format: Union[FileFormat, str, None] = None,
@@ -127,7 +128,7 @@ class GoogleCloudStorage(BaseFile):
127
128
  ):
128
129
  bucket = self.client.get_bucket(bucket_name)
129
130
  blob = bucket.blob(object_key)
130
- if isinstance(data, DataFrame):
131
+ if isinstance(data, DataFrame) or isinstance(data, pl.DataFrame):
131
132
  buffer = BytesIO()
132
133
  self._write(data, format, buffer, **kwargs)
133
134
  buffer.seek(0)
mage_ai/io/io_config.py CHANGED
@@ -1,12 +1,13 @@
1
1
  import os
2
- from enum import Enum
3
2
  from pathlib import Path
4
3
  from typing import Any, Mapping, Optional, Union
5
4
 
6
5
  import yaml
7
6
 
7
+ from mage_ai.shared.enum import StrEnum
8
8
 
9
- class IOConfigKeys(str, Enum):
9
+
10
+ class IOConfigKeys(StrEnum):
10
11
  AWS = 'AWS'
11
12
  BIGQUERY = 'BigQuery'
12
13
  CLICKHOUSE = 'ClickHouse'
mage_ai/io/oracledb.py CHANGED
@@ -244,10 +244,8 @@ FETCH FIRST {limit} ROWS ONLY
244
244
  # Remove extraneous surrounding double quotes
245
245
  # that get added while performing conversion to string.
246
246
  df_[col] = df_[col].apply(lambda x: x.strip('"') if x and isinstance(x, str) else x)
247
- df_.replace({np.NaN: None}, inplace=True)
248
- values = []
249
- for i in range(0, len(df_)):
250
- values.append(tuple(df_.fillna('').values[i]))
247
+ df_.fillna('', inplace=True)
248
+ values = list(df_.itertuples(index=False, name=None))
251
249
 
252
250
  # Create values placeholder
253
251
  colmn_names = df.columns.tolist()
mage_ai/io/postgres.py CHANGED
@@ -99,6 +99,8 @@ class Postgres(BaseSQL):
99
99
  password = self.settings['password']
100
100
  port = self.settings['port']
101
101
  user = self.settings['user']
102
+ keepalives = self.settings.get('keepalives', 1)
103
+ keepalives_idle = self.settings.get('keepalives_idle', 300)
102
104
  if self.settings['connection_method'] == 'ssh_tunnel':
103
105
  ssh_setting = dict(ssh_username=self.settings['ssh_username'])
104
106
  if self.settings['ssh_pkey'] is not None:
@@ -128,19 +130,35 @@ class Postgres(BaseSQL):
128
130
  host = '127.0.0.1'
129
131
  port = self.ssh_tunnel.local_bind_port
130
132
 
131
- connect_opts = dict(
132
- database=database,
133
- host=host,
134
- password=password,
135
- port=port,
136
- user=user,
137
- keepalives=1,
138
- keepalives_idle=300,
133
+ connect_opts = self.settings.copy()
134
+ # See recognized keyword parameters for psycopg2.connect()
135
+ # https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS
136
+ unrecognized_keys = [
137
+ 'dbname',
138
+ 'schema',
139
+ 'connection_method',
140
+ 'ssh_host',
141
+ 'ssh_port',
142
+ 'ssh_username',
143
+ 'ssh_password',
144
+ 'ssh_pkey',
145
+ "verbose"
146
+ ]
147
+ for key in unrecognized_keys:
148
+ connect_opts.pop(key, None)
149
+
150
+ connect_opts.update(
151
+ {
152
+ 'database': database,
153
+ 'host': host,
154
+ 'password': password,
155
+ 'port': port,
156
+ 'user': user,
157
+ 'keepalives': keepalives,
158
+ 'keepalives_idle': keepalives_idle,
159
+ }
139
160
  )
140
161
 
141
- if self.settings.get('connect_timeout'):
142
- connect_opts['connect_timeout'] = self.settings['connect_timeout']
143
-
144
162
  try:
145
163
  self._ctx = connect(**connect_opts)
146
164
  except Exception:
@@ -166,13 +184,14 @@ class Postgres(BaseSQL):
166
184
  self,
167
185
  schema_name: str
168
186
  ) -> str:
187
+ clean_schema_name = schema_name.strip('"')
169
188
  return f"""
170
189
  DO $$
171
190
  BEGIN
172
191
  IF NOT EXISTS (
173
192
  SELECT schema_name
174
193
  FROM information_schema.schemata
175
- WHERE schema_name = '{schema_name}'
194
+ WHERE schema_name = '{clean_schema_name}'
176
195
  ) THEN
177
196
  EXECUTE 'CREATE SCHEMA {schema_name}';
178
197
  END IF;
@@ -276,6 +295,14 @@ class Postgres(BaseSQL):
276
295
 
277
296
  return 'text'
278
297
 
298
+ @staticmethod
299
+ def _clean_array_value(val: str) -> str:
300
+ if val is None or type(val) is not str or len(val) < 2:
301
+ return val
302
+ if val[0] == '[' and val[-1] == ']':
303
+ return str(val).replace('[', '{').replace(']', '}')
304
+ return val
305
+
279
306
  def upload_dataframe(
280
307
  self,
281
308
  cursor: _psycopg.cursor,
@@ -297,13 +324,6 @@ class Postgres(BaseSQL):
297
324
  # Use COPY command
298
325
  use_insert_command = False
299
326
 
300
- def clean_array_value(val):
301
- if val is None or type(val) is not str or len(val) < 2:
302
- return val
303
- if val[0] == '[' and val[-1] == ']':
304
- return '{' + val[1:-1] + '}'
305
- return val
306
-
307
327
  def serialize_obj(val):
308
328
  if type(val) is dict or type(val) is np.ndarray:
309
329
  return simplejson.dumps(
@@ -318,7 +338,7 @@ class Postgres(BaseSQL):
318
338
  ignore_nan=True,
319
339
  )
320
340
  elif not use_insert_command and type(val) is list:
321
- return clean_array_value(simplejson.dumps(
341
+ return self._clean_array_value(simplejson.dumps(
322
342
  val,
323
343
  default=encode_complex,
324
344
  ignore_nan=True,
mage_ai/io/utils.py CHANGED
@@ -29,3 +29,21 @@ def escape_quotes(line: str, single: bool = True, double: bool = True) -> str:
29
29
  if double:
30
30
  new_line = new_line.replace('\"', '\\"')
31
31
  return new_line
32
+
33
+
34
+ def map_json_to_airtable(data_types):
35
+ # Extract the non-null type (ignoring 'null')
36
+ data_type = next((t for t in data_types if t != 'null'), 'string')
37
+
38
+ # Mapping from JSON types to Airtable types
39
+ type_mapping = {
40
+ 'string': 'multilineText',
41
+ 'integer': 'number',
42
+ 'boolean': 'checkbox',
43
+ 'array': 'multipleSelects',
44
+ 'object': 'singleCollaborator',
45
+ 'number': 'number',
46
+ 'date-time': 'dateTime'
47
+ }
48
+
49
+ return type_mapping.get(data_type, 'str')
@@ -1,7 +1,7 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
 
4
- class ExecutionStatus(str, Enum):
4
+ class ExecutionStatus(StrEnum):
5
5
  CANCELLED = 'cancelled'
6
6
  ERROR = 'error'
7
7
  FAILURE = 'failure'
@@ -10,12 +10,12 @@ class ExecutionStatus(str, Enum):
10
10
  SUCCESS = 'success'
11
11
 
12
12
 
13
- class EventStreamType(str, Enum):
13
+ class EventStreamType(StrEnum):
14
14
  EXECUTION = 'execution'
15
15
  TASK = 'task'
16
16
 
17
17
 
18
- class ResultType(str, Enum):
18
+ class ResultType(StrEnum):
19
19
  DATA = 'data'
20
20
  STATUS = 'status'
21
21
  STDOUT = 'stdout'
@@ -1,4 +1,4 @@
1
- import enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
  DATABASE_CONNECTION_URL_ENV_VAR = 'MAGE_DATABASE_CONNECTION_URL'
4
4
 
@@ -18,7 +18,7 @@ PG_DB_NAME = 'DB_NAME'
18
18
  PIPELINE_RUN_MAGE_VARIABLES_KEY = '__mage_variables'
19
19
 
20
20
 
21
- class Entity(str, enum.Enum):
21
+ class Entity(StrEnum):
22
22
  # Permissions saved to the DB should not have the "ANY" entity. It should only be used
23
23
  # when evaluating permissions.
24
24
  ANY = 'any'
@@ -13,7 +13,7 @@ from mage_ai.orchestration.db.setup import get_postgres_connection_url
13
13
  from mage_ai.orchestration.db.utils import get_user_info_from_db_connection_url
14
14
  from mage_ai.settings import OTEL_EXPORTER_OTLP_ENDPOINT
15
15
  from mage_ai.settings.repo import get_variables_dir
16
- from mage_ai.shared.environments import is_debug, is_test
16
+ from mage_ai.shared.environments import is_debug, is_test_mage
17
17
 
18
18
  DB_RETRY_COUNT = 2
19
19
  TEST_DB = 'test.db'
@@ -28,7 +28,7 @@ db_kwargs = dict(
28
28
  if OTEL_EXPORTER_OTLP_ENDPOINT:
29
29
  from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor
30
30
 
31
- if is_test():
31
+ if is_test_mage():
32
32
  db_connection_url = f'sqlite:///{TEST_DB}'
33
33
  db_kwargs['connect_args']['check_same_thread'] = False
34
34
  elif not db_connection_url:
@@ -37,7 +37,7 @@ elif not db_connection_url:
37
37
  if pg_db_connection_url:
38
38
  db_connection_url = pg_db_connection_url
39
39
  else:
40
- if is_test():
40
+ if is_test_mage():
41
41
  db_connection_url = f'sqlite:///{TEST_DB}'
42
42
  elif os.path.exists(os.path.join('mage_ai', 'orchestration', 'db')):
43
43
  # For local dev environment
@@ -1,6 +1,6 @@
1
- from enum import Enum
1
+ from mage_ai.shared.enum import StrEnum
2
2
 
3
3
 
4
- class DatabaseType(str, Enum):
4
+ class DatabaseType(StrEnum):
5
5
  POSTGRESQL = 'postgresql'
6
6
  SQLITE = 'sqlite'
@@ -1,4 +1,3 @@
1
- import enum
2
1
  import re
3
2
  from datetime import datetime
4
3
  from typing import Callable, List, Union
@@ -31,6 +30,7 @@ from mage_ai.orchestration.db import db_connection, safe_db_query
31
30
  from mage_ai.orchestration.db.errors import ValidationError
32
31
  from mage_ai.orchestration.db.models.base import BaseModel
33
32
  from mage_ai.shared.array import find
33
+ from mage_ai.shared.enum import IntEnum, StrEnum
34
34
  from mage_ai.shared.environments import is_test
35
35
  from mage_ai.shared.hash import group_by, merge_dict
36
36
 
@@ -299,7 +299,7 @@ class Role(BaseModel):
299
299
  user = relationship(User, back_populates='created_roles')
300
300
 
301
301
  # Default global roles created by Mage
302
- class DefaultRole(str, enum.Enum):
302
+ class DefaultRole(StrEnum):
303
303
  OWNER = 'Owner'
304
304
  ADMIN = 'Admin'
305
305
  EDITOR = 'Editor'
@@ -561,7 +561,7 @@ class UserRole(BaseModel):
561
561
 
562
562
 
563
563
  class Permission(BaseModel):
564
- class Access(int, enum.Enum):
564
+ class Access(IntEnum):
565
565
  OWNER = PermissionAccess.OWNER.value
566
566
  ADMIN = PermissionAccess.ADMIN.value
567
567
  EDITOR = PermissionAccess.EDITOR.value
@@ -841,11 +841,11 @@ class RolePermission(BaseModel):
841
841
 
842
842
 
843
843
  class Oauth2Application(BaseModel):
844
- class AuthorizationGrantType(str, enum.Enum):
844
+ class AuthorizationGrantType(StrEnum):
845
845
  AUTHORIZATION_CODE = 'authorization-code'
846
846
  CLIENT_CREDENTIALS = 'client-credentials'
847
847
 
848
- class ClientType(str, enum.Enum):
848
+ class ClientType(StrEnum):
849
849
  PRIVATE = 'private'
850
850
  PUBLIC = 'public'
851
851