mage-ai 0.9.7__py3-none-any.whl → 0.9.9__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 (161) hide show
  1. mage_ai/ai/constants.py +1 -0
  2. mage_ai/ai/generator.py +6 -0
  3. mage_ai/ai/{gen_doc_for_pipeline.py → generator_cmds.py} +5 -0
  4. mage_ai/ai/llm_pipeline_wizard.py +108 -3
  5. mage_ai/api/policies/BlockPolicy.py +1 -0
  6. mage_ai/api/policies/BlockTemplatePolicy.py +9 -0
  7. mage_ai/api/policies/LlmPolicy.py +3 -2
  8. mage_ai/api/policies/OauthAccessTokenPolicy.py +31 -0
  9. mage_ai/api/policies/PipelinePolicy.py +1 -0
  10. mage_ai/api/policies/ProjectPolicy.py +9 -0
  11. mage_ai/api/policies/SearchResultPolicy.py +32 -0
  12. mage_ai/api/policies/VariablePolicy.py +8 -0
  13. mage_ai/api/presenters/BlockTemplatePresenter.py +1 -0
  14. mage_ai/api/presenters/OauthAccessTokenPresenter.py +9 -0
  15. mage_ai/api/presenters/ProjectPresenter.py +2 -0
  16. mage_ai/api/presenters/SearchResultPresenter.py +73 -0
  17. mage_ai/api/resources/BlockResource.py +43 -4
  18. mage_ai/api/resources/BlockTemplateResource.py +15 -2
  19. mage_ai/api/resources/CustomTemplateResource.py +15 -3
  20. mage_ai/api/resources/FileContentResource.py +8 -1
  21. mage_ai/api/resources/FileResource.py +22 -2
  22. mage_ai/api/resources/OauthAccessTokenResource.py +24 -0
  23. mage_ai/api/resources/PipelineResource.py +70 -2
  24. mage_ai/api/resources/ProjectResource.py +15 -1
  25. mage_ai/api/resources/SearchResultResource.py +68 -0
  26. mage_ai/api/resources/VariableResource.py +25 -14
  27. mage_ai/cache/base.py +3 -0
  28. mage_ai/cache/block_action_object/__init__.py +282 -0
  29. mage_ai/cache/block_action_object/constants.py +4 -0
  30. mage_ai/cache/constants.py +1 -0
  31. mage_ai/data_integrations/destinations/constants.py +2 -0
  32. mage_ai/data_preparation/executors/k8s_pipeline_executor.py +1 -1
  33. mage_ai/data_preparation/models/block/__init__.py +20 -1
  34. mage_ai/data_preparation/models/block/dbt/utils/__init__.py +1 -0
  35. mage_ai/data_preparation/models/custom_templates/custom_block_template.py +8 -3
  36. mage_ai/data_preparation/models/custom_templates/utils.py +6 -3
  37. mage_ai/data_preparation/models/file.py +3 -0
  38. mage_ai/data_preparation/models/pipeline.py +10 -1
  39. mage_ai/data_preparation/models/{project.py → project/__init__.py} +17 -0
  40. mage_ai/data_preparation/models/project/constants.py +5 -0
  41. mage_ai/data_preparation/repo_manager.py +9 -6
  42. mage_ai/data_preparation/templates/constants.py +478 -1
  43. mage_ai/data_preparation/templates/template.py +9 -1
  44. mage_ai/orchestration/backfills/service.py +20 -1
  45. mage_ai/orchestration/db/__init__.py +25 -0
  46. mage_ai/orchestration/db/models/schedules.py +20 -1
  47. mage_ai/orchestration/pipeline_scheduler.py +23 -0
  48. mage_ai/server/constants.py +1 -1
  49. mage_ai/server/frontend_dist/404.html +2 -2
  50. mage_ai/server/frontend_dist/404.html.html +2 -2
  51. mage_ai/server/frontend_dist/_next/static/OwvTROmputQCA1Z9HEGDv/_buildManifest.js +1 -0
  52. mage_ai/server/frontend_dist/_next/static/chunks/{1005-ce36fe7ed460d006.js → 1005-16c1a6678de5311e.js} +1 -1
  53. mage_ai/server/frontend_dist/_next/static/chunks/1424-e22139f33196c5c1.js +1 -0
  54. mage_ai/server/frontend_dist/_next/static/chunks/1484-a76b2c31e4808379.js +1 -0
  55. mage_ai/server/frontend_dist/_next/static/chunks/2485-b569baad92049d6b.js +1 -0
  56. mage_ai/server/frontend_dist/_next/static/chunks/{2786-d8b593e5d7c42665.js → 2786-acce6ea0d9b4898e.js} +1 -1
  57. mage_ai/server/frontend_dist/_next/static/chunks/3654-573457b62efff6e2.js +1 -0
  58. mage_ai/server/frontend_dist/_next/static/chunks/3881-0eb04f7f7a244347.js +1 -0
  59. mage_ai/server/frontend_dist/_next/static/chunks/{4317-b112fe7bb532b998.js → 4317-3fe63fc9401685d6.js} +1 -1
  60. mage_ai/server/frontend_dist/_next/static/chunks/{4822-52d9d661b6bd1ae9.js → 4822-045cc7cdd7c95163.js} +1 -1
  61. mage_ai/server/frontend_dist/_next/static/chunks/{547-14029bdacc0ed267.js → 547-4ad2cdae967055b6.js} +1 -1
  62. mage_ai/server/frontend_dist/_next/static/chunks/6299-cf188c1b7a1bc33c.js +1 -0
  63. mage_ai/server/frontend_dist/_next/static/chunks/{7815-6dc55b5fd5d1f48a.js → 7815-fbd99c8f259d9e8b.js} +1 -1
  64. mage_ai/server/frontend_dist/_next/static/chunks/{8312-cdc4d6c3b9f53099.js → 8312-c88a3b1012e5448b.js} +1 -1
  65. mage_ai/server/frontend_dist/_next/static/chunks/{8952-492bf0e29d215ddd.js → 8952-e94a7334fcd5c68b.js} +1 -1
  66. mage_ai/server/frontend_dist/_next/static/chunks/9055-d0d25298cb5f4e45.js +1 -0
  67. mage_ai/server/frontend_dist/_next/static/chunks/pages/{_app-c7557dc9e725825e.js → _app-fa38a24707c76411.js} +1 -1
  68. mage_ai/server/frontend_dist/_next/static/chunks/pages/files-b9dac983c75798f2.js +1 -0
  69. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/{settings-17bb362b9683079c.js → settings-453aaa7bf78f8101.js} +1 -1
  70. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/{[user]-bfa53c0ee79920a0.js → [user]-3b502aa6d1a04cad.js} +1 -1
  71. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/{new-2f7e6bf8e2a37380.js → new-dd41d718cbb5990c.js} +1 -1
  72. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users-ec748f838b7b8fad.js +1 -0
  73. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-bcc24120f5911f76.js +1 -0
  74. mage_ai/server/frontend_dist/_next/static/chunks/pages/{overview-8ffbc4b0e8a43266.js → overview-6f20b9e9cbec91d6.js} +1 -1
  75. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/{[...slug]-373f6b8c9161e819.js → [...slug]-55212dfc15881ef2.js} +1 -1
  76. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{backfills-226bf0c5c1bfe004.js → backfills-6b4a82cd0516e121.js} +1 -1
  77. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-0705c99df236ec8a.js +1 -0
  78. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{logs-4ade07836fd577c9.js → logs-c294f5d74bd2d50f.js} +1 -1
  79. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{monitors-fd9eb711e89425e9.js → monitors-1b9e4abc54842cdf.js} +1 -1
  80. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{runs-027666ed18d3151e.js → runs-17ebe87e94242ae5.js} +1 -1
  81. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-48b60ca236a26818.js +1 -0
  82. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{syncs-de58e6b91e5e4552.js → syncs-5153f4665aaf8b17.js} +1 -1
  83. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/{[...slug]-432843576e1ed09e.js → [...slug]-1306e85191f6b47c.js} +1 -1
  84. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{triggers-ae31b1d0d8a4634d.js → triggers-2e731d343a26d46a.js} +1 -1
  85. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-0fab737dbc9074fc.js +1 -0
  86. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-b2354688508b0755.js +1 -0
  87. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/{users-a4f01b5c429757cc.js → users-6522c963087f18e8.js} +1 -1
  88. mage_ai/server/frontend_dist/_next/static/chunks/pages/{sign-in-1140f8ee7e89381a.js → sign-in-7dcd1257ca9660bb.js} +1 -1
  89. mage_ai/server/frontend_dist/_next/static/chunks/pages/templates/{[...slug]-f59b3f04c5a49351.js → [...slug]-78a07e7fe8973811.js} +1 -1
  90. mage_ai/server/frontend_dist/_next/static/chunks/pages/{templates-dbb209ce131390a9.js → templates-19df643f52679d5a.js} +1 -1
  91. mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-a1cf445565b68809.js +1 -0
  92. mage_ai/server/frontend_dist/files.html +2 -2
  93. mage_ai/server/frontend_dist/index.html +2 -2
  94. mage_ai/server/frontend_dist/manage/settings.html +2 -2
  95. mage_ai/server/frontend_dist/manage/users/[user].html +2 -2
  96. mage_ai/server/frontend_dist/manage/users/new.html +2 -2
  97. mage_ai/server/frontend_dist/manage/users.html +2 -2
  98. mage_ai/server/frontend_dist/manage.html +2 -2
  99. mage_ai/server/frontend_dist/overview.html +2 -2
  100. mage_ai/server/frontend_dist/pipeline-runs.html +2 -2
  101. mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +2 -2
  102. mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +2 -2
  103. mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
  104. mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +2 -2
  105. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +2 -2
  106. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
  107. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +2 -2
  108. mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +2 -2
  109. mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +2 -2
  110. mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +2 -2
  111. mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +2 -2
  112. mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +2 -2
  113. mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +2 -2
  114. mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
  115. mage_ai/server/frontend_dist/pipelines.html +2 -2
  116. mage_ai/server/frontend_dist/settings/account/profile.html +2 -2
  117. mage_ai/server/frontend_dist/settings/workspace/preferences.html +2 -2
  118. mage_ai/server/frontend_dist/settings/workspace/sync-data.html +2 -2
  119. mage_ai/server/frontend_dist/settings/workspace/users.html +2 -2
  120. mage_ai/server/frontend_dist/settings.html +2 -2
  121. mage_ai/server/frontend_dist/sign-in.html +16 -16
  122. mage_ai/server/frontend_dist/templates/[...slug].html +2 -2
  123. mage_ai/server/frontend_dist/templates.html +2 -2
  124. mage_ai/server/frontend_dist/terminal.html +2 -2
  125. mage_ai/server/frontend_dist/test.html +2 -2
  126. mage_ai/server/frontend_dist/triggers.html +2 -2
  127. mage_ai/server/frontend_dist/version-control.html +2 -2
  128. mage_ai/server/server.py +5 -0
  129. mage_ai/server/websocket_server.py +1 -0
  130. mage_ai/services/search/__init__.py +0 -0
  131. mage_ai/services/search/block_action_objects.py +33 -0
  132. mage_ai/services/search/constants.py +1 -0
  133. mage_ai/shared/array.py +7 -0
  134. mage_ai/shared/parsers.py +11 -2
  135. mage_ai/tests/shared/test_parsers.py +73 -0
  136. mage_ai/usage_statistics/constants.py +1 -0
  137. mage_ai/usage_statistics/logger.py +19 -1
  138. {mage_ai-0.9.7.dist-info → mage_ai-0.9.9.dist-info}/METADATA +9 -7
  139. {mage_ai-0.9.7.dist-info → mage_ai-0.9.9.dist-info}/RECORD +145 -132
  140. mage_ai/server/frontend_dist/_next/static/chunks/1424-de97c5aa0477894b.js +0 -1
  141. mage_ai/server/frontend_dist/_next/static/chunks/1484-c9d6bc33227070dd.js +0 -1
  142. mage_ai/server/frontend_dist/_next/static/chunks/2485-86c97f516c1abb9f.js +0 -1
  143. mage_ai/server/frontend_dist/_next/static/chunks/3215-c2f5f19b650f9a50.js +0 -1
  144. mage_ai/server/frontend_dist/_next/static/chunks/3654-bff4740b63cf280c.js +0 -1
  145. mage_ai/server/frontend_dist/_next/static/chunks/3881-7f121dbbe6e273cd.js +0 -1
  146. mage_ai/server/frontend_dist/_next/static/chunks/6299-97f283be01adf6a8.js +0 -1
  147. mage_ai/server/frontend_dist/_next/static/chunks/pages/files-daf49c7c6f7e70f8.js +0 -1
  148. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users-1f6cb7656299cbd1.js +0 -1
  149. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-4894eabb442a039c.js +0 -1
  150. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-a9bd86bee73b5762.js +0 -1
  151. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/settings-cf51793c2112915c.js +0 -1
  152. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-f1131ffe0d2a4a06.js +0 -1
  153. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-170943ca00445486.js +0 -1
  154. mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-2ecda1f1437013f2.js +0 -1
  155. mage_ai/server/frontend_dist/_next/static/tMZjCwLa1LRYRzhFRdKNf/_buildManifest.js +0 -1
  156. /mage_ai/server/frontend_dist/_next/static/{tMZjCwLa1LRYRzhFRdKNf → OwvTROmputQCA1Z9HEGDv}/_middlewareManifest.js +0 -0
  157. /mage_ai/server/frontend_dist/_next/static/{tMZjCwLa1LRYRzhFRdKNf → OwvTROmputQCA1Z9HEGDv}/_ssgManifest.js +0 -0
  158. {mage_ai-0.9.7.dist-info → mage_ai-0.9.9.dist-info}/LICENSE +0 -0
  159. {mage_ai-0.9.7.dist-info → mage_ai-0.9.9.dist-info}/WHEEL +0 -0
  160. {mage_ai-0.9.7.dist-info → mage_ai-0.9.9.dist-info}/entry_points.txt +0 -0
  161. {mage_ai-0.9.7.dist-info → mage_ai-0.9.9.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,4 @@
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="/_next/static/css/d1e8e64d0b07af2f.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d1e8e64d0b07af2f.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-5cd94c89d3acac5f.js"></script><script src="/_next/static/chunks/webpack-8f51011a10b384a1.js" defer=""></script><script src="/_next/static/chunks/framework-7c365855dab1bf41.js" defer=""></script><script src="/_next/static/chunks/main-bb0dd5375146d7fd.js" defer=""></script><script src="/_next/static/chunks/pages/_app-c7557dc9e725825e.js" defer=""></script><script src="/_next/static/chunks/844-1e171f361e63b36d.js" defer=""></script><script src="/_next/static/chunks/9902-b7981346a40ecdc3.js" defer=""></script><script src="/_next/static/chunks/7011-81dd8269c4806d26.js" defer=""></script><script src="/_next/static/chunks/7768-2325216ed654ad05.js" defer=""></script><script src="/_next/static/chunks/1424-de97c5aa0477894b.js" defer=""></script><script src="/_next/static/chunks/1005-ce36fe7ed460d006.js" defer=""></script><script src="/_next/static/chunks/7815-6dc55b5fd5d1f48a.js" defer=""></script><script src="/_next/static/chunks/3654-bff4740b63cf280c.js" defer=""></script><script src="/_next/static/chunks/6299-97f283be01adf6a8.js" defer=""></script><script src="/_next/static/chunks/pages/version-control-2ecda1f1437013f2.js" defer=""></script><script src="/_next/static/tMZjCwLa1LRYRzhFRdKNf/_buildManifest.js" defer=""></script><script src="/_next/static/tMZjCwLa1LRYRzhFRdKNf/_ssgManifest.js" defer=""></script><script src="/_next/static/tMZjCwLa1LRYRzhFRdKNf/_middlewareManifest.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="/_next/static/css/d1e8e64d0b07af2f.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d1e8e64d0b07af2f.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-5cd94c89d3acac5f.js"></script><script src="/_next/static/chunks/webpack-8f51011a10b384a1.js" defer=""></script><script src="/_next/static/chunks/framework-7c365855dab1bf41.js" defer=""></script><script src="/_next/static/chunks/main-bb0dd5375146d7fd.js" defer=""></script><script src="/_next/static/chunks/pages/_app-fa38a24707c76411.js" defer=""></script><script src="/_next/static/chunks/844-1e171f361e63b36d.js" defer=""></script><script src="/_next/static/chunks/9902-b7981346a40ecdc3.js" defer=""></script><script src="/_next/static/chunks/7011-81dd8269c4806d26.js" defer=""></script><script src="/_next/static/chunks/7768-2325216ed654ad05.js" defer=""></script><script src="/_next/static/chunks/1424-e22139f33196c5c1.js" defer=""></script><script src="/_next/static/chunks/1005-16c1a6678de5311e.js" defer=""></script><script src="/_next/static/chunks/7815-fbd99c8f259d9e8b.js" defer=""></script><script src="/_next/static/chunks/3654-573457b62efff6e2.js" defer=""></script><script src="/_next/static/chunks/6299-cf188c1b7a1bc33c.js" defer=""></script><script src="/_next/static/chunks/pages/version-control-a1cf445565b68809.js" defer=""></script><script src="/_next/static/OwvTROmputQCA1Z9HEGDv/_buildManifest.js" defer=""></script><script src="/_next/static/OwvTROmputQCA1Z9HEGDv/_ssgManifest.js" defer=""></script><script src="/_next/static/OwvTROmputQCA1Z9HEGDv/_middlewareManifest.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
4
  .kOVcuR .Toastify__toast-container{margin-top:24px;padding:0 !important;width:500px !important;}/*!sc*/
@@ -21,4 +21,4 @@ data-styled.g72[id="indexstyle__ContainerStyle-sc-ecogjt-0"]{content:"ijwRXz,"}/
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
23
  data-styled.g73[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","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","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":"#2E3036","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","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"},"neutral":{"n100":"#E7E8EA","n200":"#D8DADE","n300":"#CBCCD0","n400":"#BCBEC4","n500":"#AEB0B6"},"progress":{"negative":"#FF144D","positive":"#6B50D7"},"shadow":{"base":"12px 40px 120px rgba(106, 117, 139, 0.4)","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":"tMZjCwLa1LRYRzhFRdKNf","nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
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","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","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":"#2E3036","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","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"},"neutral":{"n100":"#E7E8EA","n200":"#D8DADE","n300":"#CBCCD0","n400":"#BCBEC4","n500":"#AEB0B6"},"progress":{"negative":"#FF144D","positive":"#6B50D7"},"shadow":{"base":"12px 40px 120px rgba(106, 117, 139, 0.4)","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":"OwvTROmputQCA1Z9HEGDv","nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
mage_ai/server/server.py CHANGED
@@ -15,6 +15,7 @@ from tornado.options import options
15
15
 
16
16
  from mage_ai.authentication.passwords import create_bcrypt_hash, generate_salt
17
17
  from mage_ai.cache.block import BlockCache
18
+ from mage_ai.cache.block_action_object import BlockActionObjectCache
18
19
  from mage_ai.cache.tag import TagCache
19
20
  from mage_ai.data_preparation.preferences import get_preferences
20
21
  from mage_ai.data_preparation.repo_manager import (
@@ -300,9 +301,13 @@ async def main(
300
301
 
301
302
  print('Initializing block cache.')
302
303
  await BlockCache.initialize_cache(replace=True)
304
+
303
305
  print('Initializing tag cache.')
304
306
  await TagCache.initialize_cache(replace=True)
305
307
 
308
+ print('Initializing block action object cache.')
309
+ await BlockActionObjectCache.initialize_cache(replace=True)
310
+
306
311
  # Check scheduler status periodically
307
312
  periodic_callback = PeriodicCallback(
308
313
  check_scheduler_status,
@@ -238,6 +238,7 @@ class WebSocketServer(tornado.websocket.WebSocketHandler):
238
238
  global_vars['interval_end_datetime'] = None
239
239
  global_vars['interval_seconds'] = None
240
240
  global_vars['interval_start_datetime'] = now
241
+ global_vars['interval_start_datetime_previous'] = None
241
242
 
242
243
  global_vars['event'] = dict()
243
244
 
File without changes
@@ -0,0 +1,33 @@
1
+ from thefuzz import fuzz
2
+ from typing import List
3
+ from mage_ai.cache.block_action_object import BlockActionObjectCache
4
+
5
+ DEFAULT_RATIO = 80
6
+
7
+
8
+ async def search(query: str, ratio: float = None, limit: int = None) -> List:
9
+ ratio_to_use = ratio or DEFAULT_RATIO
10
+
11
+ cache = await BlockActionObjectCache.initialize_cache()
12
+
13
+ results = []
14
+
15
+ for object_type, mapping in cache.load_all_data().items():
16
+ for uuid, block_action_object in mapping.items():
17
+ score = fuzz.partial_token_sort_ratio(query, uuid)
18
+ if score < ratio_to_use:
19
+ continue
20
+
21
+ results.append(dict(
22
+ block_action_object=block_action_object,
23
+ object_type=object_type,
24
+ score=score,
25
+ uuid=uuid,
26
+ ))
27
+
28
+ arr = sorted(results, key=lambda x: x['score'], reverse=True)
29
+
30
+ if limit:
31
+ arr = arr[:limit]
32
+
33
+ return arr
@@ -0,0 +1 @@
1
+ SEARCH_TYPE_BLOCK_ACTION_OBJECTS = 'block_action_objects'
mage_ai/shared/array.py CHANGED
@@ -24,6 +24,13 @@ def find(condition, arr, map=None):
24
24
  return None
25
25
 
26
26
 
27
+ def find_index(condition, arr):
28
+ for idx, item in enumerate(arr):
29
+ if condition(item):
30
+ return idx
31
+ return -1
32
+
33
+
27
34
  def sample(arr):
28
35
  return arr[random.randrange(0, len(arr))]
29
36
 
mage_ai/shared/parsers.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from datetime import datetime
2
2
  from json import JSONDecoder
3
+
3
4
  import numpy as np
4
5
 
5
6
  INTS = (
@@ -46,13 +47,15 @@ def encode_complex(obj):
46
47
  return obj
47
48
 
48
49
 
49
- def extract_json_objects(text, decoder=JSONDecoder()):
50
+ def extract_json_objects(text, decoder=None):
50
51
  """Find JSON objects in text, and yield the decoded JSON data
51
52
 
52
53
  Does not attempt to look for JSON arrays, text, or other JSON types outside
53
54
  of a parent JSON object.
54
55
 
55
56
  """
57
+ if decoder is None:
58
+ decoder = JSONDecoder()
56
59
  pos = 0
57
60
  while True:
58
61
  match = text.find('{', pos)
@@ -69,7 +72,13 @@ def extract_json_objects(text, decoder=JSONDecoder()):
69
72
  def sample_output(obj):
70
73
  if isinstance(obj, list):
71
74
  sampled = len(obj) > MAX_ITEMS_IN_SAMPLE_OUTPUT
72
- return obj[:MAX_ITEMS_IN_SAMPLE_OUTPUT], sampled
75
+ sampled_list = []
76
+ for item in obj[:MAX_ITEMS_IN_SAMPLE_OUTPUT]:
77
+ item, item_sampled = sample_output(item)
78
+ if item_sampled:
79
+ sampled = True
80
+ sampled_list.append(item)
81
+ return sampled_list, sampled
73
82
  elif isinstance(obj, dict):
74
83
  sampled = False
75
84
  output = dict()
@@ -0,0 +1,73 @@
1
+ from mage_ai.shared.parsers import sample_output
2
+ from mage_ai.tests.base_test import TestCase
3
+
4
+
5
+ class ParsersTests(TestCase):
6
+ def test_sample_output_empty_input(self):
7
+ self.assertEqual(sample_output([]), ([], False))
8
+ self.assertEqual(sample_output({}), ({}, False))
9
+
10
+ def test_sample_output_no_sampling(self):
11
+ input_data = [1, 2, 3]
12
+ self.assertEqual(sample_output(input_data), (input_data, False))
13
+
14
+ input_data = {'key': 'value', 'nested': {'inner': 'data'}}
15
+ self.assertEqual(sample_output(input_data), (input_data, False))
16
+
17
+ def test_sample_output_sampling_list(self):
18
+ # A nested list with more than 20 items, should be sampled
19
+ input_data = [i for i in range(30)]
20
+ expected_output = ([i for i in range(20)], True)
21
+ self.assertEqual(sample_output(input_data), expected_output)
22
+
23
+ def test_sample_output_sampling_dict(self):
24
+ input_data = {'key{}'.format(i): i for i in range(30)}
25
+ expected_output = ({'key{}'.format(i): i for i in range(30)}, False)
26
+ self.assertEqual(sample_output(input_data), expected_output)
27
+
28
+ def test_sample_output_sampling_mixed(self):
29
+ # A mixed structure with a nested list and dictionary, both exceeding the threshold
30
+ input_data = {'key1': [i for i in range(30)], 'key2': {'inner_key': [i for i in range(30)]}}
31
+ expected_output = (
32
+ {
33
+ 'key1': [i for i in range(20)],
34
+ 'key2': {'inner_key': [i for i in range(20)]}
35
+ },
36
+ True,
37
+ )
38
+ self.assertEqual(sample_output(input_data), expected_output)
39
+
40
+ input_data2 = {
41
+ 'key1': [
42
+ {
43
+ 'subkey_1': [i for i in range(30)],
44
+ 'subkey_2': {
45
+ 'subkey_21': {
46
+ 'subkey_211': [i for i in range(30)]
47
+ }
48
+ },
49
+ },
50
+ {
51
+ 'subkey_3': [1, 2, 3],
52
+ }
53
+ ]
54
+ }
55
+ expected_output2 = (
56
+ {
57
+ 'key1': [
58
+ {
59
+ 'subkey_1': [i for i in range(20)],
60
+ 'subkey_2': {
61
+ 'subkey_21': {
62
+ 'subkey_211': [i for i in range(20)]
63
+ },
64
+ },
65
+ },
66
+ {
67
+ 'subkey_3': [1, 2, 3],
68
+ }
69
+ ]
70
+ },
71
+ True,
72
+ )
73
+ self.assertEqual(sample_output(input_data2), expected_output2)
@@ -10,6 +10,7 @@ class EventActionType(str, enum.Enum):
10
10
 
11
11
  class EventObjectType(str, enum.Enum):
12
12
  ERROR = 'error'
13
+ FEATURE = 'feature'
13
14
  PIPELINE = 'pipeline'
14
15
  PIPELINE_RUN = 'pipeline_run'
15
16
  PROJECT = 'project'
@@ -22,7 +22,25 @@ class UsageStatisticLogger():
22
22
  if not self.help_improve_mage:
23
23
  return False
24
24
 
25
- return await self.__send_message(EventObjectType.PROJECT, EventActionType.IMPRESSION)
25
+ features = {}
26
+
27
+ for k, v in (self.project.features or {}).items():
28
+ features[k] = 1 if v else 0
29
+
30
+ if self.project.repo_config.openai_api_key and \
31
+ len(self.project.repo_config.openai_api_key) >= 1:
32
+
33
+ features['openai'] = 1
34
+ else:
35
+ features['openai'] = 0
36
+
37
+ return await self.__send_message(
38
+ EventObjectType.PROJECT,
39
+ EventActionType.IMPRESSION,
40
+ dict(
41
+ features=features,
42
+ ),
43
+ )
26
44
 
27
45
  @safe_db_query
28
46
  async def pipeline_runs_impression(self, count_func: Callable) -> bool:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mage-ai
3
- Version: 0.9.7
3
+ Version: 0.9.9
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
@@ -53,6 +53,7 @@ Requires-Dist: simplejson
53
53
  Requires-Dist: six (>=1.15.0)
54
54
  Requires-Dist: sqlalchemy (<2.0.0,>=1.4.20)
55
55
  Requires-Dist: terminado (==0.17.1)
56
+ Requires-Dist: thefuzz[speedup] (==0.19.0)
56
57
  Requires-Dist: tornado (==6.1)
57
58
  Requires-Dist: typer[all] (==0.7.0)
58
59
  Requires-Dist: typing-extensions (==4.5.0)
@@ -73,9 +74,9 @@ Requires-Dist: botocore (==1.29.60) ; extra == 'all'
73
74
  Requires-Dist: clickhouse-connect (==0.5.20) ; extra == 'all'
74
75
  Requires-Dist: confluent-avro ; extra == 'all'
75
76
  Requires-Dist: db-dtypes (==1.0.5) ; extra == 'all'
76
- Requires-Dist: dbt-bigquery (==1.4.0) ; extra == 'all'
77
- Requires-Dist: dbt-core (==1.4.0) ; extra == 'all'
78
- Requires-Dist: dbt-postgres (==1.4.0) ; extra == 'all'
77
+ Requires-Dist: dbt-bigquery (==1.4.3) ; extra == 'all'
78
+ Requires-Dist: dbt-core (==1.4.6) ; extra == 'all'
79
+ Requires-Dist: dbt-postgres (==1.4.6) ; extra == 'all'
79
80
  Requires-Dist: dbt-redshift (==1.4.0) ; extra == 'all'
80
81
  Requires-Dist: dbt-snowflake (==1.4.0) ; extra == 'all'
81
82
  Requires-Dist: dbt-spark (==1.4.0) ; extra == 'all'
@@ -106,6 +107,7 @@ Requires-Dist: redshift-connector (==2.0.909) ; extra == 'all'
106
107
  Requires-Dist: requests-aws4auth (==1.1.2) ; extra == 'all'
107
108
  Requires-Dist: snowflake-connector-python (==2.7.9) ; extra == 'all'
108
109
  Requires-Dist: sshtunnel (==0.4.0) ; extra == 'all'
110
+ Requires-Dist: thefuzz[speedup] (==0.19.0) ; extra == 'all'
109
111
  Provides-Extra: azure
110
112
  Requires-Dist: azure-eventhub (==5.11.2) ; extra == 'azure'
111
113
  Requires-Dist: azure-identity (==1.11.0) ; extra == 'azure'
@@ -119,9 +121,9 @@ Requires-Dist: db-dtypes (==1.0.5) ; extra == 'bigquery'
119
121
  Provides-Extra: clickhouse
120
122
  Requires-Dist: clickhouse-connect (==0.5.20) ; extra == 'clickhouse'
121
123
  Provides-Extra: dbt
122
- Requires-Dist: dbt-bigquery (==1.4.0) ; extra == 'dbt'
123
- Requires-Dist: dbt-core (==1.4.0) ; extra == 'dbt'
124
- Requires-Dist: dbt-postgres (==1.4.0) ; extra == 'dbt'
124
+ Requires-Dist: dbt-bigquery (==1.4.3) ; extra == 'dbt'
125
+ Requires-Dist: dbt-core (==1.4.6) ; extra == 'dbt'
126
+ Requires-Dist: dbt-postgres (==1.4.6) ; extra == 'dbt'
125
127
  Requires-Dist: dbt-redshift (==1.4.0) ; extra == 'dbt'
126
128
  Requires-Dist: dbt-snowflake (==1.4.0) ; extra == 'dbt'
127
129
  Requires-Dist: dbt-spark (==1.4.0) ; extra == 'dbt'