mage-ai 0.8.38__tar.gz → 0.8.39__tar.gz

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 (913) hide show
  1. {mage-ai-0.8.38/mage_ai.egg-info → mage-ai-0.8.39}/PKG-INFO +1 -1
  2. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/base.py +2 -2
  3. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/constants.py +3 -0
  4. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/export_utils.py +14 -1
  5. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/mssql.py +5 -2
  6. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/mysql.py +7 -3
  7. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/postgres.py +64 -21
  8. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/sql.py +35 -6
  9. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/trino.py +7 -3
  10. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/constants.py +1 -1
  11. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/404.html +2 -2
  12. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/404.html.html +2 -2
  13. mage-ai-0.8.39/mage_ai/server/frontend_dist/_next/static/chunks/5141-ddf4ba0a362d6f34.js +1 -0
  14. mage-ai-0.8.39/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-017f6a2de38f8658.js +1 -0
  15. mage-ai-0.8.39/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-6c0ea500b3bc6b61.js +1 -0
  16. {mage-ai-0.8.38/mage_ai/server/frontend_dist/_next/static/R_cV5sAcMT3qDXIKAGGPe → mage-ai-0.8.39/mage_ai/server/frontend_dist/_next/static/ngCg1gM6urg83y2nV5KHK}/_buildManifest.js +1 -1
  17. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/index.html +2 -2
  18. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/manage.html +2 -2
  19. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipeline-runs.html +2 -2
  20. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +2 -2
  21. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +2 -2
  22. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
  23. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +2 -2
  24. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +2 -2
  25. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
  26. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +2 -2
  27. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +2 -2
  28. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +2 -2
  29. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +2 -2
  30. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +2 -2
  31. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +2 -2
  32. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
  33. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/pipelines.html +2 -2
  34. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/settings/account/profile.html +2 -2
  35. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/settings/workspace/preferences.html +2 -2
  36. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/settings/workspace/sync-data.html +2 -2
  37. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/settings/workspace/users.html +2 -2
  38. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/settings.html +2 -2
  39. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/sign-in.html +2 -2
  40. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/terminal.html +2 -2
  41. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/test.html +2 -2
  42. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/triggers.html +2 -2
  43. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/server.py +2 -14
  44. mage-ai-0.8.39/mage_ai/server/terminal_server.py +65 -0
  45. {mage-ai-0.8.38 → mage-ai-0.8.39/mage_ai.egg-info}/PKG-INFO +1 -1
  46. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai.egg-info/SOURCES.txt +7 -6
  47. {mage-ai-0.8.38 → mage-ai-0.8.39}/setup.py +1 -1
  48. mage-ai-0.8.38/mage_ai/server/frontend_dist/_next/static/chunks/5141-2ae9eae00ec2cdfa.js +0 -1
  49. mage-ai-0.8.38/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-6d04570af5494767.js +0 -1
  50. mage-ai-0.8.38/mage_ai/server/frontend_dist/_next/static/chunks/pages/terminal-4c9ad80f8f9d1074.js +0 -1
  51. {mage-ai-0.8.38 → mage-ai-0.8.39}/LICENSE +0 -0
  52. {mage-ai-0.8.38 → mage-ai-0.8.39}/MANIFEST.in +0 -0
  53. {mage-ai-0.8.38 → mage-ai-0.8.39}/README.md +0 -0
  54. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/__init__.py +0 -0
  55. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/__init__.py +0 -0
  56. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/api_context.py +0 -0
  57. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/constants.py +0 -0
  58. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/errors.py +0 -0
  59. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/logging.py +0 -0
  60. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/middleware.py +0 -0
  61. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/monitors/BaseMonitor.py +0 -0
  62. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/monitors/__init__.py +0 -0
  63. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/oauth_scope.py +0 -0
  64. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/operations/__init__.py +0 -0
  65. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/operations/base.py +0 -0
  66. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/operations/constants.py +0 -0
  67. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/AutocompleteItemPolicy.py +0 -0
  68. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/BackfillPolicy.py +0 -0
  69. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/BasePolicy.py +0 -0
  70. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/BlockPolicy.py +0 -0
  71. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/BlockRunPolicy.py +0 -0
  72. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/ClusterPolicy.py +0 -0
  73. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/DataProviderPolicy.py +0 -0
  74. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/EventRulePolicy.py +0 -0
  75. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/ExtensionOptionPolicy.py +0 -0
  76. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/FileContentPolicy.py +0 -0
  77. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/FilePolicy.py +0 -0
  78. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/FileVersionPolicy.py +0 -0
  79. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/GitBranchPolicy.py +0 -0
  80. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/IntegrationDestinationPolicy.py +0 -0
  81. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/IntegrationSourcePolicy.py +0 -0
  82. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/IntegrationSourceStreamPolicy.py +0 -0
  83. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/KernelPolicy.py +0 -0
  84. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/LogPolicy.py +0 -0
  85. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/MonitorStatPolicy.py +0 -0
  86. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/OutputPolicy.py +0 -0
  87. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/PipelinePolicy.py +0 -0
  88. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/PipelineRunPolicy.py +0 -0
  89. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/PipelineSchedulePolicy.py +0 -0
  90. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/ProjectPolicy.py +0 -0
  91. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/SecretPolicy.py +0 -0
  92. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/SessionPolicy.py +0 -0
  93. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/SyncPolicy.py +0 -0
  94. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/UserPolicy.py +0 -0
  95. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/VariablePolicy.py +0 -0
  96. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/WidgetPolicy.py +0 -0
  97. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/policies/__init__.py +0 -0
  98. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/AutocompleteItemPresenter.py +0 -0
  99. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/BackfillPresenter.py +0 -0
  100. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/BasePresenter.py +0 -0
  101. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/BlockPresenter.py +0 -0
  102. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/BlockRunPresenter.py +0 -0
  103. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/ClusterPresenter.py +0 -0
  104. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/DataProviderPresenter.py +0 -0
  105. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/EventRulePresenter.py +0 -0
  106. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/ExtensionOptionPresenter.py +0 -0
  107. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/FileContentPresenter.py +0 -0
  108. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/FilePresenter.py +0 -0
  109. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/FileVersionPresenter.py +0 -0
  110. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/GitBranchPresenter.py +0 -0
  111. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/IntegrationDestinationPresenter.py +0 -0
  112. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/IntegrationSourcePresenter.py +0 -0
  113. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/IntegrationSourceStreamPresenter.py +0 -0
  114. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/KernelPresenter.py +0 -0
  115. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/LogPresenter.py +0 -0
  116. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/MonitorStatPresenter.py +0 -0
  117. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/OutputPresenter.py +0 -0
  118. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/PipelinePresenter.py +0 -0
  119. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/PipelineRunPresenter.py +0 -0
  120. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/PipelineSchedulePresenter.py +0 -0
  121. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/ProjectPresenter.py +0 -0
  122. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/SecretPresenter.py +0 -0
  123. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/SessionPresenter.py +0 -0
  124. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/SyncPresenter.py +0 -0
  125. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/UserPresenter.py +0 -0
  126. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/VariablePresenter.py +0 -0
  127. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/WidgetPresenter.py +0 -0
  128. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/__init__.py +0 -0
  129. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/mixins/__init__.py +0 -0
  130. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/presenters/mixins/users.py +0 -0
  131. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/AutocompleteItemResource.py +0 -0
  132. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/BackfillResource.py +0 -0
  133. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/BaseResource.py +0 -0
  134. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/BlockResource.py +0 -0
  135. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/BlockRunResource.py +0 -0
  136. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/ClusterResource.py +0 -0
  137. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/DataProviderResource.py +0 -0
  138. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/DatabaseResource.py +0 -0
  139. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/EventRuleResource.py +0 -0
  140. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/ExtensionOptionResource.py +0 -0
  141. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/FileContentResource.py +0 -0
  142. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/FileResource.py +0 -0
  143. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/FileVersionResource.py +0 -0
  144. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/GenericResource.py +0 -0
  145. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/GitBranchResource.py +0 -0
  146. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/IntegrationDestinationResource.py +0 -0
  147. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/IntegrationSourceResource.py +0 -0
  148. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/IntegrationSourceStreamResource.py +0 -0
  149. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/KernelResource.py +0 -0
  150. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/LogResource.py +0 -0
  151. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/MonitorStatResource.py +0 -0
  152. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/OutputResource.py +0 -0
  153. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/PipelineResource.py +0 -0
  154. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/PipelineRunResource.py +0 -0
  155. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/PipelineScheduleResource.py +0 -0
  156. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/ProjectResource.py +0 -0
  157. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/Resource.py +0 -0
  158. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/SecretResource.py +0 -0
  159. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/SessionResource.py +0 -0
  160. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/SyncResource.py +0 -0
  161. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/UserResource.py +0 -0
  162. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/VariableResource.py +0 -0
  163. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/WidgetResource.py +0 -0
  164. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/__init__.py +0 -0
  165. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/mixins/__init__.py +0 -0
  166. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/shared/__init__.py +0 -0
  167. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/shared/collections.py +0 -0
  168. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/resources/shared/collective_loaders.py +0 -0
  169. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/result_set.py +0 -0
  170. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/utils.py +0 -0
  171. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/api/views.py +0 -0
  172. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/authentication/__init__.py +0 -0
  173. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/authentication/ldap.py +0 -0
  174. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/authentication/oauth2.py +0 -0
  175. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/authentication/passwords.py +0 -0
  176. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/autocomplete/__init__.py +0 -0
  177. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/autocomplete/utils.py +0 -0
  178. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cli/__init__.py +0 -0
  179. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cli/main.py +0 -0
  180. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cli/utils.py +0 -0
  181. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cluster_manager/__init__.py +0 -0
  182. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cluster_manager/aws/__init__.py +0 -0
  183. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cluster_manager/aws/ecs_task_manager.py +0 -0
  184. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cluster_manager/aws/emr_cluster_manager.py +0 -0
  185. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cluster_manager/cluster_manager.py +0 -0
  186. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cluster_manager/constants.py +0 -0
  187. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cluster_manager/gcp/__init__.py +0 -0
  188. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cluster_manager/gcp/cloud_run_service_manager.py +0 -0
  189. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cluster_manager/kubernetes/__init__.py +0 -0
  190. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/cluster_manager/kubernetes/workload_manager.py +0 -0
  191. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/__init__.py +0 -0
  192. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/analysis/__init__.py +0 -0
  193. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/analysis/calculator.py +0 -0
  194. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/analysis/charts.py +0 -0
  195. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/analysis/constants.py +0 -0
  196. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/__init__.py +0 -0
  197. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/base.py +0 -0
  198. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/clean_column_names.py +0 -0
  199. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/fix_syntax_errors.py +0 -0
  200. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/impute_values.py +0 -0
  201. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/reformat_values.py +0 -0
  202. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/remove_collinear_columns.py +0 -0
  203. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_high_empty_rate.py +0 -0
  204. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/remove_columns_with_single_value.py +0 -0
  205. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/remove_duplicate_rows.py +0 -0
  206. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/cleaning_rules/remove_outliers.py +0 -0
  207. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/column_types/__init__.py +0 -0
  208. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/column_types/column_type_detector.py +0 -0
  209. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/column_types/constants.py +0 -0
  210. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/data_cleaner.py +0 -0
  211. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/estimators/__init__.py +0 -0
  212. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/estimators/base.py +0 -0
  213. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/estimators/encoders.py +0 -0
  214. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/estimators/outlier_removal.py +0 -0
  215. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/pipelines/__init__.py +0 -0
  216. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/pipelines/base.py +0 -0
  217. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/shared/__init__.py +0 -0
  218. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/shared/utils.py +0 -0
  219. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/statistics/__init__.py +0 -0
  220. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/statistics/calculator.py +0 -0
  221. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/__init__.py +0 -0
  222. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/action_code.py +0 -0
  223. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/base.py +0 -0
  224. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/column.py +0 -0
  225. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/constants.py +0 -0
  226. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/custom_action.py +0 -0
  227. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/dependency_resolution.py +0 -0
  228. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/helpers.py +0 -0
  229. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/row.py +0 -0
  230. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/shared.py +0 -0
  231. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/spark/__init__.py +0 -0
  232. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/spark/constants.py +0 -0
  233. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/spark/transformers.py +0 -0
  234. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/__init__.py +0 -0
  235. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/addition.py +0 -0
  236. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/base.py +0 -0
  237. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/constant.py +0 -0
  238. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/date_trunc.py +0 -0
  239. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/difference.py +0 -0
  240. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/distance_between.py +0 -0
  241. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/divide.py +0 -0
  242. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/formatted_date.py +0 -0
  243. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/if_else.py +0 -0
  244. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/multiply.py +0 -0
  245. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/string_replace.py +0 -0
  246. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/string_split.py +0 -0
  247. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/udf/substring.py +0 -0
  248. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/utils.py +0 -0
  249. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_cleaner/transformer_actions/variable_replacer.py +0 -0
  250. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/__init__.py +0 -0
  251. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/destinations/__init__.py +0 -0
  252. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/destinations/constants.py +0 -0
  253. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/logger/__init__.py +0 -0
  254. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/logger/utils.py +0 -0
  255. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/sources/__init__.py +0 -0
  256. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/sources/constants.py +0 -0
  257. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/utils/__init__.py +0 -0
  258. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/utils/config.py +0 -0
  259. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/utils/parsers.py +0 -0
  260. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_integrations/utils/scheduler.py +0 -0
  261. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/__init__.py +0 -0
  262. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/decorators.py +0 -0
  263. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/executors/__init__.py +0 -0
  264. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/executors/block_executor.py +0 -0
  265. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/executors/ecs_block_executor.py +0 -0
  266. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/executors/executor_factory.py +0 -0
  267. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/executors/gcp_cloud_run_block_executor.py +0 -0
  268. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/executors/k8s_block_executor.py +0 -0
  269. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/executors/pipeline_executor.py +0 -0
  270. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/executors/pyspark_block_executor.py +0 -0
  271. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/executors/pyspark_pipeline_executor.py +0 -0
  272. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/executors/streaming_pipeline_executor.py +0 -0
  273. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/git/__init__.py +0 -0
  274. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/logging/__init__.py +0 -0
  275. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/logging/gcs_logger_manager.py +0 -0
  276. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/logging/logger.py +0 -0
  277. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/logging/logger_manager.py +0 -0
  278. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/logging/logger_manager_factory.py +0 -0
  279. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/logging/s3_logger_manager.py +0 -0
  280. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/__init__.py +0 -0
  281. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/__init__.py +0 -0
  282. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/constants.py +0 -0
  283. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/dbt/__init__.py +0 -0
  284. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/dbt/utils/__init__.py +0 -0
  285. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/errors.py +0 -0
  286. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/extension/__init__.py +0 -0
  287. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/extension/block.py +0 -0
  288. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/extension/great_expectations.py +0 -0
  289. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/extension/utils.py +0 -0
  290. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/integration/__init__.py +0 -0
  291. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/r/__init__.py +0 -0
  292. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/r/templates/data_exporter.jinja +0 -0
  293. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/r/templates/data_loader.jinja +0 -0
  294. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/r/templates/transformer.jinja +0 -0
  295. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/sql/__init__.py +0 -0
  296. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/sql/bigquery.py +0 -0
  297. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/sql/mssql.py +0 -0
  298. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/sql/mysql.py +0 -0
  299. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/sql/postgres.py +0 -0
  300. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/sql/redshift.py +0 -0
  301. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/sql/snowflake.py +0 -0
  302. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/sql/trino.py +0 -0
  303. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/sql/utils/__init__.py +0 -0
  304. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/sql/utils/shared.py +0 -0
  305. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/block/utils.py +0 -0
  306. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/constants.py +0 -0
  307. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/errors.py +0 -0
  308. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/file.py +0 -0
  309. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/pipeline.py +0 -0
  310. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/pipelines/__init__.py +0 -0
  311. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/pipelines/integration_pipeline.py +0 -0
  312. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/pipelines/utils.py +0 -0
  313. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/utils.py +0 -0
  314. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/variable.py +0 -0
  315. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/widget/__init__.py +0 -0
  316. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/widget/charts.py +0 -0
  317. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/widget/constants.py +0 -0
  318. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/models/widget/utils.py +0 -0
  319. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/preferences.py +0 -0
  320. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/repo_manager.py +0 -0
  321. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/shared/__init__.py +0 -0
  322. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/shared/constants.py +0 -0
  323. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/shared/secrets.py +0 -0
  324. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/shared/stream.py +0 -0
  325. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/shared/utils.py +0 -0
  326. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/storage/__init__.py +0 -0
  327. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/storage/base_storage.py +0 -0
  328. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/storage/local_storage.py +0 -0
  329. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/storage/s3_storage.py +0 -0
  330. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/storage/utils.py +0 -0
  331. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/sync/__init__.py +0 -0
  332. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/sync/base_sync.py +0 -0
  333. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/sync/git_sync.py +0 -0
  334. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/__init__.py +0 -0
  335. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/callbacks/default.py +0 -0
  336. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/custom/python/default.jinja +0 -0
  337. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/azure_blob_storage.py +0 -0
  338. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/bigquery.py +0 -0
  339. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/default.jinja +0 -0
  340. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/file.py +0 -0
  341. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/google_cloud_storage.py +0 -0
  342. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/mysql.py +0 -0
  343. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/postgres.py +0 -0
  344. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/pyspark/default.jinja +0 -0
  345. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/pyspark/s3.py +0 -0
  346. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/r/default.jinja +0 -0
  347. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/redshift.py +0 -0
  348. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/s3.py +0 -0
  349. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/snowflake.py +0 -0
  350. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/streaming/kafka.yaml +0 -0
  351. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/streaming/kinesis.yaml +0 -0
  352. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/streaming/opensearch.yaml +0 -0
  353. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_exporters/streaming/s3.yaml +0 -0
  354. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/api.py +0 -0
  355. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/azure_blob_storage.py +0 -0
  356. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/bigquery.py +0 -0
  357. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/default.jinja +0 -0
  358. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/file.py +0 -0
  359. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/google_cloud_storage.py +0 -0
  360. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/mysql.py +0 -0
  361. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/postgres.py +0 -0
  362. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/pyspark/default.jinja +0 -0
  363. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/pyspark/s3.py +0 -0
  364. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/r/default.jinja +0 -0
  365. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/redshift.py +0 -0
  366. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/s3.py +0 -0
  367. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/snowflake.py +0 -0
  368. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/streaming/azure_event_hub.yaml +0 -0
  369. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/streaming/kafka.yaml +0 -0
  370. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/streaming/kinesis.yaml +0 -0
  371. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/data_loaders/streaming/rabbitmq.yaml +0 -0
  372. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/extensions/great_expectations/default.jinja +0 -0
  373. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/pipeline/__init__.py +0 -0
  374. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/pipeline/metadata.yaml +0 -0
  375. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/pipeline_execution/emr_bootstrap.sh +0 -0
  376. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/pipeline_execution/spark_script.jinja +0 -0
  377. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/__init__.py +0 -0
  378. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/charts/__init__.py +0 -0
  379. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/custom/__init__.py +0 -0
  380. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/data_exporters/__init__.py +0 -0
  381. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/data_exporters/export_titanic_clean.py +0 -0
  382. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/data_loaders/__init__.py +0 -0
  383. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/data_loaders/load_titanic.py +0 -0
  384. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/dbt/profiles.yml +0 -0
  385. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/extensions/__init__.py +0 -0
  386. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/io_config.yaml +0 -0
  387. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/metadata.yaml +0 -0
  388. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/pipelines/__init__.py +0 -0
  389. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/__init__.py +0 -0
  390. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/pipelines/example_pipeline/metadata.yaml +0 -0
  391. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/requirements.txt +0 -0
  392. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/scratchpads/__init__.py +0 -0
  393. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/transformers/__init__.py +0 -0
  394. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/transformers/fill_in_missing_values.py +0 -0
  395. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/repo/utils/__init__.py +0 -0
  396. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/sensors/bigquery.py +0 -0
  397. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/sensors/default.py +0 -0
  398. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/sensors/mysql.py +0 -0
  399. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/sensors/postgres.py +0 -0
  400. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/sensors/redshift.py +0 -0
  401. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/sensors/s3.py +0 -0
  402. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/sensors/snowflake.py +0 -0
  403. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/template.py +0 -0
  404. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/testable.jinja +0 -0
  405. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/data_warehouse_transformer.jinja +0 -0
  406. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/default.jinja +0 -0
  407. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/default_pyspark.jinja +0 -0
  408. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/default_streaming.jinja +0 -0
  409. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/r/default.r +0 -0
  410. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/suggestion_fmt.jinja +0 -0
  411. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/action.jinja +0 -0
  412. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/average.py +0 -0
  413. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/clean_column_name.py +0 -0
  414. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count.py +0 -0
  415. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/count_distinct.py +0 -0
  416. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/diff.py +0 -0
  417. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/first.py +0 -0
  418. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/fix_syntax_errors.py +0 -0
  419. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/impute.py +0 -0
  420. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/last.py +0 -0
  421. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/max.py +0 -0
  422. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/median.py +0 -0
  423. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/min.py +0 -0
  424. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/normalize.py +0 -0
  425. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/reformat.py +0 -0
  426. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove.py +0 -0
  427. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/remove_outliers.py +0 -0
  428. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/select.py +0 -0
  429. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_down.py +0 -0
  430. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/shift_up.py +0 -0
  431. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/standardize.py +0 -0
  432. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/column/sum.py +0 -0
  433. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/drop_duplicate.py +0 -0
  434. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/filter.py +0 -0
  435. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/remove.py +0 -0
  436. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/transformers/transformer_actions/row/sort.py +0 -0
  437. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/templates/utils.py +0 -0
  438. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/utils/__init__.py +0 -0
  439. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/utils/block/__init__.py +0 -0
  440. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/utils/block/convert_content.py +0 -0
  441. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/data_preparation/variable_manager.py +0 -0
  442. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/errors/__init__.py +0 -0
  443. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/errors/base.py +0 -0
  444. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/extensions/__init__.py +0 -0
  445. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/extensions/constants.py +0 -0
  446. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/extensions/great_expectations/__init__.py +0 -0
  447. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/extensions/great_expectations/constants.py +0 -0
  448. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/__init__.py +0 -0
  449. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/azure_blob_storage.py +0 -0
  450. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/bigquery.py +0 -0
  451. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/config.py +0 -0
  452. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/file.py +0 -0
  453. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/google_cloud_storage.py +0 -0
  454. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/io_config.py +0 -0
  455. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/redshift.py +0 -0
  456. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/s3.py +0 -0
  457. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/snowflake.py +0 -0
  458. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/io/utils.py +0 -0
  459. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/__init__.py +0 -0
  460. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/airflow.py +0 -0
  461. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/backfills/__init__.py +0 -0
  462. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/backfills/service.py +0 -0
  463. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/constants.py +0 -0
  464. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/__init__.py +0 -0
  465. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/alembic.ini +0 -0
  466. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/database_manager.py +0 -0
  467. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/errors.py +0 -0
  468. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/README.md +0 -0
  469. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/env.py +0 -0
  470. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/script.py.mako +0 -0
  471. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/053ee2c10d85_add_completed_at.py +0 -0
  472. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/067326f43bc3_add_variables_to_pipelinerun.py +0 -0
  473. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/1d8e65aeefdd_add_settings_to_pipeline_schedule.py +0 -0
  474. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/1f9353eddbc6_add_secrets_table.py +0 -0
  475. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/2266370f589b_add_indexes_to_pipeline_run.py +0 -0
  476. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/26305e46df52_create_backfills_table.py +0 -0
  477. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/3fafd217efa7_add_event_matcher_model.py +0 -0
  478. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/52ab80005742_add_variables_to_pipeline_schedule.py +0 -0
  479. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/5cd59ec4cf1d_add_passed_sla_to_pipeline_run.py +0 -0
  480. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/643b6e65e814_add_unique_indexes_on_authentication_.py +0 -0
  481. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/6aecc9bc451c_update_schedule_type_enum.py +0 -0
  482. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/7ac6fed06918_add_token_column_to_pipeline_schedule_.py +0 -0
  483. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/847ea6602d6f_add_upstream_failed_to_block_run_status.py +0 -0
  484. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/84de4cdd6126_add_sla_to_pipeline_schedule.py +0 -0
  485. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/8971d4cd5b39_add_event_variables_and_metadata_to_.py +0 -0
  486. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/97ff9f55a3c0_create_users_oauth2_applications_and_.py +0 -0
  487. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/b01be687e537_add_started_at_to_block_run.py +0 -0
  488. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/c07a23ff782b_add_initial_tables.py +0 -0
  489. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/migrations/versions/ec5df57a1c60_add_metrics_to_block_runs.py +0 -0
  490. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/models/__init__.py +0 -0
  491. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/models/base.py +0 -0
  492. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/models/oauth.py +0 -0
  493. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/models/schedules.py +0 -0
  494. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/models/secrets.py +0 -0
  495. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/db/process.py +0 -0
  496. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/execution_process_manager.py +0 -0
  497. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/job_manager.py +0 -0
  498. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/metrics/__init__.py +0 -0
  499. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/metrics/pipeline_run.py +0 -0
  500. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/monitor/__init__.py +0 -0
  501. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/monitor/monitor_stats.py +0 -0
  502. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/notification/__init__.py +0 -0
  503. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/notification/config.py +0 -0
  504. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/notification/sender.py +0 -0
  505. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/pipeline_scheduler.py +0 -0
  506. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/queue/__init__.py +0 -0
  507. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/queue/celery_queue.py +0 -0
  508. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/queue/config.py +0 -0
  509. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/queue/process_queue.py +0 -0
  510. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/queue/queue.py +0 -0
  511. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/queue/queue_factory.py +0 -0
  512. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/run_status_checker.py +0 -0
  513. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/triggers/__init__.py +0 -0
  514. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/triggers/event_trigger.py +0 -0
  515. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/triggers/loop_time_trigger.py +0 -0
  516. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/triggers/time_trigger.py +0 -0
  517. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/utils/__init__.py +0 -0
  518. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/orchestration/utils/resources.py +0 -0
  519. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/sample_datasets/__init__.py +0 -0
  520. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/sample_datasets/product_purchases.csv +0 -0
  521. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/sample_datasets/salary_survey.csv +0 -0
  522. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/sample_datasets/titanic_survival.csv +0 -0
  523. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/sample_datasets/user_emails.csv +0 -0
  524. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/__init__.py +0 -0
  525. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/active_kernel.py +0 -0
  526. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/__init__.py +0 -0
  527. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/base.py +0 -0
  528. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/blocks.py +0 -0
  529. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/clusters.py +0 -0
  530. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/constants.py +0 -0
  531. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/errors.py +0 -0
  532. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/events.py +0 -0
  533. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/integration_sources.py +0 -0
  534. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/projects.py +0 -0
  535. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/triggers.py +0 -0
  536. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/api/v1.py +0 -0
  537. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/app.py +0 -0
  538. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/client/__init__.py +0 -0
  539. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/client/mage.py +0 -0
  540. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/data/__init__.py +0 -0
  541. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/data/base.py +0 -0
  542. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/data/models.py +0 -0
  543. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/docs_server.py +0 -0
  544. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/execution_manager.py +0 -0
  545. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/1150.1378afaa474df64a.js +0 -0
  546. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/1240.0819f45820d22263.js +0 -0
  547. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/1286-a62050b3f897c6be.js +0 -0
  548. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/1450.d383f64c169d4278.js +0 -0
  549. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/1774-aa51ef1da7217ff9.js +0 -0
  550. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/2083-78a438dbdc57d1e4.js +0 -0
  551. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/2125-0b537dc53fe71b18.js +0 -0
  552. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/2344-5cd452dd1825dabc.js +0 -0
  553. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/2481.0454a0e25dc7e027.js +0 -0
  554. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/2508.724531e7f9cf5f36.js +0 -0
  555. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/2524-6aeb9419acf5d1b4.js +0 -0
  556. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/2545.8371b39c898ae92b.js +0 -0
  557. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/261.0a24b4ece1d29aa1.js +0 -0
  558. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/2626-e7fa4f83f8214c97.js +0 -0
  559. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/266.e301071d22592682.js +0 -0
  560. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/2714-1e79e9f2e998b544.js +0 -0
  561. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/29107295-989a0767a635d9d5.js +0 -0
  562. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/3453.992f4b1667e9882c.js +0 -0
  563. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/3467.38cd0654ba6f788f.js +0 -0
  564. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/3835.df296b4e4078e985.js +0 -0
  565. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/3850-6395783d820def1c.js +0 -0
  566. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/3873.4b3eace753998412.js +0 -0
  567. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/3898.880191695bb05845.js +0 -0
  568. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4042.5e16d36209052351.js +0 -0
  569. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4092.536ee541241f4538.js +0 -0
  570. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4178-9103014b7dae3c49.js +0 -0
  571. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4261-6c235b561c91eca3.js +0 -0
  572. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4388.04098706f32e69e7.js +0 -0
  573. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/440.3ab77942f659ea0c.js +0 -0
  574. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4450.79f14f763d55c63e.js +0 -0
  575. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4454.13a2404adecaa39e.js +0 -0
  576. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4495-4f0340aa82e0c623.js +0 -0
  577. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4538-347283088b83c6bf.js +0 -0
  578. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4776.753ad29fa0a29a4a.js +0 -0
  579. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4804-01a10103ebe26ca8.js +0 -0
  580. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/4883.a5bb0edbf8f3cc8f.js +0 -0
  581. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/5008.29c2662ecc2b04c7.js +0 -0
  582. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/5104.1edcf4437c471dd4.js +0 -0
  583. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/5164.857023e800905b6f.js +0 -0
  584. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/5477-b439f211b6146a11.js +0 -0
  585. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/5729.0f2748e9e6dab951.js +0 -0
  586. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/5824.628653557e904674.js +0 -0
  587. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/5872-1767c45ee6690ae5.js +0 -0
  588. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/5896-10a676bcc86978cc.js +0 -0
  589. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/6042.c59010de9e699437.js +0 -0
  590. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/6085-692d2f784c0504f2.js +0 -0
  591. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/6115.0c85e507543394ea.js +0 -0
  592. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/6116.871a682ddf535aca.js +0 -0
  593. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/6166-2ee6aff0ca70b2f0.js +0 -0
  594. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/6434.10380ee0968636ba.js +0 -0
  595. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/6443.7b6d2b4e51018184.js +0 -0
  596. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/6507.d3a17777d2c294e6.js +0 -0
  597. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/6532-dcc478dab6a58580.js +0 -0
  598. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/6958.8f39c585d36737a7.js +0 -0
  599. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/7011-81dd8269c4806d26.js +0 -0
  600. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/72fdc299.2d5ec188af5d0049.js +0 -0
  601. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/739.3d24945544b37e52.js +0 -0
  602. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/7400-f4db9b5d41f67f75.js +0 -0
  603. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/792.010ca00d79b2112f.js +0 -0
  604. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/7947.77be4bec4d47774e.js +0 -0
  605. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/7951.fee8b6c27c9ef777.js +0 -0
  606. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8018.968bf87c390e3312.js +0 -0
  607. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8097.b0345f30a7390c1d.js +0 -0
  608. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8180-8de652170ea5ed93.js +0 -0
  609. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8256.290ceb269b1ffe26.js +0 -0
  610. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/826.75268ee34f93393a.js +0 -0
  611. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8277.5003e1d94bb85156.js +0 -0
  612. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/839-c0deab1de13a0fba.js +0 -0
  613. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8762.dff300f86bef8573.js +0 -0
  614. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8789-4f858e520d46973b.js +0 -0
  615. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8807.a68c69c8fe0a8c01.js +0 -0
  616. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8849.db0d50b4d84b09a6.js +0 -0
  617. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8901.21d26d5a1ee473fe.js +0 -0
  618. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/8920.5700e380a2999098.js +0 -0
  619. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9258.6c6ef544c701a011.js +0 -0
  620. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9307.d4baf7aebbcef1f0.js +0 -0
  621. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9361.a0820e3069f5ef74.js +0 -0
  622. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9363.6b811b4c86277e07.js +0 -0
  623. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9386-d4cc11bab74eec8d.js +0 -0
  624. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9437.a3c32f45cf9ef69b.js +0 -0
  625. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9565-28e1c30511c95c2d.js +0 -0
  626. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9566.f8bd24768ed14ecb.js +0 -0
  627. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9633.40e5056ca1e2b22a.js +0 -0
  628. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9785.5ff26cb26d84d6a1.js +0 -0
  629. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9832-f97919376d52e3bf.js +0 -0
  630. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9855.c4394a68322be9f8.js +0 -0
  631. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/9927.e82a3e1e21990d77.js +0 -0
  632. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/bd1a647f.6050372acaa5cc3c.js +0 -0
  633. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/framework-7c365855dab1bf41.js +0 -0
  634. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/main-bb0dd5375146d7fd.js +0 -0
  635. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/_app-7e791bee1e32adec.js +0 -0
  636. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/_error-235304e5badb19eb.js +0 -0
  637. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/index-e34a68d2f6fe16f2.js +0 -0
  638. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-3046bc53d24917c7.js +0 -0
  639. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipeline-runs-e64ba4e8b2bfe73c.js +0 -0
  640. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/[...slug]-aac92b9ab9034c1a.js +0 -0
  641. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills-5f95bb4c3a2d7d46.js +0 -0
  642. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/logs-f8544e3e6ad7c1ff.js +0 -0
  643. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runs-dbd14363a06d17c5.js +0 -0
  644. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors/block-runtime-187456108be8a7e6.js +0 -0
  645. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/monitors-675171cfd7d7b346.js +0 -0
  646. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/[run]-b2955f0ff960894e.js +0 -0
  647. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-f5842a788b0cb80c.js +0 -0
  648. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/syncs-e1271453ed0c8d6e.js +0 -0
  649. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/[...slug]-6160e7f91a340354.js +0 -0
  650. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers-4e973d4bc0ebcdc1.js +0 -0
  651. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]-ca9457e1a6bced4b.js +0 -0
  652. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines-7446a70bdd8381a5.js +0 -0
  653. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-f1844beb127841f3.js +0 -0
  654. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-997acba85f777259.js +0 -0
  655. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-8c903140c99e487c.js +0 -0
  656. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-d72dfc596e943cc4.js +0 -0
  657. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/settings-d594a66a568306da.js +0 -0
  658. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-404d934deb8950d5.js +0 -0
  659. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/test-85cf18ae78ff535c.js +0 -0
  660. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/pages/triggers-783b9526167f1249.js +0 -0
  661. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/polyfills-5cd94c89d3acac5f.js +0 -0
  662. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/chunks/webpack-bc5e4eb2c1ff587c.js +0 -0
  663. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/_next/static/css/d1e8e64d0b07af2f.css +0 -0
  664. {mage-ai-0.8.38/mage_ai/server/frontend_dist/_next/static/R_cV5sAcMT3qDXIKAGGPe → mage-ai-0.8.39/mage_ai/server/frontend_dist/_next/static/ngCg1gM6urg83y2nV5KHK}/_middlewareManifest.js +0 -0
  665. {mage-ai-0.8.38/mage_ai/server/frontend_dist/_next/static/R_cV5sAcMT3qDXIKAGGPe → mage-ai-0.8.39/mage_ai/server/frontend_dist/_next/static/ngCg1gM6urg83y2nV5KHK}/_ssgManifest.js +0 -0
  666. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/favicon.ico +0 -0
  667. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Bold.ttf +0 -0
  668. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Light.ttf +0 -0
  669. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Medium.ttf +0 -0
  670. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Regular.ttf +0 -0
  671. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-Retina.ttf +0 -0
  672. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Fira_Code/ttf/FiraCode-SemiBold.ttf +0 -0
  673. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/LICENSE.txt +0 -0
  674. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Black.ttf +0 -0
  675. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
  676. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Bold.ttf +0 -0
  677. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
  678. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Italic.ttf +0 -0
  679. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Light.ttf +0 -0
  680. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
  681. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Medium.ttf +0 -0
  682. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  683. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Regular.ttf +0 -0
  684. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-Thin.ttf +0 -0
  685. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
  686. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/LICENSE.txt +0 -0
  687. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/README.txt +0 -0
  688. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-Italic-VariableFont_wght.ttf +0 -0
  689. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf +0 -0
  690. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Bold.ttf +0 -0
  691. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-BoldItalic.ttf +0 -0
  692. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLight.ttf +0 -0
  693. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ExtraLightItalic.ttf +0 -0
  694. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Italic.ttf +0 -0
  695. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Light.ttf +0 -0
  696. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-LightItalic.ttf +0 -0
  697. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Medium.ttf +0 -0
  698. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-MediumItalic.ttf +0 -0
  699. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Regular.ttf +0 -0
  700. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBold.ttf +0 -0
  701. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-SemiBoldItalic.ttf +0 -0
  702. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-Thin.ttf +0 -0
  703. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/fonts/Roboto_Mono/static/RobotoMono-ThinItalic.ttf +0 -0
  704. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/images/backfill.jpg +0 -0
  705. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/images/banner-shape-purple-peach.jpg +0 -0
  706. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/images/dashboard-api-key.webp +0 -0
  707. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/images/extensions/great_expectations/logo.png +0 -0
  708. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/images/extra.jpg +0 -0
  709. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/images/monitor.jpg +0 -0
  710. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/images/run B.jpg +0 -0
  711. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/images/sessions/abstract.png +0 -0
  712. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/frontend_dist/vercel.svg +0 -0
  713. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/kernel_output_parser.py +0 -0
  714. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/kernels.py +0 -0
  715. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/logger.py +0 -0
  716. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/scheduler_manager.py +0 -0
  717. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/subscriber.py +0 -0
  718. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/utils/__init__.py +0 -0
  719. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/utils/frontend_renderer.py +0 -0
  720. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/utils/output_display.py +0 -0
  721. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/server/websocket_server.py +0 -0
  722. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/__init__.py +0 -0
  723. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/airbyte/__init__.py +0 -0
  724. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/airbyte/client.py +0 -0
  725. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/airbyte/config.py +0 -0
  726. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/airbyte/constants.py +0 -0
  727. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/airbyte/exceptions.py +0 -0
  728. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/airbyte/server.py +0 -0
  729. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/__init__.py +0 -0
  730. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/ecs/__init__.py +0 -0
  731. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/ecs/config.py +0 -0
  732. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/ecs/ecs.py +0 -0
  733. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/emr/__init__.py +0 -0
  734. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/emr/config.py +0 -0
  735. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/emr/emr.py +0 -0
  736. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/emr/emr_basics.py +0 -0
  737. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/emr/launcher.py +0 -0
  738. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/emr/resource_manager.py +0 -0
  739. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/events/__init__.py +0 -0
  740. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/events/events.py +0 -0
  741. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/s3/__init__.py +0 -0
  742. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/s3/s3.py +0 -0
  743. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/secrets_manager/__init__.py +0 -0
  744. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/aws/secrets_manager/secrets_manager.py +0 -0
  745. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/datadog/__init__.py +0 -0
  746. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/dbt/__init__.py +0 -0
  747. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/dbt/config.py +0 -0
  748. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/dbt/constants.py +0 -0
  749. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/dbt/dbt.py +0 -0
  750. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/email/__init__.py +0 -0
  751. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/email/config.py +0 -0
  752. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/email/email.py +0 -0
  753. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/gcp/__init__.py +0 -0
  754. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/gcp/cloud_run/__init__.py +0 -0
  755. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/gcp/cloud_run/cloud_run.py +0 -0
  756. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/gcp/cloud_run/config.py +0 -0
  757. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/google_chat/__init__.py +0 -0
  758. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/google_chat/config.py +0 -0
  759. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/google_chat/google_chat.py +0 -0
  760. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/hightouch/__init__.py +0 -0
  761. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/hightouch/config.py +0 -0
  762. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/hightouch/constants.py +0 -0
  763. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/hightouch/hightouch.py +0 -0
  764. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/k8s/__init__.py +0 -0
  765. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/k8s/constants.py +0 -0
  766. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/k8s/job_manager.py +0 -0
  767. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/metaplane/__init__.py +0 -0
  768. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/metaplane/config.py +0 -0
  769. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/metaplane/metaplane.py +0 -0
  770. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/slack/__init__.py +0 -0
  771. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/slack/config.py +0 -0
  772. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/slack/slack.py +0 -0
  773. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/stitch/__init__.py +0 -0
  774. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/stitch/config.py +0 -0
  775. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/stitch/constants.py +0 -0
  776. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/stitch/stitch.py +0 -0
  777. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/teams/__init__.py +0 -0
  778. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/teams/config.py +0 -0
  779. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/teams/teams.py +0 -0
  780. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/tracking/__init__.py +0 -0
  781. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/services/tracking/metrics.py +0 -0
  782. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/settings/__init__.py +0 -0
  783. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/__init__.py +0 -0
  784. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/array.py +0 -0
  785. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/code.py +0 -0
  786. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/config.py +0 -0
  787. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/constants.py +0 -0
  788. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/conversions.py +0 -0
  789. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/custom_types.py +0 -0
  790. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/dates.py +0 -0
  791. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/environments.py +0 -0
  792. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/hash.py +0 -0
  793. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/http_client.py +0 -0
  794. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/io.py +0 -0
  795. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/logger.py +0 -0
  796. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/multi.py +0 -0
  797. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/parsers.py +0 -0
  798. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/retry.py +0 -0
  799. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/security.py +0 -0
  800. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/strings.py +0 -0
  801. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/urls.py +0 -0
  802. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/shared/utils.py +0 -0
  803. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/__init__.py +0 -0
  804. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/constants.py +0 -0
  805. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sinks/__init__.py +0 -0
  806. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sinks/amazon_s3.py +0 -0
  807. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sinks/base.py +0 -0
  808. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sinks/kafka.py +0 -0
  809. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sinks/kinesis.py +0 -0
  810. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sinks/opensearch.py +0 -0
  811. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sinks/sink_factory.py +0 -0
  812. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sources/__init__.py +0 -0
  813. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sources/azure_event_hub.py +0 -0
  814. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sources/base.py +0 -0
  815. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sources/kafka.py +0 -0
  816. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sources/kinesis.py +0 -0
  817. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sources/rabbitmq.py +0 -0
  818. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/streaming/sources/source_factory.py +0 -0
  819. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/__init__.py +0 -0
  820. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/api/__init__.py +0 -0
  821. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/api/operations/__init__.py +0 -0
  822. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/api/operations/base.py +0 -0
  823. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/api/operations/test_operations.py +0 -0
  824. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/api/operations/test_sessions.py +0 -0
  825. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/api/operations/test_users.py +0 -0
  826. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/base_test.py +0 -0
  827. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/__init__.py +0 -0
  828. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/cleaning_rules/__init__.py +0 -0
  829. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/cleaning_rules/test_clean_column_names.py +0 -0
  830. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/cleaning_rules/test_fix_syntax_error.py +0 -0
  831. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/cleaning_rules/test_impute_values.py +0 -0
  832. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/cleaning_rules/test_reformat_values.py +0 -0
  833. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_collinear_columns.py +0 -0
  834. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_high_empty_rate.py +0 -0
  835. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_columns_with_single_value.py +0 -0
  836. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_duplicate_rows.py +0 -0
  837. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/cleaning_rules/test_remove_outliers.py +0 -0
  838. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/statistics/__init__.py +0 -0
  839. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/statistics/test_calculator.py +0 -0
  840. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/test_column_type_detector.py +0 -0
  841. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/transformer_actions/__init__.py +0 -0
  842. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/transformer_actions/shared.py +0 -0
  843. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/transformer_actions/test_base.py +0 -0
  844. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/transformer_actions/test_column.py +0 -0
  845. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/transformer_actions/test_custom_actions.py +0 -0
  846. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/transformer_actions/test_helpers.py +0 -0
  847. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/transformer_actions/test_row.py +0 -0
  848. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/transformer_actions/test_utils.py +0 -0
  849. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_cleaner/transformer_actions/test_variable_replacer.py +0 -0
  850. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_preparation/__init__.py +0 -0
  851. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_preparation/models/__init__.py +0 -0
  852. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_preparation/models/block/__init__.py +0 -0
  853. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_preparation/models/block/test_sql.py +0 -0
  854. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_preparation/models/test_block.py +0 -0
  855. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_preparation/models/test_pipeline.py +0 -0
  856. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_preparation/models/test_variable.py +0 -0
  857. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_preparation/test_templates.py +0 -0
  858. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/data_preparation/test_variable_manager.py +0 -0
  859. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/factory.py +0 -0
  860. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/io/__init__.py +0 -0
  861. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/io/test_config.py +0 -0
  862. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/io/test_export_utils.py +0 -0
  863. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/__init__.py +0 -0
  864. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/db/__init__.py +0 -0
  865. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/db/test_models.py +0 -0
  866. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/notification/__init__.py +0 -0
  867. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/notification/constants.py +0 -0
  868. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/notification/test_config.py +0 -0
  869. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/notification/test_sender.py +0 -0
  870. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/queue/__init__.py +0 -0
  871. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/queue/test_process_queue.py +0 -0
  872. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/test_execution_process_manager.py +0 -0
  873. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/test_job_manager.py +0 -0
  874. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/test_pipeline_scheduler.py +0 -0
  875. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/triggers/__init__.py +0 -0
  876. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/triggers/test_event_trigger.py +0 -0
  877. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/orchestration/triggers/test_loop_time_trigger.py +0 -0
  878. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/services/__init__.py +0 -0
  879. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/services/aws/__init__.py +0 -0
  880. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/services/aws/s3/__init__.py +0 -0
  881. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/services/aws/s3/test_s3.py +0 -0
  882. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/services/datadog/__init__.py +0 -0
  883. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/services/datadog/test_datadog.py +0 -0
  884. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/services/k8s/__init__.py +0 -0
  885. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/services/k8s/test_job_manager.py +0 -0
  886. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/shared/__init__.py +0 -0
  887. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/shared/test_io.py +0 -0
  888. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/shared/test_retry.py +0 -0
  889. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/shared/test_security.py +0 -0
  890. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/__init__.py +0 -0
  891. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sinks/__init__.py +0 -0
  892. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sinks/test_amazon_s3.py +0 -0
  893. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sinks/test_kinesis.py +0 -0
  894. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sinks/test_opensearch.py +0 -0
  895. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sinks/test_sink_factory.py +0 -0
  896. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sources/__init__.py +0 -0
  897. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sources/test_azure_event_hub.py +0 -0
  898. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sources/test_kafka.py +0 -0
  899. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sources/test_kinesis.py +0 -0
  900. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sources/test_rabbitmq.py +0 -0
  901. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/streaming/sources/test_source_factory.py +0 -0
  902. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/tests/test_shared.py +0 -0
  903. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/utils/__init__.py +0 -0
  904. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/utils/code.py +0 -0
  905. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/utils/logger/__init__.py +0 -0
  906. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai/utils/logger/constants.py +0 -0
  907. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai.egg-info/dependency_links.txt +0 -0
  908. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai.egg-info/entry_points.txt +0 -0
  909. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai.egg-info/requires.txt +0 -0
  910. {mage-ai-0.8.38 → mage-ai-0.8.39}/mage_ai.egg-info/top_level.txt +0 -0
  911. {mage-ai-0.8.38 → mage-ai-0.8.39}/pyproject.toml +0 -0
  912. {mage-ai-0.8.38 → mage-ai-0.8.39}/requirements.txt +0 -0
  913. {mage-ai-0.8.38 → mage-ai-0.8.39}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mage-ai
