@datarecce/ui 0.1.41 → 0.2.0

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.
Files changed (728) hide show
  1. package/README.md +28 -133
  2. package/dist/AuthModal-C8LetZNB.js +23 -0
  3. package/dist/AuthModal-C8LetZNB.js.map +1 -0
  4. package/dist/LineageCanvas-CR38SDYr.d.ts +41 -0
  5. package/dist/LineageCanvas-CR38SDYr.d.ts.map +1 -0
  6. package/dist/ResultErrorFallback-C7c-TN1p.js +3 -0
  7. package/dist/ResultErrorFallback-C7c-TN1p.js.map +1 -0
  8. package/dist/RouteConfigContext-z8YNimdP.d.ts +172 -0
  9. package/dist/RouteConfigContext-z8YNimdP.d.ts.map +1 -0
  10. package/dist/RunProgress-DyFIALbI.d.ts +429 -0
  11. package/dist/RunProgress-DyFIALbI.d.ts.map +1 -0
  12. package/dist/ScreenshotDataGrid-BfxYUThx.d.ts +64 -0
  13. package/dist/ScreenshotDataGrid-BfxYUThx.d.ts.map +1 -0
  14. package/dist/SplitPane-B-BLxZaQ.d.ts +1427 -0
  15. package/dist/SplitPane-B-BLxZaQ.d.ts.map +1 -0
  16. package/dist/advanced.d.ts +18 -0
  17. package/dist/advanced.d.ts.map +1 -0
  18. package/dist/advanced.js +3 -0
  19. package/dist/advanced.js.map +1 -0
  20. package/dist/api-ZZ4cc9b9.d.ts +255 -0
  21. package/dist/api-ZZ4cc9b9.d.ts.map +1 -0
  22. package/dist/api-_i6BZPkM.js +3 -0
  23. package/dist/api-_i6BZPkM.js.map +1 -0
  24. package/dist/api.d.ts +3 -2
  25. package/dist/api.js +2 -100
  26. package/dist/colors--47Kkns4.js +3 -0
  27. package/dist/colors--47Kkns4.js.map +1 -0
  28. package/dist/colors-vY9Yzui0.d.ts +255 -0
  29. package/dist/colors-vY9Yzui0.d.ts.map +1 -0
  30. package/dist/components-run.d.ts +8 -0
  31. package/dist/components-run.js +2 -0
  32. package/dist/components.d.ts +22 -2
  33. package/dist/components.js +2 -86
  34. package/dist/const-DbXBkrxT.js +3 -0
  35. package/dist/const-DbXBkrxT.js.map +1 -0
  36. package/dist/constants-DD5vJv2q.js +3 -0
  37. package/dist/constants-DD5vJv2q.js.map +1 -0
  38. package/dist/constants.d.ts +3 -0
  39. package/dist/constants.js +2 -0
  40. package/dist/contexts.d.ts +7 -0
  41. package/dist/contexts.js +2 -0
  42. package/dist/flag-CiR2E5oz.d.ts +898 -0
  43. package/dist/flag-CiR2E5oz.d.ts.map +1 -0
  44. package/dist/flag-koeDAqr3.js +3 -0
  45. package/dist/flag-koeDAqr3.js.map +1 -0
  46. package/dist/hooks.d.ts +15 -2
  47. package/dist/hooks.js +2 -43
  48. package/dist/index-BFkbe0aF.d.ts +698 -0
  49. package/dist/index-BFkbe0aF.d.ts.map +1 -0
  50. package/dist/index-Ba3hp2Ng.d.ts +471 -0
  51. package/dist/index-Ba3hp2Ng.d.ts.map +1 -0
  52. package/dist/index-C_kD4ZQ3.d.ts +1079 -0
  53. package/dist/index-C_kD4ZQ3.d.ts.map +1 -0
  54. package/dist/index-CiPcALu4.d.ts +146 -0
  55. package/dist/index-CiPcALu4.d.ts.map +1 -0
  56. package/dist/index-CkXLPYZY.d.ts +13 -0
  57. package/dist/index-CkXLPYZY.d.ts.map +1 -0
  58. package/dist/index-DTCpHvX_.d.ts +211 -0
  59. package/dist/index-DTCpHvX_.d.ts.map +1 -0
  60. package/dist/index-DVoQsx5c.d.ts +349 -0
  61. package/dist/index-DVoQsx5c.d.ts.map +1 -0
  62. package/dist/index-DmwYRgDR.d.ts +192 -0
  63. package/dist/index-DmwYRgDR.d.ts.map +1 -0
  64. package/dist/index-N8N7XmRj.d.ts +130 -0
  65. package/dist/index-N8N7XmRj.d.ts.map +1 -0
  66. package/dist/index-h_fw6R9U.d.ts +1501 -0
  67. package/dist/index-h_fw6R9U.d.ts.map +1 -0
  68. package/dist/index-o48TPoFN.d.ts +734 -0
  69. package/dist/index-o48TPoFN.d.ts.map +1 -0
  70. package/dist/index.d.ts +24 -2
  71. package/dist/index.js +2 -198
  72. package/dist/keepAlive-CEzyrDfg.js +3 -0
  73. package/dist/keepAlive-CEzyrDfg.js.map +1 -0
  74. package/dist/lib/api/axiosClient.d.ts +8 -0
  75. package/dist/lib/api/axiosClient.d.ts.map +1 -0
  76. package/dist/lib/api/axiosClient.js +3 -0
  77. package/dist/lib/api/axiosClient.js.map +1 -0
  78. package/dist/lib/api/track.d.ts +137 -0
  79. package/dist/lib/api/track.d.ts.map +1 -0
  80. package/dist/lib/api/track.js +2 -0
  81. package/dist/lib/api/user.d.ts +16 -0
  82. package/dist/lib/api/user.d.ts.map +1 -0
  83. package/dist/lib/api/user.js +2 -0
  84. package/dist/lib/const.d.ts +8 -0
  85. package/dist/lib/const.d.ts.map +1 -0
  86. package/dist/lib/const.js +2 -0
  87. package/dist/lib/result/ResultErrorFallback.d.ts +8 -0
  88. package/dist/lib/result/ResultErrorFallback.d.ts.map +1 -0
  89. package/dist/lib/result/ResultErrorFallback.js +2 -0
  90. package/dist/primitives-CgGUvwHB.d.ts +914 -0
  91. package/dist/primitives-CgGUvwHB.d.ts.map +1 -0
  92. package/dist/primitives.d.ts +12 -0
  93. package/dist/primitives.js +2 -0
  94. package/dist/result.d.ts +4 -0
  95. package/dist/result.js +2 -0
  96. package/dist/src-BgHSbbHk.js +67 -0
  97. package/dist/src-BgHSbbHk.js.map +1 -0
  98. package/dist/styles.css +478 -4
  99. package/dist/theme-CeWzymUn.js +64 -0
  100. package/dist/theme-CeWzymUn.js.map +1 -0
  101. package/dist/theme.d.ts +3 -2
  102. package/dist/theme.js +2 -9
  103. package/dist/track-9ZQpBlUK.js +3 -0
  104. package/dist/track-9ZQpBlUK.js.map +1 -0
  105. package/dist/types-CFbNxrx2.d.ts +171 -0
  106. package/dist/types-CFbNxrx2.d.ts.map +1 -0
  107. package/dist/types-CZre3j02.d.ts +231 -0
  108. package/dist/types-CZre3j02.d.ts.map +1 -0
  109. package/dist/types.d.ts +14 -2
  110. package/dist/types.js +3 -9
  111. package/dist/types.js.map +1 -0
  112. package/dist/useRecceServerFlag-Bg5R67J4.js +3 -0
  113. package/dist/useRecceServerFlag-Bg5R67J4.js.map +1 -0
  114. package/dist/useThemeColors--prVbMmM.js +3 -0
  115. package/dist/useThemeColors--prVbMmM.js.map +1 -0
  116. package/dist/useThemeColors-DHEroo8f.d.ts +104 -0
  117. package/dist/useThemeColors-DHEroo8f.d.ts.map +1 -0
  118. package/dist/user-DMT7E0fc.js +3 -0
  119. package/dist/user-DMT7E0fc.js.map +1 -0
  120. package/dist/utils-CW2skXm_.js +3 -0
  121. package/dist/utils-CW2skXm_.js.map +1 -0
  122. package/dist/utils-CXWhfyxC.js +5 -0
  123. package/dist/utils-CXWhfyxC.js.map +1 -0
  124. package/dist/utils.d.ts +7 -0
  125. package/dist/utils.js +2 -0
  126. package/package.json +115 -107
  127. package/LICENSE +0 -201
  128. package/dist/RecceCheckContext-BJprb2xR.js +0 -7968
  129. package/dist/RecceCheckContext-BJprb2xR.js.map +0 -1
  130. package/dist/RecceCheckContext-DPnWB_aU.css +0 -215
  131. package/dist/RecceCheckContext-DPnWB_aU.css.map +0 -1
  132. package/dist/RecceCheckContext-DbZ7BdRy.mjs +0 -7426
  133. package/dist/RecceCheckContext-DbZ7BdRy.mjs.map +0 -1
  134. package/dist/RecceCheckContext-DyxOeUsX.css +0 -215
  135. package/dist/RecceCheckContext-DyxOeUsX.css.map +0 -1
  136. package/dist/api.d.mts +0 -3
  137. package/dist/api.js.map +0 -1
  138. package/dist/api.mjs +0 -46
  139. package/dist/api.mjs.map +0 -1
  140. package/dist/components-BeAjVBV3.css +0 -70
  141. package/dist/components-BeAjVBV3.css.map +0 -1
  142. package/dist/components-DfXnN1Hx.js +0 -14689
  143. package/dist/components-DfXnN1Hx.js.map +0 -1
  144. package/dist/components-iUxcqtUB.css +0 -70
  145. package/dist/components-iUxcqtUB.css.map +0 -1
  146. package/dist/components-jh6r4tQn.mjs +0 -12348
  147. package/dist/components-jh6r4tQn.mjs.map +0 -1
  148. package/dist/components.d.mts +0 -3
  149. package/dist/components.mjs +0 -9
  150. package/dist/const-CaIm1Z8g.mjs +0 -12
  151. package/dist/const-CaIm1Z8g.mjs.map +0 -1
  152. package/dist/const-CvdZO0FN.js +0 -24
  153. package/dist/const-CvdZO0FN.js.map +0 -1
  154. package/dist/hooks-cQsBXBd1.js +0 -40
  155. package/dist/hooks-cQsBXBd1.js.map +0 -1
  156. package/dist/hooks-eaHm_yEp.mjs +0 -33
  157. package/dist/hooks-eaHm_yEp.mjs.map +0 -1
  158. package/dist/hooks.d.mts +0 -3
  159. package/dist/hooks.mjs +0 -8
  160. package/dist/html2canvas-pro.esm-CsuSOHXp.js +0 -7250
  161. package/dist/html2canvas-pro.esm-CsuSOHXp.js.map +0 -1
  162. package/dist/html2canvas-pro.esm-E7kpobrC.mjs +0 -7249
  163. package/dist/html2canvas-pro.esm-E7kpobrC.mjs.map +0 -1
  164. package/dist/index-B5bpmv0i.d.mts +0 -2172
  165. package/dist/index-B5bpmv0i.d.mts.map +0 -1
  166. package/dist/index-B9lSPJTi.d.ts +0 -2170
  167. package/dist/index-B9lSPJTi.d.ts.map +0 -1
  168. package/dist/index.d.mts +0 -3
  169. package/dist/index.js.map +0 -1
  170. package/dist/index.mjs +0 -20
  171. package/dist/index.mjs.map +0 -1
  172. package/dist/mui-theme-CUhybmBq.mjs +0 -696
  173. package/dist/mui-theme-CUhybmBq.mjs.map +0 -1
  174. package/dist/mui-theme-iBHkjXJq.js +0 -732
  175. package/dist/mui-theme-iBHkjXJq.js.map +0 -1
  176. package/dist/state-CTITyT0R.js +0 -795
  177. package/dist/state-CTITyT0R.js.map +0 -1
  178. package/dist/state-Sc2b4jri.mjs +0 -382
  179. package/dist/state-Sc2b4jri.mjs.map +0 -1
  180. package/dist/theme.d.mts +0 -3
  181. package/dist/theme.mjs +0 -4
  182. package/dist/tooltipMessage-BC5W7H3X.js +0 -13
  183. package/dist/tooltipMessage-BC5W7H3X.js.map +0 -1
  184. package/dist/tooltipMessage-B_xMIKWL.mjs +0 -7
  185. package/dist/tooltipMessage-B_xMIKWL.mjs.map +0 -1
  186. package/dist/types.d.mts +0 -3
  187. package/dist/types.mjs +0 -6
  188. package/dist/urls-BQW5wjg-.js +0 -13
  189. package/dist/urls-BQW5wjg-.js.map +0 -1
  190. package/dist/urls-DT7FVEcS.mjs +0 -7
  191. package/dist/urls-DT7FVEcS.mjs.map +0 -1
  192. package/dist/version-B9s8yne-.js +0 -300
  193. package/dist/version-B9s8yne-.js.map +0 -1
  194. package/dist/version-DP1kU_7v.mjs +0 -162
  195. package/dist/version-DP1kU_7v.mjs.map +0 -1
  196. package/recce-source/.editorconfig +0 -26
  197. package/recce-source/.flake8 +0 -37
  198. package/recce-source/.github/ISSUE_TEMPLATE/bug_report.yml +0 -67
  199. package/recce-source/.github/ISSUE_TEMPLATE/custom.md +0 -10
  200. package/recce-source/.github/ISSUE_TEMPLATE/feature_request.yml +0 -42
  201. package/recce-source/.github/PULL_REQUEST_TEMPLATE.md +0 -21
  202. package/recce-source/.github/copilot-instructions.md +0 -331
  203. package/recce-source/.github/instructions/backend-instructions.md +0 -541
  204. package/recce-source/.github/instructions/frontend-instructions.md +0 -317
  205. package/recce-source/.github/workflows/build-statics.yaml +0 -72
  206. package/recce-source/.github/workflows/bump.yaml +0 -48
  207. package/recce-source/.github/workflows/integration-tests-cloud.yaml +0 -92
  208. package/recce-source/.github/workflows/integration-tests-sqlmesh.yaml +0 -33
  209. package/recce-source/.github/workflows/integration-tests.yaml +0 -52
  210. package/recce-source/.github/workflows/nightly.yaml +0 -246
  211. package/recce-source/.github/workflows/release.yaml +0 -196
  212. package/recce-source/.github/workflows/tests-js.yaml +0 -58
  213. package/recce-source/.github/workflows/tests-python.yaml +0 -128
  214. package/recce-source/.pre-commit-config.yaml +0 -26
  215. package/recce-source/CLAUDE.md +0 -483
  216. package/recce-source/CODE_OF_CONDUCT.md +0 -128
  217. package/recce-source/CONTRIBUTING.md +0 -107
  218. package/recce-source/LICENSE +0 -201
  219. package/recce-source/Makefile +0 -126
  220. package/recce-source/README.md +0 -182
  221. package/recce-source/RECCE_CLOUD.md +0 -81
  222. package/recce-source/SECURITY.md +0 -25
  223. package/recce-source/docs/PACKAGING.md +0 -340
  224. package/recce-source/docs/README.md +0 -1
  225. package/recce-source/docs/plans/2024-12-31-csv-download-design.md +0 -121
  226. package/recce-source/docs/plans/2024-12-31-csv-download-implementation.md +0 -930
  227. package/recce-source/integration_tests/dbt/dbt_project.yml +0 -26
  228. package/recce-source/integration_tests/dbt/models/customers.sql +0 -69
  229. package/recce-source/integration_tests/dbt/models/docs.md +0 -14
  230. package/recce-source/integration_tests/dbt/models/orders.sql +0 -56
  231. package/recce-source/integration_tests/dbt/models/schema.yml +0 -82
  232. package/recce-source/integration_tests/dbt/models/staging/schema.yml +0 -31
  233. package/recce-source/integration_tests/dbt/models/staging/stg_customers.sql +0 -22
  234. package/recce-source/integration_tests/dbt/models/staging/stg_orders.sql +0 -23
  235. package/recce-source/integration_tests/dbt/models/staging/stg_payments.sql +0 -25
  236. package/recce-source/integration_tests/dbt/packages.yml +0 -7
  237. package/recce-source/integration_tests/dbt/profiles.yml +0 -8
  238. package/recce-source/integration_tests/dbt/seeds/raw_customers.csv +0 -101
  239. package/recce-source/integration_tests/dbt/seeds/raw_orders.csv +0 -100
  240. package/recce-source/integration_tests/dbt/seeds/raw_payments.csv +0 -114
  241. package/recce-source/integration_tests/dbt/seeds/raw_statuses.csv +0 -5
  242. package/recce-source/integration_tests/dbt/smoke_test.sh +0 -72
  243. package/recce-source/integration_tests/dbt/smoke_test_cloud.sh +0 -71
  244. package/recce-source/integration_tests/sqlmesh/__init__.py +0 -0
  245. package/recce-source/integration_tests/sqlmesh/audits/assert_item_price_above_zero.sql +0 -9
  246. package/recce-source/integration_tests/sqlmesh/audits/items.sql +0 -7
  247. package/recce-source/integration_tests/sqlmesh/audits/order_items.sql +0 -7
  248. package/recce-source/integration_tests/sqlmesh/config.py +0 -171
  249. package/recce-source/integration_tests/sqlmesh/helper.py +0 -20
  250. package/recce-source/integration_tests/sqlmesh/hooks/__init__.py +0 -0
  251. package/recce-source/integration_tests/sqlmesh/macros/__init__.py +0 -0
  252. package/recce-source/integration_tests/sqlmesh/macros/macros.py +0 -8
  253. package/recce-source/integration_tests/sqlmesh/macros/macros.sql +0 -8
  254. package/recce-source/integration_tests/sqlmesh/macros/utils.py +0 -11
  255. package/recce-source/integration_tests/sqlmesh/metrics/metrics.sql +0 -25
  256. package/recce-source/integration_tests/sqlmesh/models/customer_revenue_by_day.sql +0 -41
  257. package/recce-source/integration_tests/sqlmesh/models/customer_revenue_lifetime.sql +0 -60
  258. package/recce-source/integration_tests/sqlmesh/models/customers.sql +0 -32
  259. package/recce-source/integration_tests/sqlmesh/models/items.py +0 -95
  260. package/recce-source/integration_tests/sqlmesh/models/marketing.sql +0 -15
  261. package/recce-source/integration_tests/sqlmesh/models/order_items.py +0 -95
  262. package/recce-source/integration_tests/sqlmesh/models/orders.py +0 -70
  263. package/recce-source/integration_tests/sqlmesh/models/raw_marketing.py +0 -62
  264. package/recce-source/integration_tests/sqlmesh/models/top_waiters.sql +0 -23
  265. package/recce-source/integration_tests/sqlmesh/models/waiter_as_customer_by_day.sql +0 -29
  266. package/recce-source/integration_tests/sqlmesh/models/waiter_names.sql +0 -10
  267. package/recce-source/integration_tests/sqlmesh/models/waiter_revenue_by_day.sql +0 -29
  268. package/recce-source/integration_tests/sqlmesh/models/waiters.py +0 -62
  269. package/recce-source/integration_tests/sqlmesh/prep_env.sh +0 -16
  270. package/recce-source/integration_tests/sqlmesh/schema.yaml +0 -5
  271. package/recce-source/integration_tests/sqlmesh/seeds/waiter_names.csv +0 -11
  272. package/recce-source/integration_tests/sqlmesh/test_server.sh +0 -29
  273. package/recce-source/integration_tests/sqlmesh/tests/test_customer_revenue_by_day.yaml +0 -63
  274. package/recce-source/integration_tests/sqlmesh/tests/test_order_items.yaml +0 -72
  275. package/recce-source/js/.editorconfig +0 -27
  276. package/recce-source/js/.env.development +0 -5
  277. package/recce-source/js/.husky/pre-commit +0 -29
  278. package/recce-source/js/.nvmrc +0 -1
  279. package/recce-source/js/README.md +0 -39
  280. package/recce-source/js/app/(mainComponents)/DisplayModeToggle.tsx +0 -65
  281. package/recce-source/js/app/(mainComponents)/NavBar.tsx +0 -228
  282. package/recce-source/js/app/(mainComponents)/RecceVersionBadge.tsx +0 -107
  283. package/recce-source/js/app/(mainComponents)/TopBar.tsx +0 -252
  284. package/recce-source/js/app/@lineage/default.tsx +0 -20
  285. package/recce-source/js/app/@lineage/page.tsx +0 -14
  286. package/recce-source/js/app/MainLayout.tsx +0 -170
  287. package/recce-source/js/app/Providers.tsx +0 -49
  288. package/recce-source/js/app/checks/page.tsx +0 -296
  289. package/recce-source/js/app/error.tsx +0 -93
  290. package/recce-source/js/app/favicon.ico +0 -0
  291. package/recce-source/js/app/global-error.tsx +0 -115
  292. package/recce-source/js/app/global.css +0 -82
  293. package/recce-source/js/app/layout.tsx +0 -48
  294. package/recce-source/js/app/lineage/page.tsx +0 -15
  295. package/recce-source/js/app/page.tsx +0 -12
  296. package/recce-source/js/app/query/page.tsx +0 -8
  297. package/recce-source/js/biome.json +0 -313
  298. package/recce-source/js/jest.config.js +0 -34
  299. package/recce-source/js/jest.globals.d.ts +0 -32
  300. package/recce-source/js/jest.setup.js +0 -91
  301. package/recce-source/js/next.config.js +0 -16
  302. package/recce-source/js/package-lock.json +0 -13843
  303. package/recce-source/js/package.json +0 -123
  304. package/recce-source/js/pnpm-lock.yaml +0 -9235
  305. package/recce-source/js/pnpm-workspace.yaml +0 -6
  306. package/recce-source/js/postcss.config.js +0 -5
  307. package/recce-source/js/public/auth_callback.html +0 -68
  308. package/recce-source/js/public/imgs/feedback/thumbs-down.png +0 -0
  309. package/recce-source/js/public/imgs/feedback/thumbs-up.png +0 -0
  310. package/recce-source/js/public/imgs/reload-image.svg +0 -4
  311. package/recce-source/js/public/logo/recce-logo-white.png +0 -0
  312. package/recce-source/js/src/components/AuthModal/AuthModal.tsx +0 -202
  313. package/recce-source/js/src/components/app/AvatarDropdown.tsx +0 -159
  314. package/recce-source/js/src/components/app/EnvInfo.tsx +0 -357
  315. package/recce-source/js/src/components/app/Filename.tsx +0 -388
  316. package/recce-source/js/src/components/app/SetupConnectionPopover.tsx +0 -91
  317. package/recce-source/js/src/components/app/StateExporter.tsx +0 -57
  318. package/recce-source/js/src/components/app/StateImporter.tsx +0 -198
  319. package/recce-source/js/src/components/app/StateSharing.tsx +0 -145
  320. package/recce-source/js/src/components/app/StateSynchronizer.tsx +0 -205
  321. package/recce-source/js/src/components/charts/HistogramChart.tsx +0 -291
  322. package/recce-source/js/src/components/charts/SquareIcon.tsx +0 -51
  323. package/recce-source/js/src/components/charts/TopKSummaryList.tsx +0 -457
  324. package/recce-source/js/src/components/charts/chartTheme.ts +0 -74
  325. package/recce-source/js/src/components/check/CheckBreadcrumb.tsx +0 -97
  326. package/recce-source/js/src/components/check/CheckDescription.tsx +0 -134
  327. package/recce-source/js/src/components/check/CheckDetail.tsx +0 -797
  328. package/recce-source/js/src/components/check/CheckEmptyState.tsx +0 -84
  329. package/recce-source/js/src/components/check/CheckList.tsx +0 -320
  330. package/recce-source/js/src/components/check/LineageDiffView.tsx +0 -32
  331. package/recce-source/js/src/components/check/PresetCheckTemplateView.tsx +0 -48
  332. package/recce-source/js/src/components/check/SchemaDiffView.tsx +0 -290
  333. package/recce-source/js/src/components/check/check.ts +0 -25
  334. package/recce-source/js/src/components/check/timeline/CheckTimeline.tsx +0 -163
  335. package/recce-source/js/src/components/check/timeline/CommentInput.tsx +0 -84
  336. package/recce-source/js/src/components/check/timeline/TimelineEvent.tsx +0 -468
  337. package/recce-source/js/src/components/check/timeline/index.ts +0 -12
  338. package/recce-source/js/src/components/check/utils.ts +0 -12
  339. package/recce-source/js/src/components/data-grid/ScreenshotDataGrid.tsx +0 -333
  340. package/recce-source/js/src/components/data-grid/agGridStyles.css +0 -55
  341. package/recce-source/js/src/components/data-grid/agGridTheme.ts +0 -43
  342. package/recce-source/js/src/components/editor/CodeEditor.tsx +0 -107
  343. package/recce-source/js/src/components/editor/DiffEditor.tsx +0 -162
  344. package/recce-source/js/src/components/editor/index.ts +0 -12
  345. package/recce-source/js/src/components/errorboundary/ErrorBoundary.tsx +0 -87
  346. package/recce-source/js/src/components/histogram/HistogramDiffForm.tsx +0 -147
  347. package/recce-source/js/src/components/histogram/HistogramDiffResultView.tsx +0 -63
  348. package/recce-source/js/src/components/icons/index.tsx +0 -142
  349. package/recce-source/js/src/components/lineage/ActionControl.tsx +0 -63
  350. package/recce-source/js/src/components/lineage/ActionTag.tsx +0 -141
  351. package/recce-source/js/src/components/lineage/ChangeStatusLegend.tsx +0 -46
  352. package/recce-source/js/src/components/lineage/ColumnLevelLineageControl.tsx +0 -327
  353. package/recce-source/js/src/components/lineage/ColumnLevelLineageLegend.tsx +0 -57
  354. package/recce-source/js/src/components/lineage/GraphColumnNode.tsx +0 -199
  355. package/recce-source/js/src/components/lineage/GraphEdge.tsx +0 -59
  356. package/recce-source/js/src/components/lineage/GraphNode.tsx +0 -555
  357. package/recce-source/js/src/components/lineage/LineagePage.tsx +0 -10
  358. package/recce-source/js/src/components/lineage/LineageView.tsx +0 -1384
  359. package/recce-source/js/src/components/lineage/LineageViewContext.tsx +0 -86
  360. package/recce-source/js/src/components/lineage/LineageViewContextMenu.tsx +0 -637
  361. package/recce-source/js/src/components/lineage/LineageViewNotification.tsx +0 -64
  362. package/recce-source/js/src/components/lineage/LineageViewTopBar.tsx +0 -596
  363. package/recce-source/js/src/components/lineage/NodeSqlView.tsx +0 -136
  364. package/recce-source/js/src/components/lineage/NodeTag.tsx +0 -278
  365. package/recce-source/js/src/components/lineage/NodeView.tsx +0 -642
  366. package/recce-source/js/src/components/lineage/SandboxView.tsx +0 -436
  367. package/recce-source/js/src/components/lineage/ServerDisconnectedModalContent.tsx +0 -105
  368. package/recce-source/js/src/components/lineage/SetupConnectionBanner.tsx +0 -52
  369. package/recce-source/js/src/components/lineage/SingleEnvironmentQueryView.tsx +0 -152
  370. package/recce-source/js/src/components/lineage/graph.test.ts +0 -31
  371. package/recce-source/js/src/components/lineage/graph.ts +0 -58
  372. package/recce-source/js/src/components/lineage/lineage.test.ts +0 -169
  373. package/recce-source/js/src/components/lineage/lineage.ts +0 -521
  374. package/recce-source/js/src/components/lineage/styles.css +0 -42
  375. package/recce-source/js/src/components/lineage/styles.tsx +0 -165
  376. package/recce-source/js/src/components/lineage/useMultiNodesAction.ts +0 -352
  377. package/recce-source/js/src/components/lineage/useValueDiffAlertDialog.tsx +0 -108
  378. package/recce-source/js/src/components/onboarding-guide/Notification.tsx +0 -62
  379. package/recce-source/js/src/components/profile/ProfileDiffForm.tsx +0 -134
  380. package/recce-source/js/src/components/profile/ProfileDiffResultView.tsx +0 -243
  381. package/recce-source/js/src/components/query/ChangedOnlyCheckbox.tsx +0 -29
  382. package/recce-source/js/src/components/query/DiffText.tsx +0 -120
  383. package/recce-source/js/src/components/query/QueryDiffResultView.tsx +0 -468
  384. package/recce-source/js/src/components/query/QueryForm.tsx +0 -80
  385. package/recce-source/js/src/components/query/QueryPage.tsx +0 -282
  386. package/recce-source/js/src/components/query/QueryResultView.tsx +0 -180
  387. package/recce-source/js/src/components/query/SetupConnectionGuide.tsx +0 -57
  388. package/recce-source/js/src/components/query/SqlEditor.tsx +0 -245
  389. package/recce-source/js/src/components/query/ToggleSwitch.tsx +0 -84
  390. package/recce-source/js/src/components/query/styles.css +0 -21
  391. package/recce-source/js/src/components/routing/DirectUrlAccess.test.tsx +0 -428
  392. package/recce-source/js/src/components/routing/LineageStatePreservation.test.tsx +0 -311
  393. package/recce-source/js/src/components/routing/Navigation.test.tsx +0 -256
  394. package/recce-source/js/src/components/rowcount/RowCountDiffResultView.tsx +0 -108
  395. package/recce-source/js/src/components/rowcount/delta.test.ts +0 -51
  396. package/recce-source/js/src/components/rowcount/delta.ts +0 -16
  397. package/recce-source/js/src/components/run/RunList.tsx +0 -303
  398. package/recce-source/js/src/components/run/RunModal.tsx +0 -191
  399. package/recce-source/js/src/components/run/RunPage.tsx +0 -26
  400. package/recce-source/js/src/components/run/RunResultPane.tsx +0 -578
  401. package/recce-source/js/src/components/run/RunStatusAndDate.tsx +0 -106
  402. package/recce-source/js/src/components/run/RunToolbar.tsx +0 -70
  403. package/recce-source/js/src/components/run/RunView.tsx +0 -196
  404. package/recce-source/js/src/components/run/registry.ts +0 -214
  405. package/recce-source/js/src/components/run/types.ts +0 -14
  406. package/recce-source/js/src/components/schema/ColumnNameCell.test.tsx +0 -169
  407. package/recce-source/js/src/components/schema/ColumnNameCell.tsx +0 -198
  408. package/recce-source/js/src/components/schema/SchemaView.tsx +0 -336
  409. package/recce-source/js/src/components/schema/schemaDiff.ts +0 -32
  410. package/recce-source/js/src/components/schema/style.css +0 -134
  411. package/recce-source/js/src/components/screenshot/ScreenshotBox.tsx +0 -39
  412. package/recce-source/js/src/components/shared/HistoryToggle.tsx +0 -35
  413. package/recce-source/js/src/components/split/Split.tsx +0 -40
  414. package/recce-source/js/src/components/split/styles.css +0 -24
  415. package/recce-source/js/src/components/summary/ChangeSummary.tsx +0 -264
  416. package/recce-source/js/src/components/summary/SchemaSummary.tsx +0 -123
  417. package/recce-source/js/src/components/summary/SummaryView.tsx +0 -29
  418. package/recce-source/js/src/components/timeout/IdleTimeoutBadge.tsx +0 -48
  419. package/recce-source/js/src/components/top-k/TopKDiffForm.tsx +0 -58
  420. package/recce-source/js/src/components/top-k/TopKDiffResultView.tsx +0 -73
  421. package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnGroupHeader.tsx +0 -228
  422. package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnHeader.tsx +0 -113
  423. package/recce-source/js/src/components/ui/dataGrid/defaultRenderCell.tsx +0 -72
  424. package/recce-source/js/src/components/ui/dataGrid/index.ts +0 -23
  425. package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.test.tsx +0 -607
  426. package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.tsx +0 -211
  427. package/recce-source/js/src/components/ui/dataGrid/schemaCells.test.tsx +0 -452
  428. package/recce-source/js/src/components/ui/dataGrid/schemaCells.tsx +0 -142
  429. package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.test.tsx +0 -178
  430. package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.tsx +0 -275
  431. package/recce-source/js/src/components/ui/markdown/ExternalLinkConfirmDialog.tsx +0 -134
  432. package/recce-source/js/src/components/ui/markdown/MarkdownContent.tsx +0 -364
  433. package/recce-source/js/src/components/ui/mui/index.ts +0 -13
  434. package/recce-source/js/src/components/ui/mui-provider.tsx +0 -67
  435. package/recce-source/js/src/components/ui/mui-theme.ts +0 -1039
  436. package/recce-source/js/src/components/ui/mui-utils.ts +0 -113
  437. package/recce-source/js/src/components/ui/toaster.tsx +0 -288
  438. package/recce-source/js/src/components/valuediff/ValueDiffDetailResultView.tsx +0 -216
  439. package/recce-source/js/src/components/valuediff/ValueDiffForm.tsx +0 -246
  440. package/recce-source/js/src/components/valuediff/ValueDiffResultView.tsx +0 -81
  441. package/recce-source/js/src/components/valuediff/shared.ts +0 -33
  442. package/recce-source/js/src/constants/tooltipMessage.ts +0 -3
  443. package/recce-source/js/src/constants/urls.ts +0 -1
  444. package/recce-source/js/src/lib/UrlHash.ts +0 -12
  445. package/recce-source/js/src/lib/api/adhocQuery.ts +0 -70
  446. package/recce-source/js/src/lib/api/axiosClient.ts +0 -9
  447. package/recce-source/js/src/lib/api/cacheKeys.ts +0 -13
  448. package/recce-source/js/src/lib/api/checkEvents.ts +0 -252
  449. package/recce-source/js/src/lib/api/checks.ts +0 -129
  450. package/recce-source/js/src/lib/api/cll.ts +0 -53
  451. package/recce-source/js/src/lib/api/connectToCloud.ts +0 -13
  452. package/recce-source/js/src/lib/api/flag.ts +0 -37
  453. package/recce-source/js/src/lib/api/info.ts +0 -198
  454. package/recce-source/js/src/lib/api/instanceInfo.ts +0 -25
  455. package/recce-source/js/src/lib/api/keepAlive.ts +0 -108
  456. package/recce-source/js/src/lib/api/lineagecheck.ts +0 -35
  457. package/recce-source/js/src/lib/api/localStorageKeys.ts +0 -7
  458. package/recce-source/js/src/lib/api/models.ts +0 -59
  459. package/recce-source/js/src/lib/api/profile.ts +0 -65
  460. package/recce-source/js/src/lib/api/rowcount.ts +0 -19
  461. package/recce-source/js/src/lib/api/runs.ts +0 -174
  462. package/recce-source/js/src/lib/api/schemacheck.ts +0 -31
  463. package/recce-source/js/src/lib/api/select.ts +0 -25
  464. package/recce-source/js/src/lib/api/sessionStorageKeys.ts +0 -8
  465. package/recce-source/js/src/lib/api/state.ts +0 -117
  466. package/recce-source/js/src/lib/api/track.ts +0 -281
  467. package/recce-source/js/src/lib/api/types.ts +0 -284
  468. package/recce-source/js/src/lib/api/user.ts +0 -42
  469. package/recce-source/js/src/lib/api/valuediff.ts +0 -46
  470. package/recce-source/js/src/lib/api/version.ts +0 -40
  471. package/recce-source/js/src/lib/const.ts +0 -9
  472. package/recce-source/js/src/lib/csv/extractors.test.ts +0 -456
  473. package/recce-source/js/src/lib/csv/extractors.ts +0 -468
  474. package/recce-source/js/src/lib/csv/format.test.ts +0 -211
  475. package/recce-source/js/src/lib/csv/format.ts +0 -44
  476. package/recce-source/js/src/lib/csv/index.test.ts +0 -155
  477. package/recce-source/js/src/lib/csv/index.ts +0 -109
  478. package/recce-source/js/src/lib/dataGrid/crossFunctionConsistency.test.ts +0 -626
  479. package/recce-source/js/src/lib/dataGrid/dataGridFactory.test.ts +0 -2140
  480. package/recce-source/js/src/lib/dataGrid/dataGridFactory.ts +0 -397
  481. package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.test.ts +0 -132
  482. package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.ts +0 -126
  483. package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.test.ts +0 -1627
  484. package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.ts +0 -140
  485. package/recce-source/js/src/lib/dataGrid/generators/toDataGrid.ts +0 -67
  486. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.test.ts +0 -142
  487. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.ts +0 -71
  488. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.test.ts +0 -258
  489. package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.ts +0 -153
  490. package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.test.ts +0 -951
  491. package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.ts +0 -221
  492. package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.test.ts +0 -395
  493. package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.ts +0 -184
  494. package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.test.ts +0 -884
  495. package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.ts +0 -113
  496. package/recce-source/js/src/lib/dataGrid/index.ts +0 -51
  497. package/recce-source/js/src/lib/dataGrid/propertyBased.test.ts +0 -858
  498. package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.test.ts +0 -482
  499. package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.ts +0 -345
  500. package/recce-source/js/src/lib/dataGrid/shared/dataTypeEdgeCases.test.ts +0 -698
  501. package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.test.tsx +0 -820
  502. package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.tsx +0 -277
  503. package/recce-source/js/src/lib/dataGrid/shared/gridUtils.test.ts +0 -785
  504. package/recce-source/js/src/lib/dataGrid/shared/gridUtils.ts +0 -370
  505. package/recce-source/js/src/lib/dataGrid/shared/index.ts +0 -81
  506. package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.test.ts +0 -909
  507. package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.ts +0 -325
  508. package/recce-source/js/src/lib/dataGrid/shared/simpleColumnBuilder.tsx +0 -240
  509. package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.test.tsx +0 -719
  510. package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.tsx +0 -231
  511. package/recce-source/js/src/lib/dataGrid/shared/validation.test.ts +0 -559
  512. package/recce-source/js/src/lib/dataGrid/shared/validation.ts +0 -367
  513. package/recce-source/js/src/lib/dataGrid/warehouseNamingConventions.test.ts +0 -1117
  514. package/recce-source/js/src/lib/formatSelect.ts +0 -50
  515. package/recce-source/js/src/lib/hooks/ApiConfigContext.tsx +0 -181
  516. package/recce-source/js/src/lib/hooks/IdleTimeoutContext.tsx +0 -177
  517. package/recce-source/js/src/lib/hooks/LineageGraphContext.tsx +0 -512
  518. package/recce-source/js/src/lib/hooks/RecceActionContext.tsx +0 -269
  519. package/recce-source/js/src/lib/hooks/RecceCheckContext.tsx +0 -33
  520. package/recce-source/js/src/lib/hooks/RecceContextProvider.tsx +0 -54
  521. package/recce-source/js/src/lib/hooks/RecceInstanceContext.tsx +0 -129
  522. package/recce-source/js/src/lib/hooks/RecceQueryContext.tsx +0 -98
  523. package/recce-source/js/src/lib/hooks/RecceShareStateContext.tsx +0 -59
  524. package/recce-source/js/src/lib/hooks/ScreenShot.tsx +0 -399
  525. package/recce-source/js/src/lib/hooks/useAppRouter.test.ts +0 -211
  526. package/recce-source/js/src/lib/hooks/useAppRouter.ts +0 -200
  527. package/recce-source/js/src/lib/hooks/useCSVExport.ts +0 -136
  528. package/recce-source/js/src/lib/hooks/useCheckEvents.ts +0 -99
  529. package/recce-source/js/src/lib/hooks/useCheckToast.tsx +0 -14
  530. package/recce-source/js/src/lib/hooks/useClipBoardToast.tsx +0 -27
  531. package/recce-source/js/src/lib/hooks/useCountdownToast.tsx +0 -102
  532. package/recce-source/js/src/lib/hooks/useFeedbackCollectionToast.tsx +0 -130
  533. package/recce-source/js/src/lib/hooks/useGuideToast.tsx +0 -45
  534. package/recce-source/js/src/lib/hooks/useIdleDetection.tsx +0 -185
  535. package/recce-source/js/src/lib/hooks/useModelColumns.tsx +0 -113
  536. package/recce-source/js/src/lib/hooks/useRecceInstanceInfo.tsx +0 -13
  537. package/recce-source/js/src/lib/hooks/useRecceServerFlag.tsx +0 -13
  538. package/recce-source/js/src/lib/hooks/useRun.tsx +0 -89
  539. package/recce-source/js/src/lib/hooks/useThemeColors.ts +0 -115
  540. package/recce-source/js/src/lib/mergeKeys.test.ts +0 -89
  541. package/recce-source/js/src/lib/mergeKeys.ts +0 -86
  542. package/recce-source/js/src/lib/result/ResultErrorFallback.tsx +0 -9
  543. package/recce-source/js/src/lib/utils/formatTime.ts +0 -84
  544. package/recce-source/js/src/lib/utils/urls.ts +0 -16
  545. package/recce-source/js/src/utils/DropdownValuesInput.tsx +0 -297
  546. package/recce-source/js/src/utils/formatters.tsx +0 -237
  547. package/recce-source/js/src/utils/transforms.ts +0 -81
  548. package/recce-source/js/tsconfig.json +0 -47
  549. package/recce-source/macros/README.md +0 -8
  550. package/recce-source/macros/recce_athena.sql +0 -73
  551. package/recce-source/pyproject.toml +0 -109
  552. package/recce-source/recce/VERSION +0 -1
  553. package/recce-source/recce/__init__.py +0 -84
  554. package/recce-source/recce/adapter/__init__.py +0 -0
  555. package/recce-source/recce/adapter/base.py +0 -109
  556. package/recce-source/recce/adapter/dbt_adapter/__init__.py +0 -1699
  557. package/recce-source/recce/adapter/dbt_adapter/dbt_version.py +0 -42
  558. package/recce-source/recce/adapter/sqlmesh_adapter.py +0 -141
  559. package/recce-source/recce/apis/__init__.py +0 -0
  560. package/recce-source/recce/apis/check_api.py +0 -203
  561. package/recce-source/recce/apis/check_events_api.py +0 -353
  562. package/recce-source/recce/apis/check_func.py +0 -130
  563. package/recce-source/recce/apis/run_api.py +0 -130
  564. package/recce-source/recce/apis/run_func.py +0 -258
  565. package/recce-source/recce/artifact.py +0 -266
  566. package/recce-source/recce/cli.py +0 -1846
  567. package/recce-source/recce/config.py +0 -127
  568. package/recce-source/recce/connect_to_cloud.py +0 -138
  569. package/recce-source/recce/core.py +0 -334
  570. package/recce-source/recce/diff.py +0 -26
  571. package/recce-source/recce/event/CONFIG +0 -1
  572. package/recce-source/recce/event/SENTRY_DNS +0 -1
  573. package/recce-source/recce/event/__init__.py +0 -304
  574. package/recce-source/recce/event/collector.py +0 -184
  575. package/recce-source/recce/event/track.py +0 -158
  576. package/recce-source/recce/exceptions.py +0 -21
  577. package/recce-source/recce/git.py +0 -77
  578. package/recce-source/recce/github.py +0 -222
  579. package/recce-source/recce/mcp_server.py +0 -885
  580. package/recce-source/recce/models/__init__.py +0 -6
  581. package/recce-source/recce/models/check.py +0 -481
  582. package/recce-source/recce/models/run.py +0 -46
  583. package/recce-source/recce/models/types.py +0 -218
  584. package/recce-source/recce/pull_request.py +0 -124
  585. package/recce-source/recce/run.py +0 -390
  586. package/recce-source/recce/server.py +0 -877
  587. package/recce-source/recce/state/__init__.py +0 -31
  588. package/recce-source/recce/state/cloud.py +0 -644
  589. package/recce-source/recce/state/const.py +0 -26
  590. package/recce-source/recce/state/local.py +0 -56
  591. package/recce-source/recce/state/state.py +0 -119
  592. package/recce-source/recce/state/state_loader.py +0 -174
  593. package/recce-source/recce/summary.py +0 -575
  594. package/recce-source/recce/tasks/__init__.py +0 -23
  595. package/recce-source/recce/tasks/core.py +0 -134
  596. package/recce-source/recce/tasks/dataframe.py +0 -170
  597. package/recce-source/recce/tasks/histogram.py +0 -433
  598. package/recce-source/recce/tasks/lineage.py +0 -19
  599. package/recce-source/recce/tasks/profile.py +0 -298
  600. package/recce-source/recce/tasks/query.py +0 -450
  601. package/recce-source/recce/tasks/rowcount.py +0 -277
  602. package/recce-source/recce/tasks/schema.py +0 -65
  603. package/recce-source/recce/tasks/top_k.py +0 -172
  604. package/recce-source/recce/tasks/utils.py +0 -147
  605. package/recce-source/recce/tasks/valuediff.py +0 -497
  606. package/recce-source/recce/util/__init__.py +0 -4
  607. package/recce-source/recce/util/api_token.py +0 -80
  608. package/recce-source/recce/util/breaking.py +0 -330
  609. package/recce-source/recce/util/cache.py +0 -25
  610. package/recce-source/recce/util/cll.py +0 -355
  611. package/recce-source/recce/util/cloud/__init__.py +0 -15
  612. package/recce-source/recce/util/cloud/base.py +0 -115
  613. package/recce-source/recce/util/cloud/check_events.py +0 -190
  614. package/recce-source/recce/util/cloud/checks.py +0 -242
  615. package/recce-source/recce/util/io.py +0 -120
  616. package/recce-source/recce/util/lineage.py +0 -83
  617. package/recce-source/recce/util/logger.py +0 -25
  618. package/recce-source/recce/util/onboarding_state.py +0 -45
  619. package/recce-source/recce/util/perf_tracking.py +0 -85
  620. package/recce-source/recce/util/pydantic_model.py +0 -22
  621. package/recce-source/recce/util/recce_cloud.py +0 -454
  622. package/recce-source/recce/util/singleton.py +0 -18
  623. package/recce-source/recce/util/startup_perf.py +0 -121
  624. package/recce-source/recce/yaml/__init__.py +0 -58
  625. package/recce-source/recce_cloud/README.md +0 -780
  626. package/recce-source/recce_cloud/VERSION +0 -1
  627. package/recce-source/recce_cloud/__init__.py +0 -24
  628. package/recce-source/recce_cloud/api/__init__.py +0 -17
  629. package/recce-source/recce_cloud/api/base.py +0 -132
  630. package/recce-source/recce_cloud/api/client.py +0 -186
  631. package/recce-source/recce_cloud/api/exceptions.py +0 -26
  632. package/recce-source/recce_cloud/api/factory.py +0 -63
  633. package/recce-source/recce_cloud/api/github.py +0 -106
  634. package/recce-source/recce_cloud/api/gitlab.py +0 -111
  635. package/recce-source/recce_cloud/artifact.py +0 -57
  636. package/recce-source/recce_cloud/ci_providers/__init__.py +0 -9
  637. package/recce-source/recce_cloud/ci_providers/base.py +0 -82
  638. package/recce-source/recce_cloud/ci_providers/detector.py +0 -147
  639. package/recce-source/recce_cloud/ci_providers/github_actions.py +0 -136
  640. package/recce-source/recce_cloud/ci_providers/gitlab_ci.py +0 -130
  641. package/recce-source/recce_cloud/cli.py +0 -434
  642. package/recce-source/recce_cloud/download.py +0 -230
  643. package/recce-source/recce_cloud/hatch_build.py +0 -20
  644. package/recce-source/recce_cloud/pyproject.toml +0 -49
  645. package/recce-source/recce_cloud/upload.py +0 -214
  646. package/recce-source/test.py +0 -0
  647. package/recce-source/tests/__init__.py +0 -0
  648. package/recce-source/tests/adapter/__init__.py +0 -0
  649. package/recce-source/tests/adapter/dbt_adapter/__init__.py +0 -0
  650. package/recce-source/tests/adapter/dbt_adapter/conftest.py +0 -17
  651. package/recce-source/tests/adapter/dbt_adapter/dbt_test_helper.py +0 -298
  652. package/recce-source/tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -25
  653. package/recce-source/tests/adapter/dbt_adapter/test_dbt_cll.py +0 -717
  654. package/recce-source/tests/adapter/dbt_adapter/test_proj/dbt_project.yml +0 -4
  655. package/recce-source/tests/adapter/dbt_adapter/test_proj/manifest.json +0 -1
  656. package/recce-source/tests/adapter/dbt_adapter/test_proj/package-lock.yml +0 -8
  657. package/recce-source/tests/adapter/dbt_adapter/test_proj/packages.yml +0 -7
  658. package/recce-source/tests/adapter/dbt_adapter/test_proj/profiles.yml +0 -6
  659. package/recce-source/tests/adapter/dbt_adapter/test_selector.py +0 -205
  660. package/recce-source/tests/apis/__init__.py +0 -0
  661. package/recce-source/tests/apis/row_count_diff.json +0 -59
  662. package/recce-source/tests/apis/test_check_events_api.py +0 -615
  663. package/recce-source/tests/apis/test_run_func.py +0 -433
  664. package/recce-source/tests/catalog.json +0 -527
  665. package/recce-source/tests/data/manifest/base/catalog.json +0 -1
  666. package/recce-source/tests/data/manifest/base/manifest.json +0 -1
  667. package/recce-source/tests/data/manifest/pr2/catalog.json +0 -1
  668. package/recce-source/tests/data/manifest/pr2/manifest.json +0 -1
  669. package/recce-source/tests/manifest.json +0 -10655
  670. package/recce-source/tests/models/__init__.py +0 -0
  671. package/recce-source/tests/models/test_check.py +0 -731
  672. package/recce-source/tests/models/test_run_models.py +0 -295
  673. package/recce-source/tests/recce_cloud/__init__.py +0 -0
  674. package/recce-source/tests/recce_cloud/test_ci_providers.py +0 -351
  675. package/recce-source/tests/recce_cloud/test_cli.py +0 -735
  676. package/recce-source/tests/recce_cloud/test_client.py +0 -379
  677. package/recce-source/tests/recce_cloud/test_platform_clients.py +0 -483
  678. package/recce-source/tests/recce_state.json +0 -1
  679. package/recce-source/tests/state/test_cloud.py +0 -719
  680. package/recce-source/tests/state/test_local.py +0 -164
  681. package/recce-source/tests/state/test_state_loader.py +0 -211
  682. package/recce-source/tests/tasks/__init__.py +0 -0
  683. package/recce-source/tests/tasks/conftest.py +0 -4
  684. package/recce-source/tests/tasks/test_histogram.py +0 -129
  685. package/recce-source/tests/tasks/test_lineage.py +0 -55
  686. package/recce-source/tests/tasks/test_preset_checks.py +0 -64
  687. package/recce-source/tests/tasks/test_profile.py +0 -397
  688. package/recce-source/tests/tasks/test_query.py +0 -528
  689. package/recce-source/tests/tasks/test_row_count.py +0 -133
  690. package/recce-source/tests/tasks/test_schema.py +0 -122
  691. package/recce-source/tests/tasks/test_top_k.py +0 -77
  692. package/recce-source/tests/tasks/test_utils.py +0 -439
  693. package/recce-source/tests/tasks/test_valuediff.py +0 -361
  694. package/recce-source/tests/test_cli.py +0 -236
  695. package/recce-source/tests/test_cli_mcp_optional.py +0 -45
  696. package/recce-source/tests/test_cloud_listing_cli.py +0 -324
  697. package/recce-source/tests/test_config.py +0 -43
  698. package/recce-source/tests/test_connect_to_cloud.py +0 -82
  699. package/recce-source/tests/test_core.py +0 -174
  700. package/recce-source/tests/test_dbt.py +0 -36
  701. package/recce-source/tests/test_mcp_server.py +0 -505
  702. package/recce-source/tests/test_pull_request.py +0 -130
  703. package/recce-source/tests/test_server.py +0 -202
  704. package/recce-source/tests/test_server_lifespan.py +0 -138
  705. package/recce-source/tests/test_summary.py +0 -73
  706. package/recce-source/tests/util/__init__.py +0 -0
  707. package/recce-source/tests/util/cloud/__init__.py +0 -0
  708. package/recce-source/tests/util/cloud/test_check_events.py +0 -255
  709. package/recce-source/tests/util/cloud/test_checks.py +0 -204
  710. package/recce-source/tests/util/test_api_token.py +0 -119
  711. package/recce-source/tests/util/test_breaking.py +0 -1427
  712. package/recce-source/tests/util/test_cll.py +0 -706
  713. package/recce-source/tests/util/test_lineage.py +0 -122
  714. package/recce-source/tests/util/test_onboarding_state.py +0 -84
  715. package/recce-source/tests/util/test_recce_cloud.py +0 -231
  716. package/recce-source/tox.ini +0 -40
  717. package/recce-source/uv.lock +0 -3928
  718. package/src/api/index.ts +0 -32
  719. package/src/components/index.ts +0 -154
  720. package/src/global.d.ts +0 -14
  721. package/src/hooks/index.ts +0 -56
  722. package/src/index.ts +0 -17
  723. package/src/lib/hooks/RouteConfigContext.ts +0 -139
  724. package/src/lib/hooks/useAppRouter.ts +0 -240
  725. package/src/mui-augmentation.d.ts +0 -139
  726. package/src/theme/index.ts +0 -13
  727. package/src/theme.ts +0 -23
  728. package/src/types/index.ts +0 -23
