recce-nightly 1.9.0.20250623__py3-none-any.whl → 1.25.0.20251112a2066__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. recce/VERSION +1 -1
  2. recce/__init__.py +5 -0
  3. recce/adapter/dbt_adapter/__init__.py +318 -240
  4. recce/artifact.py +76 -3
  5. recce/cli.py +703 -71
  6. recce/config.py +3 -3
  7. recce/connect_to_cloud.py +138 -0
  8. recce/core.py +3 -3
  9. recce/data/404.html +1 -22
  10. recce/data/__next.__PAGE__.txt +10 -0
  11. recce/data/__next._full.txt +23 -0
  12. recce/data/__next._index.txt +8 -0
  13. recce/data/__next._tree.txt +12 -0
  14. recce/data/_next/static/6LypcDXgyuSaiSCrsmUub/_buildManifest.js +11 -0
  15. recce/data/_next/static/6LypcDXgyuSaiSCrsmUub/_clientMiddlewareManifest.json +1 -0
  16. recce/data/_next/static/chunks/0a2b2dd4b57049c2.js +1 -0
  17. recce/data/_next/static/chunks/19c10d219a6a21ff.js +1 -0
  18. recce/data/_next/static/chunks/24fd885c7180a612.js +1 -0
  19. recce/data/_next/static/chunks/27e66b2eab4adc32.js +19 -0
  20. recce/data/_next/static/chunks/71f88fcc615bf282.js +1 -0
  21. recce/data/_next/static/chunks/917619ab62a32388.js +1 -0
  22. recce/data/_next/static/chunks/93ba5a62932b704f.js +4 -0
  23. recce/data/_next/static/chunks/a43a2a5e06d5a92b.js +1 -0
  24. recce/data/_next/static/chunks/a6c78b24bd8b84fc.js +1 -0
  25. recce/data/_next/static/chunks/b2610ba997ff8c4f.js +110 -0
  26. recce/data/_next/static/chunks/ba2d87265a68599d.css +2 -0
  27. recce/data/_next/static/chunks/c117fd1c1382dd83.js +11 -0
  28. recce/data/_next/static/chunks/c9425ca46eebdde9.js +1 -0
  29. recce/data/_next/static/chunks/cc8a9eadba012be0.css +6 -0
  30. recce/data/_next/static/chunks/e124bccf574a3361.css +1 -0
  31. recce/data/_next/static/chunks/e392ad92847c3e17.js +1 -0
  32. recce/data/_next/static/chunks/e4ce95efe88dae79.js +11 -0
  33. recce/data/_next/static/chunks/e69c777814fea6ed.js +2 -0
  34. recce/data/_next/static/chunks/turbopack-21cfd73037ff57ab.js +3 -0
  35. recce/data/_next/static/media/favicon.a8d38d84.ico +0 -0
  36. recce/data/_next/static/media/montserrat-cyrillic-800-normal.d80d830d.woff2 +0 -0
  37. recce/data/_next/static/media/{montserrat-cyrillic-800-normal.bd5c9f50.woff → montserrat-cyrillic-800-normal.f9d58125.woff} +0 -0
  38. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.076c2a93.woff2 +0 -0
  39. recce/data/_next/static/media/montserrat-latin-800-normal.cde454cc.woff2 +0 -0
  40. recce/data/_next/static/media/{montserrat-latin-800-normal.fc315020.woff → montserrat-latin-800-normal.d5761935.woff} +0 -0
  41. recce/data/_next/static/media/montserrat-latin-ext-800-normal.40ec0659.woff2 +0 -0
  42. recce/data/_next/static/media/{montserrat-latin-ext-800-normal.2e5381b2.woff → montserrat-latin-ext-800-normal.b671449b.woff} +0 -0
  43. recce/data/_next/static/media/{montserrat-vietnamese-800-normal.20c545e6.woff → montserrat-vietnamese-800-normal.9f7b8541.woff} +0 -0
  44. recce/data/_next/static/media/montserrat-vietnamese-800-normal.f9eb854e.woff2 +0 -0
  45. recce/data/_not-found/__next._full.txt +17 -0
  46. recce/data/_not-found/__next._index.txt +8 -0
  47. recce/data/_not-found/__next._not-found.__PAGE__.txt +5 -0
  48. recce/data/_not-found/__next._not-found.txt +4 -0
  49. recce/data/_not-found/__next._tree.txt +10 -0
  50. recce/data/_not-found.html +1 -0
  51. recce/data/_not-found.txt +17 -0
  52. recce/data/auth_callback.html +68 -0
  53. recce/data/index.html +1 -27
  54. recce/data/index.txt +23 -8
  55. recce/event/__init__.py +9 -8
  56. recce/event/collector.py +6 -2
  57. recce/event/track.py +10 -0
  58. recce/github.py +1 -1
  59. recce/mcp_server.py +632 -0
  60. recce/models/types.py +23 -2
  61. recce/pull_request.py +1 -1
  62. recce/run.py +23 -16
  63. recce/server.py +194 -19
  64. recce/state/__init__.py +31 -0
  65. recce/state/cloud.py +632 -0
  66. recce/state/const.py +26 -0
  67. recce/state/local.py +56 -0
  68. recce/state/state.py +119 -0
  69. recce/state/state_loader.py +174 -0
  70. recce/summary.py +2 -1
  71. recce/tasks/dataframe.py +59 -2
  72. recce/tasks/rowcount.py +4 -1
  73. recce/tasks/schema.py +4 -1
  74. recce/tasks/valuediff.py +1 -1
  75. recce/util/api_token.py +11 -2
  76. recce/util/breaking.py +9 -0
  77. recce/util/cll.py +1 -2
  78. recce/util/io.py +2 -2
  79. recce/util/lineage.py +19 -18
  80. recce/util/perf_tracking.py +85 -0
  81. recce/util/recce_cloud.py +229 -5
  82. recce/yaml/__init__.py +2 -2
  83. recce_cloud/__init__.py +15 -0
  84. recce_cloud/api/__init__.py +17 -0
  85. recce_cloud/api/base.py +104 -0
  86. recce_cloud/api/client.py +150 -0
  87. recce_cloud/api/exceptions.py +26 -0
  88. recce_cloud/api/factory.py +63 -0
  89. recce_cloud/api/github.py +72 -0
  90. recce_cloud/api/gitlab.py +78 -0
  91. recce_cloud/artifact.py +57 -0
  92. recce_cloud/ci_providers/__init__.py +9 -0
  93. recce_cloud/ci_providers/base.py +82 -0
  94. recce_cloud/ci_providers/detector.py +147 -0
  95. recce_cloud/ci_providers/github_actions.py +136 -0
  96. recce_cloud/ci_providers/gitlab_ci.py +130 -0
  97. recce_cloud/cli.py +303 -0
  98. recce_cloud/upload.py +213 -0
  99. {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/METADATA +31 -27
  100. recce_nightly-1.25.0.20251112a2066.dist-info/RECORD +178 -0
  101. {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/top_level.txt +1 -0
  102. tests/adapter/dbt_adapter/test_dbt_cll.py +412 -79
  103. tests/recce_cloud/__init__.py +0 -0
  104. tests/recce_cloud/test_ci_providers.py +351 -0
  105. tests/recce_cloud/test_cli.py +372 -0
  106. tests/recce_cloud/test_client.py +273 -0
  107. tests/recce_cloud/test_platform_clients.py +279 -0
  108. tests/test_cli.py +106 -3
  109. tests/test_cli_mcp_optional.py +45 -0
  110. tests/test_cloud_listing_cli.py +324 -0
  111. tests/test_connect_to_cloud.py +82 -0
  112. tests/test_core.py +148 -3
  113. tests/test_mcp_server.py +332 -0
  114. tests/test_server.py +6 -6
  115. tests/test_summary.py +14 -6
  116. recce/data/_next/static/WrRUb3nV8BhAZG_R8kVma/_buildManifest.js +0 -1
  117. recce/data/_next/static/chunks/181-acc61ddada3bc0ca.js +0 -43
  118. recce/data/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js +0 -1
  119. recce/data/_next/static/chunks/217-879a84d70f7a907c.js +0 -2
  120. recce/data/_next/static/chunks/29e3cc0d-60045b2e47aa3916.js +0 -1
  121. recce/data/_next/static/chunks/36e1c10d-8e7be4a6c1f6ab2d.js +0 -1
  122. recce/data/_next/static/chunks/3998a672-03adacad07b346ac.js +0 -1
  123. recce/data/_next/static/chunks/3a92ee20-1081c360214f9602.js +0 -1
  124. recce/data/_next/static/chunks/42-cd3c06533f5fd47c.js +0 -9
  125. recce/data/_next/static/chunks/450c323b-fd94e7ffaa4a5efa.js +0 -1
  126. recce/data/_next/static/chunks/47d8844f-929aed9b1c73a905.js +0 -1
  127. recce/data/_next/static/chunks/608-3b079b544e5d5f5e.js +0 -15
  128. recce/data/_next/static/chunks/6dc81886-adbfa45836061d79.js +0 -1
  129. recce/data/_next/static/chunks/7a8a3e83-edf6dc64b5d5f0a5.js +0 -1
  130. recce/data/_next/static/chunks/7f27ae6c-d5f0438edd5c2a5b.js +0 -1
  131. recce/data/_next/static/chunks/86730205-cfb14e3f051bab35.js +0 -1
  132. recce/data/_next/static/chunks/8d700b6a.8bb140898499c512.js +0 -1
  133. recce/data/_next/static/chunks/92-7ab55ae02606193c.js +0 -1
  134. recce/data/_next/static/chunks/9746af58-a42b7d169cacadf0.js +0 -1
  135. recce/data/_next/static/chunks/a30376cd-de84559016d7e133.js +0 -1
  136. recce/data/_next/static/chunks/app/_not-found/page-01ed58b7f971d311.js +0 -1
  137. recce/data/_next/static/chunks/app/layout-177a410a97e0d018.js +0 -1
  138. recce/data/_next/static/chunks/app/page-59241c42b7dd4fcf.js +0 -1
  139. recce/data/_next/static/chunks/b63b1b3f-4282bdcf459e075c.js +0 -1
  140. recce/data/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js +0 -1
  141. recce/data/_next/static/chunks/c132bf7d-08cb668a789d6afd.js +0 -1
  142. recce/data/_next/static/chunks/ce84277d-2e5d1d46910cf052.js +0 -1
  143. recce/data/_next/static/chunks/febdd86e-c6b525341634b860.js +0 -54
  144. recce/data/_next/static/chunks/fee69bc6-2dbccaf9b90474e6.js +0 -1
  145. recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -1
  146. recce/data/_next/static/chunks/main-app-39061b0166c47f55.js +0 -1
  147. recce/data/_next/static/chunks/main-b5b3ae20a1405261.js +0 -1
  148. recce/data/_next/static/chunks/pages/_app-437c455677d62394.js +0 -1
  149. recce/data/_next/static/chunks/pages/_error-e7650df18ca04bde.js +0 -1
  150. recce/data/_next/static/chunks/webpack-7b49d5ba7e3a434d.js +0 -1
  151. recce/data/_next/static/css/17a96168e3a9db13.css +0 -1
  152. recce/data/_next/static/css/1b121dc4d36aeb4d.css +0 -3
  153. recce/data/_next/static/css/35c6679a098e1e34.css +0 -1
  154. recce/data/_next/static/css/951e2e0eea2d4a5b.css +0 -14
  155. recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
  156. recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
  157. recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
  158. recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
  159. recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
  160. recce/state.py +0 -785
  161. recce_nightly-1.9.0.20250623.dist-info/RECORD +0 -151
  162. tests/test_state.py +0 -134
  163. /recce/data/_next/static/{WrRUb3nV8BhAZG_R8kVma → 6LypcDXgyuSaiSCrsmUub}/_ssgManifest.js +0 -0
  164. /recce/data/_next/static/chunks/{polyfills-42372ed130431b0a.js → a6dad97d9634a72d.js} +0 -0
  165. /recce/data/_next/static/media/{montserrat-cyrillic-ext-800-normal.e6e0d8d0.woff → montserrat-cyrillic-ext-800-normal.a4fa76b5.woff} +0 -0
  166. /recce/data/_next/static/media/{reload-image.79aabb7d.svg → reload-image.7aa931c7.svg} +0 -0
  167. {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/WHEEL +0 -0
  168. {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/entry_points.txt +0 -0
  169. {recce_nightly-1.9.0.20250623.dist-info → recce_nightly-1.25.0.20251112a2066.dist-info}/licenses/LICENSE +0 -0
@@ -1,151 +0,0 @@
1
- recce/VERSION,sha256=h9fRG99db2LfCZiDVaiKOps9YxdL-lmHHrimg0QCuKs,15
2
- recce/__init__.py,sha256=yNb0QT-yoStex0VZALNJvUwtPLommoVCStcow31guqo,2392
3
- recce/artifact.py,sha256=tKQAHSrLRjiR3ppOI4sym8SxYiiLTuD3DPMYh4DWQdA,6506
4
- recce/cli.py,sha256=aitBalvi-dBhOmqwGCfjjvzdVYDTcVQl0nn4l6ktVFA,39627
5
- recce/config.py,sha256=fs22mpFj8CFIxftGbhFAV5xIsPLX2xNTwWSer3UYn5k,4658
6
- recce/core.py,sha256=3Nv2QWBGz3yj1QI0wyPNRaDj1rH80DsX2qRQn9ydpg0,10747
7
- recce/diff.py,sha256=L2_bzQ3__PO-0aeir8PHF8FvSOUmQ8WcDXgML1-mHdY,748
8
- recce/exceptions.py,sha256=SclQ678GrHGjw7p_ZFJ3vZaL_yMU5xABeIAm2u_W2bk,592
9
- recce/git.py,sha256=8Eg-6NzL-KjA3rT-ibbAyaCwGlzV0JqH3yGikrJNMDA,2344
10
- recce/github.py,sha256=PEpM6ZRiinsPbXSWj4aJCKbZrN1jUXzpzAfJq_CGah4,7420
11
- recce/pull_request.py,sha256=aW0B1NE2LUKTam1S4TQ7smXB9KLE1DV8GnyBqNXA6j8,3832
12
- recce/run.py,sha256=LAjbWUF8loZ9cL25d_maQELwROHHmfaFn7iqFRy5O1o,13567
13
- recce/server.py,sha256=cp5XW0X1N314b5lOz75yU7rHMQZtlh_4oGZM9K6_CdE,20311
14
- recce/state.py,sha256=VPzKyEdmyBeZ45BQArB587QN5C3Sfr7O5Oh_JRBcKrc,30616
15
- recce/summary.py,sha256=Mbxvxr9KazR5o9icqhhjiGHsoAiWxQU4PdN7HytBJ1c,19154
16
- recce/adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- recce/adapter/base.py,sha256=T_JNeLHgiHSaegw-DbrvHOaYjMyZcjj2Qtg5cWh_fco,3548
18
- recce/adapter/sqlmesh_adapter.py,sha256=IU3N-F6ToDoO7_bV5vsG8pmTuDcbFtewTIuCxedTaRM,5046
19
- recce/adapter/dbt_adapter/__init__.py,sha256=TqxYCxIe675XswFmx57hW55GV-YgC9pGMZW4mikVvV4,62852
20
- recce/adapter/dbt_adapter/dbt_version.py,sha256=M7aedZIWslXnJsryK8Ki4OL_t2oAKxy4uE2pRwfWIkk,1228
21
- recce/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- recce/apis/check_api.py,sha256=KMCXSMl1qqzx2jQgRqCrD4j_cY3EHBbM3H2-t-6saAU,6227
23
- recce/apis/check_func.py,sha256=gktbCcyk3WGvWRJJ-wDnwv7NrIny2nTHWLl1-kdiVRo,4183
24
- recce/apis/run_api.py,sha256=eOaxOxXDkH59uqGCd4blld7edavUx7JU_DCd2WAYrL8,3416
25
- recce/apis/run_func.py,sha256=6wC8TDU-h7TLr2VZH7HNsWaUVlQ9HBN5N_dwqfi4lMY,7440
26
- recce/data/404.html,sha256=2jEAEilUmYNl2p4bzngbU0WR5YZZ7vuv3rATHhy7IKU,26574
27
- recce/data/favicon.ico,sha256=B2mBumUOnzvUrXrqNkrc5QfdDXjzEXRcWkWur0fJ6sM,2565
28
- recce/data/index.html,sha256=BavWLVZ03JFLaUxaIJjFFYff2qTGxldM4x0jiEPAim8,42155
29
- recce/data/index.txt,sha256=XA3HBkMkVX3dqELQKElyiviGFm12dIW_C-TsaufLSb4,4462
30
- recce/data/_next/static/WrRUb3nV8BhAZG_R8kVma/_buildManifest.js,sha256=sjy6FmOqWlkXWmod2oXwqKv7L582_MTycs9THCE6G-c,224
31
- recce/data/_next/static/WrRUb3nV8BhAZG_R8kVma/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
32
- recce/data/_next/static/chunks/181-acc61ddada3bc0ca.js,sha256=2zRVkcaI906lYW_aM2mNqnt2HbLxmUaYFjft7eNcuTQ,310191
33
- recce/data/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js,sha256=wTH-_PbE1XdP-wmGaQStF5y2yH6XcZXeYX_hDaGMfh4,153777
34
- recce/data/_next/static/chunks/217-879a84d70f7a907c.js,sha256=kNJkLcwaIlWnQY7akbrFimbcHHdK6lMVTbTYCNKXIjc,124102
35
- recce/data/_next/static/chunks/29e3cc0d-60045b2e47aa3916.js,sha256=2MNGdoQ0DUmEJz-JdcgJVIPDdaVHp2963E0luqJ-TTE,700
36
- recce/data/_next/static/chunks/36e1c10d-8e7be4a6c1f6ab2d.js,sha256=0E3sKsP5actkkXL-k6nhlPMsuZkf6Xjm0LIyquR7DA8,8221
37
- recce/data/_next/static/chunks/3998a672-03adacad07b346ac.js,sha256=yIo9J3TT-1rQQISuIbB_ZYdI952YiOazkpiXxkza6tI,9023
38
- recce/data/_next/static/chunks/3a92ee20-1081c360214f9602.js,sha256=-XiclPOo-Au8pcnledxOGxajRoYoJ-4rtBdJ7kHZNN8,177688
39
- recce/data/_next/static/chunks/42-cd3c06533f5fd47c.js,sha256=X0d2HK-Ldkp_S3SP6KdW4yKFfEWKofnGcNu_ZDgDiuQ,1040615
40
- recce/data/_next/static/chunks/450c323b-fd94e7ffaa4a5efa.js,sha256=9msncqWrh8MQrmXLZEA9W2_5WZP4Fmvlaw9Vrv737XI,2205
41
- recce/data/_next/static/chunks/47d8844f-929aed9b1c73a905.js,sha256=VIKCVeheQGrNsNkyF6agc_38Yess4KJsFJz8Vbe598U,697
42
- recce/data/_next/static/chunks/608-3b079b544e5d5f5e.js,sha256=uvQzpIdvupXx_k2aIX4C-KfP4QEXqlbHuP6XNQVK-0s,97872
43
- recce/data/_next/static/chunks/6dc81886-adbfa45836061d79.js,sha256=9X1H0RjERGExNdWSzbslObd050Iwd8bqTJQuuGW6wq4,69733
44
- recce/data/_next/static/chunks/7a8a3e83-edf6dc64b5d5f0a5.js,sha256=NfgBK9op5SzWm4Ehg1xI-_HChQuqosdklsifGTNH-rE,1649
45
- recce/data/_next/static/chunks/7f27ae6c-d5f0438edd5c2a5b.js,sha256=ewMLioJbTUUDeqV0J9NDKE0Bj-XCFg8QqMLOmLPgpcc,777
46
- recce/data/_next/static/chunks/86730205-cfb14e3f051bab35.js,sha256=qKkzgWsNqSrn-PUGBloZopIlacGCy8hH0BZA9tpqQoQ,172837
47
- recce/data/_next/static/chunks/8d700b6a.8bb140898499c512.js,sha256=NPGWvqv8Y_rbNaKxYnoq16mi6FDoQHxOOjpH4tJnUkE,119972
48
- recce/data/_next/static/chunks/92-7ab55ae02606193c.js,sha256=f0YhpleWOSyqlxfS32YC25CQnb0EJAujrN4BWncRKdY,80497
49
- recce/data/_next/static/chunks/9746af58-a42b7d169cacadf0.js,sha256=lV-V6BYpd4HEt-pFtT03G6qQD2Wa-2L_jp6aH9VgoeM,4177
50
- recce/data/_next/static/chunks/a30376cd-de84559016d7e133.js,sha256=qzgyjrX5PdPKGeSwb-Gh0RfM_NEF2zjMvMK14ixq228,864
51
- recce/data/_next/static/chunks/b63b1b3f-4282bdcf459e075c.js,sha256=s2EZ59zDBJDmy2kh0cHkQ_pAWxiQr_yCPlnttCj0x_k,572
52
- recce/data/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js,sha256=jB7gyvrur-GMqD3Yi2X6jiFfFGCb0_zYyxJJXrh3mpw,81301
53
- recce/data/_next/static/chunks/c132bf7d-08cb668a789d6afd.js,sha256=bvbKe0denpFS_bPYD58ip9TE5OSooIZNrog39AWjf_I,198536
54
- recce/data/_next/static/chunks/ce84277d-2e5d1d46910cf052.js,sha256=uv79hdbY7j79k4hQQDiz9OAML-RqZRj8N3-SBFV17-k,2562
55
- recce/data/_next/static/chunks/febdd86e-c6b525341634b860.js,sha256=DYG6gZ6Ia5VLZRGYgJHZz28_Eie9eyIctRcmGBQuVTY,82988
56
- recce/data/_next/static/chunks/fee69bc6-2dbccaf9b90474e6.js,sha256=kN9jpjqnvfPqP_00RVf0CdWLTGnU1HEAYxjPuXca_Pk,484
57
- recce/data/_next/static/chunks/framework-ded83d71b51ce901.js,sha256=0Xsxxnmw5fjRHz8ni6vlaF9tQjfjNGZcZv2oMy7A_T4,140000
58
- recce/data/_next/static/chunks/main-app-39061b0166c47f55.js,sha256=NE6gZMaxmkLWS-unRTaSJm_1GGGb5ld-TP7UQMot2TY,471
59
- recce/data/_next/static/chunks/main-b5b3ae20a1405261.js,sha256=28hJH2VsiTdxZGZrQsyRO-YBwfgJArUHYGGuy7ZAD7s,116715
60
- recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
61
- recce/data/_next/static/chunks/webpack-7b49d5ba7e3a434d.js,sha256=lcK59Juk4EZqi3jIsY35lQqAlB5TLTPy-neri0BIZL0,3929
62
- recce/data/_next/static/chunks/app/layout-177a410a97e0d018.js,sha256=Hmy6Lmrt4GPYYa0f1qhxTiMj4K47PCmkAkrm1Rbnd7w,1731
63
- recce/data/_next/static/chunks/app/page-59241c42b7dd4fcf.js,sha256=5G46SScopZfjA1KxuSNwUunWAz7FIP_81LQ0Oc5DoI4,156420
64
- recce/data/_next/static/chunks/app/_not-found/page-01ed58b7f971d311.js,sha256=_l3JSAaIJxInWqyqdDsobkhJ3JP6DZuwXkw-MsRakQA,1751
65
- recce/data/_next/static/chunks/pages/_app-437c455677d62394.js,sha256=FaxURD1wuAmnMU1zJlsQKT9rRdfuspR7yx7BckcoCLY,284
66
- recce/data/_next/static/chunks/pages/_error-e7650df18ca04bde.js,sha256=0Vzx_hCqw4RcptsFzHfUigpI13sToBnFw38owTP7ruo,250
67
- recce/data/_next/static/css/17a96168e3a9db13.css,sha256=aojwuNbF38RSCVYal2iL4Qkz6jsO0FNEs6qfeYwXY5k,1205
68
- recce/data/_next/static/css/1b121dc4d36aeb4d.css,sha256=fJcUlx0zOECmST2uFkAB-VzBrp53E-5KEShUcnO16aE,7949
69
- recce/data/_next/static/css/35c6679a098e1e34.css,sha256=VaNEUFJj9NKOihehwlAgzdPRbmww7bi0xKh8hRfxhn0,12706
70
- recce/data/_next/static/css/951e2e0eea2d4a5b.css,sha256=O9cTKlCQlb4Xh9xx44IorAGaWOJkSksaV6gGMRw3nzs,8736
71
- recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2,sha256=P5Sx5PNkdTlDYzAdulW_OPRfMokDLi6XTpmS8KJSRoI,11148
72
- recce/data/_next/static/media/montserrat-cyrillic-800-normal.bd5c9f50.woff,sha256=PFm1Nwt11gmigNvVqPOoDbUFo70fZzUfyZ9S_5f8AnE,10920
73
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2,sha256=qHQDcPj9VkK-6sE5nxIKvejtNLo5RwBULzyH9nZsEwo,12052
74
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.e6e0d8d0.woff,sha256=lpODDPTBtDBAla5_gN_MO8RAFRT1bUJQ1XsBGNN3LHA,12036
75
- recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2,sha256=Tyiv8SvOCaTmT_S2FaOZ5FuZz52F1aVV9hzIfrI7sEI,19036
76
- recce/data/_next/static/media/montserrat-latin-800-normal.fc315020.woff,sha256=Hgj7H-0GgOWQTmq6qCLtwYYQWBZPUP9-DIrF0NJQ2dE,20696
77
- recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2,sha256=tOnyR2cgiUm1cKtlrN9CY6FzD2yAMBe90slHKC0cBms,33776
78
- recce/data/_next/static/media/montserrat-latin-ext-800-normal.2e5381b2.woff,sha256=5IGjXSVdJCIHAJI-R0Qf6XEufetEiQ-5GOY9UuhbtmQ,41700
79
- recce/data/_next/static/media/montserrat-vietnamese-800-normal.20c545e6.woff,sha256=U5YlWNp5ytuS5tfT8Tt07U5xG3Qs0b2ze6vPx2KKG4s,7328
80
- recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2,sha256=bnmP7vEVe-4gLSDBsmKqD-SATv6-Pg-pxnTpSj7BCeI,7948
81
- recce/data/_next/static/media/reload-image.79aabb7d.svg,sha256=l-jdOsD0OBCpFrVYh1ubO8oajafPuPNs6MYnbanO7K0,840
82
- recce/data/imgs/reload-image.svg,sha256=l-jdOsD0OBCpFrVYh1ubO8oajafPuPNs6MYnbanO7K0,840
83
- recce/data/imgs/feedback/thumbs-down.png,sha256=q9KVIbaZku1TWkYHuleYlO-b6HsTApYh3St5xNHMGMg,10695
84
- recce/data/imgs/feedback/thumbs-up.png,sha256=VF3BH8bmYEqcSsMDJO57xMqW4t6crCXUXaMlOPgI_OE,10556
85
- recce/data/logo/recce-logo-white.png,sha256=y3re8iEucJnMUkAkRS2CjWHTlOydyvgWdWjuQKcXDbk,46923
86
- recce/event/CONFIG,sha256=w8_AVcNu_JF-t8lNmjOqtsXbeOawMzpEhkISaMlm-iU,48
87
- recce/event/SENTRY_DNS,sha256=nWXZevLC4qDScvNtjs329X13oxqvtFI_Kiu6cfCDOBA,83
88
- recce/event/__init__.py,sha256=q82uD7GvAvp9nknyrOC2E-OtGsk0x-aM_rWEqzpkEgY,8613
89
- recce/event/collector.py,sha256=1Y02A77CkMMrRv-5F1KUAMGebG7m3wXhsvcPdXM2Ugg,5661
90
- recce/event/track.py,sha256=xDyDWblhR6mp0tezEYhkA0aOyZLqXBpJyHZwhI2xhU8,4803
91
- recce/models/__init__.py,sha256=F7cgALtdWnwv37R0eEgKZ_yBsMwxWnUfo3jAZ3u6qyU,209
92
- recce/models/check.py,sha256=jjR1SGyczjrqyK-0Zas6ikLIGSgVp54lvfcQA19AniI,1588
93
- recce/models/run.py,sha256=QK2gvOWvko9YYhd2NLs3BPt5l4MSCZGwpzTAiqx9zJw,1161
94
- recce/models/types.py,sha256=0YbhuL_MiDinhtqq9UQJQYu5_zTNWOjm7G5t-WKbDV0,4390
95
- recce/tasks/__init__.py,sha256=b553AtDHjYROgmMePv_Hv_X3fjh4iEn11gzzpUJz6_o,610
96
- recce/tasks/core.py,sha256=JFYa1CfgOiRPQ7KVTwMuxJjhMB-pvCwB-xezVt-h3RU,4080
97
- recce/tasks/dataframe.py,sha256=03UBWwt0DFTXlaEOtnV5i_mxdRKD7UbRayewEL2Ub48,3650
98
- recce/tasks/histogram.py,sha256=SMdSznzrBdAFvAbhsoUGAK9o0QUMYy00IVbamUVTpBk,13601
99
- recce/tasks/lineage.py,sha256=_PbY0ZkDr620U8V2olqoX_T9XA0-G8ILt_6m1Q5TfBs,541
100
- recce/tasks/profile.py,sha256=gMgms9qvdDsihh2aSC6LvCm9ggah4Oq3xjvmCh_exrU,11352
101
- recce/tasks/query.py,sha256=k3y_IK1_3D2j4Scw-70ccDjVMa-Oe9jqxlDyLHfjagw,12790
102
- recce/tasks/rowcount.py,sha256=DIC17VUKtGhEHz6lW4VFLHyD6F4e4QV0i_Dsz4HAv1w,9750
103
- recce/tasks/schema.py,sha256=HHrSvhd_ZJdrNj2QKi9W8vmig0NuYci5cgsKFvp2bu4,2274
104
- recce/tasks/top_k.py,sha256=vY3VCBmg61E8I4V-9-hJOv5RCYCmhxl6sHiKR9Zv7eE,5521
105
- recce/tasks/valuediff.py,sha256=XJWkA307B5qTerT87fJRhJxPCqjmXn5eILYCXDfPtSQ,16439
106
- recce/util/__init__.py,sha256=cDvL3WT32cJR9CUPIJmibwJoyYcB3ZaKBFbOZDyvqP8,95
107
- recce/util/api_token.py,sha256=D1fM5romXnxXIvmedr8_0r_jspRRjWsmDK-lM7VSrk4,2737
108
- recce/util/breaking.py,sha256=evT-xlDWMgIbuPQH6w5yNoDjOqopKzBXnCF9_xTn1S0,12591
109
- recce/util/cache.py,sha256=QB6wzxe0M3jNTwP0M27Ys8F2hF-oda4-LyXXG9THuZQ,646
110
- recce/util/cll.py,sha256=VXhtyoPIcPEW3_SmNUTbZWwOmmv8_JRfAB9CLJ4S2Wg,13315
111
- recce/util/io.py,sha256=fNiIafNxPlTF6NNXlugzeJjfVGGrP3RXb39ERzRWD3Q,3459
112
- recce/util/lineage.py,sha256=WdHxFTViqykBT8hBIbhGOovpEVnu9hbaW0VEQJUiCmE,2186
113
- recce/util/logger.py,sha256=6UgLFkRiur9jJfu2ZRdo4LUvMw4f75V-l-1HT1-sgKo,747
114
- recce/util/onboarding_state.py,sha256=kwFirKlfXdl5WFkR_nmilqGKFyELNcSPMqYq-by35fk,1991
115
- recce/util/pydantic_model.py,sha256=KumKuyCjbTzEMsKLE4-b-eZfp0gLhYDdmVtw1-hxiJw,587
116
- recce/util/recce_cloud.py,sha256=YgRs9PhER3EhESaJInJo6mf3uwvnp0OavHBY1OYHPXw,7958
117
- recce/util/singleton.py,sha256=1cU99I0f9tjuMQLMJyLsK1oK3fZJMsO5-TbRHAMXqds,627
118
- recce/yaml/__init__.py,sha256=EgXYlFeJZchatUClRDXbIC5Oqb2_nBvB2NqItYVihio,1292
119
- recce_nightly-1.9.0.20250623.dist-info/licenses/LICENSE,sha256=CQjjMy9aYPhfe8xG_bcpIfKtNkdxLZ5IOb8oPygtUhY,11343
120
- tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
- tests/test_cli.py,sha256=_ikuZW4bYEGyj5A_V7nDSyBa1tVZqc0TVm-TJ0rEYVo,5467
122
- tests/test_config.py,sha256=ODDFe_XF6gphmSmmc422dGLBaCCmG-IjDzTkD5SJsJE,1557
123
- tests/test_core.py,sha256=jfn9dV-k89O2TywUYHmMTSdvyfBUips1ful1cIY2oFY,799
124
- tests/test_dbt.py,sha256=VzXvdoJNwwEmKNhJJDNB1N_qZYwp1aoJQ1sLcoyRBmk,1316
125
- tests/test_pull_request.py,sha256=HmZo5MoDaoKSgPwbLxJ3Ur3ajZ7IxhkzJxaOmhg6bwE,3562
126
- tests/test_server.py,sha256=l2EDIonpDU3CzuCpZSXTCyH_X32xdscSz-bdNSuTkjA,3397
127
- tests/test_state.py,sha256=phSYlyxTx2Sq0K8DXUrfaO5Jc7lgZeeWNNtc9JD3fYc,4988
128
- tests/test_summary.py,sha256=D0WvAkdO-vzGcvholH2rfS1wTxUXjVHwWm59fWy45eA,2876
129
- tests/adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
- tests/adapter/dbt_adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
- tests/adapter/dbt_adapter/conftest.py,sha256=WlMVytJcyfLJlMBeYhpk8Q-nyCDR9x_7qgsy6Uh9ECw,386
132
- tests/adapter/dbt_adapter/dbt_test_helper.py,sha256=o_7m0cnVeGwPwEFXBCx3Me5QqLzQMOBR3dXD-MS2eaM,10406
133
- tests/adapter/dbt_adapter/test_dbt_adapter.py,sha256=Y5TSlqkXGjJC6hC7YYs45bnRht5aou_KLjPMjpAGxNM,830
134
- tests/adapter/dbt_adapter/test_dbt_cll.py,sha256=IvFIImI6SQF-F-Ti0tHvUEZkAiKOmdpb9ZeJ_5JOw9w,14294
135
- tests/adapter/dbt_adapter/test_selector.py,sha256=uKFm0QxrxG-xyUEXGobCMueCRUssgnZMyo-S1Nlk3_s,6856
136
- tests/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
- tests/tasks/conftest.py,sha256=lyZFx4jEY3To3xVhfMQ-G45egYOCttKN2lxeyExACkY,157
138
- tests/tasks/test_histogram.py,sha256=g69R2Ljvcd8RQTnq7EMZEa93_1vVWNe4ZLg990rWuyA,4088
139
- tests/tasks/test_lineage.py,sha256=HODSP2_uSu98e4jV-t9TIOSrln_5mXd-6baKv9aEmws,1095
140
- tests/tasks/test_preset_checks.py,sha256=fAro5kAv67YiXgRFj7hDAgZEd8fVSHW_VTapVDq4G04,1457
141
- tests/tasks/test_profile.py,sha256=yDavc2-8AneOtkkPGCHJM0QUEYq6S8lJpQbQsJVfa_k,10233
142
- tests/tasks/test_query.py,sha256=EkldbvckZkTOlm9b3y9zLzGIhlo1RShSsv-ycCjDHrg,4218
143
- tests/tasks/test_row_count.py,sha256=21PaP2aq-x8-pqwzWHRT1sixhQ8g3CQNRWOZTTmbK0s,3151
144
- tests/tasks/test_schema.py,sha256=7ds4Vx8ixaiIWDR49Lvjem4xlPkRP1cXazDRY3roUak,3121
145
- tests/tasks/test_top_k.py,sha256=YR_GS__DJsbDlQVaEEdJvNQ3fh1VmV5Nb3G7lb0r6YM,1779
146
- tests/tasks/test_valuediff.py,sha256=_xQJGgxsXoy2NYk_Z6Hsw2FlVh6zk2nN_iUueyRN1e8,2046
147
- recce_nightly-1.9.0.20250623.dist-info/METADATA,sha256=HlG1PEA0-VELPkwBVp7BfxNfoWqPqNK8aAxhM82xSHE,9397
148
- recce_nightly-1.9.0.20250623.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
149
- recce_nightly-1.9.0.20250623.dist-info/entry_points.txt,sha256=oqoY_IiwIqXbgrIsPnlqUqao2eiIeP2dprowkOlmeyg,40
150
- recce_nightly-1.9.0.20250623.dist-info/top_level.txt,sha256=6PKGVpf75idP0C6KEaldDzzZUauIxNu1ZDstau1pI4I,12
151
- recce_nightly-1.9.0.20250623.dist-info/RECORD,,
tests/test_state.py DELETED
@@ -1,134 +0,0 @@
1
- # add the RecceState test case
2
- import os
3
- import unittest
4
- from datetime import datetime
5
-
6
- from recce.core import RecceContext
7
- from recce.models import Check, Run
8
- from recce.state import ArtifactsRoot, RecceState, RecceStateLoader
9
-
10
- current_dir = os.path.dirname(os.path.abspath(__file__))
11
-
12
-
13
- class TestRecceState(unittest.TestCase):
14
- def test_merge_checks(self):
15
- check1 = Check(name="test1", description="", type="query")
16
- check2 = Check(name="test2", description="", type="query", updated_at=datetime(2000, 1, 1))
17
- check2_2 = Check(
18
- name="test2_2", description="", type="query", updated_at=datetime(2020, 1, 1), check_id=check2.check_id
19
- )
20
- check3 = Check(name="test3", description="", type="query")
21
-
22
- context = RecceContext()
23
- state = RecceState(checks=[check1], runs=[])
24
- context.import_state(state)
25
- self.assertEqual(1, len(context.checks))
26
- self.assertEqual(check1.name, context.checks[0].name)
27
-
28
- context = RecceContext(checks=[check1, check2])
29
- state = RecceState(checks=[check1, check2_2, check3], runs=[])
30
- context.import_state(state)
31
- self.assertEqual(3, len(context.checks))
32
- self.assertEqual(check2_2.name, context.checks[1].name)
33
-
34
- def test_merge_preset_checks(self):
35
- check1 = Check(
36
- name="test1",
37
- description="test1",
38
- type="query",
39
- params=dict(foo="bar"),
40
- updated_at=datetime(2000, 1, 1),
41
- is_preset=True,
42
- )
43
- check2 = Check(
44
- name="test2",
45
- description="test2",
46
- type="query",
47
- params=dict(foo="bar"),
48
- updated_at=datetime(2001, 1, 1),
49
- is_preset=True,
50
- )
51
-
52
- context = RecceContext(checks=[check1])
53
- state = RecceState(checks=[check2], runs=[])
54
- context.import_state(state)
55
- self.assertEqual(1, len(context.checks))
56
- self.assertEqual(check2.name, context.checks[0].name)
57
-
58
- context = RecceContext(checks=[check2])
59
- state = RecceState(checks=[check1], runs=[])
60
- context.import_state(state)
61
- self.assertEqual(1, len(context.checks))
62
- self.assertEqual(check2.name, context.checks[0].name)
63
-
64
- def test_revert_checks(self):
65
- check1 = Check(name="test1", description="", type="query")
66
- check2 = Check(name="test2", description="", type="query")
67
- check2_2 = Check(name="test2_2", description="", type="query", check_id=check2.check_id)
68
- check3 = Check(name="test3", description="", type="query")
69
-
70
- context = RecceContext(checks=[check1, check2])
71
- state = RecceState(checks=[check2_2, check3], runs=[])
72
- context.import_state(state, merge=False)
73
- self.assertEqual(2, len(context.checks))
74
- self.assertEqual(check2_2.name, context.checks[0].name)
75
-
76
- def test_merge_runs(self):
77
- run1 = Run(type="query")
78
- run2 = Run(type="query")
79
- run3 = Run(type="query")
80
-
81
- context = RecceContext(runs=[])
82
- state = RecceState(runs=[run1])
83
- context.import_state(state)
84
- self.assertEqual(1, len(context.runs))
85
-
86
- context = RecceContext(runs=[run1, run2])
87
- state = RecceState(runs=[run2, run3])
88
- context.import_state(state)
89
- self.assertEqual(3, len(context.runs))
90
-
91
- def test_merge_dbt_artifacts(self):
92
- import json
93
- import os
94
-
95
- with open(os.path.join(current_dir, "manifest.json"), "r") as f:
96
- manifest = json.load(f)
97
- manifest["metadata"]["generated_at"] = "2000-01-01T00:00:00Z"
98
- artifacts = ArtifactsRoot(
99
- base=dict(
100
- manifest=manifest,
101
- ),
102
- current=dict(
103
- manifest=manifest,
104
- ),
105
- )
106
-
107
- from tests.adapter.dbt_adapter.dbt_test_helper import DbtTestHelper
108
-
109
- adapter = DbtTestHelper().adapter
110
- adapter.import_artifacts(artifacts)
111
- self.assertNotEqual(adapter.base_manifest.metadata.invocation_id, manifest.get("metadata").get("invocation_id"))
112
-
113
- manifest["metadata"]["generated_at"] = "2099-01-01T00:00:00Z"
114
- adapter.import_artifacts(artifacts)
115
- self.assertEqual(adapter.base_manifest.metadata.invocation_id, manifest.get("metadata").get("invocation_id"))
116
-
117
- def test_state_loader(self):
118
- # copy ./recce_state.json to temp and open
119
-
120
- # use library to create a temp file in the context
121
- import os
122
- import shutil
123
- import tempfile
124
-
125
- with tempfile.NamedTemporaryFile() as f:
126
- # copy ./recce_state.json to temp file
127
- current_dir = os.path.dirname(os.path.abspath(__file__))
128
- state_file = os.path.join(current_dir, "recce_state.json")
129
- shutil.copy(state_file, f.name)
130
-
131
- # load the state file
132
- state_loader = RecceStateLoader(state_file=f.name)
133
- state = state_loader.load()
134
- assert len(state.runs) == 17