3
- Version: 0.8.38
3
+ Version: 0.8.39
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
@@ -275,9 +275,9 @@ class BaseSQLDatabase(BaseIO):
275
275
  """
276
276
  return query_string.strip(' \n\t')
277
277
 
278
- def _clean_column_name(self, column_name: str) -> str:
278
+ def _clean_column_name(self, column_name: str, allow_reserved_words: bool = False) -> str:
279
279
  col_new = re.sub(r'\W', '_', column_name.lower())
280
- if col_new.upper() in SQL_RESERVED_WORDS:
280
+ if not allow_reserved_words and col_new.upper() in SQL_RESERVED_WORDS:
281
281
  col_new = f'_{col_new}'
282
282
  return col_new
283
283
 
@@ -841,3 +841,6 @@ SQL_RESERVED_WORDS_SUBSET = {
841
841
  'USER',
842
842
  'WHERE',
843
843
  }
844
+
845
+ UNIQUE_CONFLICT_METHOD_IGNORE = 'IGNORE'
846
+ UNIQUE_CONFLICT_METHOD_UPDATE = 'UPDATE'
@@ -2,7 +2,7 @@ from enum import Enum
2
2
  from mage_ai.shared.utils import clean_name
3
3
  from pandas import DataFrame, Series
4
4
  from pandas.api.types import infer_dtype
5
- from typing import Callable, Dict, Mapping
5
+ from typing import Callable, Dict, List, Mapping
6
6
 
7
7
  """
