recce-nightly 1.10.0.20250625__py3-none-any.whl → 1.30.0.20251221__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of recce-nightly might be problematic. Click here for more details.
- recce/VERSION +1 -1
- recce/__init__.py +5 -0
- recce/adapter/dbt_adapter/__init__.py +343 -245
- recce/apis/check_api.py +20 -14
- recce/apis/check_events_api.py +353 -0
- recce/apis/check_func.py +5 -5
- recce/apis/run_func.py +32 -3
- recce/artifact.py +76 -3
- recce/cli.py +705 -82
- recce/config.py +2 -2
- recce/connect_to_cloud.py +1 -1
- recce/core.py +3 -3
- recce/data/404/index.html +2 -0
- recce/data/404.html +2 -22
- recce/data/__next.@lineage.!KHNsb3Qp.__PAGE__.txt +7 -0
- recce/data/__next.@lineage.!KHNsb3Qp.txt +4 -0
- recce/data/__next.__PAGE__.txt +6 -0
- recce/data/__next._full.txt +32 -0
- recce/data/__next._head.txt +8 -0
- recce/data/__next._index.txt +14 -0
- recce/data/__next._tree.txt +8 -0
- recce/data/_next/static/chunks/025a7e3e3f9f40ae.js +1 -0
- recce/data/_next/static/chunks/0ce56d67ef5779ca.js +4 -0
- recce/data/_next/static/chunks/1a6a78780155dac7.js +48 -0
- recce/data/_next/static/chunks/1de8485918b9182a.css +2 -0
- recce/data/_next/static/chunks/1e4b1b50d1e34993.js +1 -0
- recce/data/_next/static/chunks/206d5d181e4c738e.js +1 -0
- recce/data/_next/static/chunks/2c357efc34c5b859.js +25 -0
- recce/data/_next/static/chunks/2e9d95d2d48c479c.js +1 -0
- recce/data/_next/static/chunks/2f016dc4a3edad2e.js +2 -0
- recce/data/_next/static/chunks/313251962d698f7c.js +1 -0
- recce/data/_next/static/chunks/3a9f021f38eb5574.css +1 -0
- recce/data/_next/static/chunks/40079da8d2b8f651.js +1 -0
- recce/data/_next/static/chunks/4599182bffb64661.js +38 -0
- recce/data/_next/static/chunks/4e62f6e184173580.js +1 -0
- recce/data/_next/static/chunks/5c4dfb0d09eaa401.js +1 -0
- recce/data/_next/static/chunks/69e4f06ccfdfc3ac.js +1 -0
- recce/data/_next/static/chunks/6b206cb4707d6bee.js +1 -0
- recce/data/_next/static/chunks/6d8557f062aa4386.css +1 -0
- recce/data/_next/static/chunks/7fbe3650bd83b6b5.js +1 -0
- recce/data/_next/static/chunks/83fa823a825674f6.js +1 -0
- recce/data/_next/static/chunks/848a6c9b5f55f7ed.js +1 -0
- recce/data/_next/static/chunks/859462b0858aef88.css +2 -0
- recce/data/_next/static/chunks/923964f18c87d0f1.css +1 -0
- recce/data/_next/static/chunks/939390f911895d7c.js +48 -0
- recce/data/_next/static/chunks/99a9817237a07f43.js +1 -0
- recce/data/_next/static/chunks/9fed8b4b2b924054.js +5 -0
- recce/data/_next/static/chunks/b6949f6c5892110c.js +1 -0
- recce/data/_next/static/chunks/b851a1d3f8149828.js +1 -0
- recce/data/_next/static/chunks/c734f9ad957de0b4.js +1 -0
- recce/data/_next/static/chunks/cdde321b0ec75717.js +2 -0
- recce/data/_next/static/chunks/d0f91117d77ff844.css +1 -0
- recce/data/_next/static/chunks/d6c8667911c2500f.js +1 -0
- recce/data/_next/static/chunks/da8dab68c02752cf.js +74 -0
- recce/data/_next/static/chunks/dc074049c9d12d97.js +109 -0
- recce/data/_next/static/chunks/ee7f1a8227342421.js +1 -0
- recce/data/_next/static/chunks/fa2f4e56c2fccc73.js +1 -0
- recce/data/_next/static/chunks/turbopack-1fad664f62979b93.js +3 -0
- recce/data/_next/static/media/favicon.a8d38d84.ico +0 -0
- recce/data/_next/static/media/montserrat-cyrillic-800-normal.d80d830d.woff2 +0 -0
- recce/data/_next/static/media/{montserrat-cyrillic-800-normal.bd5c9f50.woff → montserrat-cyrillic-800-normal.f9d58125.woff} +0 -0
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.076c2a93.woff2 +0 -0
- recce/data/_next/static/media/montserrat-latin-800-normal.cde454cc.woff2 +0 -0
- recce/data/_next/static/media/{montserrat-latin-800-normal.fc315020.woff → montserrat-latin-800-normal.d5761935.woff} +0 -0
- recce/data/_next/static/media/montserrat-latin-ext-800-normal.40ec0659.woff2 +0 -0
- recce/data/_next/static/media/{montserrat-latin-ext-800-normal.2e5381b2.woff → montserrat-latin-ext-800-normal.b671449b.woff} +0 -0
- recce/data/_next/static/media/{montserrat-vietnamese-800-normal.20c545e6.woff → montserrat-vietnamese-800-normal.9f7b8541.woff} +0 -0
- recce/data/_next/static/media/montserrat-vietnamese-800-normal.f9eb854e.woff2 +0 -0
- recce/data/_next/static/nX-Uz0AH6Tc6hIQUFGqaB/_buildManifest.js +11 -0
- recce/data/_next/static/nX-Uz0AH6Tc6hIQUFGqaB/_clientMiddlewareManifest.json +1 -0
- recce/data/_not-found/__next._full.txt +24 -0
- recce/data/_not-found/__next._head.txt +8 -0
- recce/data/_not-found/__next._index.txt +13 -0
- recce/data/_not-found/__next._not-found.__PAGE__.txt +5 -0
- recce/data/_not-found/__next._not-found.txt +4 -0
- recce/data/_not-found/__next._tree.txt +6 -0
- recce/data/_not-found/index.html +2 -0
- recce/data/_not-found/index.txt +24 -0
- recce/data/auth_callback.html +1 -1
- recce/data/checks/__next.@lineage.__DEFAULT__.txt +7 -0
- recce/data/checks/__next._full.txt +39 -0
- recce/data/checks/__next._head.txt +8 -0
- recce/data/checks/__next._index.txt +14 -0
- recce/data/checks/__next._tree.txt +8 -0
- recce/data/checks/__next.checks.__PAGE__.txt +10 -0
- recce/data/checks/__next.checks.txt +4 -0
- recce/data/checks/index.html +2 -0
- recce/data/checks/index.txt +39 -0
- recce/data/index.html +2 -27
- recce/data/index.txt +32 -8
- recce/data/lineage/__next.@lineage.__DEFAULT__.txt +7 -0
- recce/data/lineage/__next._full.txt +39 -0
- recce/data/lineage/__next._head.txt +8 -0
- recce/data/lineage/__next._index.txt +14 -0
- recce/data/lineage/__next._tree.txt +8 -0
- recce/data/lineage/__next.lineage.__PAGE__.txt +10 -0
- recce/data/lineage/__next.lineage.txt +4 -0
- recce/data/lineage/index.html +2 -0
- recce/data/lineage/index.txt +39 -0
- recce/data/query/__next.@lineage.__DEFAULT__.txt +7 -0
- recce/data/query/__next._full.txt +37 -0
- recce/data/query/__next._head.txt +8 -0
- recce/data/query/__next._index.txt +14 -0
- recce/data/query/__next._tree.txt +8 -0
- recce/data/query/__next.query.__PAGE__.txt +9 -0
- recce/data/query/__next.query.txt +4 -0
- recce/data/query/index.html +2 -0
- recce/data/query/index.txt +37 -0
- recce/event/CONFIG.bak +1 -0
- recce/event/__init__.py +9 -8
- recce/event/collector.py +6 -2
- recce/event/track.py +10 -0
- recce/github.py +1 -1
- recce/mcp_server.py +725 -0
- recce/models/check.py +433 -15
- recce/models/types.py +61 -2
- recce/pull_request.py +1 -1
- recce/run.py +37 -17
- recce/server.py +216 -21
- recce/state/__init__.py +31 -0
- recce/state/cloud.py +644 -0
- recce/state/const.py +26 -0
- recce/state/local.py +56 -0
- recce/state/state.py +119 -0
- recce/state/state_loader.py +174 -0
- recce/summary.py +25 -3
- recce/tasks/dataframe.py +63 -1
- recce/tasks/query.py +40 -3
- recce/tasks/rowcount.py +4 -1
- recce/tasks/schema.py +4 -1
- recce/tasks/utils.py +147 -0
- recce/tasks/valuediff.py +85 -57
- recce/util/api_token.py +11 -2
- recce/util/breaking.py +10 -1
- recce/util/cll.py +1 -2
- recce/util/cloud/__init__.py +15 -0
- recce/util/cloud/base.py +115 -0
- recce/util/cloud/check_events.py +190 -0
- recce/util/cloud/checks.py +242 -0
- recce/util/io.py +2 -2
- recce/util/lineage.py +19 -18
- recce/util/perf_tracking.py +85 -0
- recce/util/recce_cloud.py +254 -5
- recce/util/startup_perf.py +121 -0
- recce/yaml/__init__.py +2 -2
- {recce_nightly-1.10.0.20250625.dist-info → recce_nightly-1.30.0.20251221.dist-info}/METADATA +91 -71
- recce_nightly-1.30.0.20251221.dist-info/RECORD +183 -0
- {recce_nightly-1.10.0.20250625.dist-info → recce_nightly-1.30.0.20251221.dist-info}/WHEEL +1 -2
- recce/data/_next/static/abCX3x3UoIdRLEDWxx4xd/_buildManifest.js +0 -1
- recce/data/_next/static/chunks/181-acc61ddada3bc0ca.js +0 -43
- recce/data/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js +0 -1
- recce/data/_next/static/chunks/217-879a84d70f7a907c.js +0 -2
- recce/data/_next/static/chunks/29e3cc0d-60045b2e47aa3916.js +0 -1
- recce/data/_next/static/chunks/36e1c10d-8e7be4a6c1f6ab2d.js +0 -1
- recce/data/_next/static/chunks/3998a672-03adacad07b346ac.js +0 -1
- recce/data/_next/static/chunks/3a92ee20-1081c360214f9602.js +0 -1
- recce/data/_next/static/chunks/42-cd3c06533f5fd47c.js +0 -9
- recce/data/_next/static/chunks/450c323b-fd94e7ffaa4a5efa.js +0 -1
- recce/data/_next/static/chunks/47d8844f-929aed9b1c73a905.js +0 -1
- recce/data/_next/static/chunks/608-3b079b544e5d5f5e.js +0 -15
- recce/data/_next/static/chunks/6dc81886-adbfa45836061d79.js +0 -1
- recce/data/_next/static/chunks/7a8a3e83-edf6dc64b5d5f0a5.js +0 -1
- recce/data/_next/static/chunks/7f27ae6c-d5f0438edd5c2a5b.js +0 -1
- recce/data/_next/static/chunks/86730205-cfb14e3f051bab35.js +0 -1
- recce/data/_next/static/chunks/8d700b6a.8bb140898499c512.js +0 -1
- recce/data/_next/static/chunks/92-607cd1af83c41f43.js +0 -1
- recce/data/_next/static/chunks/9746af58-a42b7d169cacadf0.js +0 -1
- recce/data/_next/static/chunks/a30376cd-de84559016d7e133.js +0 -1
- recce/data/_next/static/chunks/app/_not-found/page-01ed58b7f971d311.js +0 -1
- recce/data/_next/static/chunks/app/layout-177a410a97e0d018.js +0 -1
- recce/data/_next/static/chunks/app/page-da6e046a8235dbfc.js +0 -1
- recce/data/_next/static/chunks/b63b1b3f-4282bdcf459e075c.js +0 -1
- recce/data/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js +0 -1
- recce/data/_next/static/chunks/c132bf7d-08cb668a789d6afd.js +0 -1
- recce/data/_next/static/chunks/ce84277d-2e5d1d46910cf052.js +0 -1
- recce/data/_next/static/chunks/febdd86e-c6b525341634b860.js +0 -54
- recce/data/_next/static/chunks/fee69bc6-2dbccaf9b90474e6.js +0 -1
- recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -1
- recce/data/_next/static/chunks/main-app-39061b0166c47f55.js +0 -1
- recce/data/_next/static/chunks/main-b5b3ae20a1405261.js +0 -1
- recce/data/_next/static/chunks/pages/_app-437c455677d62394.js +0 -1
- recce/data/_next/static/chunks/pages/_error-e7650df18ca04bde.js +0 -1
- recce/data/_next/static/chunks/webpack-7b49d5ba7e3a434d.js +0 -1
- recce/data/_next/static/css/17a96168e3a9db13.css +0 -1
- recce/data/_next/static/css/1b121dc4d36aeb4d.css +0 -3
- recce/data/_next/static/css/35c6679a098e1e34.css +0 -1
- recce/data/_next/static/css/951e2e0eea2d4a5b.css +0 -14
- recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
- recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
- recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
- recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
- recce/data/_next/static/media/reload-image.79aabb7d.svg +0 -4
- recce/state.py +0 -786
- recce_nightly-1.10.0.20250625.dist-info/RECORD +0 -154
- recce_nightly-1.10.0.20250625.dist-info/top_level.txt +0 -2
- tests/__init__.py +0 -0
- tests/adapter/__init__.py +0 -0
- tests/adapter/dbt_adapter/__init__.py +0 -0
- tests/adapter/dbt_adapter/conftest.py +0 -17
- tests/adapter/dbt_adapter/dbt_test_helper.py +0 -298
- tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -25
- tests/adapter/dbt_adapter/test_dbt_cll.py +0 -384
- tests/adapter/dbt_adapter/test_selector.py +0 -202
- tests/tasks/__init__.py +0 -0
- tests/tasks/conftest.py +0 -4
- tests/tasks/test_histogram.py +0 -129
- tests/tasks/test_lineage.py +0 -55
- tests/tasks/test_preset_checks.py +0 -64
- tests/tasks/test_profile.py +0 -397
- tests/tasks/test_query.py +0 -151
- tests/tasks/test_row_count.py +0 -135
- tests/tasks/test_schema.py +0 -122
- tests/tasks/test_top_k.py +0 -77
- tests/tasks/test_valuediff.py +0 -85
- tests/test_cli.py +0 -133
- tests/test_config.py +0 -43
- tests/test_connect_to_cloud.py +0 -82
- tests/test_core.py +0 -29
- tests/test_dbt.py +0 -36
- tests/test_pull_request.py +0 -130
- tests/test_server.py +0 -104
- tests/test_state.py +0 -134
- tests/test_summary.py +0 -65
- /recce/data/_next/static/chunks/{polyfills-42372ed130431b0a.js → a6dad97d9634a72d.js} +0 -0
- /recce/data/_next/static/media/{montserrat-cyrillic-ext-800-normal.e6e0d8d0.woff → montserrat-cyrillic-ext-800-normal.a4fa76b5.woff} +0 -0
- /recce/data/_next/static/{abCX3x3UoIdRLEDWxx4xd → nX-Uz0AH6Tc6hIQUFGqaB}/_ssgManifest.js +0 -0
- {recce_nightly-1.10.0.20250625.dist-info → recce_nightly-1.30.0.20251221.dist-info}/entry_points.txt +0 -0
- {recce_nightly-1.10.0.20250625.dist-info → recce_nightly-1.30.0.20251221.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
1:I[660181,["/_next/static/chunks/c734f9ad957de0b4.js","/_next/static/chunks/2e9d95d2d48c479c.js"],"HTTPAccessFallbackBoundary"]
|
|
2
|
+
2:I[634135,["/_next/static/chunks/7fbe3650bd83b6b5.js","/_next/static/chunks/4599182bffb64661.js","/_next/static/chunks/83fa823a825674f6.js","/_next/static/chunks/9fed8b4b2b924054.js","/_next/static/chunks/2c357efc34c5b859.js","/_next/static/chunks/dc074049c9d12d97.js","/_next/static/chunks/40079da8d2b8f651.js"],"GoogleTagManager"]
|
|
3
|
+
3:I[485153,["/_next/static/chunks/7fbe3650bd83b6b5.js","/_next/static/chunks/4599182bffb64661.js","/_next/static/chunks/83fa823a825674f6.js","/_next/static/chunks/9fed8b4b2b924054.js","/_next/static/chunks/2c357efc34c5b859.js","/_next/static/chunks/dc074049c9d12d97.js","/_next/static/chunks/40079da8d2b8f651.js"],""]
|
|
4
|
+
4:I[84654,["/_next/static/chunks/7fbe3650bd83b6b5.js","/_next/static/chunks/4599182bffb64661.js","/_next/static/chunks/83fa823a825674f6.js","/_next/static/chunks/9fed8b4b2b924054.js","/_next/static/chunks/2c357efc34c5b859.js","/_next/static/chunks/dc074049c9d12d97.js","/_next/static/chunks/40079da8d2b8f651.js"],"default"]
|
|
5
|
+
5:I[302240,["/_next/static/chunks/c734f9ad957de0b4.js","/_next/static/chunks/2e9d95d2d48c479c.js"],"default"]
|
|
6
|
+
6:I[408821,["/_next/static/chunks/7fbe3650bd83b6b5.js","/_next/static/chunks/4599182bffb64661.js","/_next/static/chunks/83fa823a825674f6.js","/_next/static/chunks/9fed8b4b2b924054.js","/_next/static/chunks/2c357efc34c5b859.js","/_next/static/chunks/dc074049c9d12d97.js","/_next/static/chunks/40079da8d2b8f651.js","/_next/static/chunks/848a6c9b5f55f7ed.js"],"default"]
|
|
7
|
+
7:I[354876,["/_next/static/chunks/c734f9ad957de0b4.js","/_next/static/chunks/2e9d95d2d48c479c.js"],"default"]
|
|
8
|
+
8:"$Sreact.fragment"
|
|
9
|
+
9:I[288014,["/_next/static/chunks/c734f9ad957de0b4.js","/_next/static/chunks/2e9d95d2d48c479c.js"],"ClientPageRoot"]
|
|
10
|
+
a:I[884916,["/_next/static/chunks/7fbe3650bd83b6b5.js","/_next/static/chunks/4599182bffb64661.js","/_next/static/chunks/83fa823a825674f6.js","/_next/static/chunks/9fed8b4b2b924054.js","/_next/static/chunks/2c357efc34c5b859.js","/_next/static/chunks/dc074049c9d12d97.js","/_next/static/chunks/40079da8d2b8f651.js","/_next/static/chunks/cdde321b0ec75717.js","/_next/static/chunks/99a9817237a07f43.js"],"default"]
|
|
11
|
+
12:I[253348,["/_next/static/chunks/b6949f6c5892110c.js","/_next/static/chunks/40079da8d2b8f651.js"],"default"]
|
|
12
|
+
:HL["/_next/static/chunks/3a9f021f38eb5574.css","style"]
|
|
13
|
+
:HL["/_next/static/chunks/859462b0858aef88.css","style"]
|
|
14
|
+
:HL["/_next/static/chunks/6d8557f062aa4386.css","style"]
|
|
15
|
+
:HL["/_next/static/chunks/d0f91117d77ff844.css","style"]
|
|
16
|
+
:HL["/_next/static/chunks/923964f18c87d0f1.css","style"]
|
|
17
|
+
:HL["/_next/static/chunks/1de8485918b9182a.css","style"]
|
|
18
|
+
:HC["/",""]
|
|
19
|
+
0:{"P":null,"b":"nX-Uz0AH6Tc6hIQUFGqaB","c":["","query",""],"q":"","i":false,"f":[[["",{"children":["query",{"children":["__PAGE__",{}]}],"lineage":["__DEFAULT__",{}]},"$undefined","$undefined",true],[["$","$L1","c",{"notFound":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3a9f021f38eb5574.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/859462b0858aef88.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","2",{"rel":"stylesheet","href":"/_next/static/chunks/6d8557f062aa4386.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","3",{"rel":"stylesheet","href":"/_next/static/chunks/d0f91117d77ff844.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","4",{"rel":"stylesheet","href":"/_next/static/chunks/923964f18c87d0f1.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/7fbe3650bd83b6b5.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/4599182bffb64661.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/83fa823a825674f6.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/9fed8b4b2b924054.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/_next/static/chunks/2c357efc34c5b859.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/_next/static/chunks/dc074049c9d12d97.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/_next/static/chunks/40079da8d2b8f651.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","$L2",null,{"gtmId":"GTM-M2HVJQFD"}],["$","$L3",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const hash = window.location.hash;\n if (hash.startsWith('#!')) {\n const newLocation = window.location.origin + window.location.pathname;\n window.location.assign(newLocation);\n }\n })();\n "}}],["$","body",null,{"children":["$","$L4",null,{"lineage":"$undefined","children":[[],[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"$0:f:0:1:0:props:notFound:1:props:children:2:props:children:props:children:0"]]}]}]]}]],"children":["$0:f:0:1:0:props:notFound:0",["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","$L2",null,{"gtmId":"GTM-M2HVJQFD"}],["$","$L3",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const hash = window.location.hash;\n if (hash.startsWith('#!')) {\n const newLocation = window.location.origin + window.location.pathname;\n window.location.assign(newLocation);\n }\n })();\n "}}],["$","body",null,{"children":["$","$L4",null,{"lineage":["$","$L5",null,{"parallelRouterKey":"lineage","error":"$6","errorStyles":[],"errorScripts":[["$","script","script-0",{"src":"/_next/static/chunks/848a6c9b5f55f7ed.js","async":true}]],"template":["$","$L7",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}],"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$6","errorStyles":"$0:f:0:1:0:props:children:1:props:children:2:props:children:props:lineage:props:errorStyles","errorScripts":"$0:f:0:1:0:props:children:1:props:children:2:props:children:props:lineage:props:errorScripts","template":["$","$L7",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$0:f:0:1:0:props:notFound:1:props:children:2:props:children:props:children:1","forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$8","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L7",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$8","c",{"children":[["$","$L9",null,{"Component":"$a","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@b","$@c"]}}],["$Ld","$Le"],"$Lf"]}],{},null,false,false]},null,false,false],"lineage":["$L10",{},null,false,false]},null,false,false],"$L11",false]],"m":"$undefined","G":["$12",[]],"S":true}
|
|
20
|
+
13:I[893065,["/_next/static/chunks/c734f9ad957de0b4.js","/_next/static/chunks/2e9d95d2d48c479c.js"],"OutletBoundary"]
|
|
21
|
+
14:"$Sreact.suspense"
|
|
22
|
+
16:I[670337,["/_next/static/chunks/7fbe3650bd83b6b5.js","/_next/static/chunks/4599182bffb64661.js","/_next/static/chunks/83fa823a825674f6.js","/_next/static/chunks/9fed8b4b2b924054.js","/_next/static/chunks/2c357efc34c5b859.js","/_next/static/chunks/dc074049c9d12d97.js","/_next/static/chunks/40079da8d2b8f651.js","/_next/static/chunks/6b206cb4707d6bee.js","/_next/static/chunks/4e62f6e184173580.js","/_next/static/chunks/1a6a78780155dac7.js"],"default"]
|
|
23
|
+
19:I[893065,["/_next/static/chunks/c734f9ad957de0b4.js","/_next/static/chunks/2e9d95d2d48c479c.js"],"ViewportBoundary"]
|
|
24
|
+
1b:I[893065,["/_next/static/chunks/c734f9ad957de0b4.js","/_next/static/chunks/2e9d95d2d48c479c.js"],"MetadataBoundary"]
|
|
25
|
+
d:["$","script","script-0",{"src":"/_next/static/chunks/cdde321b0ec75717.js","async":true,"nonce":"$undefined"}]
|
|
26
|
+
e:["$","script","script-1",{"src":"/_next/static/chunks/99a9817237a07f43.js","async":true,"nonce":"$undefined"}]
|
|
27
|
+
f:["$","$L13",null,{"children":["$","$14",null,{"name":"Next.MetadataOutlet","children":"$@15"}]}]
|
|
28
|
+
10:["$","$8","c",{"children":[["$","$L9",null,{"Component":"$16","serverProvidedParams":{"searchParams":"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:searchParams","params":"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params","promises":["$@17","$@18"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1de8485918b9182a.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/6b206cb4707d6bee.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/4e62f6e184173580.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/1a6a78780155dac7.js","async":true,"nonce":"$undefined"}]],null]}]
|
|
29
|
+
11:["$","$8","h",{"children":[null,["$","$L19",null,{"children":"$@1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$14",null,{"name":"Next.Metadata","children":"$@1c"}]}]}],null]}]
|
|
30
|
+
b:{}
|
|
31
|
+
c:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
32
|
+
17:{}
|
|
33
|
+
18:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
34
|
+
1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
35
|
+
1d:I[666314,["/_next/static/chunks/c734f9ad957de0b4.js","/_next/static/chunks/2e9d95d2d48c479c.js"],"IconMark"]
|
|
36
|
+
1c:[["$","title","0",{"children":"recce"}],["$","meta","1",{"name":"description","content":"Recce: Data validation toolkit for comprehensive PR review"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.a8d38d84.ico","sizes":"32x32","type":"image/x-icon"}],["$","$L1d","3",{}]]
|
|
37
|
+
15:null
|
recce/event/CONFIG.bak
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
event_api_key: <API_KEY>
|
recce/event/__init__.py
CHANGED
|
@@ -10,7 +10,7 @@ from typing import Dict
|
|
|
10
10
|
|
|
11
11
|
import sentry_sdk
|
|
12
12
|
|
|
13
|
-
from recce import get_runner, get_version, is_ci_env
|
|
13
|
+
from recce import get_runner, get_version, is_ci_env, is_recce_cloud_instance
|
|
14
14
|
from recce import yaml as pyml
|
|
15
15
|
from recce.event.collector import Collector
|
|
16
16
|
from recce.git import current_branch, hosting_repo
|
|
@@ -57,6 +57,7 @@ def init():
|
|
|
57
57
|
sentry_sdk.set_tag("platform", sys.platform)
|
|
58
58
|
sentry_sdk.set_tag("is_ci_env", is_ci_env())
|
|
59
59
|
sentry_sdk.set_tag("is_github_codespace", is_github_codespace())
|
|
60
|
+
sentry_sdk.set_tag("is_recce_cloud_instance", is_recce_cloud_instance())
|
|
60
61
|
sentry_sdk.set_tag("system_timezone", get_system_timezone())
|
|
61
62
|
|
|
62
63
|
|
|
@@ -78,7 +79,7 @@ def is_anonymous_tracking():
|
|
|
78
79
|
|
|
79
80
|
def _get_sentry_dns():
|
|
80
81
|
dns_file = os.path.normpath(os.path.join(os.path.dirname(__file__), "SENTRY_DNS"))
|
|
81
|
-
with open(dns_file) as f:
|
|
82
|
+
with open(dns_file, encoding="utf-8") as f:
|
|
82
83
|
dns = f.read().strip()
|
|
83
84
|
return dns
|
|
84
85
|
|
|
@@ -104,7 +105,7 @@ def _get_api_key():
|
|
|
104
105
|
|
|
105
106
|
config_file = os.path.abspath(os.path.join(os.path.dirname(__file__), "CONFIG"))
|
|
106
107
|
try:
|
|
107
|
-
with open(config_file) as fh:
|
|
108
|
+
with open(config_file, encoding="utf-8") as fh:
|
|
108
109
|
config = pyml.load(fh)
|
|
109
110
|
return config.get("event_api_key")
|
|
110
111
|
except Exception:
|
|
@@ -123,7 +124,7 @@ def _generate_user_profile():
|
|
|
123
124
|
user_id = hashlib.sha256(salted_name.encode()).hexdigest()
|
|
124
125
|
else:
|
|
125
126
|
user_id = uuid.uuid4().hex
|
|
126
|
-
with open(RECCE_USER_PROFILE, "w+") as f:
|
|
127
|
+
with open(RECCE_USER_PROFILE, "w+", encoding="utf-8") as f:
|
|
127
128
|
pyml.dump({"user_id": user_id, "anonymous_tracking": True}, f)
|
|
128
129
|
return dict(user_id=user_id, anonymous_tracking=True)
|
|
129
130
|
|
|
@@ -133,9 +134,9 @@ def load_user_profile():
|
|
|
133
134
|
if not os.path.exists(RECCE_USER_PROFILE):
|
|
134
135
|
user_profile = _generate_user_profile()
|
|
135
136
|
else:
|
|
136
|
-
with open(RECCE_USER_PROFILE, "r") as f:
|
|
137
|
+
with open(RECCE_USER_PROFILE, "r", encoding="utf-8") as f:
|
|
137
138
|
user_profile = pyml.load(f)
|
|
138
|
-
if user_profile.get("user_id") is None:
|
|
139
|
+
if user_profile is None or user_profile.get("user_id") is None:
|
|
139
140
|
user_profile = _generate_user_profile()
|
|
140
141
|
|
|
141
142
|
return user_profile
|
|
@@ -144,7 +145,7 @@ def load_user_profile():
|
|
|
144
145
|
def update_user_profile(update_values):
|
|
145
146
|
original = load_user_profile()
|
|
146
147
|
original.update(update_values)
|
|
147
|
-
with open(RECCE_USER_PROFILE, "w+") as f:
|
|
148
|
+
with open(RECCE_USER_PROFILE, "w+", encoding="utf-8") as f:
|
|
148
149
|
pyml.dump(original, f)
|
|
149
150
|
return original
|
|
150
151
|
|
|
@@ -154,7 +155,7 @@ def flush_events(command=None):
|
|
|
154
155
|
|
|
155
156
|
|
|
156
157
|
def should_log_event():
|
|
157
|
-
with open(RECCE_USER_PROFILE, "r") as f:
|
|
158
|
+
with open(RECCE_USER_PROFILE, "r", encoding="utf-8") as f:
|
|
158
159
|
user_profile = pyml.load(f)
|
|
159
160
|
# TODO: default anonymous_tracking to false if field is not present
|
|
160
161
|
tracking = user_profile.get("anonymous_tracking", False)
|
recce/event/collector.py
CHANGED
|
@@ -10,7 +10,7 @@ from json import JSONDecodeError
|
|
|
10
10
|
import portalocker
|
|
11
11
|
import requests
|
|
12
12
|
|
|
13
|
-
from recce import __version__, is_ci_env
|
|
13
|
+
from recce import __version__, is_ci_env, is_recce_cloud_instance
|
|
14
14
|
from recce.github import is_github_codespace
|
|
15
15
|
|
|
16
16
|
|
|
@@ -25,6 +25,7 @@ class Collector:
|
|
|
25
25
|
self._upload_threshold = 10
|
|
26
26
|
self._is_ci: bool = is_ci_env()
|
|
27
27
|
self._is_github_codespace: bool = is_github_codespace()
|
|
28
|
+
self._is_recce_cloud_instance: bool = is_recce_cloud_instance()
|
|
28
29
|
self._flush_timer = None
|
|
29
30
|
|
|
30
31
|
def schedule_flush(self):
|
|
@@ -109,6 +110,7 @@ class Collector:
|
|
|
109
110
|
python_version=python_version,
|
|
110
111
|
is_ci=self._is_ci,
|
|
111
112
|
is_github_codespace=self._is_github_codespace,
|
|
113
|
+
is_recce_cloud_instance=self._is_recce_cloud_instance,
|
|
112
114
|
)
|
|
113
115
|
|
|
114
116
|
if user_properties is not None:
|
|
@@ -138,6 +140,7 @@ class Collector:
|
|
|
138
140
|
@contextmanager
|
|
139
141
|
def load_json(self):
|
|
140
142
|
with portalocker.Lock(self._unsend_events_file, "r+", timeout=5) as f:
|
|
143
|
+
o = None
|
|
141
144
|
try:
|
|
142
145
|
o = json.loads(f.read())
|
|
143
146
|
yield o
|
|
@@ -147,7 +150,8 @@ class Collector:
|
|
|
147
150
|
finally:
|
|
148
151
|
f.seek(0)
|
|
149
152
|
f.truncate()
|
|
150
|
-
|
|
153
|
+
if o is not None:
|
|
154
|
+
f.write(json.dumps(o))
|
|
151
155
|
|
|
152
156
|
def send_events(self):
|
|
153
157
|
with self.load_json() as o:
|
recce/event/track.py
CHANGED
|
@@ -141,6 +141,16 @@ class TrackCommand(Command):
|
|
|
141
141
|
if recce_context is not None:
|
|
142
142
|
if recce_context.adapter_type == "dbt":
|
|
143
143
|
props["adapter_type"] = "DBT"
|
|
144
|
+
# Add dbt warehouse type only for dbt adapter
|
|
145
|
+
try:
|
|
146
|
+
from recce.adapter.dbt_adapter import DbtAdapter
|
|
147
|
+
|
|
148
|
+
dbt_adapter: DbtAdapter = recce_context.adapter
|
|
149
|
+
warehouse_type = dbt_adapter.adapter.type()
|
|
150
|
+
props["warehouse_type"] = warehouse_type
|
|
151
|
+
except Exception:
|
|
152
|
+
# If we can't get the warehouse type, skip it
|
|
153
|
+
pass
|
|
144
154
|
elif recce_context.adapter_type == "sqlmesh":
|
|
145
155
|
props["adapter_type"] = "SQLMesh"
|
|
146
156
|
|
recce/github.py
CHANGED
|
@@ -198,7 +198,7 @@ def get_github_codespace_available_at(codespace):
|
|
|
198
198
|
return None
|
|
199
199
|
|
|
200
200
|
def search_in_file(file_path, search_string):
|
|
201
|
-
with open(file_path, "r") as f:
|
|
201
|
+
with open(file_path, "r", encoding="utf-8") as f:
|
|
202
202
|
for _, line in enumerate(f, 1):
|
|
203
203
|
if search_string in line:
|
|
204
204
|
return line
|