mage-ai 0.9.66__py3-none-any.whl → 0.9.68__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 (263) hide show
  1. mage_ai/api/monitors/BaseMonitor.py +1 -2
  2. mage_ai/api/policies/PipelinePolicy.py +2 -0
  3. mage_ai/api/resources/BlockLayoutItemResource.py +2 -2
  4. mage_ai/api/resources/BlockResource.py +4 -3
  5. mage_ai/api/resources/CacheItemResource.py +1 -1
  6. mage_ai/api/resources/GitBranchResource.py +3 -5
  7. mage_ai/api/resources/PageBlockLayoutResource.py +2 -2
  8. mage_ai/api/resources/PipelineResource.py +13 -0
  9. mage_ai/api/resources/PipelineRunResource.py +10 -1
  10. mage_ai/cache/tag.py +3 -0
  11. mage_ai/cluster_manager/manage.py +4 -1
  12. mage_ai/data_preparation/decorators.py +15 -0
  13. mage_ai/data_preparation/executors/k8s_block_executor.py +8 -1
  14. mage_ai/data_preparation/executors/k8s_pipeline_executor.py +12 -1
  15. mage_ai/data_preparation/executors/streaming_pipeline_executor.py +22 -12
  16. mage_ai/data_preparation/git/api.py +3 -0
  17. mage_ai/data_preparation/git/clients/gitlab.py +3 -2
  18. mage_ai/data_preparation/logging/gcs_logger_manager.py +7 -4
  19. mage_ai/data_preparation/models/block/__init__.py +45 -86
  20. mage_ai/data_preparation/models/block/block_factory.py +77 -0
  21. mage_ai/data_preparation/models/block/dbt/block.py +5 -7
  22. mage_ai/data_preparation/models/block/global_data_product/__init__.py +9 -3
  23. mage_ai/data_preparation/models/block/integration/__init__.py +12 -8
  24. mage_ai/data_preparation/models/block/platform/mixins.py +1 -1
  25. mage_ai/data_preparation/models/pipeline.py +80 -13
  26. mage_ai/data_preparation/storage/gcs_storage.py +28 -3
  27. mage_ai/data_preparation/storage/local_storage.py +18 -3
  28. mage_ai/data_preparation/storage/s3_storage.py +7 -2
  29. mage_ai/data_preparation/templates/constants.py +7 -0
  30. mage_ai/data_preparation/templates/data_loaders/streaming/generic_python.py +23 -0
  31. mage_ai/data_preparation/templates/template.py +6 -2
  32. mage_ai/data_preparation/variable_manager.py +2 -1
  33. mage_ai/io/bigquery.py +2 -0
  34. mage_ai/io/export_utils.py +3 -0
  35. mage_ai/io/oracledb.py +152 -5
  36. mage_ai/io/sql.py +4 -0
  37. mage_ai/orchestration/db/__init__.py +2 -2
  38. mage_ai/orchestration/db/models/schedules.py +2 -2
  39. mage_ai/orchestration/job_manager.py +6 -1
  40. mage_ai/orchestration/notification/sender.py +8 -0
  41. mage_ai/orchestration/pipeline_scheduler_original.py +10 -1
  42. mage_ai/server/constants.py +1 -1
  43. mage_ai/server/frontend_dist/404.html +2 -2
  44. mage_ai/server/frontend_dist/_next/static/chunks/3548-961ff79ca70038c7.js +1 -0
  45. mage_ai/server/frontend_dist/_next/static/chunks/{4241-ccd0126f5750cc35.js → 4241-4499461184ba0d23.js} +1 -1
  46. mage_ai/server/frontend_dist/_next/static/chunks/5627-237a3de578538022.js +1 -0
  47. mage_ai/server/frontend_dist/_next/static/chunks/{7966-5c1786fb7e7a48f5.js → 7966-f07b2913f7326b50.js} +1 -1
  48. mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-08790743315de36a.js +1 -0
  49. mage_ai/server/frontend_dist/_next/static/chunks/pages/index-13760bb72d823b69.js +1 -0
  50. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-8bbfa0c19b5e4cb3.js +1 -0
  51. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-852d403c7bda21b3.js +1 -0
  52. mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-597b74828bf105db.js +1 -0
  53. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-a8b61d8d239fd16f.js +1 -0
  54. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-bd0aff5a5ed8888c.js +1 -0
  55. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-3f5c14076ddde20e.js +1 -0
  56. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-1417ad1c821d720a.js +1 -0
  57. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-d1ee961387c58b7f.js +1 -0
  58. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-90abafc7ed61c582.js +1 -0
  59. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-cb88fd075a357fcf.js +1 -0
  60. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-ceb06e1616ee9610.js +1 -0
  61. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-8ff16ef9566e911a.js +1 -0
  62. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-d7a8bc51bb7a1082.js +1 -0
  63. mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-f59d34429fe022ee.js +1 -0
  64. mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-9cba3211434a8966.js +1 -0
  65. mage_ai/server/{frontend_dist_base_path_template/_next/static/wxqkF4diPqRxUfP6Ac6ai → frontend_dist/_next/static/i8pymuJDTVHdWjUP1QSh1}/_buildManifest.js +1 -1
  66. mage_ai/server/frontend_dist/block-layout.html +2 -2
  67. mage_ai/server/frontend_dist/compute.html +2 -2
  68. mage_ai/server/frontend_dist/files.html +2 -2
  69. mage_ai/server/frontend_dist/global-data-products/[...slug].html +2 -2
  70. mage_ai/server/frontend_dist/global-data-products.html +2 -2
  71. mage_ai/server/frontend_dist/global-hooks/[...slug].html +2 -2
  72. mage_ai/server/frontend_dist/global-hooks.html +2 -2
  73. mage_ai/server/frontend_dist/index.html +2 -2
  74. mage_ai/server/frontend_dist/manage/files.html +2 -2
  75. mage_ai/server/frontend_dist/manage/settings.html +2 -2
  76. mage_ai/server/frontend_dist/manage/users/[user].html +2 -2
  77. mage_ai/server/frontend_dist/manage/users/new.html +2 -2
  78. mage_ai/server/frontend_dist/manage/users.html +2 -2
  79. mage_ai/server/frontend_dist/manage.html +2 -2
  80. mage_ai/server/frontend_dist/oauth.html +3 -3
  81. mage_ai/server/frontend_dist/overview.html +2 -2
  82. mage_ai/server/frontend_dist/pipeline-runs.html +2 -2
  83. mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +2 -2
  84. mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +2 -2
  85. mage_ai/server/frontend_dist/pipelines/[pipeline]/dashboard.html +2 -2
  86. mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
  87. mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +2 -2
  88. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +2 -2
  89. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
  90. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +2 -2
  91. mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +2 -2
  92. mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +2 -2
  93. mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +2 -2
  94. mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +2 -2
  95. mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +2 -2
  96. mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +2 -2
  97. mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
  98. mage_ai/server/frontend_dist/pipelines.html +2 -2
  99. mage_ai/server/frontend_dist/platform/global-hooks/[...slug].html +2 -2
  100. mage_ai/server/frontend_dist/platform/global-hooks.html +2 -2
  101. mage_ai/server/frontend_dist/settings/account/profile.html +2 -2
  102. mage_ai/server/frontend_dist/settings/platform/preferences.html +2 -2
  103. mage_ai/server/frontend_dist/settings/platform/settings.html +2 -2
  104. mage_ai/server/frontend_dist/settings/workspace/permissions/[...slug].html +2 -2
  105. mage_ai/server/frontend_dist/settings/workspace/permissions.html +2 -2
  106. mage_ai/server/frontend_dist/settings/workspace/preferences.html +2 -2
  107. mage_ai/server/frontend_dist/settings/workspace/roles/[...slug].html +2 -2
  108. mage_ai/server/frontend_dist/settings/workspace/roles.html +2 -2
  109. mage_ai/server/frontend_dist/settings/workspace/sync-data.html +2 -2
  110. mage_ai/server/frontend_dist/settings/workspace/users/[...slug].html +2 -2
  111. mage_ai/server/frontend_dist/settings/workspace/users.html +2 -2
  112. mage_ai/server/frontend_dist/settings.html +2 -2
  113. mage_ai/server/frontend_dist/sign-in.html +5 -5
  114. mage_ai/server/frontend_dist/templates/[...slug].html +2 -2
  115. mage_ai/server/frontend_dist/templates.html +2 -2
  116. mage_ai/server/frontend_dist/terminal.html +2 -2
  117. mage_ai/server/frontend_dist/test.html +2 -2
  118. mage_ai/server/frontend_dist/triggers.html +2 -2
  119. mage_ai/server/frontend_dist/version-control.html +2 -2
  120. mage_ai/server/frontend_dist_base_path_template/404.html +2 -2
  121. mage_ai/server/{frontend_dist/_next/static/rtugsJoijF2SsCCB5_yKS → frontend_dist_base_path_template/_next/static/CKCvjsYCf2imD2X8zAOBf}/_buildManifest.js +1 -1
  122. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-961ff79ca70038c7.js +1 -0
  123. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{4241-ccd0126f5750cc35.js → 4241-4499461184ba0d23.js} +1 -1
  124. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/5627-237a3de578538022.js +1 -0
  125. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/{7966-5c1786fb7e7a48f5.js → 7966-f07b2913f7326b50.js} +1 -1
  126. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-08790743315de36a.js +1 -0
  127. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/index-13760bb72d823b69.js +1 -0
  128. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-8bbfa0c19b5e4cb3.js +1 -0
  129. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage-852d403c7bda21b3.js +1 -0
  130. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-597b74828bf105db.js +1 -0
  131. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-a8b61d8d239fd16f.js +1 -0
  132. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-bd0aff5a5ed8888c.js +1 -0
  133. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-3f5c14076ddde20e.js +1 -0
  134. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-1417ad1c821d720a.js +1 -0
  135. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-d1ee961387c58b7f.js +1 -0
  136. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-90abafc7ed61c582.js +1 -0
  137. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-cb88fd075a357fcf.js +1 -0
  138. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-ceb06e1616ee9610.js +1 -0
  139. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-8ff16ef9566e911a.js +1 -0
  140. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-d7a8bc51bb7a1082.js +1 -0
  141. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-f59d34429fe022ee.js +1 -0
  142. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-9cba3211434a8966.js +1 -0
  143. mage_ai/server/frontend_dist_base_path_template/block-layout.html +2 -2
  144. mage_ai/server/frontend_dist_base_path_template/compute.html +2 -2
  145. mage_ai/server/frontend_dist_base_path_template/files.html +2 -2
  146. mage_ai/server/frontend_dist_base_path_template/global-data-products/[...slug].html +2 -2
  147. mage_ai/server/frontend_dist_base_path_template/global-data-products.html +2 -2
  148. mage_ai/server/frontend_dist_base_path_template/global-hooks/[...slug].html +2 -2
  149. mage_ai/server/frontend_dist_base_path_template/global-hooks.html +2 -2
  150. mage_ai/server/frontend_dist_base_path_template/index.html +2 -2
  151. mage_ai/server/frontend_dist_base_path_template/manage/files.html +2 -2
  152. mage_ai/server/frontend_dist_base_path_template/manage/settings.html +2 -2
  153. mage_ai/server/frontend_dist_base_path_template/manage/users/[user].html +2 -2
  154. mage_ai/server/frontend_dist_base_path_template/manage/users/new.html +2 -2
  155. mage_ai/server/frontend_dist_base_path_template/manage/users.html +2 -2
  156. mage_ai/server/frontend_dist_base_path_template/manage.html +2 -2
  157. mage_ai/server/frontend_dist_base_path_template/oauth.html +3 -3
  158. mage_ai/server/frontend_dist_base_path_template/overview.html +2 -2
  159. mage_ai/server/frontend_dist_base_path_template/pipeline-runs.html +2 -2
  160. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills/[...slug].html +2 -2
  161. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/backfills.html +2 -2
  162. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/dashboard.html +2 -2
  163. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/edit.html +2 -2
  164. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/logs.html +2 -2
  165. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runs.html +2 -2
  166. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
  167. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/monitors.html +2 -2
  168. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs/[run].html +2 -2
  169. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/runs.html +2 -2
  170. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/settings.html +2 -2
  171. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/syncs.html +2 -2
  172. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers/[...slug].html +2 -2
  173. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline]/triggers.html +2 -2
  174. mage_ai/server/frontend_dist_base_path_template/pipelines/[pipeline].html +2 -2
  175. mage_ai/server/frontend_dist_base_path_template/pipelines.html +2 -2
  176. mage_ai/server/frontend_dist_base_path_template/platform/global-hooks/[...slug].html +2 -2
  177. mage_ai/server/frontend_dist_base_path_template/platform/global-hooks.html +2 -2
  178. mage_ai/server/frontend_dist_base_path_template/settings/account/profile.html +2 -2
  179. mage_ai/server/frontend_dist_base_path_template/settings/platform/preferences.html +2 -2
  180. mage_ai/server/frontend_dist_base_path_template/settings/platform/settings.html +2 -2
  181. mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions/[...slug].html +2 -2
  182. mage_ai/server/frontend_dist_base_path_template/settings/workspace/permissions.html +2 -2
  183. mage_ai/server/frontend_dist_base_path_template/settings/workspace/preferences.html +2 -2
  184. mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles/[...slug].html +2 -2
  185. mage_ai/server/frontend_dist_base_path_template/settings/workspace/roles.html +2 -2
  186. mage_ai/server/frontend_dist_base_path_template/settings/workspace/sync-data.html +2 -2
  187. mage_ai/server/frontend_dist_base_path_template/settings/workspace/users/[...slug].html +2 -2
  188. mage_ai/server/frontend_dist_base_path_template/settings/workspace/users.html +2 -2
  189. mage_ai/server/frontend_dist_base_path_template/settings.html +2 -2
  190. mage_ai/server/frontend_dist_base_path_template/sign-in.html +5 -5
  191. mage_ai/server/frontend_dist_base_path_template/templates/[...slug].html +2 -2
  192. mage_ai/server/frontend_dist_base_path_template/templates.html +2 -2
  193. mage_ai/server/frontend_dist_base_path_template/terminal.html +2 -2
  194. mage_ai/server/frontend_dist_base_path_template/test.html +2 -2
  195. mage_ai/server/frontend_dist_base_path_template/triggers.html +2 -2
  196. mage_ai/server/frontend_dist_base_path_template/version-control.html +2 -2
  197. mage_ai/services/aws/s3/s3.py +8 -2
  198. mage_ai/services/k8s/job_manager.py +8 -0
  199. mage_ai/services/slack/slack.py +10 -1
  200. mage_ai/services/spark/spark.py +9 -2
  201. mage_ai/settings/backends.py +8 -8
  202. mage_ai/settings/models/configuration_option.py +10 -9
  203. mage_ai/settings/server.py +6 -1
  204. mage_ai/shared/files.py +19 -1
  205. mage_ai/shared/logger.py +12 -6
  206. mage_ai/shared/path_fixer.py +3 -0
  207. mage_ai/streaming/sources/base.py +5 -0
  208. mage_ai/streaming/sources/base_python.py +30 -0
  209. mage_ai/streaming/sources/kafka.py +2 -1
  210. mage_ai/streaming/sources/mongodb.py +4 -0
  211. mage_ai/streaming/sources/source_factory.py +25 -0
  212. mage_ai/tests/data_preparation/models/block/dbt/test_block.py +2 -2
  213. mage_ai/tests/data_preparation/models/block/dbt/test_block_sql.py +1 -1
  214. mage_ai/tests/data_preparation/models/block/dbt/test_block_yaml.py +1 -1
  215. mage_ai/tests/data_preparation/models/test_block.py +41 -3
  216. mage_ai/tests/orchestration/test_pipeline_scheduler.py +2 -0
  217. mage_ai/tests/settings/models/test_configuration_option.py +2 -2
  218. {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/METADATA +3 -3
  219. {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/RECORD +225 -222
  220. mage_ai/server/frontend_dist/_next/static/chunks/181-e61915415a976861.js +0 -1
  221. mage_ai/server/frontend_dist/_next/static/chunks/3548-13563a1ff815f922.js +0 -1
  222. mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-913116aa749f7ca6.js +0 -1
  223. mage_ai/server/frontend_dist/_next/static/chunks/pages/index-64851458dde54ad9.js +0 -1
  224. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-d3a5fd3119fdb1e4.js +0 -1
  225. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-42789d698d28a92f.js +0 -1
  226. mage_ai/server/frontend_dist/_next/static/chunks/pages/overview-d05040edba41b2ac.js +0 -1
  227. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-aaf393c86fc1bda3.js +0 -1
  228. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-d84556cefbe31a1a.js +0 -1
  229. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-cf656cbe37ecaacc.js +0 -1
  230. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-1b688d61f8efe07a.js +0 -1
  231. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-ed3331d22d5cff7d.js +0 -1
  232. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-d94e48bad89ba1e0.js +0 -1
  233. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-f508c2f261297724.js +0 -1
  234. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-f99e99aa8f45529c.js +0 -1
  235. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/platform/preferences-6826000cdffc36b8.js +0 -1
  236. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-dde29a463495cebb.js +0 -1
  237. mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-7d38b2f7c3e918a1.js +0 -1
  238. mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-ab98a7b3a678669e.js +0 -1
  239. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/181-e61915415a976861.js +0 -1
  240. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/3548-13563a1ff815f922.js +0 -1
  241. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/_app-913116aa749f7ca6.js +0 -1
  242. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/index-64851458dde54ad9.js +0 -1
  243. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage/users/[user]-d3a5fd3119fdb1e4.js +0 -1
  244. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/manage-42789d698d28a92f.js +0 -1
  245. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/overview-d05040edba41b2ac.js +0 -1
  246. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/backfills-aaf393c86fc1bda3.js +0 -1
  247. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/edit-d84556cefbe31a1a.js +0 -1
  248. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/logs-cf656cbe37ecaacc.js +0 -1
  249. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-1b688d61f8efe07a.js +0 -1
  250. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/settings-ed3331d22d5cff7d.js +0 -1
  251. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/syncs-d94e48bad89ba1e0.js +0 -1
  252. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines/[pipeline]/triggers-f508c2f261297724.js +0 -1
  253. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/pipelines-f99e99aa8f45529c.js +0 -1
  254. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/platform/preferences-6826000cdffc36b8.js +0 -1
  255. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/settings/workspace/preferences-dde29a463495cebb.js +0 -1
  256. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/sign-in-7d38b2f7c3e918a1.js +0 -1
  257. mage_ai/server/frontend_dist_base_path_template/_next/static/chunks/pages/triggers-ab98a7b3a678669e.js +0 -1
  258. /mage_ai/server/frontend_dist/_next/static/{rtugsJoijF2SsCCB5_yKS → i8pymuJDTVHdWjUP1QSh1}/_ssgManifest.js +0 -0
  259. /mage_ai/server/frontend_dist_base_path_template/_next/static/{wxqkF4diPqRxUfP6Ac6ai → CKCvjsYCf2imD2X8zAOBf}/_ssgManifest.js +0 -0
  260. {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/LICENSE +0 -0
  261. {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/WHEEL +0 -0
  262. {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/entry_points.txt +0 -0
  263. {mage_ai-0.9.66.dist-info → mage_ai-0.9.68.dist-info}/top_level.txt +0 -0
@@ -29,6 +29,9 @@ def add_absolute_path(file_path: str, add_base_repo_path: bool = True) -> str:
29
29
  full_path = os.path.join(repo_path, parts[0])
30
30
  if os.path.exists(full_path):
31
31
  full_path = os.path.join(repo_path, file_path)
32
+ elif os.path.exists(os.path.join(repo_path, 'dbt', parts[0])):
33
+ # DBT v1 paths
34
+ full_path = os.path.join(repo_path, 'dbt', file_path)
32
35
  else:
33
36
  full_path = find_directory(repo_path, lambda x: x.endswith(file_path))
34
37
 
@@ -3,6 +3,8 @@ from abc import ABC, abstractmethod
3
3
  from enum import Enum
4
4
  from typing import Callable, Dict
5
5
 
6
+ from mage_ai.shared.environments import is_test
7
+
6
8
 
7
9
  class SourceConsumeMethod(str, Enum):
8
10
  BATCH_READ = 'BATCH_READ'
@@ -22,6 +24,9 @@ class BaseSource(ABC):
22
24
  self.checkpoint_path = kwargs.get('checkpoint_path')
23
25
  self.checkpoint = self.read_checkpoint()
24
26
  self.init_client()
27
+ if not is_test():
28
+ # Not test the connection in unit tests
29
+ self.test_connection()
25
30
 
26
31
  @abstractmethod
27
32
  def init_client(self):
@@ -0,0 +1,30 @@
1
+ from typing import Callable
2
+
3
+ from mage_ai.streaming.sources.base import BaseSource
4
+
5
+
6
+ class BasePythonSource(BaseSource):
7
+ def __init__(self, **kwargs):
8
+ """
9
+ Not require config in the python source
10
+ """
11
+ super().__init__(None, **kwargs)
12
+
13
+ def init_client(self):
14
+ """
15
+ Intialize the client for the source.
16
+ """
17
+
18
+ def read(self, handler: Callable):
19
+ """
20
+ Read the message from the source and use handler to process the message.
21
+
22
+ This method only needs to be implemented when consume_method is 'READ'.
23
+ """
24
+
25
+ def batch_read(self, handler: Callable):
26
+ """
27
+ Batch read the messages from the source and use handler to process the messages.
28
+
29
+ This method only needs to be implemented when consume_method is 'BATCH_READ'.
30
+ """
@@ -256,7 +256,8 @@ class KafkaSource(BaseSource):
256
256
  handler(message_values)
257
257
 
258
258
  def test_connection(self):
259
- return True
259
+ self.consumer._client.check_version(timeout=5)
260
+ self._print('Test connectino successfully.')
260
261
 
261
262
  def __deserialize_message(self, message):
262
263
  if self.config.serde_config is None:
@@ -18,6 +18,7 @@ class MongoDBConfig(BaseConfig):
18
18
  pipeline: Optional[_Pipeline] = None
19
19
  operation_time: Optional[Timestamp] = None
20
20
  start_after: Optional[Mapping[str, Any]] = None
21
+ full_document: Optional[str] = None
21
22
 
22
23
 
23
24
  class MongoSource(BaseSource):
@@ -46,6 +47,9 @@ class MongoSource(BaseSource):
46
47
  if hasattr(self.config, 'start_after') and self.config.start_after is not None:
47
48
  watch_args['start_after'] = self.config.start_after
48
49
 
50
+ if hasattr(self.config, 'full_document'):
51
+ watch_args['full_document'] = self.config.full_document
52
+
49
53
  return watch_args
50
54
 
51
55
  def batch_read(self, handler: Callable):
@@ -1,5 +1,6 @@
1
1
  from typing import Dict
2
2
 
3
+ from mage_ai.data_preparation.decorators import collect_decorated_objs
3
4
  from mage_ai.streaming.constants import SourceType
4
5
 
5
6
 
@@ -51,3 +52,27 @@ class SourceFactory:
51
52
  raise Exception(
52
53
  f'Consuming data from {connector_type} is not supported in streaming pipelines yet.',
53
54
  )
55
+
56
+ @classmethod
57
+ def get_python_source(self, content: str, **kwargs):
58
+ """
59
+ Find the class that's decorated with streaming_source from the source code.
60
+
61
+ Args:
62
+ content (str): The python code that contains the streaming source implementation.
63
+ **kwargs: {'global_vars': {...}}
64
+
65
+ Returns:
66
+ The initialized class object.
67
+
68
+ Raises:
69
+ Exception: Description
70
+ """
71
+ decorated_sources = []
72
+
73
+ exec(content, {'streaming_source': collect_decorated_objs(decorated_sources)})
74
+
75
+ if not decorated_sources:
76
+ raise Exception('Not find the class that has streaming_source decorator.')
77
+
78
+ return decorated_sources[0](**kwargs)
@@ -38,7 +38,7 @@ class DBTBlockTest(AsyncDBTestCase):
38
38
  self.block_sql.language = BlockLanguage.SQL
39
39
  self.block_sql.pipeline = pipeline
40
40
 
41
- self.dbt_block_sql = DBTBlock(
41
+ self.dbt_block_sql = DBTBlock.create(
42
42
  name='test_dbt_block_sql',
43
43
  uuid='test_dbt_block_sql',
44
44
  block_type=BlockType.DBT,
@@ -50,7 +50,7 @@ class DBTBlockTest(AsyncDBTestCase):
50
50
  pipeline=pipeline,
51
51
  )
52
52
 
53
- self.dbt_block_yaml = DBTBlock(
53
+ self.dbt_block_yaml = DBTBlock.create(
54
54
  name='test_dbt_block_yaml',
55
55
  uuid='test_dbt_block_yaml',
56
56
  block_type=BlockType.DBT,
@@ -23,7 +23,7 @@
23
23
  # pipeline.repo_path = 'test_repo_path'
24
24
  # pipeline.get_block.return_value = None
25
25
 
26
- # return DBTBlock(
26
+ # return DBTBlock.create(
27
27
  # name='test_dbt_block_sql',
28
28
  # uuid='test_dbt_block_sql',
29
29
  # block_type=BlockType.DBT,
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
  # def build_block(pipeline, content: str) -> DBTBlock:
21
- # return DBTBlock(
21
+ # return DBTBlock.create(
22
22
  # name='test_dbt_block_yaml',
23
23
  # uuid='test_dbt_block_yaml',
24
24
  # block_type=BlockType.DBT,
@@ -7,14 +7,18 @@ from faker import Faker
7
7
  from pandas.testing import assert_frame_equal
8
8
 
9
9
  # from mage_ai.data_cleaner.column_types.constants import ColumnType
10
- from mage_ai.data_preparation.models.block import Block, BlockType
10
+ from mage_ai.data_preparation.models.block import Block, BlockType, CallbackBlock
11
+ from mage_ai.data_preparation.models.block.block_factory import BlockFactory
11
12
  from mage_ai.data_preparation.models.block.errors import HasDownstreamDependencies
12
13
  from mage_ai.data_preparation.models.pipeline import Pipeline
13
14
  from mage_ai.data_preparation.repo_manager import get_repo_config
14
15
  from mage_ai.data_preparation.variable_manager import VariableManager
15
16
  from mage_ai.shared.path_fixer import add_root_repo_path_to_relative_path
16
17
  from mage_ai.tests.base_test import DBTestCase
17
- from mage_ai.tests.factory import create_integration_pipeline_with_blocks
18
+ from mage_ai.tests.factory import (
19
+ create_integration_pipeline_with_blocks,
20
+ create_pipeline,
21
+ )
18
22
  from mage_ai.tests.shared.mixins import ProjectPlatformMixin
19
23
 
20
24
 
@@ -603,7 +607,7 @@ SELECT 1 AS id;
603
607
  upstream_block_uuids=['test_data_loader'],
604
608
  )
605
609
 
606
- test_block = Block.get_block('test_data_loader', 'test_data_loader', 'data_loader')
610
+ test_block = BlockFactory.get_block('test_data_loader', 'test_data_loader', 'data_loader')
607
611
 
608
612
  self.assertRaises(HasDownstreamDependencies, block1.delete)
609
613
  self.assertRaises(HasDownstreamDependencies, test_block.delete)
@@ -763,3 +767,37 @@ class BlockProjectPlatformTests(ProjectPlatformMixin):
763
767
  )
764
768
 
765
769
  self.assertEqual(block.file_path, add_root_repo_path_to_relative_path(path))
770
+
771
+
772
+ class CallbackBlockTest(DBTestCase):
773
+ def setUp(self):
774
+ self.pipeline = create_pipeline('callback_pipeline', self.repo_path)
775
+
776
+ def tearDown(self):
777
+ self.pipeline.delete()
778
+
779
+ def test_create_global_vars_from_parent_block(self):
780
+ parent_block = Block.create(
781
+ 'test_data_loader',
782
+ 'data_loader',
783
+ self.repo_path,
784
+ pipeline=self.pipeline,
785
+ )
786
+ callback_block = CallbackBlock.create(parent_block.name)
787
+ self.pipeline.add_block(callback_block)
788
+ parent_block = parent_block.update(
789
+ dict(callback_blocks=[callback_block.uuid])
790
+ )
791
+ parent_block.global_vars = dict(
792
+ configuration=dict(table_name='load_data_table')
793
+ )
794
+
795
+ global_vars = dict(
796
+ random_var=1,
797
+ )
798
+ new_vars = callback_block._create_global_vars(
799
+ global_vars,
800
+ parent_block=parent_block,
801
+ )
802
+
803
+ self.assertIsNotNone(new_vars.get('configuration'))
@@ -396,6 +396,7 @@ class PipelineSchedulerTests(DBTestCase):
396
396
  error=f'Failed blocks: {block_runs[0].block_uuid}.',
397
397
  pipeline=scheduler.pipeline,
398
398
  pipeline_run=pipeline_run,
399
+ stacktrace=None,
399
400
  )
400
401
 
401
402
  def test_schedule_with_block_failures(self):
@@ -419,6 +420,7 @@ class PipelineSchedulerTests(DBTestCase):
419
420
  error=f'Failed blocks: {block_runs[0].block_uuid}.',
420
421
  pipeline=scheduler.pipeline,
421
422
  pipeline_run=pipeline_run,
423
+ stacktrace=None,
422
424
  )
423
425
 
424
426
  @patch('mage_ai.orchestration.pipeline_scheduler_original.run_pipeline')
@@ -100,7 +100,7 @@ class ConfigurationOptionTest(AsyncDBTestCase):
100
100
  self.faker.unique.name(),
101
101
  os.path.join(self.repo_path, 'mage_platform'),
102
102
  )
103
- block = DBTBlock(
103
+ block = DBTBlock.create(
104
104
  block_type='dbt',
105
105
  configuration=dict(file_path='dir2/mage.sql'),
106
106
  language='sql',
@@ -139,7 +139,7 @@ class ConfigurationOptionTest(AsyncDBTestCase):
139
139
  self.faker.unique.name(),
140
140
  os.path.join(self.repo_path, 'mage_platform'),
141
141
  )
142
- block = DBTBlock(
142
+ block = DBTBlock.create(
143
143
  block_type='dbt',
144
144
  configuration=dict(file_path='dir2/mage.sql'),
145
145
  language='sql',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mage-ai
3
- Version: 0.9.66
3
+ Version: 0.9.68
4
4
  Summary: Mage is a tool for building and deploying data pipelines.
5
5
  Home-page: https://github.com/mage-ai/mage-ai
6
6
  Author: Mage
@@ -128,7 +128,7 @@ Requires-Dist: pyodbc ==4.0.35 ; extra == 'all'
128
128
  Requires-Dist: redshift-connector ==2.0.915 ; extra == 'all'
129
129
  Requires-Dist: lxml ==4.9.4 ; extra == 'all'
130
130
  Requires-Dist: requests-aws4auth ==1.1.2 ; extra == 'all'
131
- Requires-Dist: snowflake-connector-python ==3.4.0 ; extra == 'all'
131
+ Requires-Dist: snowflake-connector-python ==3.5.0 ; extra == 'all'
132
132
  Requires-Dist: sshtunnel ==0.4.0 ; extra == 'all'
133
133
  Requires-Dist: stomp.py ==8.1.0 ; extra == 'all'
134
134
  Requires-Dist: thefuzz[speedup] ==0.19.0 ; extra == 'all'
@@ -183,7 +183,7 @@ Provides-Extra: s3
183
183
  Requires-Dist: boto3 ==1.26.60 ; extra == 's3'
184
184
  Requires-Dist: botocore ==1.29.60 ; extra == 's3'
185
185
  Provides-Extra: snowflake
186
- Requires-Dist: snowflake-connector-python ==3.4.0 ; extra == 'snowflake'
186
+ Requires-Dist: snowflake-connector-python ==3.5.0 ; extra == 'snowflake'
187
187
  Provides-Extra: spark
188
188
  Requires-Dist: boto3 ==1.26.60 ; extra == 'spark'
189
189
  Requires-Dist: botocore ==1.29.60 ; extra == 'spark'