8
8
  Utilities for exporting Python data frames to external databases.
@@ -31,6 +31,7 @@ class PandasTypes(str, Enum):
31
31
  DATETIME64 = 'datetime64'
32
32
  DECIMAL = 'decimal'
33
33
  INTEGER = 'integer'
34
+ INT64 = 'int64'
34
35
  EMPTY = 'empty'
35
36
  FLOATING = 'floating'
36
37
  MIXED = 'mixed'
@@ -101,6 +102,7 @@ def gen_table_creation_query(
101
102
  dtypes: Mapping[str, str],
102
103
  schema_name: str,
103
104
  table_name: str,
105
+ unique_constraints: List[str] = [],
104
106
  ) -> str:
105
107
  """
106
108
  Generates a database table creation query from a data frame.
@@ -123,4 +125,15 @@ def gen_table_creation_query(
123
125
  else:
124
126
  full_table_name = table_name
125
127
 
128
+ if unique_constraints:
129
+ unique_constraints_clean = [clean_name(col) for col in unique_constraints]
130
+ unique_constraints_escaped = [f'"{col}"'
131
+ for col in unique_constraints_clean]
132
+ index_name = '_'.join([
133
+ clean_name(full_table_name),
134
+ ] + unique_constraints_clean)
135
+ index_name = f'unique{index_name}'[:64]
136
+ query.append(
137
+ f"CONSTRAINT {index_name} UNIQUE ({', '.join(unique_constraints_escaped)})",
138
+ )
126
139
  return f'CREATE TABLE {full_table_name} (' + ','.join(query) + ');'
@@ -3,7 +3,7 @@ from mage_ai.io.export_utils import PandasTypes
3
3
  from mage_ai.io.base import QUERY_ROW_LIMIT
4
4
  from mage_ai.io.sql import BaseSQL
5
5
  from pandas import DataFrame, Series
6
- from typing import Any, IO, Union
6
+ from typing import Any, IO, List, Union
7
7
  import json
8
8
  import numpy as np
9
9
  import pyodbc
@@ -87,8 +87,11 @@ class MSSQL(BaseSQL):
87
87
  self,
88
88
  cursor: Any,
89
89
  df: DataFrame,
90
+ db_dtypes: List[str],
91
+ dtypes: List[str],
90
92
  full_table_name: str,
91
- buffer: Union[IO, None] = None
93
+ buffer: Union[IO, None] = None,
94
+ **kwargs,
92
95
  ) -> None:
93
96
  values_placeholder = ', '.join(["?" for i in range(len(df.columns))])
94
97
  values = []
@@ -5,7 +5,7 @@ from mage_ai.shared.utils import clean_name
5
5
  from mysql.connector import connect
6
6
  from mysql.connector.cursor import MySQLCursor
7
7
  from pandas import DataFrame, Series
8
- from typing import IO, Mapping, Union
8
+ from typing import IO, List, Mapping, Union
9
9
  import numpy as np
10
10
 
11
11
 
@@ -47,7 +47,8 @@ class MySQL(BaseSQL):
47
47
  self,
48
48
  dtypes: Mapping[str, str],
49
49
  schema_name: str,
50
- table_name: str
50
+ table_name: str,
51
+ unique_constraints: List[str] = [],
51
52
  ) -> str:
52
53
  query = []
53
54
  for cname in dtypes:
@@ -73,8 +74,11 @@ class MySQL(BaseSQL):
73
74
  self,
74
75
  cursor: MySQLCursor,
75
76
  df: DataFrame,
77
+ db_dtypes: List[str],
78
+ dtypes: List[str],
76
79
  full_table_name: str,
77
- buffer: Union[IO, None] = None
80
+ buffer: Union[IO, None] = None,
81
+ **kwargs,
78
82
  ) -> None:
79
83
  values_placeholder = ', '.join(["%s" for i in range(len(df.columns))])
80
84
  values = []
@@ -1,4 +1,5 @@
1
1
  from mage_ai.io.config import BaseConfigLoader, ConfigKey
2
+ from mage_ai.io.constants import UNIQUE_CONFLICT_METHOD_UPDATE
2
3
  from mage_ai.io.export_utils import BadConversionError, PandasTypes
3
4
  from mage_ai.io.sql import BaseSQL
4
5
  from mage_ai.shared.parsers import encode_complex
@@ -6,12 +7,21 @@ from mage_ai.shared.utils import is_port_in_use
6
7
  from pandas import DataFrame, Series
7
8
  from psycopg2 import connect, _psycopg
8
9
  from sshtunnel import SSHTunnelForwarder
9
- from typing import Union, IO
10
+ from typing import IO, List, Union
10
11
  import numpy as np
11
12
  import pandas as pd
12
13
  import simplejson
13
14
 
14
15
 
16
+ JSON_SERIALIZABLE_TYPES = frozenset([
17
+ PandasTypes.DATE,
18
+ PandasTypes.DATETIME,
19
+ PandasTypes.DATETIME64,
20
+ PandasTypes.OBJECT,
21
+ PandasTypes.TIME,
22
+ ])
23
+
24
+
15
25
  class Postgres(BaseSQL):
16
26
  """
