mage-ai 0.9.58__py3-none-any.whl → 0.9.59__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 (682) hide show
  1. mage_ai/api/logging.py +11 -7
  2. mage_ai/api/policies/BlockPolicy.py +1 -0
  3. mage_ai/api/policies/CommandCenterItemPolicy.py +56 -0
  4. mage_ai/api/policies/CustomTemplatePolicy.py +0 -3
  5. mage_ai/api/policies/GitBranchPolicy.py +8 -1
  6. mage_ai/api/policies/GitFilePolicy.py +1 -0
  7. mage_ai/api/policies/PipelinePolicy.py +2 -0
  8. mage_ai/api/policies/PipelineSchedulePolicy.py +1 -0
  9. mage_ai/api/policies/VersionControlBranchPolicy.py +98 -0
  10. mage_ai/api/policies/VersionControlFilePolicy.py +96 -0
  11. mage_ai/api/policies/VersionControlProjectPolicy.py +92 -0
  12. mage_ai/api/policies/VersionControlRemotePolicy.py +94 -0
  13. mage_ai/api/presenters/CommandCenterItemPresenter.py +19 -0
  14. mage_ai/api/presenters/GitBranchPresenter.py +2 -0
  15. mage_ai/api/presenters/GitCustomBranchPresenter.py +1 -0
  16. mage_ai/api/presenters/PipelinePresenter.py +5 -5
  17. mage_ai/api/presenters/PipelineSchedulePresenter.py +4 -0
  18. mage_ai/api/presenters/VersionControlBranchPresenter.py +15 -0
  19. mage_ai/api/presenters/VersionControlFilePresenter.py +15 -0
  20. mage_ai/api/presenters/VersionControlProjectPresenter.py +14 -0
  21. mage_ai/api/presenters/VersionControlRemotePresenter.py +15 -0
  22. mage_ai/api/resources/BlockResource.py +110 -80
  23. mage_ai/api/resources/CommandCenterItemResource.py +29 -0
  24. mage_ai/api/resources/FileResource.py +15 -1
  25. mage_ai/api/resources/FolderResource.py +2 -1
  26. mage_ai/api/resources/GitBranchResource.py +183 -108
  27. mage_ai/api/resources/GitCustomBranchResource.py +9 -2
  28. mage_ai/api/resources/GitFileResource.py +26 -13
  29. mage_ai/api/resources/KernelResource.py +9 -1
  30. mage_ai/api/resources/LogResource.py +1 -1
  31. mage_ai/api/resources/OauthResource.py +4 -5
  32. mage_ai/api/resources/PipelineResource.py +71 -38
  33. mage_ai/api/resources/PipelineRunResource.py +7 -2
  34. mage_ai/api/resources/PullRequestResource.py +12 -3
  35. mage_ai/api/resources/SearchResultResource.py +4 -4
  36. mage_ai/api/resources/VersionControlBranchResource.py +85 -0
  37. mage_ai/api/resources/VersionControlFileResource.py +65 -0
  38. mage_ai/api/resources/VersionControlProjectResource.py +46 -0
  39. mage_ai/api/resources/VersionControlRemoteResource.py +64 -0
  40. mage_ai/authentication/oauth/constants.py +13 -16
  41. mage_ai/authentication/operation_history/models.py +11 -32
  42. mage_ai/authentication/operation_history/utils.py +14 -14
  43. mage_ai/authentication/permissions/constants.py +5 -0
  44. mage_ai/authentication/providers/active_directory.py +2 -2
  45. mage_ai/authentication/providers/bitbucket.py +2 -2
  46. mage_ai/authentication/providers/constants.py +6 -12
  47. mage_ai/authentication/providers/ghe.py +2 -2
  48. mage_ai/authentication/providers/google.py +2 -2
  49. mage_ai/authentication/providers/okta.py +2 -2
  50. mage_ai/cache/base.py +11 -3
  51. mage_ai/cache/block.py +116 -32
  52. mage_ai/cache/block_action_object/__init__.py +52 -43
  53. mage_ai/cache/constants.py +1 -0
  54. mage_ai/cache/file.py +114 -0
  55. mage_ai/cache/pipeline.py +34 -8
  56. mage_ai/cache/tag.py +51 -10
  57. mage_ai/cache/utils.py +44 -3
  58. mage_ai/cluster_manager/kubernetes/workload_manager.py +9 -1
  59. mage_ai/command_center/__init__.py +0 -0
  60. mage_ai/command_center/applications/__init__.py +0 -0
  61. mage_ai/command_center/applications/constants.py +96 -0
  62. mage_ai/command_center/applications/factory.py +54 -0
  63. mage_ai/command_center/blocks/__init__.py +0 -0
  64. mage_ai/command_center/blocks/factory.py +39 -0
  65. mage_ai/command_center/blocks/utils.py +127 -0
  66. mage_ai/command_center/constants.py +66 -0
  67. mage_ai/command_center/factory.py +161 -0
  68. mage_ai/command_center/files/__init__.py +0 -0
  69. mage_ai/command_center/files/constants.py +235 -0
  70. mage_ai/command_center/files/factory.py +86 -0
  71. mage_ai/command_center/models.py +442 -0
  72. mage_ai/command_center/pipeline_runs/__init__.py +0 -0
  73. mage_ai/command_center/pipeline_runs/utils.py +141 -0
  74. mage_ai/command_center/pipelines/__init__.py +0 -0
  75. mage_ai/command_center/pipelines/constants.py +118 -0
  76. mage_ai/command_center/pipelines/factory.py +132 -0
  77. mage_ai/command_center/pipelines/utils.py +120 -0
  78. mage_ai/command_center/service.py +45 -0
  79. mage_ai/command_center/settings.py +37 -0
  80. mage_ai/command_center/support/__init__.py +0 -0
  81. mage_ai/command_center/support/constants.py +46 -0
  82. mage_ai/command_center/triggers/__init__.py +0 -0
  83. mage_ai/command_center/triggers/factory.py +49 -0
  84. mage_ai/command_center/triggers/utils.py +463 -0
  85. mage_ai/command_center/utils.py +30 -0
  86. mage_ai/data_preparation/executors/azure_container_instance_executor.py +1 -1
  87. mage_ai/data_preparation/executors/block_executor.py +68 -19
  88. mage_ai/data_preparation/executors/ecs_block_executor.py +2 -2
  89. mage_ai/data_preparation/executors/executor_factory.py +2 -0
  90. mage_ai/data_preparation/executors/gcp_cloud_run_block_executor.py +1 -1
  91. mage_ai/data_preparation/executors/k8s_block_executor.py +2 -2
  92. mage_ai/data_preparation/executors/pyspark_block_executor.py +7 -1
  93. mage_ai/data_preparation/git/__init__.py +29 -11
  94. mage_ai/data_preparation/git/api.py +14 -13
  95. mage_ai/data_preparation/git/clients/base.py +4 -8
  96. mage_ai/data_preparation/git/clients/github.py +1 -0
  97. mage_ai/data_preparation/git/utils.py +5 -7
  98. mage_ai/data_preparation/models/block/__init__.py +556 -329
  99. mage_ai/data_preparation/models/block/content.py +111 -0
  100. mage_ai/data_preparation/models/block/data_integration/mixins.py +1 -0
  101. mage_ai/data_preparation/models/block/dbt/block.py +29 -19
  102. mage_ai/data_preparation/models/block/dbt/block_sql.py +50 -260
  103. mage_ai/data_preparation/models/block/dbt/block_yaml.py +74 -156
  104. mage_ai/data_preparation/models/block/dbt/dbt_adapter.py +22 -10
  105. mage_ai/data_preparation/models/block/dbt/profiles.py +19 -15
  106. mage_ai/data_preparation/models/block/dbt/project.py +3 -0
  107. mage_ai/data_preparation/models/block/dynamic/constants.py +0 -0
  108. mage_ai/data_preparation/models/block/dynamic/dynamic_child.py +507 -47
  109. mage_ai/data_preparation/models/block/dynamic/utils.py +432 -1
  110. mage_ai/data_preparation/models/block/platform/mixins.py +68 -44
  111. mage_ai/data_preparation/models/block/r/__init__.py +19 -9
  112. mage_ai/data_preparation/models/block/sql/__init__.py +34 -20
  113. mage_ai/data_preparation/models/block/sql/utils/shared.py +4 -1
  114. mage_ai/data_preparation/models/block/utils.py +176 -71
  115. mage_ai/data_preparation/models/constants.py +7 -0
  116. mage_ai/data_preparation/models/file.py +21 -2
  117. mage_ai/data_preparation/models/pipeline.py +20 -8
  118. mage_ai/data_preparation/models/project/__init__.py +12 -7
  119. mage_ai/data_preparation/models/project/constants.py +1 -0
  120. mage_ai/data_preparation/models/triggers/__init__.py +7 -0
  121. mage_ai/data_preparation/models/utils.py +20 -0
  122. mage_ai/data_preparation/models/variable.py +113 -15
  123. mage_ai/data_preparation/shared/utils.py +6 -3
  124. mage_ai/data_preparation/storage/base_storage.py +17 -0
  125. mage_ai/data_preparation/storage/gcs_storage.py +4 -0
  126. mage_ai/data_preparation/storage/local_storage.py +15 -0
  127. mage_ai/data_preparation/storage/s3_storage.py +4 -0
  128. mage_ai/data_preparation/templates/data_exporters/qdrant.py +0 -1
  129. mage_ai/data_preparation/templates/data_loaders/qdrant.py +2 -1
  130. mage_ai/data_preparation/variable_manager.py +1 -0
  131. mage_ai/io/base.py +4 -1
  132. mage_ai/io/bigquery.py +25 -16
  133. mage_ai/io/clickhouse.py +3 -0
  134. mage_ai/io/druid.py +3 -0
  135. mage_ai/io/mongodb.py +1 -1
  136. mage_ai/io/pinot.py +3 -0
  137. mage_ai/io/postgres.py +13 -0
  138. mage_ai/io/snowflake.py +4 -0
  139. mage_ai/io/spark.py +8 -3
  140. mage_ai/io/sql.py +6 -0
  141. mage_ai/orchestration/db/__init__.py +26 -19
  142. mage_ai/orchestration/db/cache.py +4 -3
  143. mage_ai/orchestration/db/models/schedules.py +72 -16
  144. mage_ai/orchestration/db/models/schedules_project_platform.py +2 -3
  145. mage_ai/orchestration/pipeline_scheduler_original.py +19 -11
  146. mage_ai/orchestration/pipeline_scheduler_project_platform.py +20 -11
  147. mage_ai/presenters/interactions/constants.py +1 -0
  148. mage_ai/presenters/interactions/models.py +4 -3
  149. mage_ai/presenters/pages/models/client_pages/pipeline_schedules.py +1 -1
  150. mage_ai/server/constants.py +1 -1
  151. mage_ai/server/frontend_dist/404.html +11 -11
  152. mage_ai/server/frontend_dist/_next/static/PPQxHOmWVJ0iQFzG2rc8m/_buildManifest.js +1 -0
  153. mage_ai/server/frontend_dist/_next/static/chunks/1235.c9ed47779baccc05.js +1 -0
  154. mage_ai/server/frontend_dist/_next/static/chunks/125-029194ff22eb33a5.js +1 -0
  155. mage_ai/server/frontend_dist/_next/static/chunks/1557-4f7485c2e2228f77.js +1 -0
  156. mage_ai/server/frontend_dist/_next/static/chunks/2474-8e702cea23ddd16d.js +1 -0
  157. mage_ai/server/frontend_dist/_next/static/chunks/2479-727fa69ee9be6fab.js +1 -0
  158. mage_ai/server/frontend_dist/_next/static/chunks/26-38bc9380422f3900.js +1 -0
  159. mage_ai/server/frontend_dist/_next/static/chunks/2717-3e7ea8543b3825b7.js +1 -0
  160. mage_ai/server/frontend_dist/_next/static/chunks/3366-420721116ea5a665.js +1 -0
  161. mage_ai/server/frontend_dist/_next/static/chunks/3449-a9c98239582cd6f0.js +1 -0
  162. mage_ai/server/frontend_dist/_next/static/chunks/3548-13563a1ff815f922.js +1 -0
  163. mage_ai/server/frontend_dist/_next/static/chunks/3943-9e0a8ba0db34b35f.js +1 -0
  164. mage_ai/server/frontend_dist/_next/static/chunks/4371-ef23f95888d6cd11.js +1 -0
  165. mage_ai/server/frontend_dist/_next/static/chunks/4632.a4171dbf46b31c7c.js +1 -0
  166. mage_ai/server/frontend_dist/_next/static/chunks/523-be11ad59861d00ca.js +1 -0
  167. mage_ai/server/frontend_dist/_next/static/chunks/5457-d582b00545b4cb5e.js +1 -0
  168. mage_ai/server/frontend_dist/_next/static/chunks/5831-2abc4063e887a03e.js +1 -0
  169. mage_ai/server/frontend_dist/_next/static/chunks/6085-692d2f784c0504f2.js +1 -0
  170. mage_ai/server/frontend_dist/_next/static/chunks/635-1e8857c2b6dde289.js +1 -0
  171. mage_ai/server/frontend_dist/_next/static/chunks/7022-0d52dd8868621fb0.js +1 -0
  172. mage_ai/server/frontend_dist/_next/static/chunks/7264-d05f4b7088533f6f.js +1 -0
  173. mage_ai/server/frontend_dist/_next/static/chunks/7361-b3d661ec743bfadf.js +1 -0
  174. mage_ai/server/frontend_dist/_next/static/chunks/737-cc6467310a130dd9.js +1 -0
  175. mage_ai/server/frontend_dist/_next/static/chunks/{4495-4f0340aa82e0c623.js → 7674-9ec4fe64b5bf64d5.js} +1 -1
  176. mage_ai/server/frontend_dist/_next/static/chunks/8038-85d715c8c8394827.js +1 -0
  177. mage_ai/server/frontend_dist/_next/static/chunks/8095-bdce03896ef9639a.js +1 -0
  178. mage_ai/server/frontend_dist/_next/static/chunks/8146-6bed4e7401e067e6.js +1 -0
  179. mage_ai/server/frontend_dist/_next/static/chunks/8192-0c0b91523a38c4ca.js +1 -0
  180. mage_ai/server/frontend_dist/_next/static/chunks/8432-f736d101fc6d9215.js +1 -0
  181. mage_ai/server/frontend_dist/_next/static/chunks/8513-d207733b485c8d03.js +1 -0
  182. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/9264-e7e040a54d34360c.js → frontend_dist/_next/static/chunks/9264-7cd9cd0ba86ec5e4.js} +1 -1
  183. mage_ai/server/frontend_dist/_next/static/chunks/9265-d2a1aaec75ec69b8.js +1 -0
  184. mage_ai/server/frontend_dist/_next/static/chunks/9440-54add041c392517f.js +1 -0
  185. mage_ai/server/frontend_dist/_next/static/chunks/9624-59b2f803f9c88cd6.js +1 -0
  186. mage_ai/server/frontend_dist/_next/static/chunks/9832-67896490f6e8a014.js +1 -0
  187. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/bd1a647f.fe5d87096be24a62.js → frontend_dist/_next/static/chunks/bd1a647f.04f7913662092327.js} +1 -1
  188. mage_ai/server/frontend_dist/_next/static/chunks/pages/404-7cabe357906f44f2.js +1 -0
  189. mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-a11bd2ebe11b3fd2.js +1 -0
  190. mage_ai/server/frontend_dist/_next/static/chunks/pages/block-layout-ffca51945cd154ef.js +1 -0
  191. mage_ai/server/frontend_dist/_next/static/chunks/pages/compute-3ba957769292db80.js +1 -0
  192. mage_ai/server/frontend_dist/_next/static/chunks/pages/files-45679fd18b3edd82.js +1 -0
  193. mage_ai/server/frontend_dist/_next/static/chunks/pages/global-data-products/[...slug]-95735a218106aa99.js +1 -0
  194. mage_ai/server/frontend_dist/_next/static/chunks/pages/{global-data-products-cf98c2e4d20fd92c.js → global-data-products-81d6c7fd9a9cff38.js} +1 -1
  195. mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-eb4421d51fb7368f.js +1 -0
  196. mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks-a8c712e20512fede.js +1 -0
  197. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/files-f1be1d4735ba6919.js +1 -0
  198. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/settings-febe676687966276.js +1 -0
  199. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-70efe222130490b5.js +1 -0
  200. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/new-0914c36b3c8fd59f.js +1 -0
  201. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{users-81e6e5319a59cd07.js → users-4f12e989e7809ef9.js} +1 -1
  202. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-809d4c99b44991a1.js +1 -0
  203. mage_ai/server/{frontend_dist_base_path_template/_next/static/chunks/pages/oauth-0436d395963cd27a.js → frontend_dist/_next/static/chunks/pages/oauth-aa9079c8dbaea3a5.js} +1 -1
  204. mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-4e30fb5b18383b71.js +1 -0
  205. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-5d31c3aace39182d.js +1 -0
  206. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-85a80ee66f60a65c.js +1 -0
  207. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-0bd74047e257e6d9.js +1 -0
  208. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-80619dc504d0103b.js +1 -0
  209. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-3cc8d74ff8525bfd.js +1 -0
  210. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-cdc379ff24ff8858.js +1 -0
  211. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-03396d6086003e16.js +1 -0
  212. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-d6d920758654f6d9.js +1 -0
  213. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-27727bb87be506c3.js +1 -0
  214. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-16aab67743651a0b.js +1 -0
  215. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-e3ca1bedb660b252.js +1 -0
  216. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-9d58701fe7213727.js +1 -0
  217. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-0041fd76ee15e49f.js +1 -0
  218. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-780be9a2da697915.js +1 -0
  219. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-db8bb970b1f2273f.js +1 -0
  220. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-a3422b0ab1dbacd7.js +1 -0
  221. mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks/[...slug]-987a1603f4201943.js +1 -0
  222. mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks-3dc8bf89cab2722b.js +1 -0
  223. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-43d3f2a5071b9537.js +1 -0
  224. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-c97b1a39b22c112a.js +1 -0
  225. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/settings-49efb66da67554ca.js +1 -0
  226. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-be6aaec07c138656.js → [...slug]-5117d3555972484c.js} +1 -1
  227. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/permissions-ee1c19d4a192ae4d.js +1 -0
  228. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-4dc5724486ee3396.js +1 -0
  229. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-f380d293cff7592b.js → [...slug]-fa095aac732368c3.js} +1 -1
  230. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{roles-ddce04fae28bd7f6.js → roles-db6d71f8692a33e7.js} +1 -1
  231. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-99c6a263d2ab9553.js +1 -0
  232. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users/{[...slug]-213a43564fdfbe17.js → [...slug]-9d881ac0a3db9baa.js} +1 -1
  233. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-bee414d57c4b55d7.js +1 -0
  234. mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-e7030e1a7a9e88e1.js +1 -0
  235. mage_ai/server/frontend_dist/_next/static/chunks/pages/templates/[...slug]-312afc9a3f8d0a4f.js +1 -0
  236. mage_ai/server/frontend_dist/_next/static/chunks/pages/templates-e5300c340aa94c6b.js +1 -0
  237. mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-fa7ca0c86142d146.js +1 -0
  238. mage_ai/server/frontend_dist/_next/static/chunks/pages/test-bd51b3918b39329e.js +1 -0
  239. mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-5158a9d98d2459e8.js +1 -0
  240. mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-5ce099a7abb354ff.js +1 -0
  241. mage_ai/server/frontend_dist/_next/static/chunks/{webpack-fea697dd168c6d0c.js → webpack-efa55343114c8128.js} +1 -1
  242. mage_ai/server/{frontend_dist_base_path_template/_next/static/css/d1e8e64d0b07af2f.css → frontend_dist/_next/static/css/b59541b123fd7191.css} +1 -1
  243. mage_ai/server/frontend_dist/block-layout.html +3 -3
  244. mage_ai/server/frontend_dist/compute.html +11 -11
  245. mage_ai/server/frontend_dist/files.html +11 -11
  246. mage_ai/server/frontend_dist/global-data-products/[...slug].html +11 -11
  247. mage_ai/server/frontend_dist/global-data-products.html +11 -11
  248. mage_ai/server/frontend_dist/global-hooks/[...slug].html +11 -11
  249. mage_ai/server/frontend_dist/global-hooks.html +11 -11
  250. mage_ai/server/frontend_dist/index.html +3 -3
  251. mage_ai/server/frontend_dist/manage/files.html +11 -11
  252. mage_ai/server/frontend_dist/manage/settings.html +11 -11
  253. mage_ai/server/frontend_dist/manage/users/[user].html +11 -11
  254. mage_ai/server/frontend_dist/manage/users/new.html +11 -11
  255. mage_ai/server/frontend_dist/manage/users.html +11 -11
  256. mage_ai/server/frontend_dist/manage.html +11 -11
  257. mage_ai/server/frontend_dist/oauth.html +8 -8
  258. mage_ai/server/frontend_dist/overview.html +11 -11
  259. mage_ai/server/frontend_dist/pipeline-runs.html +11 -11
  260. mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +11 -11
  261. mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +11 -11
  262. mage_ai/server/frontend_dist/pipelines/[pipeline]/dashboard.html +11 -11
  263. mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +3 -3
  264. mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +11 -11
  265. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +11 -11
  266. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +11 -11
  267. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +11 -11
  268. mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +11 -11
  269. mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +11 -11
  270. mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +11 -11
  271. mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +11 -11
  272. mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +11 -11
  273. mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +11 -11
  274. mage_ai/server/frontend_dist/pipelines/[pipeline].html +3 -3
  275. mage_ai/server/frontend_dist/pipelines.html +11 -11
  276. mage_ai/server/frontend_dist/platform/global-hooks/[...slug].html +11 -11
  277. mage_ai/server/frontend_dist/platform/global-hooks.html +11 -11
  278. mage_ai/server/frontend_dist/settings/account/profile.html +11 -11
  279. mage_ai/server/frontend_dist/settings/platform/preferences.html +11 -11
  280. mage_ai/server/frontend_dist/settings/platform/settings.html +11 -11
  281. mage_ai/server/frontend_dist/settings/workspace/permissions/[...slug].html +11 -11
  282. mage_ai/server/frontend_dist/settings/workspace/permissions.html +11 -11
  283. mage_ai/server/frontend_dist/settings/workspace/preferences.html +11 -11
  284. mage_ai/server/frontend_dist/settings/workspace/roles/[...slug].html +11 -11
  285. mage_ai/server/frontend_dist/settings/workspace/roles.html +11 -11
  286. mage_ai/server/frontend_dist/settings/workspace/sync-data.html +11 -11
  287. mage_ai/server/frontend_dist/settings/workspace/users/[...slug].html +11 -11
  288. mage_ai/server/frontend_dist/settings/workspace/users.html +11 -11
  289. mage_ai/server/frontend_dist/settings.html +3 -3
  290. mage_ai/server/frontend_dist/sign-in.html +41 -41
  291. mage_ai/server/frontend_dist/templates/[...slug].html +11 -11
  292. mage_ai/server/frontend_dist/templates.html +11 -11
  293. mage_ai/server/frontend_dist/terminal.html +11 -11
  294. mage_ai/server/frontend_dist/test.html +3 -5
  295. mage_ai/server/frontend_dist/triggers.html +11 -11
  296. mage_ai/server/frontend_dist/version-control.html +11 -11
  297. mage_ai/server/frontend_dist_base_path_template/404.html +11 -11
  298. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1235.c9ed47779baccc05.js +1 -0
  299. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/125-029194ff22eb33a5.js +1 -0
  300. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1557-4f7485c2e2228f77.js +1 -0
  301. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2474-8e702cea23ddd16d.js +1 -0
  302. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2479-727fa69ee9be6fab.js +1 -0
  303. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/26-38bc9380422f3900.js +1 -0
  304. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-3e7ea8543b3825b7.js +1 -0
  305. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3366-420721116ea5a665.js +1 -0
  306. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3449-a9c98239582cd6f0.js +1 -0
  307. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-13563a1ff815f922.js +1 -0
  308. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3943-9e0a8ba0db34b35f.js +1 -0
  309. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/4371-ef23f95888d6cd11.js +1 -0
  310. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/4632.a4171dbf46b31c7c.js +1 -0
  311. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/523-be11ad59861d00ca.js +1 -0
  312. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5457-d582b00545b4cb5e.js +1 -0
  313. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5831-2abc4063e887a03e.js +1 -0
  314. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6085-692d2f784c0504f2.js +1 -0
  315. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/635-1e8857c2b6dde289.js +1 -0
  316. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7022-0d52dd8868621fb0.js +1 -0
  317. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7264-d05f4b7088533f6f.js +1 -0
  318. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7361-b3d661ec743bfadf.js +1 -0
  319. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/737-cc6467310a130dd9.js +1 -0
  320. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{4495-4f0340aa82e0c623.js → 7674-9ec4fe64b5bf64d5.js} +1 -1
  321. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8038-85d715c8c8394827.js +1 -0
  322. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8095-bdce03896ef9639a.js +1 -0
  323. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8146-6bed4e7401e067e6.js +1 -0
  324. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8192-0c0b91523a38c4ca.js +1 -0
  325. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8432-f736d101fc6d9215.js +1 -0
  326. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8513-d207733b485c8d03.js +1 -0
  327. mage_ai/server/{frontend_dist/_next/static/chunks/9264-e7e040a54d34360c.js → frontend_dist_base_path_template/_next/static/chunks/9264-7cd9cd0ba86ec5e4.js} +1 -1
  328. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9265-d2a1aaec75ec69b8.js +1 -0
  329. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9440-54add041c392517f.js +1 -0
  330. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9624-59b2f803f9c88cd6.js +1 -0
  331. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9832-67896490f6e8a014.js +1 -0
  332. mage_ai/server/{frontend_dist/_next/static/chunks/bd1a647f.fe5d87096be24a62.js → frontend_dist_base_path_template/_next/static/chunks/bd1a647f.04f7913662092327.js} +1 -1
  333. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/404-7cabe357906f44f2.js +1 -0
  334. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-a11bd2ebe11b3fd2.js +1 -0
  335. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/block-layout-ffca51945cd154ef.js +1 -0
  336. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/compute-3ba957769292db80.js +1 -0
  337. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/files-45679fd18b3edd82.js +1 -0
  338. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-data-products/[...slug]-95735a218106aa99.js +1 -0
  339. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/{global-data-products-cf98c2e4d20fd92c.js → global-data-products-81d6c7fd9a9cff38.js} +1 -1
  340. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-eb4421d51fb7368f.js +1 -0
  341. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks-a8c712e20512fede.js +1 -0
  342. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/files-f1be1d4735ba6919.js +1 -0
  343. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/settings-febe676687966276.js +1 -0
  344. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-70efe222130490b5.js +1 -0
  345. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-0914c36b3c8fd59f.js +1 -0
  346. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/{users-81e6e5319a59cd07.js → users-4f12e989e7809ef9.js} +1 -1
  347. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage-809d4c99b44991a1.js +1 -0
  348. mage_ai/server/{frontend_dist/_next/static/chunks/pages/oauth-0436d395963cd27a.js → frontend_dist_base_path_template/_next/static/chunks/pages/oauth-aa9079c8dbaea3a5.js} +1 -1
  349. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-4e30fb5b18383b71.js +1 -0
  350. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipeline-runs-5d31c3aace39182d.js +1 -0
  351. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-85a80ee66f60a65c.js +1 -0
  352. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-0bd74047e257e6d9.js +1 -0
  353. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-80619dc504d0103b.js +1 -0
  354. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-3cc8d74ff8525bfd.js +1 -0
  355. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-cdc379ff24ff8858.js +1 -0
  356. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-03396d6086003e16.js +1 -0
  357. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-d6d920758654f6d9.js +1 -0
  358. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors-27727bb87be506c3.js +1 -0
  359. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-16aab67743651a0b.js +1 -0
  360. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs-e3ca1bedb660b252.js +1 -0
  361. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-9d58701fe7213727.js +1 -0
  362. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-0041fd76ee15e49f.js +1 -0
  363. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-780be9a2da697915.js +1 -0
  364. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-db8bb970b1f2273f.js +1 -0
  365. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-a3422b0ab1dbacd7.js +1 -0
  366. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks/[...slug]-987a1603f4201943.js +1 -0
  367. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks-3dc8bf89cab2722b.js +1 -0
  368. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/account/profile-43d3f2a5071b9537.js +1 -0
  369. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-c97b1a39b22c112a.js +1 -0
  370. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-49efb66da67554ca.js +1 -0
  371. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/permissions/{[...slug]-be6aaec07c138656.js → [...slug]-5117d3555972484c.js} +1 -1
  372. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/permissions-ee1c19d4a192ae4d.js +1 -0
  373. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-4dc5724486ee3396.js +1 -0
  374. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/roles/{[...slug]-f380d293cff7592b.js → [...slug]-fa095aac732368c3.js} +1 -1
  375. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/{roles-ddce04fae28bd7f6.js → roles-db6d71f8692a33e7.js} +1 -1
  376. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/sync-data-99c6a263d2ab9553.js +1 -0
  377. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/users/{[...slug]-213a43564fdfbe17.js → [...slug]-9d881ac0a3db9baa.js} +1 -1
  378. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/users-bee414d57c4b55d7.js +1 -0
  379. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-e7030e1a7a9e88e1.js +1 -0
  380. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates/[...slug]-312afc9a3f8d0a4f.js +1 -0
  381. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates-e5300c340aa94c6b.js +1 -0
  382. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/terminal-fa7ca0c86142d146.js +1 -0
  383. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/test-bd51b3918b39329e.js +1 -0
  384. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-5158a9d98d2459e8.js +1 -0
  385. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/version-control-5ce099a7abb354ff.js +1 -0
  386. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{webpack-d30cb09c85b4c4f0.js → webpack-bd35e1c7bd7b5a9a.js} +1 -1
  387. mage_ai/server/{frontend_dist/_next/static/css/d1e8e64d0b07af2f.css → frontend_dist_base_path_template/_next/static/css/b59541b123fd7191.css} +1 -1
  388. mage_ai/server/frontend_dist_base_path_template/_next/static/do4WOsw7lNhouR0mtPTFi/_buildManifest.js +1 -0
  389. mage_ai/server/frontend_dist_base_path_template/block-layout.html +3 -3
  390. mage_ai/server/frontend_dist_base_path_template/compute.html +11 -11
  391. mage_ai/server/frontend_dist_base_path_template/files.html +11 -11
  392. mage_ai/server/frontend_dist_base_path_template/global-data-products/[...slug].html +11 -11
  393. mage_ai/server/frontend_dist_base_path_template/global-data-products.html +11 -11
  394. mage_ai/server/frontend_dist_base_path_template/global-hooks/[...slug].html +11 -11
  395. mage_ai/server/frontend_dist_base_path_template/global-hooks.html +11 -11
  396. mage_ai/server/frontend_dist_base_path_template/index.html +3 -3
  397. mage_ai/server/frontend_dist_base_path_template/manage/files.html +11 -11
  398. mage_ai/server/frontend_dist_base_path_template/manage/settings.html +11 -11
  399. mage_ai/server/frontend_dist_base_path_template/manage/users/[user].html +11 -11
  400. mage_ai/server/frontend_dist_base_path_template/manage/users/new.html +11 -11
  401. mage_ai/server/frontend_dist_base_path_template/manage/users.html +11 -11
  402. mage_ai/server/frontend_dist_base_path_template/manage.html +11 -11
  403. mage_ai/server/frontend_dist_base_path_template/oauth.html +8 -8
  404. mage_ai/server/frontend_dist_base_path_template/overview.html +11 -11
  405. mage_ai/server/frontend_dist_base_path_template/pipeline-runs.html +11 -11
  406. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills/[...slug].html +11 -11
  407. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills.html +11 -11
  408. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/dashboard.html +11 -11
  409. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/edit.html +3 -3
  410. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/logs.html +11 -11
  411. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runs.html +11 -11
  412. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runtime.html +11 -11
  413. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors.html +11 -11
  414. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs/[run].html +11 -11
  415. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs.html +11 -11
  416. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/settings.html +11 -11
  417. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/syncs.html +11 -11
  418. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers/[...slug].html +11 -11
  419. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers.html +11 -11
  420. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline].html +3 -3
  421. mage_ai/server/frontend_dist_base_path_template/pipelines.html +11 -11
  422. mage_ai/server/frontend_dist_base_path_template/platform/global-hooks/[...slug].html +11 -11
  423. mage_ai/server/frontend_dist_base_path_template/platform/global-hooks.html +11 -11
  424. mage_ai/server/frontend_dist_base_path_template/settings/account/profile.html +11 -11
  425. mage_ai/server/frontend_dist_base_path_template/settings/platform/preferences.html +11 -11
  426. mage_ai/server/frontend_dist_base_path_template/settings/platform/settings.html +11 -11
  427. mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions/[...slug].html +11 -11
  428. mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions.html +11 -11
  429. mage_ai/server/frontend_dist_base_path_template/settings/workspace/preferences.html +11 -11
  430. mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles/[...slug].html +11 -11
  431. mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles.html +11 -11
  432. mage_ai/server/frontend_dist_base_path_template/settings/workspace/sync-data.html +11 -11
  433. mage_ai/server/frontend_dist_base_path_template/settings/workspace/users/[...slug].html +11 -11
  434. mage_ai/server/frontend_dist_base_path_template/settings/workspace/users.html +11 -11
  435. mage_ai/server/frontend_dist_base_path_template/settings.html +3 -3
  436. mage_ai/server/frontend_dist_base_path_template/sign-in.html +39 -39
  437. mage_ai/server/frontend_dist_base_path_template/templates/[...slug].html +11 -11
  438. mage_ai/server/frontend_dist_base_path_template/templates.html +11 -11
  439. mage_ai/server/frontend_dist_base_path_template/terminal.html +11 -11
  440. mage_ai/server/frontend_dist_base_path_template/test.html +3 -5
  441. mage_ai/server/frontend_dist_base_path_template/triggers.html +11 -11
  442. mage_ai/server/frontend_dist_base_path_template/version-control.html +11 -11
  443. mage_ai/server/logger.py +8 -2
  444. mage_ai/server/server.py +18 -1
  445. mage_ai/services/aws/ecs/config.py +3 -3
  446. mage_ai/services/aws/ecs/ecs.py +2 -2
  447. mage_ai/services/search/block_action_objects.py +59 -5
  448. mage_ai/settings/models/configuration_option.py +3 -1
  449. mage_ai/settings/platform/__init__.py +54 -18
  450. mage_ai/settings/repo.py +5 -4
  451. mage_ai/shared/custom_logger.py +213 -0
  452. mage_ai/shared/environments.py +4 -0
  453. mage_ai/shared/files.py +52 -1
  454. mage_ai/shared/models.py +2 -1
  455. mage_ai/shared/parsers.py +8 -1
  456. mage_ai/shared/path_fixer.py +62 -5
  457. mage_ai/shared/retry.py +4 -0
  458. mage_ai/shared/strings.py +4 -0
  459. mage_ai/tests/api/endpoints/test_blocks.py +101 -1
  460. mage_ai/tests/api/operations/base/test_base_with_user_permissions.py +4 -1
  461. mage_ai/tests/base_test.py +21 -2
  462. mage_ai/tests/cache/test_pipeline_cache.py +11 -8
  463. mage_ai/tests/data_preparation/executors/test_block_executor.py +55 -45
  464. mage_ai/tests/data_preparation/git/test_api.py +4 -4
  465. mage_ai/tests/data_preparation/models/block/dbt/test_block.py +75 -43
  466. mage_ai/tests/data_preparation/models/block/dbt/test_block_sql.py +329 -329
  467. mage_ai/tests/data_preparation/models/block/dbt/test_block_yaml.py +296 -296
  468. mage_ai/tests/data_preparation/models/block/dbt/test_dbt_adapter.py +2 -2
  469. mage_ai/tests/data_preparation/models/block/dbt/test_dbt_cli.py +4 -4
  470. mage_ai/tests/data_preparation/models/block/dbt/test_profiles.py +2 -2
  471. mage_ai/tests/data_preparation/models/block/dbt/test_project.py +2 -2
  472. mage_ai/tests/data_preparation/models/block/dbt/test_sources.py +2 -2
  473. mage_ai/tests/data_preparation/models/block/dynamic/test_dynamic_child_block_factory.py +477 -474
  474. mage_ai/tests/data_preparation/models/block/dynamic/test_dynamic_helpers.py +25 -24
  475. mage_ai/tests/data_preparation/models/block/platform/test_mixins.py +16 -25
  476. mage_ai/tests/data_preparation/models/block/test_utils.py +8 -8
  477. mage_ai/tests/data_preparation/models/test_block.py +6 -8
  478. mage_ai/tests/data_preparation/models/test_project.py +10 -5
  479. mage_ai/tests/data_preparation/models/test_variable.py +51 -4
  480. mage_ai/tests/orchestration/test_pipeline_scheduler_project_platform.py +1 -0
  481. mage_ai/version_control/__init__.py +0 -0
  482. mage_ai/version_control/models.py +288 -0
  483. {mage_ai-0.9.58.dist-info → mage_ai-0.9.59.dist-info}/METADATA +6 -6
  484. {mage_ai-0.9.58.dist-info → mage_ai-0.9.59.dist-info}/RECORD +490 -476
  485. mage_ai/server/frontend_dist/_next/static/0XnQ0C0nTr1w0o9CGC7wQ/_buildManifest.js +0 -1
  486. mage_ai/server/frontend_dist/_next/static/chunks/1124-d8fc76201b83b376.js +0 -1
  487. mage_ai/server/frontend_dist/_next/static/chunks/1154-2f262f7eb38ebaa1.js +0 -1
  488. mage_ai/server/frontend_dist/_next/static/chunks/1235.53172e14801844e5.js +0 -1
  489. mage_ai/server/frontend_dist/_next/static/chunks/1550-32333b36ac6b061b.js +0 -1
  490. mage_ai/server/frontend_dist/_next/static/chunks/1557-7cfe722a9b83b935.js +0 -1
  491. mage_ai/server/frontend_dist/_next/static/chunks/1598-dd776e3a92e9cccd.js +0 -1
  492. mage_ai/server/frontend_dist/_next/static/chunks/1751-5adf859690505d7b.js +0 -1
  493. mage_ai/server/frontend_dist/_next/static/chunks/1952-b2197a87dd67d8e0.js +0 -1
  494. mage_ai/server/frontend_dist/_next/static/chunks/2056-0ea1faa46646a77e.js +0 -1
  495. mage_ai/server/frontend_dist/_next/static/chunks/2213-52267f1e9ef5751c.js +0 -1
  496. mage_ai/server/frontend_dist/_next/static/chunks/2474-352ae192b826d896.js +0 -1
  497. mage_ai/server/frontend_dist/_next/static/chunks/2512-46141494a1b75897.js +0 -1
  498. mage_ai/server/frontend_dist/_next/static/chunks/2717-accc279ae116b1b9.js +0 -1
  499. mage_ai/server/frontend_dist/_next/static/chunks/2852872c-15b31a7081e6a868.js +0 -1
  500. mage_ai/server/frontend_dist/_next/static/chunks/2886-9e73e1f48f248741.js +0 -1
  501. mage_ai/server/frontend_dist/_next/static/chunks/2920.86a65e5f26ff1795.js +0 -1
  502. mage_ai/server/frontend_dist/_next/static/chunks/3437-6055fd5aa82880f6.js +0 -1
  503. mage_ai/server/frontend_dist/_next/static/chunks/3449-214fce1a0e623b47.js +0 -1
  504. mage_ai/server/frontend_dist/_next/static/chunks/3494-23a9cc2cd649abac.js +0 -1
  505. mage_ai/server/frontend_dist/_next/static/chunks/3745-3662911c364d917b.js +0 -1
  506. mage_ai/server/frontend_dist/_next/static/chunks/3763-70c7eb1fc203c903.js +0 -1
  507. mage_ai/server/frontend_dist/_next/static/chunks/3943-a49377acc514e77f.js +0 -1
  508. mage_ai/server/frontend_dist/_next/static/chunks/4052-f89c85d2c8f51931.js +0 -1
  509. mage_ai/server/frontend_dist/_next/static/chunks/4296-14eaf96d6479e673.js +0 -1
  510. mage_ai/server/frontend_dist/_next/static/chunks/4804-1254a474f238d078.js +0 -1
  511. mage_ai/server/frontend_dist/_next/static/chunks/5283-9df961e430a79bea.js +0 -1
  512. mage_ai/server/frontend_dist/_next/static/chunks/5457-b373ebdf4d05d8e2.js +0 -1
  513. mage_ai/server/frontend_dist/_next/static/chunks/5499-bc2528f8e18f61a6.js +0 -1
  514. mage_ai/server/frontend_dist/_next/static/chunks/5810-e66141c1271bced6.js +0 -1
  515. mage_ai/server/frontend_dist/_next/static/chunks/5849-f30d8694e3318a81.js +0 -1
  516. mage_ai/server/frontend_dist/_next/static/chunks/5896-7b8e36634d7d94eb.js +0 -1
  517. mage_ai/server/frontend_dist/_next/static/chunks/6043-728790621ca9014c.js +0 -1
  518. mage_ai/server/frontend_dist/_next/static/chunks/6050-e48b7f97e96bbcb6.js +0 -1
  519. mage_ai/server/frontend_dist/_next/static/chunks/6285-648f9a732e100b2f.js +0 -1
  520. mage_ai/server/frontend_dist/_next/static/chunks/6639-74eefed142e14ea6.js +0 -1
  521. mage_ai/server/frontend_dist/_next/static/chunks/6965-c613d1834c8ed92d.js +0 -1
  522. mage_ai/server/frontend_dist/_next/static/chunks/7022-ea92cb336bd1aab8.js +0 -1
  523. mage_ai/server/frontend_dist/_next/static/chunks/7361-06ef4c642a8fe8c4.js +0 -1
  524. mage_ai/server/frontend_dist/_next/static/chunks/7858-677c641010ac9160.js +0 -1
  525. mage_ai/server/frontend_dist/_next/static/chunks/8125-b9d53e425b6ddc7e.js +0 -1
  526. mage_ai/server/frontend_dist/_next/static/chunks/8146-fb8f445644e573b0.js +0 -1
  527. mage_ai/server/frontend_dist/_next/static/chunks/8432-0ace6fb7bdbc6864.js +0 -1
  528. mage_ai/server/frontend_dist/_next/static/chunks/844-1e171f361e63b36d.js +0 -1
  529. mage_ai/server/frontend_dist/_next/static/chunks/9269-40e2101f56399dcc.js +0 -1
  530. mage_ai/server/frontend_dist/_next/static/chunks/9302-913007e2f801ad65.js +0 -1
  531. mage_ai/server/frontend_dist/_next/static/chunks/9440-c51bf1e8f271cb25.js +0 -1
  532. mage_ai/server/frontend_dist/_next/static/chunks/9624-89a4b20eb3b3c754.js +0 -1
  533. mage_ai/server/frontend_dist/_next/static/chunks/976-0a8c2c4d7acd957b.js +0 -1
  534. mage_ai/server/frontend_dist/_next/static/chunks/9775-c1142b1312e8f95d.js +0 -1
  535. mage_ai/server/frontend_dist/_next/static/chunks/pages/404-5ddd12931e0e3e41.js +0 -1
  536. mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-ec5e62e8e5bb4e4c.js +0 -1
  537. mage_ai/server/frontend_dist/_next/static/chunks/pages/block-layout-44d7291d8f29eb36.js +0 -1
  538. mage_ai/server/frontend_dist/_next/static/chunks/pages/compute-a6661a9c3647532a.js +0 -1
  539. mage_ai/server/frontend_dist/_next/static/chunks/pages/files-26b899d3adb4ed19.js +0 -1
  540. mage_ai/server/frontend_dist/_next/static/chunks/pages/global-data-products/[...slug]-9bd164317e652311.js +0 -1
  541. mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks/[...slug]-c87d46dc53e35638.js +0 -1
  542. mage_ai/server/frontend_dist/_next/static/chunks/pages/global-hooks-24785a5ed4eb340d.js +0 -1
  543. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/files-2c5fd116ecfacb33.js +0 -1
  544. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/settings-8c9285af31efa3fd.js +0 -1
  545. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-ec7e0419a64ae3b2.js +0 -1
  546. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/new-039e083cc068da54.js +0 -1
  547. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-8e4d4f6edc515265.js +0 -1
  548. mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-b73185fdcb7a131c.js +0 -1
  549. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-97b3335bf60f8b07.js +0 -1
  550. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-83de126136539668.js +0 -1
  551. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-50f45e96892cfb63.js +0 -1
  552. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-5fe0f1de6fd365f8.js +0 -1
  553. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-306db9e11fa94d21.js +0 -1
  554. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-ebea4be0562b08e3.js +0 -1
  555. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-f09d21d5c2661504.js +0 -1
  556. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-61e770f155ae22ef.js +0 -1
  557. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-d347a4614130e2ab.js +0 -1
  558. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-056c5e5080a3754f.js +0 -1
  559. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-208fa8de91f152bc.js +0 -1
  560. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-a32e02f46a816eb3.js +0 -1
  561. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-8012388b15f0e0a5.js +0 -1
  562. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-6714c72f90923cfb.js +0 -1
  563. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-afc0525ef27fe1f2.js +0 -1
  564. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-a91e7d86cd0540d9.js +0 -1
  565. mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks/[...slug]-7c8e5a8908fe9c83.js +0 -1
  566. mage_ai/server/frontend_dist/_next/static/chunks/pages/platform/global-hooks-be0684d1527587d8.js +0 -1
  567. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-147660a34351147c.js +0 -1
  568. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-ec5f01b683920ced.js +0 -1
  569. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/settings-28aa4512c0e23ec5.js +0 -1
  570. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/permissions-a2850b2e0a282d16.js +0 -1
  571. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-b1df80674dca4713.js +0 -1
  572. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-41abcd2241958dc8.js +0 -1
  573. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-a2c5859f53b5e9e1.js +0 -1
  574. mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-1aea2a0c373bc6ae.js +0 -1
  575. mage_ai/server/frontend_dist/_next/static/chunks/pages/templates/[...slug]-e7485742708215d2.js +0 -1
  576. mage_ai/server/frontend_dist/_next/static/chunks/pages/templates-b4086d30a89d6801.js +0 -1
  577. mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-3cd171f43f0a0df8.js +0 -1
  578. mage_ai/server/frontend_dist/_next/static/chunks/pages/test-6a22493285c47ba2.js +0 -1
  579. mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-ad20a31dde4fe59b.js +0 -1
  580. mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-267952b4c87927c7.js +0 -1
  581. mage_ai/server/frontend_dist_base_path_template/_next/static/RC0Yenm06LvZI-RWFoT5C/_buildManifest.js +0 -1
  582. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1124-d8fc76201b83b376.js +0 -1
  583. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1154-2f262f7eb38ebaa1.js +0 -1
  584. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1235.53172e14801844e5.js +0 -1
  585. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1550-32333b36ac6b061b.js +0 -1
  586. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1557-7cfe722a9b83b935.js +0 -1
  587. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1598-dd776e3a92e9cccd.js +0 -1
  588. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1751-5adf859690505d7b.js +0 -1
  589. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/1952-b2197a87dd67d8e0.js +0 -1
  590. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2056-0ea1faa46646a77e.js +0 -1
  591. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2213-52267f1e9ef5751c.js +0 -1
  592. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2474-352ae192b826d896.js +0 -1
  593. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2512-46141494a1b75897.js +0 -1
  594. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2717-accc279ae116b1b9.js +0 -1
  595. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2852872c-15b31a7081e6a868.js +0 -1
  596. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2886-9e73e1f48f248741.js +0 -1
  597. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/2920.86a65e5f26ff1795.js +0 -1
  598. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3437-6055fd5aa82880f6.js +0 -1
  599. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3449-214fce1a0e623b47.js +0 -1
  600. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3494-23a9cc2cd649abac.js +0 -1
  601. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3745-3662911c364d917b.js +0 -1
  602. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3763-70c7eb1fc203c903.js +0 -1
  603. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3943-a49377acc514e77f.js +0 -1
  604. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/4052-f89c85d2c8f51931.js +0 -1
  605. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/4296-14eaf96d6479e673.js +0 -1
  606. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/4804-1254a474f238d078.js +0 -1
  607. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5283-9df961e430a79bea.js +0 -1
  608. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5457-b373ebdf4d05d8e2.js +0 -1
  609. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5499-bc2528f8e18f61a6.js +0 -1
  610. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5810-e66141c1271bced6.js +0 -1
  611. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5849-f30d8694e3318a81.js +0 -1
  612. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5896-7b8e36634d7d94eb.js +0 -1
  613. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6043-728790621ca9014c.js +0 -1
  614. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6050-e48b7f97e96bbcb6.js +0 -1
  615. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6285-648f9a732e100b2f.js +0 -1
  616. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6639-74eefed142e14ea6.js +0 -1
  617. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/6965-c613d1834c8ed92d.js +0 -1
  618. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7022-ea92cb336bd1aab8.js +0 -1
  619. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7361-06ef4c642a8fe8c4.js +0 -1
  620. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/7858-677c641010ac9160.js +0 -1
  621. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8125-b9d53e425b6ddc7e.js +0 -1
  622. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8146-fb8f445644e573b0.js +0 -1
  623. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/8432-0ace6fb7bdbc6864.js +0 -1
  624. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/844-1e171f361e63b36d.js +0 -1
  625. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9269-40e2101f56399dcc.js +0 -1
  626. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9302-913007e2f801ad65.js +0 -1
  627. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9440-c51bf1e8f271cb25.js +0 -1
  628. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9624-89a4b20eb3b3c754.js +0 -1
  629. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/976-0a8c2c4d7acd957b.js +0 -1
  630. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/9775-c1142b1312e8f95d.js +0 -1
  631. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/404-5ddd12931e0e3e41.js +0 -1
  632. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-ec5e62e8e5bb4e4c.js +0 -1
  633. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/block-layout-44d7291d8f29eb36.js +0 -1
  634. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/compute-a6661a9c3647532a.js +0 -1
  635. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/files-26b899d3adb4ed19.js +0 -1
  636. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-data-products/[...slug]-9bd164317e652311.js +0 -1
  637. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks/[...slug]-c87d46dc53e35638.js +0 -1
  638. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/global-hooks-24785a5ed4eb340d.js +0 -1
  639. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/files-2c5fd116ecfacb33.js +0 -1
  640. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/settings-8c9285af31efa3fd.js +0 -1
  641. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-ec7e0419a64ae3b2.js +0 -1
  642. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/new-039e083cc068da54.js +0 -1
  643. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage-8e4d4f6edc515265.js +0 -1
  644. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-b73185fdcb7a131c.js +0 -1
  645. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipeline-runs-97b3335bf60f8b07.js +0 -1
  646. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-83de126136539668.js +0 -1
  647. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-50f45e96892cfb63.js +0 -1
  648. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/dashboard-5fe0f1de6fd365f8.js +0 -1
  649. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-306db9e11fa94d21.js +0 -1
  650. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-ebea4be0562b08e3.js +0 -1
  651. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-f09d21d5c2661504.js +0 -1
  652. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-61e770f155ae22ef.js +0 -1
  653. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/monitors-d347a4614130e2ab.js +0 -1
  654. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-056c5e5080a3754f.js +0 -1
  655. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs-208fa8de91f152bc.js +0 -1
  656. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-a32e02f46a816eb3.js +0 -1
  657. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-8012388b15f0e0a5.js +0 -1
  658. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-6714c72f90923cfb.js +0 -1
  659. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-afc0525ef27fe1f2.js +0 -1
  660. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-a91e7d86cd0540d9.js +0 -1
  661. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks/[...slug]-7c8e5a8908fe9c83.js +0 -1
  662. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/platform/global-hooks-be0684d1527587d8.js +0 -1
  663. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/account/profile-147660a34351147c.js +0 -1
  664. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-ec5f01b683920ced.js +0 -1
  665. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/settings-28aa4512c0e23ec5.js +0 -1
  666. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/permissions-a2850b2e0a282d16.js +0 -1
  667. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-b1df80674dca4713.js +0 -1
  668. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/sync-data-41abcd2241958dc8.js +0 -1
  669. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/users-a2c5859f53b5e9e1.js +0 -1
  670. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-1aea2a0c373bc6ae.js +0 -1
  671. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates/[...slug]-e7485742708215d2.js +0 -1
  672. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/templates-b4086d30a89d6801.js +0 -1
  673. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/terminal-3cd171f43f0a0df8.js +0 -1
  674. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/test-6a22493285c47ba2.js +0 -1
  675. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-ad20a31dde4fe59b.js +0 -1
  676. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/version-control-267952b4c87927c7.js +0 -1
  677. /mage_ai/server/frontend_dist/_next/static/{0XnQ0C0nTr1w0o9CGC7wQ → PPQxHOmWVJ0iQFzG2rc8m}/_ssgManifest.js +0 -0
  678. /mage_ai/server/frontend_dist_base_path_template/_next/static/{RC0Yenm06LvZI-RWFoT5C → do4WOsw7lNhouR0mtPTFi}/_ssgManifest.js +0 -0
  679. {mage_ai-0.9.58.dist-info → mage_ai-0.9.59.dist-info}/LICENSE +0 -0
  680. {mage_ai-0.9.58.dist-info → mage_ai-0.9.59.dist-info}/WHEEL +0 -0
  681. {mage_ai-0.9.58.dist-info → mage_ai-0.9.59.dist-info}/entry_points.txt +0 -0
  682. {mage_ai-0.9.58.dist-info → mage_ai-0.9.59.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,12 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta content="width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=0" name="viewport"/><title>Version control | Mage</title><meta name="next-head-count" content="3"/><link href="/favicon.ico" rel="icon"/><link rel="preload" href="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/css/d1e8e64d0b07af2f.css" as="style"/><link rel="stylesheet" href="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/css/d1e8e64d0b07af2f.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/webpack-d30cb09c85b4c4f0.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/framework-22b71764bf44ede4.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/main-70b78159c2bb3fe1.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/pages/_app-ec5e62e8e5bb4e4c.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/2852872c-15b31a7081e6a868.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/1154-2f262f7eb38ebaa1.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/844-1e171f361e63b36d.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/7011-81dd8269c4806d26.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/6965-c613d1834c8ed92d.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/3494-23a9cc2cd649abac.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/1557-7cfe722a9b83b935.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/2512-46141494a1b75897.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/7858-677c641010ac9160.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/5499-bc2528f8e18f61a6.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/5283-9df961e430a79bea.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/9269-40e2101f56399dcc.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/pages/version-control-267952b4c87927c7.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/RC0Yenm06LvZI-RWFoT5C/_buildManifest.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/RC0Yenm06LvZI-RWFoT5C/_ssgManifest.js" defer=""></script><style data-styled="" data-styled-version="5.3.6">html{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-overflow-style:scrollbar;}/*!sc*/
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta content="width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=0" name="viewport"/><title>Version control | Mage</title><meta name="next-head-count" content="3"/><link href="/favicon.ico" rel="icon"/><link rel="preload" href="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/css/b59541b123fd7191.css" as="style"/><link rel="stylesheet" href="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/css/b59541b123fd7191.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/webpack-bd35e1c7bd7b5a9a.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/framework-22b71764bf44ede4.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/main-70b78159c2bb3fe1.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/pages/_app-a11bd2ebe11b3fd2.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/6085-692d2f784c0504f2.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/7011-81dd8269c4806d26.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/1557-4f7485c2e2228f77.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/8038-85d715c8c8394827.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/2479-727fa69ee9be6fab.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/3449-a9c98239582cd6f0.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/8192-0c0b91523a38c4ca.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/chunks/pages/version-control-5ce099a7abb354ff.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/do4WOsw7lNhouR0mtPTFi/_buildManifest.js" defer=""></script><script src="/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_/_next/static/do4WOsw7lNhouR0mtPTFi/_ssgManifest.js" defer=""></script><style data-styled="" data-styled-version="5.3.6">html{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-overflow-style:scrollbar;}/*!sc*/
2
2
  *,*::before,*::after{-webkit-box-sizing:inherit;box-sizing:inherit;}/*!sc*/
3
3
  data-styled.g4[id="sc-global-czSCUT1"]{content:"sc-global-czSCUT1,"}/*!sc*/
4
+ .dKQluW{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}/*!sc*/
5
+ data-styled.g5[id="Flex-sc-sgfnl9-0"]{content:"dKQluW,"}/*!sc*/
6
+ .hDBiHu{padding-left:16px;padding-right:16px;padding-top:16px;padding-bottom:16px;}/*!sc*/
7
+ data-styled.g7[id="Spacing__SpacingStyle-sc-1mpmtgj-0"]{content:"hDBiHu,"}/*!sc*/
8
+ .gbXfes{height:48px;left:0;padding-left:16px;padding-right:16px;position:fixed;top:0;width:100%;z-index:10;background-color:#232429;border-bottom:1px solid #1C1C1C;}/*!sc*/
9
+ data-styled.g183[id="indexstyle__HeaderStyle-sc-1bk8irg-0"]{content:"gbXfes,"}/*!sc*/
4
10
  .kOVcuR .Toastify__toast-container{margin-top:24px;padding:0 !important;width:500px !important;}/*!sc*/
5
11
  .kOVcuR .Toastify__toast{border-radius:8px !important;font-family:Greycliff Medium,Helvetica Neue,Helvetica,sans-serif !important;font-size:14px !important;line-height:20px !important;margin-bottom:0 !important;margin-left:0 !important;margin-right:0 !important;margin-top:16px !important;min-height:0 !important;padding:16px !important;}/*!sc*/
6
12
  .kOVcuR .Toastify__toast-body{margin:0 !important;}/*!sc*/
@@ -8,17 +14,11 @@ data-styled.g4[id="sc-global-czSCUT1"]{content:"sc-global-czSCUT1,"}/*!sc*/
8
14
  .kOVcuR .Toastify__toast--info{background:#00A81A !important;color:#FFFFFF !important;}/*!sc*/
9
15
  .kOVcuR .Toastify__toast--success{background:#00A81A !important;color:#FFFFFF !important;}/*!sc*/
10
16
  .kOVcuR .Toastify__toast--warning{background:#DD9900 !important;color:#FFFFFF !important;}/*!sc*/
11
- data-styled.g5[id="ToastWrapper-sc-1a33ph1-0"]{content:"kOVcuR,"}/*!sc*/
12
- .dKQluW{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}/*!sc*/
13
- data-styled.g6[id="Flex-sc-sgfnl9-0"]{content:"dKQluW,"}/*!sc*/
14
- .hDBiHu{padding-left:16px;padding-right:16px;padding-top:16px;padding-bottom:16px;}/*!sc*/
15
- data-styled.g8[id="Spacing__SpacingStyle-sc-1mpmtgj-0"]{content:"hDBiHu,"}/*!sc*/
16
- .gbXfes{height:48px;left:0;padding-left:16px;padding-right:16px;position:fixed;top:0;width:100%;z-index:10;background-color:#232429;border-bottom:1px solid #1C1C1C;}/*!sc*/
17
- data-styled.g78[id="indexstyle__HeaderStyle-sc-1bk8irg-0"]{content:"gbXfes,"}/*!sc*/
17
+ data-styled.g212[id="ToastWrapper-sc-1a33ph1-0"]{content:"kOVcuR,"}/*!sc*/
18
18
  .ijwRXz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;height:calc(100vh - 48px);position:fixed;top:48px;width:100%;background-color:#1E1F24;}/*!sc*/
19
- data-styled.g80[id="indexstyle__ContainerStyle-sc-ecogjt-0"]{content:"ijwRXz,"}/*!sc*/
19
+ data-styled.g227[id="indexstyle__ContainerStyle-sc-ecogjt-0"]{content:"ijwRXz,"}/*!sc*/
20
20
  .jQArIy{height:100%;background-color:#232429;border-right:1px solid #1C1C1C;}/*!sc*/
21
21
  @-webkit-keyframes animate-in{0%{width:168px;}100%{width:272px;}}/*!sc*/
22
22
  @keyframes animate-in{0%{width:168px;}100%{width:272px;}}/*!sc*/
23
- data-styled.g81[id="indexstyle__VerticalNavigationStyleComponent-sc-ecogjt-1"]{content:"jQArIy,"}/*!sc*/
24
- </style></head><body><div id="__next"><div class="" style="position:fixed;top:0;left:0;height:2px;background:transparent;z-index:99999999999;width:100%"><div class="" style="height:100%;background:#FF144D;transition:all 500ms ease;width:0%"><div style="box-shadow:0 0 10px #FF144D, 0 0 10px #FF144D;width:5%;opacity:1;position:absolute;height:100%;transition:all 500ms ease;transform:rotate(3deg) translate(0px, -4px);left:-10rem"></div></div></div><div class="indexstyle__HeaderStyle-sc-1bk8irg-0 gbXfes"><div></div></div><div class="indexstyle__ContainerStyle-sc-ecogjt-0 ijwRXz"><div class="indexstyle__VerticalNavigationStyleComponent-sc-ecogjt-1 jQArIy"><div class="Spacing__SpacingStyle-sc-1mpmtgj-0 hDBiHu"><div></div></div></div><div class="Flex-sc-sgfnl9-0 dKQluW"><div></div></div></div><div></div><div></div><div></div><div class="ToastWrapper-sc-1a33ph1-0 kOVcuR"><div class="Toastify"></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"auth":{"decodedToken":{"expires":0,"token":null}}},"currentTheme":{"accent":{"alert":"#F6540B","blue":"#4877FF","blueLight":"rgba(72, 119, 255, 0.5)","contentDefaultTransparent":"rgba(174, 174, 174, 0.5)","cyan":"#65E3FF","cyanLight":"rgba(101, 227, 255, 0.3)","cyanTransparent":"rgba(101, 227, 255, 0.12)","dbt":"#fc6949","dbtDark":"rgba(252, 105, 73, 0.3)","dbtLight":"rgba(252, 105, 73, 0.5)","info":"#00ABFF","infoTransparent":"rgba(0, 171, 255, 0.5)","negative":"#FF1E59","negativeTransparent":"rgba(255, 30, 89, 0.3)","pink":"#FF4FF8","pinkLight":"rgb(255, 79, 248, 0.5)","positive":"#00A81A","primaryTransparent":"rgba(155, 108, 167, 0.5)","purple":"#7D55EC","purpleLight":"rgba(125, 85, 236, 0.5)","rose":"#D1A2AB","roseLight":"rgba(209, 162, 171, 0.5)","sky":"#6AA1E0","skyLight":"rgba(106, 161, 224, 0.05)","teal":"#00B4CC","tealLight":"rgba(0, 180, 204, 0.5)","warning":"#DD9900","warningTransparent":"rgba(221, 153, 0, 0.5)","yellow":"#FFCC19","yellowLight":"rgba(255, 204, 25, 0.5)"},"background":{"chartBlock":"#2E3036","codeArea":"#1E1F24","codeTextarea":"#000000","content":"#1B1C20","danger":"#FFD0DB","dark":"#B1B8C3","dashboard":"#18181C","header":"#1B1B1B","menu":"#0F4CFF","muted":"#F9FAFC","navigation":"#EDEDED","output":"#2E3036","page":"#1E1F24","panel":"#232429","popup":"#27292E","row":"#2C2C2C","row2":"#51535C","scrollbarThumb":"rgba(100, 100, 100, 0.5)","scrollbarThumbHover":"rgba(255, 255, 255, 0.3)","scrollbarTrack":"#2E3036","success":"#8ADE00","successLight":"rgb(138, 222, 0, 0.3)","table":"#292A2F","tag":"#3A4550"},"borders":{"button":"#454850","contrast":"#FFFFFF","danger":"#FF144D","dark":"#000000","darkLight":"#2E3036","info":"#FFCC19","light":"#2F3034","medium":"#1C1C1C","medium2":"#141414","success":"#2FCB52"},"brand":{"earth100":"#C6EEDB","earth200":"#9DDFBF","earth300":"#6BBF96","earth400":"#37A46F","earth400Transparent":"rgba(55, 164, 111, 0.4)","earth500":"#00954C","energy100":"#FFF4BA","energy200":"#FFED92","energy300":"#FFE662","energy400":"#FFDA19","energy400Transparent":"rgba(255, 218, 25, 0.04)","energy500":"#F6C000","fire100":"#FFD7E0","fire200":"#FFA3B9","fire300":"#FF547D","fire400":"#FF144D","fire400Transparent":"rgba(255, 20, 77, 0.4)","fire500":"#EB0032","stone100":"#F3E6D7","stone200":"#E3D4C2","stone400":"#BFA78B","stone500":"#AF8859","water100":"#BDCEFF","water200":"#81A1FF","water300":"#517DFF","water400":"#2A60FE","water400Transparent":"rgba(42, 96, 254, 0.4)","water500":"#0F4CFF","wind100":"#EEEAFF","wind200":"#CCC1F4","wind300":"#A698DD","wind400":"#6B50D7","wind400SuperTransparent":"rgba(107, 80, 215, 0.12)","wind400Transparent":"rgba(107, 80, 215, 0.4)","wind500":"#4E32BC"},"chart":{"backgroundPrimary":"#7D55EC","backgroundSecondary":"#FF144D","backgroundTertiary":"#86E2FF","button1":"#4877FF","button2":"#FFCC19","button3":"#8ADE00","button4":"#FF4FF8","button5":"#B98D95","lines":"#9B6CA7","primary":"#6B50D7","secondary":"#FF144D","tertiary":"#2A60FE"},"content":{"active":"#FFFFFF","default":"#AEAEAE","disabled":"rgba(255, 255, 255, 0.3)","inverted":"#2C2C2C","muted":"#787A85"},"elevation":{"visualizationAccent":"#996CFF","visualizationAccentAlt":"#C1ACF7"},"feature":{"active":"rgba(250, 248, 254, 0.14)","disabled":"rgba(201, 206, 218, 0.12)"},"icons":{"neutral":"#787878"},"interactive":{"activeBorder":"#060606","checked":"#060606","dangerBorder":"#FF144D","defaultBackground":"#36383F","defaultBorder":"#ffffff1a","disabledBorder":"#B1B8C3","focusBackground":"#B1B8C3","focusBorder":"#86E2FF","hoverBackground":"#4E4E4E","hoverBorder":"#B9BFCA","hoverOverlay":"rgba(255, 255, 255, 0.1)","linkPrimary":"#1752FF","linkPrimaryHover":"#4877FF","linkPrimaryLight":"#5982ff","linkSecondary":"#6B50D7","linkSecondaryDisabled":"#C4B9EF","linkText":"#6AA1E0","linkTextLight":"#9ECBFF","purple":"#885EFF","rowHoverBackground":"rgba(0, 0, 0, 0.1)","transparent":"rgba(255, 255, 255, 0)"},"loader":{"color":"#EB0032","colorInverted":"#8ADE00"},"logo":{"color":"#FFFFFF"},"monotone":{"black":"#060606","blackTransparent":"rgba(0, 0, 0, 0.6)","gray":"#B1B8C3","grey100":"#F2F2F2","grey200":"#D5D7DC","grey300":"#B4B8C0","grey400":"#70747C","grey500":"#51535C","purple":"#6B50D7","white":"#FFFFFF","whiteTransparent":"rgba(255, 255, 255, 0.6)"},"neutral":{"n100":"#E7E8EA","n200":"#D8DADE","n300":"#CBCCD0","n400":"#BCBEC4","n500":"#AEB0B6"},"progress":{"negative":"#FF144D","positive":"#6B50D7"},"shadow":{"base":"12px 40px 120px rgba(0, 0, 0, 0.3)","frame":"0px 10px 40px rgba(0, 0, 0, 0.26)","menu":"4px 10px 20px rgba(6, 6, 6, 0.12)","popup":"10px 20px 40px rgba(0, 0, 0, 0.2)","small":"0px, 4px, rgba(0, 0, 0, 0.25)","window":"0px 10px 60px rgba(0, 0, 0, 0.7)"},"status":{"negative":"#FF144D","positive":"#24B400"},"text":{"fileBrowser":"#787A85"}}},"page":"/version-control","query":{},"buildId":"RC0Yenm06LvZI-RWFoT5C","assetPrefix":"/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_","nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
23
+ data-styled.g228[id="indexstyle__VerticalNavigationStyleComponent-sc-ecogjt-1"]{content:"jQArIy,"}/*!sc*/
24
+ </style></head><body><div id="__next"><div class="" style="position:fixed;top:0;left:0;height:2px;background:transparent;z-index:99999999999;width:100%"><div class="" style="height:100%;background:#FF144D;transition:all 500ms ease;width:0%"><div style="box-shadow:0 0 10px #FF144D, 0 0 10px #FF144D;width:5%;opacity:1;position:absolute;height:100%;transition:all 500ms ease;transform:rotate(3deg) translate(0px, -4px);left:-10rem"></div></div></div><div class="indexstyle__HeaderStyle-sc-1bk8irg-0 gbXfes"><div></div></div><div class="indexstyle__ContainerStyle-sc-ecogjt-0 ijwRXz"><div class="indexstyle__VerticalNavigationStyleComponent-sc-ecogjt-1 jQArIy"><div class="Spacing__SpacingStyle-sc-1mpmtgj-0 hDBiHu"><div></div></div></div><div class="Flex-sc-sgfnl9-0 dKQluW"><div></div></div></div><div></div><div></div><div></div><div class="ToastWrapper-sc-1a33ph1-0 kOVcuR"><div class="Toastify"></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"auth":{"decodedToken":{"expires":0,"token":null}}},"currentTheme":{"accent":{"alert":"#F6540B","blue":"#4877FF","blueLight":"rgba(72, 119, 255, 0.5)","contentDefaultTransparent":"rgba(174, 174, 174, 0.5)","cyan":"#65E3FF","cyanLight":"rgba(101, 227, 255, 0.3)","cyanTransparent":"rgba(101, 227, 255, 0.12)","dbt":"#fc6949","dbtDark":"rgba(252, 105, 73, 0.3)","dbtLight":"rgba(252, 105, 73, 0.5)","info":"#00ABFF","infoTransparent":"rgba(0, 171, 255, 0.5)","negative":"#FF1E59","negativeTransparent":"rgba(255, 30, 89, 0.3)","pink":"#FF4FF8","pinkLight":"rgb(255, 79, 248, 0.5)","positive":"#00A81A","primaryTransparent":"rgba(155, 108, 167, 0.5)","purple":"#7D55EC","purpleLight":"rgba(125, 85, 236, 0.5)","rose":"#D1A2AB","roseLight":"rgba(209, 162, 171, 0.5)","sky":"#6AA1E0","skyLight":"rgba(106, 161, 224, 0.5)","teal":"#00B4CC","tealLight":"rgba(0, 180, 204, 0.5)","warning":"#DD9900","warningTransparent":"rgba(221, 153, 0, 0.5)","yellow":"#FFCC19","yellowLight":"rgba(255, 204, 25, 0.5)"},"background":{"chartBlock":"#2E3036","codeArea":"#1E1F24","codeTextarea":"#000000","content":"#1B1C20","danger":"#FFD0DB","dark":"#B1B8C3","dashboard":"#18181C","header":"#1B1B1B","menu":"#0F4CFF","muted":"#F9FAFC","navigation":"#EDEDED","output":"#2E3036","page":"#1E1F24","panel":"#232429","panelTransparent":"rgba(35, 36, 41, 0.7)","popup":"#27292E","row":"#2C2C2C","row2":"#51535C","scrollbarThumb":"rgba(100, 100, 100, 0.5)","scrollbarThumbHover":"rgba(255, 255, 255, 0.3)","scrollbarTrack":"#2E3036","success":"#8ADE00","successLight":"rgb(138, 222, 0, 0.3)","table":"#292A2F","tag":"#3A4550"},"borders":{"button":"#454850","contrast":"#FFFFFF","danger":"#FF144D","dark":"#000000","darkLight":"#2E3036","info":"#FFCC19","light":"#2F3034","medium":"#1C1C1C","medium2":"#141414","success":"#2FCB52"},"brand":{"earth100":"#C6EEDB","earth200":"#9DDFBF","earth300":"#6BBF96","earth400":"#37A46F","earth400Transparent":"rgba(55, 164, 111, 0.4)","earth500":"#00954C","energy100":"#FFF4BA","energy200":"#FFED92","energy300":"#FFE662","energy400":"#FFDA19","energy400Transparent":"rgba(255, 218, 25, 0.04)","energy500":"#F6C000","fire100":"#FFD7E0","fire200":"#FFA3B9","fire300":"#FF547D","fire400":"#FF144D","fire400Transparent":"rgba(255, 20, 77, 0.4)","fire500":"#EB0032","stone100":"#F3E6D7","stone200":"#E3D4C2","stone400":"#BFA78B","stone500":"#AF8859","water100":"#BDCEFF","water200":"#81A1FF","water300":"#517DFF","water400":"#2A60FE","water400Transparent":"rgba(42, 96, 254, 0.4)","water500":"#0F4CFF","wind100":"#EEEAFF","wind200":"#CCC1F4","wind300":"#A698DD","wind400":"#6B50D7","wind400SuperTransparent":"rgba(107, 80, 215, 0.12)","wind400Transparent":"rgba(107, 80, 215, 0.4)","wind500":"#4E32BC"},"chart":{"backgroundPrimary":"#7D55EC","backgroundSecondary":"#FF144D","backgroundTertiary":"#86E2FF","button1":"#4877FF","button2":"#FFCC19","button3":"#8ADE00","button4":"#FF4FF8","button5":"#B98D95","lines":"#9B6CA7","primary":"#6B50D7","secondary":"#FF144D","tertiary":"#2A60FE"},"content":{"active":"#FFFFFF","default":"#AEAEAE","disabled":"rgba(255, 255, 255, 0.3)","inverted":"#2C2C2C","muted":"#787A85"},"elevation":{"visualizationAccent":"#996CFF","visualizationAccentAlt":"#C1ACF7"},"feature":{"active":"rgba(250, 248, 254, 0.14)","disabled":"rgba(201, 206, 218, 0.12)"},"icons":{"neutral":"#787878"},"interactive":{"activeBorder":"#060606","checked":"#060606","dangerBorder":"#FF144D","defaultBackground":"#36383F","defaultBackgroundTransparent":"rgba(54, 56, 63, 0.5)","defaultBorder":"#ffffff1a","disabledBorder":"#B1B8C3","focusBackground":"#B1B8C3","focusBorder":"#86E2FF","hoverBackground":"#4E4E4E","hoverBackgroundTransparent":"rgba(78, 78, 78, 0.5)","hoverBorder":"#B9BFCA","hoverOverlay":"rgba(255, 255, 255, 0.1)","linkPrimary":"#1752FF","linkPrimaryHover":"#4877FF","linkPrimaryLight":"#5982ff","linkSecondary":"#6B50D7","linkSecondaryDisabled":"#C4B9EF","linkText":"#6AA1E0","linkTextLight":"#9ECBFF","purple":"#885EFF","rowHoverBackground":"rgba(0, 0, 0, 0.1)","transparent":"rgba(255, 255, 255, 0)"},"loader":{"color":"#EB0032","colorInverted":"#8ADE00"},"logo":{"color":"#FFFFFF"},"monotone":{"black":"#060606","blackTransparent":"rgba(0, 0, 0, 0.6)","gray":"#B1B8C3","grey100":"#F2F2F2","grey200":"#D5D7DC","grey300":"#B4B8C0","grey400":"#70747C","grey500":"#51535C","purple":"#6B50D7","white":"#FFFFFF","whiteTransparent":"rgba(255, 255, 255, 0.6)"},"neutral":{"n100":"#E7E8EA","n200":"#D8DADE","n300":"#CBCCD0","n400":"#BCBEC4","n500":"#AEB0B6"},"progress":{"negative":"#FF144D","positive":"#6B50D7"},"shadow":{"base":"12px 40px 120px rgba(0, 0, 0, 0.3)","frame":"0px 10px 40px rgba(0, 0, 0, 0.26)","menu":"4px 10px 20px rgba(6, 6, 6, 0.12)","popup":"10px 20px 40px rgba(0, 0, 0, 0.2)","small":"0px, 4px, rgba(0, 0, 0, 0.25)","window":"0px 10px 60px rgba(0, 0, 0, 0.7)"},"status":{"negative":"#FF144D","positive":"#24B400"},"text":{"fileBrowser":"#787A85"}}},"page":"/version-control","query":{},"buildId":"do4WOsw7lNhouR0mtPTFi","assetPrefix":"/CLOUD_NOTEBOOK_BASE_PATH_PLACEHOLDER_","nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
mage_ai/server/logger.py CHANGED
@@ -1,6 +1,9 @@
1
+ import logging
2
+
1
3
  from mage_ai.settings import SERVER_VERBOSITY
4
+ from mage_ai.shared.custom_logger import DX_LOGGER
5
+ from mage_ai.shared.environments import is_deus_ex_machina
2
6
  from mage_ai.shared.logger import LoggingLevel
3
- import logging
4
7
 
5
8
 
6
9
  class Logger:
@@ -8,7 +11,10 @@ class Logger:
8
11
  return self.new_logger_with_verbosity(name, SERVER_VERBOSITY)
9
12
 
10
13
  def new_logger_with_verbosity(self, name, level: str):
11
- server_logger = logging.getLogger(name)
14
+ if is_deus_ex_machina():
15
+ server_logger = DX_LOGGER
16
+ else:
17
+ server_logger = logging.getLogger(name)
12
18
  if LoggingLevel.is_valid_level(level):
13
19
  server_logger.setLevel(level.upper())
14
20
  else:
mage_ai/server/server.py CHANGED
@@ -22,6 +22,7 @@ from mage_ai.authentication.passwords import create_bcrypt_hash, generate_salt
22
22
  from mage_ai.cache.block import BlockCache
23
23
  from mage_ai.cache.block_action_object import BlockActionObjectCache
24
24
  from mage_ai.cache.dbt.cache import DBTCache
25
+ from mage_ai.cache.file import FileCache
25
26
  from mage_ai.cache.pipeline import PipelineCache
26
27
  from mage_ai.cache.tag import TagCache
27
28
  from mage_ai.cluster_manager.constants import ClusterType
@@ -41,7 +42,7 @@ from mage_ai.data_preparation.shared.constants import MANAGE_ENV_VAR
41
42
  from mage_ai.data_preparation.sync import GitConfig
42
43
  from mage_ai.data_preparation.sync.git_sync import GitSync
43
44
  from mage_ai.orchestration.constants import Entity
44
- from mage_ai.orchestration.db import db_connection
45
+ from mage_ai.orchestration.db import db_connection, set_db_schema
45
46
  from mage_ai.orchestration.db.database_manager import database_manager
46
47
  from mage_ai.orchestration.db.models.oauth import Oauth2Application, Role, User
47
48
  from mage_ai.orchestration.utils.distributed_lock import DistributedLock
@@ -525,6 +526,8 @@ async def main(
525
526
  await BlockCache.initialize_cache(replace=True, caches=[PipelineCache])
526
527
  except Exception as err:
527
528
  print(f'[ERROR] PipelineCache.initialize_cache: {err}.')
529
+ if is_debug():
530
+ raise err
528
531
 
529
532
  logger.info('Initializing tag cache.')
530
533
  await TagCache.initialize_cache(replace=True)
@@ -549,6 +552,19 @@ async def main(
549
552
  if is_debug():
550
553
  raise err
551
554
 
555
+ if project_model.is_feature_enabled(FeatureUUID.COMMAND_CENTER):
556
+ try:
557
+ logger.info('Initializing file cache.')
558
+ file_cache = FileCache.initialize_cache_with_settings(replace=True)
559
+ count = len(file_cache._temp_data) if file_cache._temp_data else 0
560
+ logger.info(
561
+ f'{count} files cached in {file_cache.file_path}.',
562
+ )
563
+ except Exception as err:
564
+ print(f'[ERROR] FileCache.initialize_cache_with_settings: {err}.')
565
+ if is_debug():
566
+ raise err
567
+
552
568
  try:
553
569
  from mage_ai.services.ssh.aws.emr.models import create_tunnel
554
570
 
@@ -618,6 +634,7 @@ def start_server(
618
634
  if dbt_docs:
619
635
  run_docs_server()
620
636
  else:
637
+ set_db_schema()
621
638
  run_web_server = True
622
639
  project_type = get_project_type()
623
640
  if manage or project_type == ProjectType.MAIN:
@@ -1,6 +1,6 @@
1
1
  import os
2
2
  from dataclasses import dataclass, field
3
- from typing import Dict, List
3
+ from typing import Dict, List, Union
4
4
 
5
5
  import boto3
6
6
  import requests
@@ -67,7 +67,7 @@ class EcsConfig(BaseConfig):
67
67
  container_name=container_name,
68
68
  )
69
69
 
70
- def get_task_config(self, command: str = None) -> Dict:
70
+ def get_task_config(self, command: Union[str, Dict] = None) -> Dict:
71
71
  network_configuration = self.network_configuration
72
72
  if network_configuration is None:
73
73
  network_configuration = {
@@ -94,7 +94,7 @@ class EcsConfig(BaseConfig):
94
94
  'containerOverrides': [
95
95
  {
96
96
  'name': self.container_name,
97
- 'command': command.split(' '),
97
+ 'command': command.split(' ') if isinstance(command, str) else command,
98
98
  'cpu': self.cpu,
99
99
  'memory': self.memory,
100
100
  },
@@ -1,12 +1,12 @@
1
1
  import json
2
- from typing import Dict, List
2
+ from typing import Dict, List, Union
3
3
 
4
4
  from mage_ai.services.aws import get_aws_boto3_client
5
5
  from mage_ai.services.aws.ecs.config import EcsConfig
6
6
 
7
7
 
8
8
  def run_task(
9
- command: str,
9
+ command: Union[str, Dict],
10
10
  ecs_config: EcsConfig,
11
11
  wait_for_completion: bool = True,
12
12
  ) -> None:
@@ -1,21 +1,41 @@
1
- from thefuzz import fuzz
1
+ import os
2
2
  from typing import List
3
+
4
+ from thefuzz import fuzz
5
+
3
6
  from mage_ai.cache.block_action_object import BlockActionObjectCache
7
+ from mage_ai.cache.block_action_object.constants import (
8
+ OBJECT_TYPE_BLOCK_FILE,
9
+ OBJECT_TYPE_MAGE_TEMPLATE,
10
+ )
11
+ from mage_ai.shared.custom_logger import DX_PRINTER
4
12
 
5
- DEFAULT_RATIO = 80
13
+ DEFAULT_RATIO = 50
6
14
 
7
15
 
8
16
  async def search(query: str, ratio: float = None, limit: int = None) -> List:
9
- ratio_to_use = ratio or DEFAULT_RATIO
17
+ if ratio is None:
18
+ ratio = DEFAULT_RATIO
10
19
 
11
20
  cache = await BlockActionObjectCache.initialize_cache()
21
+ DX_PRINTER.label = 'BlockActionObjectCache'
12
22
 
13
23
  results = []
14
24
 
15
25
  for object_type, mapping in cache.load_all_data().items():
16
26
  for uuid, block_action_object in mapping.items():
17
- score = fuzz.partial_token_sort_ratio(query, uuid)
18
- if score < ratio_to_use:
27
+ text = get_searchable_text(object_type, block_action_object)
28
+ score = max([fuzz.token_sort_ratio(query, t) for t in text])
29
+
30
+ if score >= (ratio / 2):
31
+ DX_PRINTER.info(
32
+ uuid,
33
+ object_type=object_type,
34
+ score=score,
35
+ text=text,
36
+ )
37
+
38
+ if score < ratio:
19
39
  continue
20
40
 
21
41
  results.append(dict(
@@ -25,9 +45,43 @@ async def search(query: str, ratio: float = None, limit: int = None) -> List:
25
45
  uuid=uuid,
26
46
  ))
27
47
 
48
+ DX_PRINTER.info(f'Cache: {len(results)}')
49
+
28
50
  arr = sorted(results, key=lambda x: x['score'], reverse=True)
29
51
 
30
52
  if limit:
31
53
  arr = arr[:limit]
32
54
 
33
55
  return arr
56
+
57
+
58
+ def get_searchable_text(object_type, block_action_object) -> List[str]:
59
+ arr = []
60
+
61
+ if OBJECT_TYPE_BLOCK_FILE == object_type:
62
+ uuid = block_action_object.get('uuid')
63
+ arr.extend([
64
+ block_action_object.get('content'),
65
+ block_action_object.get('language'),
66
+ block_action_object.get('type'),
67
+ uuid,
68
+ ])
69
+ if uuid:
70
+ uuid_spaces = uuid.replace('_', ' ')
71
+ arr.extend([
72
+ os.path.basename(uuid),
73
+ os.path.basename(uuid_spaces),
74
+ uuid_spaces,
75
+ ])
76
+ elif OBJECT_TYPE_MAGE_TEMPLATE == object_type:
77
+ arr.extend([
78
+ block_action_object.get('block_type'),
79
+ block_action_object.get('description'),
80
+ block_action_object.get('language'),
81
+ block_action_object.get('name'),
82
+ ])
83
+ groups = block_action_object.get('groups')
84
+ if groups:
85
+ arr.extend(groups)
86
+
87
+ return [t.strip() for t in arr if t and t.strip()]
@@ -157,6 +157,7 @@ class ConfigurationOption(BaseDataClass):
157
157
 
158
158
  full_path = str(Path(project_full_path).relative_to(repo_path))
159
159
 
160
+ option_uuid = os.path.dirname(full_path)
160
161
  results.append(ConfigurationOption.load(
161
162
  configuration_type=configuration_type,
162
163
  name=project.get('name'),
@@ -164,11 +165,12 @@ class ConfigurationOption(BaseDataClass):
164
165
  profiles=profiles_arr,
165
166
  project=merge_dict(project, dict(
166
167
  full_path=full_path,
168
+ uuid=option_uuid,
167
169
  )),
168
170
  ),
169
171
  option_type=option_type,
170
172
  resource_type=resource_type,
171
- uuid=os.path.dirname(full_path),
173
+ uuid=option_uuid,
172
174
  ))
173
175
 
174
176
  return results
@@ -98,6 +98,9 @@ def get_repo_paths_for_file_path(
98
98
  repo_path: str = None,
99
99
  mage_projects_only: bool = False,
100
100
  ) -> Dict:
101
+ if not file_path:
102
+ return
103
+
101
104
  result = None
102
105
 
103
106
  repo_paths_all = build_repo_path_for_all_projects(
@@ -105,28 +108,61 @@ def get_repo_paths_for_file_path(
105
108
  mage_projects_only=mage_projects_only,
106
109
  )
107
110
 
111
+ matches = []
112
+
108
113
  for settings in repo_paths_all.values():
109
114
  full_path = settings['full_path']
110
115
  path = settings['path']
116
+
111
117
  root_path = base_repo_name()
112
118
  path_with_root = os.path.join(root_path, path)
113
119
 
114
- try:
115
- if (
116
- str(file_path).startswith(full_path) or
117
- (
118
- str(file_path).startswith(root_path) and
119
- Path(file_path).relative_to(path_with_root)
120
- ) or
121
- (
122
- str(file_path).startswith(path) and
123
- Path(file_path).relative_to(path)
124
- )
125
- ):
126
- result = settings
127
- break
128
- except ValueError:
129
- pass
120
+ root_path_relative = settings['root_project_name']
121
+ path_with_root_path_relative = os.path.join(root_path_relative, path)
122
+
123
+ score = 0
124
+ if os.path.isabs(file_path):
125
+ if str(file_path).startswith(full_path):
126
+ # path:
127
+ # platform/magic
128
+ # platform
129
+ # platform/magic -> prioritize this
130
+ score += 2 + len(Path(path).parts)
131
+
132
+ try:
133
+ if str(file_path).startswith(root_path) and \
134
+ Path(file_path).relative_to(path_with_root):
135
+
136
+ score += 1
137
+ except ValueError:
138
+ try:
139
+ if str(file_path).startswith(path) and Path(file_path).relative_to(path):
140
+ score += 1
141
+ except ValueError:
142
+ pass
143
+ else:
144
+ # file_path is a relative path.
145
+ # file_path -> default_repo/dbt/demo/models/example/my_first_dbt_model.sql
146
+ if str(file_path).startswith(path):
147
+ score += 2 + len(Path(path).parts)
148
+
149
+ try:
150
+ if str(file_path).startswith(root_path_relative) and \
151
+ Path(file_path).relative_to(path_with_root_path_relative):
152
+
153
+ score += 1
154
+ except ValueError:
155
+ try:
156
+ if str(file_path).startswith(path) and Path(file_path).relative_to(path):
157
+ score += 1
158
+ except ValueError:
159
+ pass
160
+
161
+ if score >= 1:
162
+ matches.append((score, settings))
163
+
164
+ if matches:
165
+ result = sorted(matches, key=lambda tup: tup[0], reverse=True)[0][1]
130
166
 
131
167
  return result
132
168
 
@@ -333,8 +369,8 @@ def __update_local_platform_settings(
333
369
  repo_path: str = None,
334
370
  ) -> None:
335
371
  if merge:
336
- child = (__local_platform_settings(repo_path=repo_path) or {}).copy()
337
- parent = platform_settings.copy()
372
+ parent = (__local_platform_settings(repo_path=repo_path) or {}).copy()
373
+ child = platform_settings.copy()
338
374
  combine_into(child, parent)
339
375
  platform_settings = parent
340
376
 
mage_ai/settings/repo.py CHANGED
@@ -146,12 +146,13 @@ def get_variables_dir(
146
146
  metadata_path = get_metadata_path(root_project=root_project)
147
147
  if os.path.exists(metadata_path):
148
148
  with open(metadata_path, 'r', encoding='utf-8') as f:
149
- config_file = Template(f.read()).render(
150
- **get_template_vars_no_db()
151
- )
152
- repo_config = yaml.full_load(config_file) or {}
149
+ config_file_raw = f.read()
150
+ repo_config = yaml.full_load(config_file_raw) or {}
153
151
  if repo_config.get('variables_dir'):
154
152
  variables_dir = repo_config.get('variables_dir')
153
+ variables_dir = Template(variables_dir).render(
154
+ **get_template_vars_no_db()
155
+ )
155
156
  if variables_dir is None:
156
157
  variables_dir = DEFAULT_MAGE_DATA_DIR
157
158
  variables_dir = os.path.expanduser(variables_dir)
@@ -0,0 +1,213 @@
1
+ import logging
2
+ from enum import Enum
3
+
4
+ import simplejson
5
+
6
+ from mage_ai.data_preparation.models.constants import BlockType
7
+ from mage_ai.shared.environments import is_deus_ex_machina
8
+ from mage_ai.shared.parsers import encode_complex
9
+
10
+
11
+ class Color(str, Enum):
12
+ BLUE = "\x1b[1;34m"
13
+ BOLD_RED = "\x1b[31;1m"
14
+ GREEN = "\x1b[1;32m"
15
+ GREY = "\x1b[38;20m"
16
+ LIGHT_BLUE = "\x1b[1;36m"
17
+ PINK = "\x1b[35m"
18
+ PURPLE = "\x1b[1;35m"
19
+ RED = "\x1b[31;20m"
20
+ RESET = "\x1b[0m"
21
+ YELLOW = "\x1b[33;21m"
22
+
23
+
24
+ BLOCK_TYPE_COLOR_MAPPING = {
25
+ BlockType.CALLBACK: Color.GREEN,
26
+ BlockType.CONDITIONAL: Color.BLUE,
27
+ BlockType.CHART: Color.GREY,
28
+ BlockType.CUSTOM: Color.LIGHT_BLUE,
29
+ BlockType.DATA_EXPORTER: Color.YELLOW,
30
+ BlockType.DATA_LOADER: Color.BLUE,
31
+ BlockType.DBT: Color.RED,
32
+ BlockType.DYNAMIC_CHILD: Color.GREEN,
33
+ BlockType.EXTENSION: Color,
34
+ BlockType.GLOBAL_DATA_PRODUCT: Color.RED,
35
+ BlockType.HOOK: Color.BLUE,
36
+ BlockType.MARKDOWN: Color.GREY,
37
+ BlockType.SCRATCHPAD: Color.GREY,
38
+ BlockType.SENSOR: Color.PINK,
39
+ BlockType.TRANSFORMER: Color.PURPLE,
40
+ }
41
+
42
+ COLORS = [c for c in Color]
43
+
44
+
45
+ def targets():
46
+ return [
47
+ # 'get_outputs',
48
+ # 'get_variables_by_block',
49
+ # 'fetch_input_variables',
50
+ # 'output_variables',
51
+ # 'uuid_for_output_variables',
52
+ # 'dynamic_block_values_and_metadata',
53
+ ]
54
+
55
+
56
+ class ColorPrinter:
57
+ def __init__(self):
58
+ self.label = None
59
+
60
+ def debug(self, *args, **kwargs):
61
+ self.print(color=Color.PURPLE, *args, **kwargs)
62
+
63
+ def info(self, *args, **kwargs):
64
+ self.print(color=Color.BLUE, *args, **kwargs)
65
+
66
+ def warning(self, *args, **kwargs):
67
+ self.print(color=Color.GREEN, *args, **kwargs)
68
+
69
+ def error(self, *args, **kwargs):
70
+ self.print(color=Color.RED, *args, **kwargs)
71
+
72
+ def critical(self, *args, **kwargs):
73
+ self.print(color=Color.BOLD_RED, *args, **kwargs)
74
+
75
+ def print(self, *args, **kwargs):
76
+ if not is_deus_ex_machina():
77
+ return
78
+
79
+ __uuid = kwargs.pop('__uuid', None)
80
+ targs = targets()
81
+ if targs and __uuid not in targs:
82
+ return
83
+
84
+ color = kwargs.pop('color', None)
85
+ block = kwargs.pop('block', None)
86
+
87
+ more = None
88
+ if kwargs:
89
+ more = simplejson.dumps(
90
+ kwargs,
91
+ default=encode_complex,
92
+ ignore_nan=True,
93
+ indent=2,
94
+ sort_keys=True,
95
+ )
96
+ more = '\n'.join([f'\t\t{line}' for line in more.split('\n')])
97
+
98
+ output = ''.join(args)
99
+ if more:
100
+ output = f'{output}\n{more}'
101
+
102
+ label = __uuid or self.label
103
+ if label:
104
+ output = f'[{label}] {output}'
105
+
106
+ if not color:
107
+ color = COLORS[len(output) % len(COLORS)]
108
+
109
+ block_color = None
110
+ if block:
111
+ block_color = BLOCK_TYPE_COLOR_MAPPING.get(block.type) or color
112
+
113
+ print(f'{color}{"_" * 100}{color}')
114
+ print('\n')
115
+
116
+ if block:
117
+ print(f'{block_color}{"-" * 30}{block_color}')
118
+ print(f'{block_color}[Block] {block.uuid}{block_color}')
119
+ print(f'{block_color}\t\t Type : {block.type}{block_color}')
120
+ print(f'{block_color}\t\t Language: {block.type}{block_color}')
121
+ print(f'{block_color}{"-" * 15}{block_color}')
122
+
123
+ print(f'{color}{output}{color}')
124
+
125
+ print('\n')
126
+ print(f'{color}{"_" * 100}{color}')
127
+
128
+
129
+ class CustomFormatter(logging.Formatter):
130
+ # https://stackoverflow.com/a/56944256/1084284
131
+ format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)"
132
+
133
+ FORMATS = {
134
+ logging.CRITICAL: Color.BOLD_RED + format + Color.RESET,
135
+ logging.DEBUG: Color.PURPLE + format + Color.RESET,
136
+ logging.ERROR: Color.RED + format + Color.RESET,
137
+ logging.INFO: Color.BLUE + format + Color.RESET,
138
+ logging.NOTSET: Color.GREY + format + Color.RESET,
139
+ logging.WARNING: Color.GREEN + format + Color.RESET,
140
+ }
141
+
142
+ def format(self, record):
143
+ log_fmt = self.FORMATS.get(record.levelno)
144
+ formatter = logging.Formatter(log_fmt)
145
+ return formatter.format(record)
146
+
147
+ def debug(self, p: int = 0, *args, **kwargs):
148
+ if is_deus_ex_machina():
149
+ if p:
150
+ self.print(color=Color.PURPLE, *args, **kwargs)
151
+ else:
152
+ super().debug(*args, **kwargs)
153
+
154
+ def info(self, p: int = 0, *args, **kwargs):
155
+ if is_deus_ex_machina():
156
+ if p:
157
+ self.print(color=Color.BLUE, *args, **kwargs)
158
+ else:
159
+ super().info(*args, **kwargs)
160
+
161
+ def warning(self, p: int = 0, *args, **kwargs):
162
+ if is_deus_ex_machina():
163
+ if p:
164
+ self.print(color=Color.YELLOW, *args, **kwargs)
165
+ else:
166
+ super().warning(*args, **kwargs)
167
+
168
+ def error(self, p: int = 0, *args, **kwargs):
169
+ if is_deus_ex_machina():
170
+ if p:
171
+ self.print(color=Color.RED, *args, **kwargs)
172
+ else:
173
+ super().error(*args, **kwargs)
174
+
175
+ def critical(self, p: int = 0, *args, **kwargs):
176
+ if is_deus_ex_machina():
177
+ if p:
178
+ self.print(color=Color.BOLD_RED, *args, **kwargs)
179
+ else:
180
+ super().critical(*args, **kwargs)
181
+
182
+ def print(self, color: Color, *args, **kwargs):
183
+ more = None
184
+ if kwargs:
185
+ more = simplejson.dumps(
186
+ kwargs,
187
+ default=encode_complex,
188
+ ignore_nan=True,
189
+ indent=2,
190
+ sort_keys=True,
191
+ )
192
+ more = '\n'.join([f'\t\t{line}' for line in more.split('\n')])
193
+
194
+ output = ''.join(args)
195
+ if more:
196
+ output = f'{output}\n{more}'
197
+
198
+ print(f'{color}{output}{color}')
199
+
200
+
201
+ # create logger with 'spam_application'
202
+ DX_LOGGER = logging.getLogger('deus_ex_machina')
203
+ DX_LOGGER.setLevel(logging.DEBUG)
204
+
205
+ # create console handler with a higher log level
206
+ ch = logging.StreamHandler()
207
+ ch.setLevel(logging.DEBUG)
208
+
209
+ ch.setFormatter(CustomFormatter())
210
+
211
+ DX_LOGGER.addHandler(ch)
212
+
213
+ DX_PRINTER = ColorPrinter()