@@ -1,31 +0,0 @@
1
- from .cloud import (
2
- CloudStateLoader,
3
- RecceCloudStateManager,
4
- RecceShareStateManager,
5
- s3_sse_c_headers,
6
- )
7
- from .const import ErrorMessage
8
- from .local import FileStateLoader
9
- from .state import (
10
- ArtifactsRoot,
11
- GitRepoInfo,
12
- PullRequestInfo,
13
- RecceState,
14
- RecceStateMetadata,
15
- )
16
- from .state_loader import RecceStateLoader
17
-
18
- __all__ = [
19
- "ArtifactsRoot",
20
- "ErrorMessage",
21
- "RecceCloudStateManager",
22
- "RecceShareStateManager",
23
- "RecceState",
24
- "RecceStateLoader",
25
- "CloudStateLoader",
26
- "FileStateLoader",
27
- "RecceStateMetadata",
28
- "s3_sse_c_headers",
29
- "GitRepoInfo",
30
- "PullRequestInfo",
31
- ]
@@ -1,644 +0,0 @@
1
- import logging
2
- import os
3
- from base64 import b64encode
4
- from hashlib import md5, sha256
5
- from typing import Dict, Optional, Tuple, Union
6
- from urllib.parse import urlencode
7
-
8
- from recce.exceptions import RecceException
9
- from recce.pull_request import PullRequestInfo, fetch_pr_metadata
10
- from recce.util.io import SupportedFileTypes, file_io_factory
11
- from recce.util.recce_cloud import PresignedUrlMethod, RecceCloud, RecceCloudException
12
- from recce.util.startup_perf import track_timing
13
-
14
- from ..event import get_recce_api_token
15
- from ..models import CheckDAO
16
- from .const import (
17
- RECCE_API_TOKEN_MISSING,
18
- RECCE_CLOUD_PASSWORD_MISSING,
19
- RECCE_CLOUD_TOKEN_MISSING,
20
- RECCE_STATE_COMPRESSED_FILE,
21
- )
22
- from .state import RecceState
23
- from .state_loader import RecceStateLoader
24
-
25
- logger = logging.getLogger("uvicorn")
26
-
27
-
28
- def s3_sse_c_headers(password: str) -> Dict[str, str]:
29
- hashed_password = sha256()
30
- md5_hash = md5()
31
- hashed_password.update(password.encode())
32
- md5_hash.update(hashed_password.digest())
33
- encoded_passwd = b64encode(hashed_password.digest()).decode("utf-8")
34
- encoded_md5 = b64encode(md5_hash.digest()).decode("utf-8")
35
- return {
36
- "x-amz-server-side-encryption-customer-algorithm": "AES256",
37
- "x-amz-server-side-encryption-customer-key": encoded_passwd,
38
- "x-amz-server-side-encryption-customer-key-MD5": encoded_md5,
39
- }
40
-
41
-
42
- class CloudStateLoader(RecceStateLoader):
43
- def __init__(
44
- self,
45
- review_mode: bool = False,
46
- cloud_options: Optional[Dict[str, str]] = None,
47
- initial_state: Optional[RecceState] = None,
48
- ):
49
- super().__init__(
50
- cloud_mode=True,
51
- review_mode=review_mode,
52
- cloud_options=cloud_options,
53
- initial_state=initial_state,
54
- )
55
- self.recce_cloud = RecceCloud(token=self.token)
56
- # Initialize org_id and project_id attributes
57
- # These will be set when loading from session
58
- self.org_id = None
59
- self.project_id = None
60
-
61
- def verify(self) -> bool:
62
- if self.catalog == "github":
63
- if self.cloud_options.get("github_token") is None:
64
- self.error_message = RECCE_CLOUD_TOKEN_MISSING.error_message
65
- self.hint_message = RECCE_CLOUD_TOKEN_MISSING.hint_message
66
- return False
67
- if not self.cloud_options.get("host"):
68
- if self.cloud_options.get("password") is None:
69
- self.error_message = RECCE_CLOUD_PASSWORD_MISSING.error_message
70
- self.hint_message = RECCE_CLOUD_PASSWORD_MISSING.hint_message
71
- return False
72
- elif self.catalog == "preview":
73
- if self.cloud_options.get("api_token") is None:
74
- self.error_message = RECCE_API_TOKEN_MISSING.error_message
75
- self.hint_message = RECCE_API_TOKEN_MISSING.hint_message
76
- return False
77
- if self.cloud_options.get("share_id") is None:
78
- self.error_message = "No share ID is provided for the preview catalog."
79
- self.hint_message = (
80
- 'Please provide a share URL in the command argument with option "--share-url <share-url>"'
81
- )
82
- return False
83
- elif self.catalog == "session":
84
- if self.cloud_options.get("api_token") is None:
85
- self.error_message = RECCE_API_TOKEN_MISSING.error_message
86
- self.hint_message = RECCE_API_TOKEN_MISSING.hint_message
87
- return False
88
- if self.cloud_options.get("session_id") is None:
89
- self.error_message = "No session ID is provided for the session catalog."
90
- self.hint_message = (
91
- 'Please provide a session ID in the command argument with option "--session-id <session-id>"'
92
- )
93
- return False
94
- return True
95
-
96
- def purge(self) -> bool:
97
- rc, err_msg = RecceCloudStateManager(self.cloud_options).purge_cloud_state()
98
- if err_msg:
99
- self.error_message = err_msg
100
- return rc
101
-
102
- def _load_state(self) -> Tuple[RecceState, str]:
103
- """
104
- Load the state from Recce Cloud based on catalog type.
105
-
106
- Returns:
107
- RecceState: The state object.
108
- str: The etag of the state file (only used for GitHub).
109
- """
110
- if self.catalog == "github":
111
- return self._load_state_from_github()
112
- elif self.catalog == "preview":
113
- return self._load_state_from_preview()
114
- elif self.catalog == "session":
115
- return self._load_state_from_session(), None
116
- else:
117
- raise RecceException(f"Unsupported catalog type: {self.catalog}")
118
-
119
- def _load_state_from_github(self) -> Tuple[RecceState, str]:
120
- """Load state from GitHub PR with etag checking."""
121
- if (self.pr_info is None) or (self.pr_info.id is None) or (self.pr_info.repository is None):
122
- raise RecceException("Cannot get the pull request information from GitHub.")
123
-
124
- logger.debug("Fetching GitHub state from Recce Cloud...")
125
-
126
- # Check metadata and etag for GitHub only
127
- metadata = self._get_metadata_from_recce_cloud()
128
- state_etag = metadata.get("etag") if metadata else None
129
-
130
- # Return cached state if etag matches
131
- if self.state_etag and state_etag == self.state_etag:
132
- return self.state, self.state_etag
133
-
134
- # Download state from GitHub
135
- presigned_url = self.recce_cloud.get_presigned_url_by_github_repo(
136
- method=PresignedUrlMethod.DOWNLOAD,
137
- pr_id=self.pr_info.id,
138
- repository=self.pr_info.repository,
139
- artifact_name=RECCE_STATE_COMPRESSED_FILE,
140
- )
141
-
142
- password = self.cloud_options.get("password")
143
- if password is None:
144
- raise RecceException(RECCE_CLOUD_PASSWORD_MISSING.error_message)
145
-
146
- headers = s3_sse_c_headers(password)
147
- loaded_state = self._download_state_from_url(presigned_url, SupportedFileTypes.GZIP, headers)
148
-
149
- # Handle the case where download returns None (404 error)
150
- if loaded_state is None:
151
- return None, state_etag
152
-
153
- return loaded_state, state_etag
154
-
155
- def _load_state_from_preview(self) -> Tuple[RecceState, None]:
156
- """Load state from preview share (no etag checking needed)."""
157
- if self.share_id is None:
158
- raise RecceException("Cannot load the share state from Recce Cloud. No share ID is provided.")
159
-
160
- logger.debug("Fetching preview state from Recce Cloud...")
161
-
162
- # Download state from preview share
163
- presigned_url = self.recce_cloud.get_presigned_url_by_share_id(
164
- method=PresignedUrlMethod.DOWNLOAD, share_id=self.share_id
165
- )
166
-
167
- loaded_state = self._download_state_from_url(presigned_url, SupportedFileTypes.FILE)
168
-
169
- # Handle the case where download returns None (404 error)
170
- if loaded_state is None:
171
- return None, None
172
-
173
- return loaded_state, None
174
-
175
- def _get_metadata_from_recce_cloud(self) -> Union[dict, None]:
176
- return self.recce_cloud.get_artifact_metadata(pr_info=self.pr_info) if self.pr_info else None
177
-
178
- @track_timing("state_download")
179
- def _download_state_from_url(
180
- self, presigned_url: str, file_type: SupportedFileTypes, headers: dict = None
181
- ) -> RecceState:
182
- """Download state file from presigned URL and convert to RecceState."""
183
- import tempfile
184
-
185
- import requests
186
-
187
- with tempfile.NamedTemporaryFile() as tmp:
188
- response = requests.get(presigned_url, headers=headers)
189
-
190
- if response.status_code == 404:
191
- self.error_message = "The state file is not found in Recce Cloud."
192
- return None
193
- elif response.status_code != 200:
194
- self.error_message = response.text
195
- error_msg = f"{response.status_code} Failed to download the state file from Recce Cloud."
196
- if headers: # GitHub case with password
197
- error_msg += " The password could be wrong."
198
- raise RecceException(error_msg)
199
-
200
- with open(tmp.name, "wb") as f:
201
- f.write(response.content)
202
-
203
- return RecceState.from_file(tmp.name, file_type=file_type)
204
-
205
- def _load_state_from_session(self) -> RecceState:
206
- """
207
- Load state from session by:
208
- 1. Get session info
209
- 2. Download artifacts for both base and current sessions
210
- 3. Download recce_state if available, otherwise create empty state with artifacts
211
- """
212
- if self.session_id is None:
213
- raise RecceException("Cannot load the session state from Recce Cloud. No session ID is provided.")
214
-
215
- # 1. Get session information
216
- logger.debug(f"Getting session {self.session_id}")
217
- session = self.recce_cloud.get_session(self.session_id)
218
-
219
- pr_url = session.get("pr_link")
220
- org_id = session.get("org_id")
221
- project_id = session.get("project_id")
222
-
223
- if not org_id or not project_id:
224
- raise RecceException(f"Session {self.session_id} does not belong to a valid organization or project.")
225
-
226
- # IMPORTANT: Store org_id and project_id as attributes for later use
227
- # This allows CheckDAO and other components to access them without repeated API calls
228
- self.org_id = org_id
229
- self.project_id = project_id
230
-
231
- # 2. Download manifests and catalogs for both session
232
- logger.debug(f"Downloading current session artifacts for {self.session_id}")
233
- current_artifacts = self._download_session_artifacts(self.recce_cloud, org_id, project_id, self.session_id)
234
-
235
- logger.debug(f"Downloading base session artifacts for project {project_id}")
236
- base_artifacts = self._download_base_session_artifacts(self.recce_cloud, org_id, project_id)
237
-
238
- # 3. Try to download existing recce_state, otherwise create new state
239
- try:
240
- logger.debug(f"Downloading recce_state for session {self.session_id}")
241
- state = self._download_session_recce_state(self.recce_cloud, org_id, project_id, self.session_id)
242
- except Exception as e:
243
- logger.debug(f"No existing recce_state found, creating new state: {e}")
244
- state = RecceState()
245
-
246
- if pr_url:
247
- pr_id = pr_url.rstrip("/").split("/")[-1]
248
- pull_request = PullRequestInfo(id=pr_id, url=pr_url)
249
- self.pr_info = pull_request
250
- if state.pull_request is None:
251
- state.pull_request = pull_request
252
-
253
- # Set artifacts regardless of whether we loaded existing state
254
- state.artifacts.base = base_artifacts
255
- state.artifacts.current = current_artifacts
256
- state.checks = []
257
-
258
- return state
259
-
260
- def _download_session_artifacts(self, recce_cloud, org_id: str, project_id: str, session_id: str) -> dict:
261
- """Download manifest and catalog for a session, return JSON data directly."""
262
- import requests
263
-
264
- # Get download URLs
265
- presigned_urls = recce_cloud.get_download_urls_by_session_id(org_id, project_id, session_id)
266
-
267
- artifacts = {}
268
-
269
- # Download manifest
270
- response = requests.get(presigned_urls["manifest_url"])
271
- if response.status_code == 200:
272
- artifacts["manifest"] = response.json()
273
- else:
274
- raise RecceException(f"Failed to download manifest for session {session_id}")
275
-
276
- # Download catalog
277
- response = requests.get(presigned_urls["catalog_url"])
278
- if response.status_code == 200:
279
- artifacts["catalog"] = response.json()
280
- else:
281
- raise RecceException(f"Failed to download catalog for session {session_id}")
282
-
283
- return artifacts
284
-
285
- def _download_session_recce_state(self, recce_cloud, org_id: str, project_id: str, session_id: str) -> RecceState:
286
- """Download recce_state for a session."""
287
- # Get download URLs (now includes recce_state_url)
288
- presigned_urls = recce_cloud.get_download_urls_by_session_id(org_id, project_id, session_id)
289
- recce_state_url = presigned_urls.get("recce_state_url")
290
-
291
- if not recce_state_url:
292
- raise RecceException(f"No recce_state_url found for session {session_id}")
293
-
294
- # Reuse the existing download method
295
- state = self._download_state_from_url(recce_state_url, SupportedFileTypes.FILE)
296
-
297
- if state is None:
298
- raise RecceException(f"Failed to download recce_state for session {session_id}")
299
-
300
- return state
301
-
302
- def _download_base_session_artifacts(self, recce_cloud, org_id: str, project_id: str) -> dict:
303
- """Download manifest and catalog for the base session, return JSON data directly."""
304
- import requests
305
-
306
- # Get download URLs for base session
307
- presigned_urls = recce_cloud.get_base_session_download_urls(org_id, project_id)
308
-
309
- artifacts = {}
310
-
311
- # Download manifest
312
- response = requests.get(presigned_urls["manifest_url"])
313
- if response.status_code == 200:
314
- artifacts["manifest"] = response.json()
315
- else:
316
- raise RecceException(f"Failed to download base session manifest for project {project_id}")
317
-
318
- # Download catalog
319
- response = requests.get(presigned_urls["catalog_url"])
320
- if response.status_code == 200:
321
- artifacts["catalog"] = response.json()
322
- else:
323
- raise RecceException(f"Failed to download base session catalog for project {project_id}")
324
-
325
- return artifacts
326
-
327
- def _export_state(self) -> Tuple[Union[str, None], str]:
328
- """
329
- Export state to Recce Cloud based on catalog type.
330
-
331
- Returns:
332
- str: A message indicating the result of the export operation.
333
- str: The etag of the exported state file (only used for GitHub).
334
- """
335
- logger.info("Store recce state to Recce Cloud")
336
-
337
- if self.catalog == "github":
338
- return self._export_state_to_github()
339
- elif self.catalog == "preview":
340
- return self._export_state_to_preview()
341
- elif self.catalog == "session":
342
- return self._export_state_to_session()
343
- else:
344
- raise RecceException(f"Unsupported catalog type: {self.catalog}")
345
-
346
- def _export_state_to_github(self) -> Tuple[Union[str, None], str]:
347
- """Export state to GitHub PR with metadata and etag."""
348
- if (self.pr_info is None) or (self.pr_info.id is None) or (self.pr_info.repository is None):
349
- raise RecceException("Cannot get the pull request information from GitHub.")
350
-
351
- # Generate metadata for GitHub only
352
- check_status = CheckDAO().status()
353
- metadata = {
354
- "total_checks": check_status.get("total", 0),
355
- "approved_checks": check_status.get("approved", 0),
356
- }
357
-
358
- # Upload to Cloud
359
- presigned_url = self.recce_cloud.get_presigned_url_by_github_repo(
360
- method=PresignedUrlMethod.UPLOAD,
361
- repository=self.pr_info.repository,
362
- artifact_name=RECCE_STATE_COMPRESSED_FILE,
363
- pr_id=self.pr_info.id,
364
- metadata=metadata,
365
- )
366
- message = self._upload_state_to_url(
367
- presigned_url=presigned_url,
368
- file_type=SupportedFileTypes.GZIP,
369
- password=self.cloud_options.get("password"),
370
- metadata=metadata,
371
- )
372
-
373
- # Get updated etag after upload
374
- metadata_response = self._get_metadata_from_recce_cloud()
375
- state_etag = metadata_response.get("etag") if metadata_response else None
376
-
377
- if message:
378
- logger.warning(message)
379
- return message, state_etag
380
-
381
- def _export_state_to_preview(self) -> Tuple[Union[str, None], None]:
382
- """Export state to preview share (no metadata or etag needed)."""
383
- share_id = self.cloud_options.get("share_id")
384
- presigned_url = self.recce_cloud.get_presigned_url_by_share_id(
385
- method=PresignedUrlMethod.UPLOAD,
386
- share_id=share_id,
387
- metadata=None,
388
- )
389
- message = self._upload_state_to_url(
390
- presigned_url=presigned_url, file_type=SupportedFileTypes.FILE, password=None, metadata=None
391
- )
392
-
393
- if message:
394
- logger.warning(message)
395
- return message, None
396
-
397
- def _export_state_to_session(self) -> Tuple[Union[str, None], None]:
398
- """Export state to session (upload recce_state with empty artifacts)."""
399
- if self.session_id is None:
400
- raise RecceException("Cannot export state to session. No session ID is provided.")
401
-
402
- # Get session information
403
- session = self.recce_cloud.get_session(self.session_id)
404
- org_id = session.get("org_id")
405
- project_id = session.get("project_id")
406
-
407
- if not org_id or not project_id:
408
- raise RecceException(f"Session {self.session_id} does not belong to a valid organization or project.")
409
-
410
- # Get upload URLs (now includes recce_state_url)
411
- presigned_urls = self.recce_cloud.get_upload_urls_by_session_id(org_id, project_id, self.session_id)
412
- recce_state_url = presigned_urls.get("recce_state_url")
413
-
414
- if not recce_state_url:
415
- raise RecceException(f"No recce_state_url found for session {self.session_id}")
416
-
417
- # Create a copy of the state with empty artifacts for upload
418
- upload_state = RecceState()
419
- upload_state.runs = self.state.runs.copy() if self.state.runs else []
420
- upload_state.checks = []
421
- # Keep artifacts empty (don't copy self.state.artifacts)
422
-
423
- # Upload the state with empty artifacts
424
- message = self._upload_state_to_url(
425
- presigned_url=recce_state_url,
426
- file_type=SupportedFileTypes.FILE,
427
- password=None,
428
- metadata=None,
429
- state=upload_state,
430
- )
431
-
432
- if message:
433
- logger.warning(message)
434
- else:
435
- # Notify Recce Cloud that the state has been uploaded if upload is successful
436
- self.recce_cloud.post_recce_state_uploaded_by_session_id(org_id, project_id, self.session_id)
437
- return message, None
438
-
439
- def _upload_state_to_url(
440
- self,
441
- presigned_url: str,
442
- file_type: SupportedFileTypes,
443
- password: str = None,
444
- metadata: dict = None,
445
- state: RecceState = None,
446
- ) -> Union[str, None]:
447
- """Upload state file to presigned URL."""
448
- import tempfile
449
-
450
- import requests
451
-
452
- # Use provided state or default to self.state
453
- upload_state = state or self.state
454
-
455
- # Prepare headers
456
- headers = {}
457
- if password:
458
- headers.update(s3_sse_c_headers(password))
459
- if metadata:
460
- headers["x-amz-tagging"] = urlencode(metadata)
461
-
462
- with tempfile.NamedTemporaryFile() as tmp:
463
- # Use the specified state to export to file
464
- json_data = upload_state.to_json()
465
- io = file_io_factory(file_type)
466
- io.write(tmp.name, json_data)
467
-
468
- with open(tmp.name, "rb") as fd:
469
- response = requests.put(presigned_url, data=fd.read(), headers=headers)
470
-
471
- if response.status_code not in [200, 204]:
472
- self.error_message = response.text
473
- return "Failed to upload the state file to Recce Cloud. Reason: " + response.text
474
-
475
- return None
476
-
477
- def check_conflict(self) -> bool:
478
- if self.catalog != "github":
479
- return False
480
-
481
- metadata = self._get_metadata_from_recce_cloud()
482
- if not metadata:
483
- return False
484
-
485
- state_etag = metadata.get("etag")
486
- return state_etag != self.state_etag
487
-
488
-
489
- class RecceCloudStateManager:
490
- error_message: str
491
- hint_message: str
492
-
493
- # It is a class to upload, download and purge the state file on Recce Cloud.
494
-
495
- def __init__(self, cloud_options: Optional[Dict[str, str]] = None):
496
- self.cloud_options = cloud_options or {}
497
- self.pr_info = None
498
- self.error_message = None
499
- self.hint_message = None
500
- self.github_token = self.cloud_options.get("github_token")
501
-
502
- if not self.github_token:
503
- raise RecceException(RECCE_CLOUD_TOKEN_MISSING.error_message)
504
- self.pr_info = fetch_pr_metadata(cloud=True, github_token=self.github_token)
505
- if self.pr_info.id is None:
506
- raise RecceException("Cannot get the pull request information from GitHub.")
507
-
508
- def verify(self) -> bool:
509
- if self.github_token is None:
510
- self.error_message = RECCE_CLOUD_TOKEN_MISSING.error_message
511
- self.hint_message = RECCE_CLOUD_TOKEN_MISSING.hint_message
512
- return False
513
- if self.cloud_options.get("password") is None:
514
- self.error_message = RECCE_CLOUD_PASSWORD_MISSING.error_message
515
- self.hint_message = RECCE_CLOUD_PASSWORD_MISSING.hint_message
516
- return False
517
- return True
518
-
519
- @property
520
- def error_and_hint(self) -> (Union[str, None], Union[str, None]):
521
- return self.error_message, self.hint_message
522
-
523
- def _check_state_in_recce_cloud(self) -> bool:
524
- return RecceCloud(token=self.github_token).check_artifacts_exists(self.pr_info)
525
-
526
- def check_cloud_state_exists(self) -> bool:
527
- return self._check_state_in_recce_cloud()
528
-
529
- def _upload_state_to_recce_cloud(self, state: RecceState, metadata: dict = None) -> Union[str, None]:
530
- import tempfile
531
-
532
- import requests
533
-
534
- presigned_url = RecceCloud(token=self.github_token).get_presigned_url_by_github_repo(
535
- method=PresignedUrlMethod.UPLOAD,
536
- repository=self.pr_info.repository,
537
- artifact_name=RECCE_STATE_COMPRESSED_FILE,
538
- pr_id=self.pr_info.id,
539
- metadata=metadata,
540
- )
541
-
542
- compress_passwd = self.cloud_options.get("password")
543
- headers = s3_sse_c_headers(compress_passwd)
544
- with tempfile.NamedTemporaryFile() as tmp:
545
- state.to_file(tmp.name, file_type=SupportedFileTypes.GZIP)
546
- response = requests.put(presigned_url, data=open(tmp.name, "rb").read(), headers=headers)
547
- if response.status_code != 200:
548
- return f"Failed to upload the state file to Recce Cloud. Reason: {response.text}"
549
- return "The state file is uploaded to Recce Cloud."
550
-
551
- def upload_state_to_cloud(self, state: RecceState) -> Union[str, None]:
552
- if (self.pr_info is None) or (self.pr_info.id is None) or (self.pr_info.repository is None):
553
- raise RecceException("Cannot get the pull request information from GitHub.")
554
-
555
- checks = state.checks
556
-
557
- metadata = {
558
- "total_checks": len(checks),
559
- "approved_checks": len([c for c in checks if c.is_checked]),
560
- }
561
-
562
- return self._upload_state_to_recce_cloud(state, metadata)
563
-
564
- def _download_state_from_recce_cloud(self, filepath):
565
- import io
566
-
567
- import requests
568
-
569
- presigned_url = RecceCloud(token=self.github_token).get_presigned_url_by_github_repo(
570
- method=PresignedUrlMethod.DOWNLOAD,
571
- repository=self.pr_info.repository,
572
- artifact_name=RECCE_STATE_COMPRESSED_FILE,
573
- pr_id=self.pr_info.id,
574
- )
575
-
576
- password = self.cloud_options.get("password")
577
- if password is None:
578
- raise RecceException(RECCE_CLOUD_PASSWORD_MISSING.error_message)
579
-
580
- headers = s3_sse_c_headers(password)
581
- response = requests.get(presigned_url, headers=headers)
582
-
583
- if response.status_code != 200:
584
- raise RecceException(
585
- f"{response.status_code} Failed to download the state file from Recce Cloud. The password could be wrong."
586
- )
587
-
588
- byte_stream = io.BytesIO(response.content)
589
- gzip_io = file_io_factory(SupportedFileTypes.GZIP)
590
- decompressed_content = gzip_io.read_fileobj(byte_stream)
591
-
592
- dirs = os.path.dirname(filepath)
593
- if dirs:
594
- os.makedirs(dirs, exist_ok=True)
595
- with open(filepath, "wb") as f:
596
- f.write(decompressed_content)
597
-
598
- def download_state_from_cloud(self, filepath: str) -> Union[str, None]:
599
- if (self.pr_info is None) or (self.pr_info.id is None) or (self.pr_info.repository is None):
600
- raise RecceException("Cannot get the pull request information from GitHub.")
601
-
602
- logger.debug("Download state file from Recce Cloud...")
603
- return self._download_state_from_recce_cloud(filepath)
604
-
605
- def _purge_state_from_recce_cloud(self) -> (bool, str):
606
- try:
607
- RecceCloud(token=self.github_token).purge_artifacts(self.pr_info.repository, pr_id=self.pr_info.id)
608
- except RecceCloudException as e:
609
- return False, e.reason
610
- return True, None
611
-
612
- def purge_cloud_state(self) -> (bool, str):
613
- return self._purge_state_from_recce_cloud()
614
-
615
-
616
- class RecceShareStateManager:
617
- error_message: str
618
- hint_message: str
619
-
620
- # It is a class to share state file on Recce Cloud.
621
-
622
- def __init__(self, auth_options: Optional[Dict[str, str]] = None):
623
- self.auth_options = auth_options or {}
624
- self.error_message = None
625
- self.hint_message = None
626
-
627
- def verify(self) -> bool:
628
- if get_recce_api_token() is None:
629
- self.error_message = RECCE_API_TOKEN_MISSING.error_message
630
- self.hint_message = RECCE_API_TOKEN_MISSING.hint_message
631
- return False
632
- return True
633
-
634
- @property
635
- def error_and_hint(self) -> (Union[str, None], Union[str, None]):
636
- return self.error_message, self.hint_message
637
-
638
- def share_state(self, file_name: str, state: RecceState) -> Dict:
639
- import tempfile
640
-
641
- with tempfile.NamedTemporaryFile() as tmp:
642
- state.to_file(tmp.name, file_type=SupportedFileTypes.FILE)
643
- response = RecceCloud(token=get_recce_api_token()).share_state(file_name, open(tmp.name, "rb"))
644
- return response