17
27
  Handles data transfer between a PostgreSQL database and the Mage app.
@@ -159,9 +169,9 @@ class Postgres(BaseSQL):
159
169
  column_type = None
160
170
 
161
171
  if len(values) >= 1:
162
- value = values[0]
163
172
  column_type = 'JSONB'
164
173
 
174
+ value = values[0]
165
175
  if type(value) is list:
166
176
  if len(value) >= 1:
167
177
  item = value[0]
@@ -204,7 +214,7 @@ class Postgres(BaseSQL):
204
214
  return 'bytea'
205
215
  elif dtype in (PandasTypes.FLOATING, PandasTypes.DECIMAL, PandasTypes.MIXED_INTEGER_FLOAT):
206
216
  return 'double precision'
207
- elif dtype == PandasTypes.INTEGER:
217
+ elif dtype == PandasTypes.INTEGER or dtype == PandasTypes.INT64:
208
218
  max_int, min_int = column.max(), column.min()
209
219
  if np.int16(max_int) == max_int and np.int16(min_int) == min_int:
210
220
  return 'smallint'
@@ -229,9 +239,21 @@ class Postgres(BaseSQL):
229
239
  self,
230
240
  cursor: _psycopg.cursor,
231
241
  df: DataFrame,
242
+ db_dtypes: List[str],
243
+ dtypes: List[str],
232
244
  full_table_name: str,
233
- buffer: Union[IO, None] = None
245
+ buffer: Union[IO, None] = None,
246
+ allow_reserved_words: bool = False,
247
+ unique_conflict_method: str = None,
248
+ unique_constraints: List[str] = None,
234
249
  ) -> None:
250
+ def clean_array_value(val):
251
+ if val is None or type(val) is not str or len(val) < 2:
252
+ return val
253
+ if val[0] == '[' and val[-1] == ']':
254
+ return '{' + val[1:-1] + '}'
255
+ return val
256
+
235
257
  df_ = df.copy()
236
258
  columns = df_.columns
237
259
 
@@ -239,28 +261,49 @@ class Postgres(BaseSQL):
239
261
  df_col_dropna = df_[col].dropna()
240
262
  if df_col_dropna.count() == 0:
241
263
  continue
242
- if PandasTypes.OBJECT == df_[col].dtype and type(df_col_dropna.iloc[0]) != str:
264
+ if dtypes[col] in JSON_SERIALIZABLE_TYPES \
265
+ or (df_[col].dtype == PandasTypes.OBJECT and
266
+ type(df_col_dropna.iloc[0]) != str):
243
267
  df_[col] = df_[col].apply(lambda x: simplejson.dumps(
244
268
  x,
245
269
  default=encode_complex,
246
270
  ignore_nan=True,
247
271
  ))
272
+ if '[]' in db_dtypes[col]:
273
+ df_[col] = df_[col].apply(lambda x: clean_array_value(x))
248
274
 
249
- df_.to_csv(
250
- buffer,
251
- header=False,
252
- index=False,
253
- na_rep='',
254
- )
275
+ values = []
255
276
 
256
- buffer.seek(0)
277
+ for _, row in df_.iterrows():
278
+ t = tuple(row)
279
+ if len(t) == 1:
280
+ value = f'({str(t[0])})'
281
+ else:
282
+ value = str(t)
283
+ values.append(value.replace('None', 'NULL'))
284
+ values_string = ', '.join(values)
285
+ insert_columns = ', '.join([f'"{col}"'for col in columns])
286
+
287
+ commands = [
288
+ f'INSERT INTO {full_table_name} ({insert_columns})',
289
+ f'VALUES {values_string}',
290
+ ]
291
+ if unique_constraints and unique_conflict_method:
292
+ unique_constraints = \
293
+ [f'"{self._clean_column_name(col, allow_reserved_words=allow_reserved_words)}"'
294
+ for col in unique_constraints]
295
+ columns_cleaned = \
296
+ [f'"{self._clean_column_name(col, allow_reserved_words=allow_reserved_words)}"'
297
+ for col in columns]
257
298
 
258
- columns_names = ', '.join(columns)
259
- cursor.copy_expert(f"""
260
- COPY {full_table_name} FROM STDIN (
261
- FORMAT csv
262
- , DELIMITER \',\'
263
- , NULL \'\'
264
- , FORCE_NULL({columns_names})
265
- );
266
- """, buffer)
299
+ commands.append(f"ON CONFLICT ({', '.join(unique_constraints)})")
300
+ if UNIQUE_CONFLICT_METHOD_UPDATE == unique_conflict_method:
301
+ update_command = [f'{col} = EXCLUDED.{col}' for col in columns_cleaned]
302
+ commands.append(
303
+ f"DO UPDATE SET {', '.join(update_command)}",
304
+ )
305
+ else:
306
+ commands.append('DO NOTHING')
307
+ cursor.execute(
308
+ '\n'.join(commands)
309
+ )
@@ -43,9 +43,15 @@ class BaseSQL(BaseSQLConnection):
43
43
  self,
44
44
  dtypes: Mapping[str, str],
45
45
  schema_name: str,
46
- table_name: str
46
+ table_name: str,
47
+ unique_constraints: List[str] = [],
47
48
  ) -> str:
48
- return gen_table_creation_query(dtypes, schema_name, table_name)
49
+ return gen_table_creation_query(
50
+ dtypes,
51
+ schema_name,
52
+ table_name,
53
+ unique_constraints=unique_constraints,
54
+ )
49
55
 
50
56
  def build_create_table_as_command(
51
57
  self,
@@ -80,6 +86,8 @@ class BaseSQL(BaseSQLConnection):
80
86
  self,
81
87
  cursor,
82
88
  df: DataFrame,
89
+ db_dtypes: List[str],
90
+ dtypes: List[str],
83
91
  full_table_name: str,
84
92
  buffer: Union[IO, None] = None
85
93
  ) -> None:
@@ -183,6 +191,9 @@ class BaseSQL(BaseSQLConnection):
183
191
  query_string: Union[str, None] = None,
184
192
  drop_table_on_replace: bool = False,
185
193
  cascade_on_drop: bool = False,
194
+ allow_reserved_words: bool = False,
195
+ unique_conflict_method: str = None,
196
+ unique_constraints: List[str] = None,
186
197
  ) -> None:
187
198
  """
188
199
  Exports dataframe to the connected database from a Pandas data frame. If table doesn't
@@ -221,7 +232,10 @@ class BaseSQL(BaseSQLConnection):
221
232
  df = clean_df_for_export(df, self.clean, dtypes)
222
233
 
223
234
  # Clean column names
224
- col_mapping = {col: self._clean_column_name(col) for col in df.columns}
235
+ col_mapping = {col: self._clean_column_name(
236
+ col,
237
+ allow_reserved_words=allow_reserved_words)
238
+ for col in df.columns}
225
239
  df = df.rename(columns=col_mapping)
226
240
  dtypes = infer_dtypes(df)
227
241
 
@@ -263,12 +277,27 @@ class BaseSQL(BaseSQLConnection):
263
277
  )
264
278
  cur.execute(query)
265
279
  else:
280
+ db_dtypes = {col: self.get_type(df[col], dtypes[col]) for col in dtypes}
266
281
  if should_create_table:
267
- db_dtypes = {col: self.get_type(df[col], dtypes[col]) for col in dtypes}
268
- query = self.build_create_table_command(db_dtypes, schema_name, table_name)
282
+ query = self.build_create_table_command(
283
+ db_dtypes,
284
+ schema_name,
285
+ table_name,
286
+ unique_constraints=unique_constraints,
287
+ )
269
288
  cur.execute(query)
270
289
 
271
- self.upload_dataframe(cur, df, full_table_name, buffer)
290
+ self.upload_dataframe(
291
+ cur,
292
+ df,
293
+ db_dtypes,
294
+ dtypes,
295
+ full_table_name,
296
+ buffer,
297
+ allow_reserved_words=allow_reserved_words,
298
+ unique_conflict_method=unique_conflict_method,
299
+ unique_constraints=unique_constraints,
300
+ )
272
301
  self.conn.commit()
273
302
 
274
303
  if verbose:
@@ -15,7 +15,7 @@ from pandas import DataFrame, Series
15
15
  from trino.auth import BasicAuthentication
16
16
  from trino.dbapi import Connection, Cursor as CursorParent
17
17
  from trino.transaction import IsolationLevel
18
- from typing import IO, Mapping, Union
18
+ from typing import IO, List, Mapping, Union
19
19
  import pandas as pd
20
20
 
21
21
 
@@ -86,7 +86,8 @@ class Trino(BaseSQL):
86
86
  self,
87
87
  dtypes: Mapping[str, str],
88
88
  schema_name: str,
89
- table_name: str
89
+ table_name: str,
90
+ unique_constraints: List[str] = [],
90
91
  ):
91
92
  query = []
92
93
  for cname in dtypes:
@@ -123,8 +124,11 @@ class Trino(BaseSQL):
123
124
  self,
124
125
  cursor: Cursor,
125
126
  df: DataFrame,
127
+ db_dtypes: List[str],
128
+ dtypes: List[str],
126
129
  full_table_name: str,
127
- buffer: Union[IO, None] = None
130
+ buffer: Union[IO, None] = None,
131
+ **kwargs,
128
132
  ) -> None:
129
133
  values = []
130
134
  for _, row in df.iterrows():
@@ -12,4 +12,4 @@ DATAFRAME_OUTPUT_SAMPLE_COUNT = 10
12
12
  # Dockerfile depends on it because it runs ./scripts/install_mage.sh and uses
13
13
  # the last line to determine the version to install.
14
14
  VERSION = \
15
- '0.8.38'
15
+ '0.8.39'
@@ -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>404: This page could not be found</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-bc5e4eb2c1ff587c.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-7e791bee1e32adec.js" defer=""></script><script src="/_next/static/chunks/pages/_error-235304e5badb19eb.js" defer=""></script><script src="/_next/static/R_cV5sAcMT3qDXIKAGGPe/_buildManifest.js" defer=""></script><script src="/_next/static/R_cV5sAcMT3qDXIKAGGPe/_ssgManifest.js" defer=""></script><script src="/_next/static/R_cV5sAcMT3qDXIKAGGPe/_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>404: This page could not be found</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-bc5e4eb2c1ff587c.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-7e791bee1e32adec.js" defer=""></script><script src="/_next/static/chunks/pages/_error-235304e5badb19eb.js" defer=""></script><script src="/_next/static/ngCg1gM6urg83y2nV5KHK/_buildManifest.js" defer=""></script><script src="/_next/static/ngCg1gM6urg83y2nV5KHK/_ssgManifest.js" defer=""></script><script src="/_next/static/ngCg1gM6urg83y2nV5KHK/_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*/
@@ -19,4 +19,4 @@ data-styled.g5[id="ToastWrapper-sc-1a33ph1-0"]{content:"kOVcuR,"}/*!sc*/
19
19
  .next-error-h1 {
20
20
  border-right: 1px solid rgba(255, 255, 255, .3);
21
21
  }
22
- }</style><h1 class="next-error-h1" style="display:inline-block;margin:0;margin-right:20px;padding:10px 23px 10px 0;font-size:24px;font-weight:500;vertical-align:top">404<!-- --></h1><div style="display:inline-block;text-align:left;line-height:49px;height:49px;vertical-align:middle"><h2 style="font-size:14px;font-weight:normal;line-height:inherit;margin:0;padding:0">This page could not be found<!-- -->.<!-- --></h2></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":{"statusCode":404},"currentTheme":{"accent":{"alert":"#F6540B","blue":"#4877FF","blueLight":"rgba(72, 119, 255, 0.5)","contentDefaultTransparent":"rgba(174, 174, 174, 0.5)","cyan":"#65E3FF","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":"#FFB9FC","positive":"#00A81A","primaryTransparent":"rgba(155, 108, 167, 0.5)","purple":"#7D55EC","purpleLight":"rgba(125, 85, 236, 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","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","table":"#292A2F"},"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":"/_error","query":{},"buildId":"R_cV5sAcMT3qDXIKAGGPe","nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
22
+ }</style><h1 class="next-error-h1" style="display:inline-block;margin:0;margin-right:20px;padding:10px 23px 10px 0;font-size:24px;font-weight:500;vertical-align:top">404<!-- --></h1><div style="display:inline-block;text-align:left;line-height:49px;height:49px;vertical-align:middle"><h2 style="font-size:14px;font-weight:normal;line-height:inherit;margin:0;padding:0">This page could not be found<!-- -->.<!-- --></h2></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":{"statusCode":404},"currentTheme":{"accent":{"alert":"#F6540B","blue":"#4877FF","blueLight":"rgba(72, 119, 255, 0.5)","contentDefaultTransparent":"rgba(174, 174, 174, 0.5)","cyan":"#65E3FF","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":"#FFB9FC","positive":"#00A81A","primaryTransparent":"rgba(155, 108, 167, 0.5)","purple":"#7D55EC","purpleLight":"rgba(125, 85, 236, 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","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","table":"#292A2F"},"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":"/_error","query":{},"buildId":"ngCg1gM6urg83y2nV5KHK","nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
@@ -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>404: This page could not be found</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-bc5e4eb2c1ff587c.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-7e791bee1e32adec.js" defer=""></script><script src="/_next/static/chunks/pages/_error-235304e5badb19eb.js" defer=""></script><script src="/_next/static/R_cV5sAcMT3qDXIKAGGPe/_buildManifest.js" defer=""></script><script src="/_next/static/R_cV5sAcMT3qDXIKAGGPe/_ssgManifest.js" defer=""></script><script src="/_next/static/R_cV5sAcMT3qDXIKAGGPe/_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>404: This page could not be found</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-bc5e4eb2c1ff587c.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-7e791bee1e32adec.js" defer=""></script><script src="/_next/static/chunks/pages/_error-235304e5badb19eb.js" defer=""></script><script src="/_next/static/ngCg1gM6urg83y2nV5KHK/_buildManifest.js" defer=""></script><script src="/_next/static/ngCg1gM6urg83y2nV5KHK/_ssgManifest.js" defer=""></script><script src="/_next/static/ngCg1gM6urg83y2nV5KHK/_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*/
@@ -19,4 +19,4 @@ data-styled.g5[id="ToastWrapper-sc-1a33ph1-0"]{content:"kOVcuR,"}/*!sc*/
19
19
  .next-error-h1 {
20
20
  border-right: 1px solid rgba(255, 255, 255, .3);
21
21
  }
22
- }</style><h1 class="next-error-h1" style="display:inline-block;margin:0;margin-right:20px;padding:10px 23px 10px 0;font-size:24px;font-weight:500;vertical-align:top">404<!-- --></h1><div style="display:inline-block;text-align:left;line-height:49px;height:49px;vertical-align:middle"><h2 style="font-size:14px;font-weight:normal;line-height:inherit;margin:0;padding:0">This page could not be found<!-- -->.<!-- --></h2></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":{"statusCode":404},"currentTheme":{"accent":{"alert":"#F6540B","blue":"#4877FF","blueLight":"rgba(72, 119, 255, 0.5)","contentDefaultTransparent":"rgba(174, 174, 174, 0.5)","cyan":"#65E3FF","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":"#FFB9FC","positive":"#00A81A","primaryTransparent":"rgba(155, 108, 167, 0.5)","purple":"#7D55EC","purpleLight":"rgba(125, 85, 236, 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","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","table":"#292A2F"},"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":"/_error","query":{},"buildId":"R_cV5sAcMT3qDXIKAGGPe","nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
22
+ }</style><h1 class="next-error-h1" style="display:inline-block;margin:0;margin-right:20px;padding:10px 23px 10px 0;font-size:24px;font-weight:500;vertical-align:top">404<!-- --></h1><div style="display:inline-block;text-align:left;line-height:49px;height:49px;vertical-align:middle"><h2 style="font-size:14px;font-weight:normal;line-height:inherit;margin:0;padding:0">This page could not be found<!-- -->.<!-- --></h2></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":{"statusCode":404},"currentTheme":{"accent":{"alert":"#F6540B","blue":"#4877FF","blueLight":"rgba(72, 119, 255, 0.5)","contentDefaultTransparent":"rgba(174, 174, 174, 0.5)","cyan":"#65E3FF","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":"#FFB9FC","positive":"#00A81A","primaryTransparent":"rgba(155, 108, 167, 0.5)","purple":"#7D55EC","purpleLight":"rgba(125, 85, 236, 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","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","table":"#292A2F"},"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":"/_error","query":{},"buildId":"ngCg1gM6urg83y2nV5KHK","nextExport":true,"isFallback":false,"gip":true,"appGip":true,"scriptLoader":[]}</script></body></html>
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5141],{33699:function(n,t,e){e.d(t,{Z:function(){return k}});var r=e(89565),i=e.n(r),o=e(82684),a=e(47999),c=e(82635),u=e(19711),s=e(9518),l=e(23831),d=e(49125),f=e(37391),p=(0,s.css)([""," ",""],(function(n){return!n.width&&"\n width: 100%;\n "}),(function(n){return n.width&&"\n width: ".concat(n.width,"px;\n ")})),g=s.default.div.withConfig({displayName:"indexstyle__ContainerStyle",componentId:"sc-11d4rgl-0"})([""," "," height:100%;overflow:auto;position:absolute;",""],p,f.w5,(function(n){return"\n background-color: ".concat((n.theme.background||l.Z.background).codeTextarea,";\n ")})),h=s.default.div.withConfig({displayName:"indexstyle__InnerStyle",componentId:"sc-11d4rgl-1"})([""," padding:","px;"],p,d.cd*d.iI),y=s.default.div.withConfig({displayName:"indexstyle__LineStyle",componentId:"sc-11d4rgl-2"})(["height:","px;"],20),v=(0,s.css)(["@keyframes cursor-blink{0%{opacity:0;}}::before{","}::after{","}"],(function(n){return n.focusBeginning&&"\n position: absolute;\n background-color: ".concat((n.theme.accent||l.Z.accent).warning,';\n content: "";\n display: inline-block;\n height: ').concat(20,"px;\n width: ").concat(d.iI,"px;\n opacity: 0.3;\n ")}),(function(n){return n.focused&&"\n background-color: ".concat((n.theme.accent||l.Z.accent).warning,';\n content: "";\n display: inline-block;\n height: ').concat(20,"px;\n width: ").concat(d.iI,"px;\n opacity: 0.3;\n ")})),m=s.default.div.withConfig({displayName:"indexstyle__InputStyle",componentId:"sc-11d4rgl-3"})(["align-items:center;display:flex;gap:2px;",""],v),b=s.default.span.withConfig({displayName:"indexstyle__CharacterStyle",componentId:"sc-11d4rgl-4"})([""," ::after{","}"],v,(function(n){return n.focused&&"\n position: absolute;\n "})),S=e(16115),x=e(51504),T=e(66653),w=e(41150),P=e(28598);function E(n,t){var e="undefined"!==typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!e){if(Array.isArray(n)||(e=function(n,t){if(!n)return;if("string"===typeof n)return I(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);"Object"===e&&n.constructor&&(e=n.constructor.name);if("Map"===e||"Set"===e)return Array.from(n);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return I(n,t)}(n))||t&&n&&"number"===typeof n.length){e&&(n=e);var r=0,i=function(){};return{s:i,n:function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}},e:function(n){throw n},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,c=!1;return{s:function(){e=e.call(n)},n:function(){var n=e.next();return a=n.done,n},e:function(n){c=!0,o=n},f:function(){try{a||null==e.return||e.return()}finally{if(c)throw o}}}}function I(n,t){(null==t||t>n.length)&&(t=n.length);for(var e=0,r=new Array(t);e<t;e++)r[e]=n[e];return r}var k=function(n){var t=n.interruptKernel,e=n.lastMessage,r=n.onFocus,s=n.sendMessage,l=n.uuid,d=void 0===l?"terminal":l,f=n.width,p=(0,o.useRef)(null),v=(0,o.useRef)(null),I=(0,o.useState)(""),k=I[0],A=I[1],N=(0,o.useState)(0),C=N[0],_=N[1],j=(0,o.useState)(""),O=j[0],M=j[1],R=(0,o.useState)(0),Z=R[0],G=R[1],U=(0,o.useState)([]),X=U[0],F=U[1],Y=(0,o.useState)(!1),D=Y[0],L=Y[1],K=(0,o.useState)([]),Q=(K[0],K[1]),B=(0,o.useState)(),H=B[0],z=B[1];(0,o.useEffect)((function(){if(e){var n=JSON.parse(e.data);z((function(t){var e=t||"";return"stdout"===n[0]?e+n[1]:e}))}}),[e,d]);var J=(0,o.useMemo)((function(){return H?H.split("\n").filter((function(n){return!n.includes("# Mage terminal settings command")})).map((function(n){return{data:n,type:c.Gi.TEXT}})):[]}),[H]);(0,o.useEffect)((function(){if(p.current&&v.current){var n=v.current.getBoundingClientRect().height;p.current.scrollTo(0,n)}}),[J,p,v]);var V=(0,w.y)(),q=V.registerOnKeyDown,$=V.setDisableGlobalKeyboardShortcuts,W=V.unregisterOnKeyDown;(0,o.useEffect)((function(){return function(){W(d)}}),[W,d]);var nn=(0,o.useCallback)((function(){G((function(n){return n>0?n-1:n}))}),[]),tn=(0,o.useCallback)((function(){G((function(n){return n<=k.length?n+1:n}))}),[k]),en=(0,o.useCallback)((function(n){var t=(null===n||void 0===n?void 0:n.split(/\n/))||[];if(t.length>1){var e=t.slice(0,-1);e[0]=k+e[0];var r=e.map((function(n,t){return{command:0===t,data:n,type:c.Gi.TEXT}}));_(X.length+e.length),F((function(n){return n.concat(e)})),Q((function(n){return n.concat(r)})),M((function(n){return n+e.join("\n")}));var i=(t.slice(-1)[0]||"").trim();A(i),G(i.length)}else A((function(t){return t+n})),G(k.length+n.length)}),[k,X]);q(d,(function(n,t,e){var r=n.code,i=n.key;if(D)if((0,T.j)(n),(0,x.y)([S.PQ,S.VS],t)){var o=O+k;(null===o||void 0===o?void 0:o.length)>=0&&(s(JSON.stringify(["stdin",o])),s(JSON.stringify(["stdin","\x03"])),G(0)),M(""),A("")}else if(S.Qj!==r||t[S.zX])if((0,x.y)([S.QK],t))nn();else if((0,x.y)([S.DY],t))tn();else if((0,x.y)([S.Bu],t)){if(X.length>=1){var a,c=Math.max(0,C-1);A(X[c]),_(c),G((null===(a=X[c])||void 0===a?void 0:a.length)||0)}}else if((0,x.y)([S.kD],t)){if(X.length>=1){var u=Math.min(X.length,C+1),l=X[u]||"";A(l),_(u),G(l.length)}}else if((0,x.y)([S.Uq],t)){var d=O+k;s(JSON.stringify(["stdin",d])),s(JSON.stringify(["stdin","\r"])),(null===d||void 0===d?void 0:d.length)>=2&&(_(X.length+1),F((function(n){return n.concat(k)})),G(0)),M(""),A("")}else if((0,x.y)([S.zX,S.VS],t))navigator.clipboard.writeText(window.getSelection().toString());else if((0,x.y)([S.zX,S.Pd],t)||(0,x.y)([S.PQ,S.Pd],t)){var f,p,g,h,y;"undefined"===typeof(null===(f=navigator)||void 0===f?void 0:f.clipboard)?alert('Clipboard pasting is not allowed in insecure contexts. If your Mage deployment is not secure but you still want to use clipboard paste, you can override this setting (which should only be done temporarily) on Chrome browsers by going to "chrome://flags/#unsafely-treat-insecure-origin-as-secure", adding your origin to "Insecure origins treated as secure", and enabling that setting.'):null!==(p=navigator)&&void 0!==p&&null!==(g=p.clipboard)&&void 0!==g&&g.readText?navigator.clipboard.readText().then(en).catch((function(n){return alert("".concat(n,'\n For Chrome, users need to allow clipboard permissions for this site under "Privacy and security" -> "Site settings".\n For Safari, users need to allow the clipboard paste by clicking "Paste" in the context menu that appears.'))})):null!==(h=navigator)&&void 0!==h&&null!==(y=h.clipboard)&&void 0!==y&&y.read?navigator.clipboard.read().then((function(n){var t,e=E(n);try{for(e.s();!(t=e.n()).done;){var r,i=t.value,o=E(i.types);try{for(o.s();!(r=o.n()).done;){var a=r.value;if("text/plain"===a)return i.getType(a)}}catch(c){o.e(c)}finally{o.f()}}}catch(c){e.e(c)}finally{e.f()}})).then((function(n){return n.text()})).then(en).catch((function(n){return alert("".concat(n,'\n For Firefox, users need to allow clipboard paste by setting the "dom.events.asyncClipboard.read" preference in "about:config" to "true" and clicking "Paste" in the context menu that appears.'))})):alert('If pasting is not working properly, you may need to adjust some settings in your browser.\n\n For Firefox, users need to allow clipboard paste by setting both the "dom.events.asyncClipboard.clipboardItem" and "dom.events.asyncClipboard.read" preferences in "about:config" to "true" and clicking "Paste" in the context menu that appears.\n For Chrome, users need to allow clipboard permissions for this site under "Privacy and security" -> "Site settings".\n For Safari, users need to allow the clipboard paste by clicking "Paste" in the context menu that appears.\n')}else t[S.zX]||t[S.PQ]||1!==i.length||(A((function(n){return n.slice(0,Z)+i+n.slice(Z)})),tn());else{var v=Math.max(0,Z-1);A((function(n){return n.slice(0,v)+n.slice(Z)})),G((function(n){return Math.max(0,n-1)}))}}),[k,X,C,D,t,A,F,_,Q,d]);var rn=(0,o.useMemo)((function(){var n;return null===(n=J[J.length-1])||void 0===n?void 0:n.data}),[J]);return(0,P.jsx)(g,{ref:p,width:f,children:(0,P.jsx)(a.Z,{isOpen:!0,onClick:function(){null===r||void 0===r||r(),L(!0),$(!0)},onClickOutside:function(){L(!1),$(!1)},style:{minHeight:"100%"},children:(0,P.jsxs)(h,{ref:v,width:f,children:[null===J||void 0===J?void 0:J.reduce((function(n,t,e){if(e==J.length-1)return n;var r=t||{},o=r.command,a=r.data,s=r.type,l=[];l=(l=Array.isArray(a)?a:[a]).filter((function(n){return n}));var d=[];return l.forEach((function(n,t){var r;if(c.jU.includes(s)&&(r=(0,P.jsx)(u.ZP,{monospace:!0,noWrapping:!0,pre:!0,children:n&&(0,P.jsx)(i(),{children:n})})),r){var a="command-".concat(e,"-").concat(t,"-").concat(n);o||d.push((0,P.jsx)(y,{children:r},a))}})),n.concat(d)}),[]),(0,P.jsx)(m,{focused:D&&(0===(null===k||void 0===k?void 0:k.length)||Z>(null===k||void 0===k?void 0:k.length)),children:(0,P.jsxs)(u.ZP,{monospace:!0,children:[(0,P.jsx)(u.ZP,{inline:!0,monospace:!0,children:rn&&(0,P.jsx)(i(),{children:rn})}),null===k||void 0===k?void 0:k.split("").map((function(n,t){return(0,P.jsxs)(b,{focusBeginning:D&&0===Z&&0===t,focused:D&&Z===t+1,children:[" "===n&&(0,P.jsx)(P.Fragment,{children:"\xa0"})," "!==n&&n]},"command-".concat(t,"-").concat(n))}))]})})]})})})}},82635:function(n,t,e){var r,i;e.d(t,{Gi:function(){return i},jU:function(){return a},uF:function(){return r}}),function(n){n.BUSY="busy",n.IDLE="idle",n.QUEUED="queued"}(r||(r={})),function(n){n.IMAGE_PNG="image/png",n.PROGRESS="progress",n.TABLE="table",n.TEXT="text",n.TEXT_HTML="text/html",n.TEXT_PLAIN="text/plain"}(i||(i={}));var o,a=[i.TEXT,i.TEXT_PLAIN];!function(n){n.DISPLAY_DATA="display_data",n.STATUS="status",n.STREAM="stream",n.STREAM_PIPELINE="stream_pipeline"}(o||(o={}))},98781:function(n,t,e){e.d(t,{$1:function(){return u},G7:function(){return l},QK:function(){return c},a_:function(){return d},qL:function(){return o},r0:function(){return s}});var r,i,o,a=e(82394);!function(n){n.INTEGRATION="integration",n.PYTHON="python",n.PYSPARK="pyspark",n.STREAMING="streaming"}(o||(o={}));var c,u,s,l=(r={},(0,a.Z)(r,o.INTEGRATION,"Integration"),(0,a.Z)(r,o.PYTHON,"Standard"),(0,a.Z)(r,o.PYSPARK,"PySpark"),(0,a.Z)(r,o.STREAMING,"Streaming"),r);!function(n){n.ACTIVE="active",n.INACTIVE="inactive",n.NO_SCHEDULES="no_schedules"}(c||(c={})),function(n){n.GROUP="group_by",n.STATUS="status[]",n.TYPE="type[]"}(u||(u={})),function(n){n.STATUS="status",n.TYPE="type"}(s||(s={}));var d=(i={},(0,a.Z)(i,o.PYTHON,"python3"),(0,a.Z)(i,o.PYSPARK,"pysparkkernel"),i)},51504:function(n,t,e){e.d(t,{y:function(){return o}});var r=e(75582),i=e(16115);function o(n,t){var e=n.map((function(n){return String(n)})),o=n.includes(i.PQ),a=n.includes(i.zX),c=n.includes(i.XR),u=i.xU.map((function(n){return String(n)})),s=i.vk.map((function(n){return String(n)})),l=i.Tr.map((function(n){return String(n)})),d=Object.entries(t).find((function(n){var t=(0,r.Z)(n,2),i=t[0];return t[1]&&!e.includes(String(i))&&(!a||!s.includes(String(i)))&&(!o||!u.includes(String(i)))&&(!c||!l.includes(String(i)))}));return n.every((function(n){return t[n]}))&&!d}}}]);