recce-nightly 0.62.0.20250417__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 +27 -22
- recce/adapter/base.py +11 -14
- recce/adapter/dbt_adapter/__init__.py +845 -461
- recce/adapter/dbt_adapter/dbt_version.py +3 -0
- recce/adapter/sqlmesh_adapter.py +24 -35
- recce/apis/check_api.py +59 -42
- recce/apis/check_events_api.py +353 -0
- recce/apis/check_func.py +41 -35
- recce/apis/run_api.py +25 -19
- recce/apis/run_func.py +64 -25
- recce/artifact.py +119 -51
- recce/cli.py +1301 -324
- recce/config.py +43 -34
- recce/connect_to_cloud.py +138 -0
- recce/core.py +55 -47
- recce/data/404/index.html +2 -0
- recce/data/404.html +2 -1
- 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.f9d58125.woff +0 -0
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.076c2a93.woff2 +0 -0
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.a4fa76b5.woff +0 -0
- recce/data/_next/static/media/montserrat-latin-800-normal.cde454cc.woff2 +0 -0
- recce/data/_next/static/media/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.b671449b.woff +0 -0
- recce/data/_next/static/media/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 +68 -0
- 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/imgs/reload-image.svg +4 -0
- recce/data/index.html +2 -27
- recce/data/index.txt +32 -7
- 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/diff.py +6 -12
- recce/event/CONFIG.bak +1 -0
- recce/event/__init__.py +86 -74
- recce/event/collector.py +33 -22
- recce/event/track.py +49 -27
- recce/exceptions.py +1 -1
- recce/git.py +7 -7
- recce/github.py +57 -53
- recce/mcp_server.py +725 -0
- recce/models/__init__.py +4 -1
- recce/models/check.py +438 -21
- recce/models/run.py +1 -0
- recce/models/types.py +134 -28
- recce/pull_request.py +27 -25
- recce/run.py +179 -122
- recce/server.py +394 -104
- 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 +196 -149
- recce/tasks/__init__.py +19 -3
- recce/tasks/core.py +11 -13
- recce/tasks/dataframe.py +82 -18
- recce/tasks/histogram.py +69 -34
- recce/tasks/lineage.py +2 -2
- recce/tasks/profile.py +152 -86
- recce/tasks/query.py +180 -89
- recce/tasks/rowcount.py +37 -31
- recce/tasks/schema.py +18 -15
- recce/tasks/top_k.py +35 -35
- recce/tasks/utils.py +147 -0
- recce/tasks/valuediff.py +247 -155
- recce/util/__init__.py +3 -0
- recce/util/api_token.py +80 -0
- recce/util/breaking.py +105 -100
- recce/util/cll.py +274 -219
- 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 +22 -17
- recce/util/lineage.py +65 -16
- recce/util/logger.py +1 -1
- recce/util/onboarding_state.py +45 -0
- recce/util/perf_tracking.py +85 -0
- recce/util/recce_cloud.py +347 -72
- recce/util/singleton.py +4 -4
- recce/util/startup_perf.py +121 -0
- recce/yaml/__init__.py +7 -10
- recce_nightly-1.30.0.20251221.dist-info/METADATA +195 -0
- recce_nightly-1.30.0.20251221.dist-info/RECORD +183 -0
- {recce_nightly-0.62.0.20250417.dist-info → recce_nightly-1.30.0.20251221.dist-info}/WHEEL +1 -2
- recce/data/_next/static/chunks/1f229bf6-d9fe92e56db8d93b.js +0 -1
- recce/data/_next/static/chunks/29e3cc0d-8c150e37dff9631b.js +0 -1
- recce/data/_next/static/chunks/36e1c10d-bb0210cbd6573a8d.js +0 -1
- recce/data/_next/static/chunks/3998a672-eaad84bdd88cc73e.js +0 -1
- recce/data/_next/static/chunks/450c323b-1bb5db526e54435a.js +0 -1
- recce/data/_next/static/chunks/47d8844f-79a1b53c66a7d7ec.js +0 -1
- recce/data/_next/static/chunks/500-e51c92a025a51234.js +0 -65
- recce/data/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js +0 -1
- recce/data/_next/static/chunks/700-3b65fc3666820d00.js +0 -2
- recce/data/_next/static/chunks/7a8a3e83-d7fa409d97b38b2b.js +0 -1
- recce/data/_next/static/chunks/7f27ae6c-413f6b869a04183a.js +0 -1
- recce/data/_next/static/chunks/9746af58-d74bef4d03eea6ab.js +0 -1
- recce/data/_next/static/chunks/a30376cd-7d806e1602f2dc3a.js +0 -1
- recce/data/_next/static/chunks/app/_not-found/page-8a886fa0855c3105.js +0 -1
- recce/data/_next/static/chunks/app/layout-9102e22cb73f74d6.js +0 -1
- recce/data/_next/static/chunks/app/page-9adc25782272ed2e.js +0 -1
- recce/data/_next/static/chunks/b63b1b3f-7395c74e11a14e95.js +0 -1
- recce/data/_next/static/chunks/c132bf7d-8102037f9ccf372a.js +0 -1
- recce/data/_next/static/chunks/c1ceaa8b-a1e442154d23515e.js +0 -1
- recce/data/_next/static/chunks/cd9f8d63-cf0d5a7b0f7a92e8.js +0 -54
- recce/data/_next/static/chunks/ce84277d-f42c2c58049cea2d.js +0 -1
- recce/data/_next/static/chunks/e24bf851-0f8cbc99656833e7.js +0 -1
- recce/data/_next/static/chunks/fee69bc6-f17d36c080742e74.js +0 -1
- recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -1
- recce/data/_next/static/chunks/main-a0859f1f36d0aa6c.js +0 -1
- recce/data/_next/static/chunks/main-app-0225a2255968e566.js +0 -1
- recce/data/_next/static/chunks/pages/_app-d5672bf3d8b6371b.js +0 -1
- recce/data/_next/static/chunks/pages/_error-ed75be3f25588548.js +0 -1
- recce/data/_next/static/chunks/webpack-567d72f0bc0820d5.js +0 -1
- recce/data/_next/static/css/c9ecb46a4b21c126.css +0 -14
- recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
- recce/data/_next/static/media/montserrat-cyrillic-800-normal.31d693bb.woff +0 -0
- recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.7e2c1e62.woff +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-800-normal.97e20d5e.woff +0 -0
- recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
- recce/data/_next/static/media/montserrat-latin-ext-800-normal.aff52ab0.woff +0 -0
- recce/data/_next/static/media/montserrat-vietnamese-800-normal.5f21869b.woff +0 -0
- recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
- recce/data/_next/static/qiyFlux77VkhxiceAJe_F/_buildManifest.js +0 -1
- recce/state.py +0 -753
- recce_nightly-0.62.0.20250417.dist-info/METADATA +0 -311
- recce_nightly-0.62.0.20250417.dist-info/RECORD +0 -139
- recce_nightly-0.62.0.20250417.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 -13
- tests/adapter/dbt_adapter/dbt_test_helper.py +0 -283
- tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -40
- tests/adapter/dbt_adapter/test_dbt_cll.py +0 -102
- tests/adapter/dbt_adapter/test_selector.py +0 -177
- tests/tasks/__init__.py +0 -0
- tests/tasks/conftest.py +0 -4
- tests/tasks/test_histogram.py +0 -137
- tests/tasks/test_lineage.py +0 -42
- tests/tasks/test_preset_checks.py +0 -50
- tests/tasks/test_profile.py +0 -73
- tests/tasks/test_query.py +0 -151
- tests/tasks/test_row_count.py +0 -116
- tests/tasks/test_schema.py +0 -99
- tests/tasks/test_top_k.py +0 -73
- tests/tasks/test_valuediff.py +0 -74
- tests/test_cli.py +0 -122
- tests/test_config.py +0 -45
- tests/test_core.py +0 -27
- tests/test_dbt.py +0 -36
- tests/test_pull_request.py +0 -130
- tests/test_server.py +0 -98
- tests/test_state.py +0 -123
- tests/test_summary.py +0 -57
- /recce/data/_next/static/chunks/{polyfills-42372ed130431b0a.js → a6dad97d9634a72d.js} +0 -0
- /recce/data/_next/static/{qiyFlux77VkhxiceAJe_F → nX-Uz0AH6Tc6hIQUFGqaB}/_ssgManifest.js +0 -0
- {recce_nightly-0.62.0.20250417.dist-info → recce_nightly-1.30.0.20251221.dist-info}/entry_points.txt +0 -0
- {recce_nightly-0.62.0.20250417.dist-info → recce_nightly-1.30.0.20251221.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
import os
|
|
3
|
+
import time
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from typing import Dict, Optional
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class StartupPerfTracker:
|
|
10
|
+
"""
|
|
11
|
+
Tracks startup performance metrics for Recce server.
|
|
12
|
+
All timing values are in milliseconds.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# All timings in ms (populated by @track_timing decorator)
|
|
16
|
+
timings: Dict[str, float] = field(default_factory=dict)
|
|
17
|
+
|
|
18
|
+
# Artifact sizes in bytes
|
|
19
|
+
artifact_sizes: Dict[str, int] = field(default_factory=dict)
|
|
20
|
+
|
|
21
|
+
# Metadata
|
|
22
|
+
cloud_mode: bool = False
|
|
23
|
+
catalog_type: Optional[str] = None # github, preview, session
|
|
24
|
+
adapter_type: Optional[str] = None
|
|
25
|
+
node_count: Optional[int] = None
|
|
26
|
+
command: Optional[str] = None # server, read-only, preview
|
|
27
|
+
|
|
28
|
+
def record_timing(self, name: str, elapsed_ms: float):
|
|
29
|
+
"""Record timing for a named phase or artifact"""
|
|
30
|
+
self.timings[name] = elapsed_ms
|
|
31
|
+
|
|
32
|
+
def set_cloud_mode(self, cloud_mode: bool):
|
|
33
|
+
self.cloud_mode = cloud_mode
|
|
34
|
+
|
|
35
|
+
def set_catalog_type(self, catalog_type: str):
|
|
36
|
+
self.catalog_type = catalog_type
|
|
37
|
+
|
|
38
|
+
def set_artifact_size(self, name: str, size_bytes: int):
|
|
39
|
+
"""Set artifact size by name"""
|
|
40
|
+
self.artifact_sizes[name] = size_bytes
|
|
41
|
+
|
|
42
|
+
def to_dict(self) -> Dict:
|
|
43
|
+
return {
|
|
44
|
+
"timings": self.timings if self.timings else None,
|
|
45
|
+
"artifact_sizes": self.artifact_sizes if self.artifact_sizes else None,
|
|
46
|
+
"cloud_mode": self.cloud_mode,
|
|
47
|
+
"catalog_type": self.catalog_type,
|
|
48
|
+
"adapter_type": self.adapter_type,
|
|
49
|
+
"node_count": self.node_count,
|
|
50
|
+
"command": self.command,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# Module-level singleton for tracking startup across the call stack
|
|
55
|
+
_startup_tracker: Optional[StartupPerfTracker] = None
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def get_startup_tracker() -> Optional[StartupPerfTracker]:
|
|
59
|
+
"""Get the global startup tracker instance"""
|
|
60
|
+
return _startup_tracker
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def set_startup_tracker(tracker: StartupPerfTracker):
|
|
64
|
+
"""Set the global startup tracker instance"""
|
|
65
|
+
global _startup_tracker
|
|
66
|
+
_startup_tracker = tracker
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def clear_startup_tracker():
|
|
70
|
+
"""Clear the global startup tracker instance"""
|
|
71
|
+
global _startup_tracker
|
|
72
|
+
_startup_tracker = None
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def track_timing(timing_name: str = None, *, record_size: bool = False):
|
|
76
|
+
"""
|
|
77
|
+
Decorator factory to track timing for any operation.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
timing_name: Name for the timing. If None, expects 'timing_name' kwarg at call time.
|
|
81
|
+
record_size: If True, record file size from 'path' kwarg.
|
|
82
|
+
|
|
83
|
+
Usage:
|
|
84
|
+
# Name at decoration time
|
|
85
|
+
@track_timing("state_loader_init")
|
|
86
|
+
def create_state_loader_by_args(...):
|
|
87
|
+
...
|
|
88
|
+
|
|
89
|
+
# Name at call time (for reusable functions)
|
|
90
|
+
@track_timing(record_size=True)
|
|
91
|
+
def load_manifest(path=None, data=None):
|
|
92
|
+
...
|
|
93
|
+
|
|
94
|
+
load_manifest(path=p, timing_name="curr_manifest")
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
def decorator(func):
|
|
98
|
+
@functools.wraps(func)
|
|
99
|
+
def wrapper(*args, **kwargs):
|
|
100
|
+
# Get timing name from decorator arg or from kwargs
|
|
101
|
+
name = timing_name
|
|
102
|
+
if name is None:
|
|
103
|
+
name = kwargs.pop("timing_name", None)
|
|
104
|
+
|
|
105
|
+
path = kwargs.get("path") or (args[0] if args else None)
|
|
106
|
+
|
|
107
|
+
start = time.perf_counter_ns()
|
|
108
|
+
result = func(*args, **kwargs)
|
|
109
|
+
elapsed_ms = (time.perf_counter_ns() - start) / 1_000_000
|
|
110
|
+
|
|
111
|
+
if tracker := get_startup_tracker():
|
|
112
|
+
if name:
|
|
113
|
+
tracker.record_timing(name, elapsed_ms)
|
|
114
|
+
if record_size and name and path and os.path.exists(path):
|
|
115
|
+
tracker.set_artifact_size(name, os.path.getsize(path))
|
|
116
|
+
|
|
117
|
+
return result
|
|
118
|
+
|
|
119
|
+
return wrapper
|
|
120
|
+
|
|
121
|
+
return decorator
|
recce/yaml/__init__.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
from typing import Any, Callable
|
|
2
2
|
|
|
3
3
|
from ruamel import yaml
|
|
4
|
-
from ruamel.yaml import CommentedMap as _cm
|
|
4
|
+
from ruamel.yaml import CommentedMap as _cm
|
|
5
|
+
from ruamel.yaml import CommentedSeq as _cs
|
|
5
6
|
|
|
6
7
|
_yaml = yaml.YAML()
|
|
7
|
-
_safe_yaml = yaml.YAML(typ=
|
|
8
|
+
_safe_yaml = yaml.YAML(typ="safe")
|
|
8
9
|
|
|
9
10
|
CommentedMap = _cm
|
|
10
11
|
CommentedSeq = _cs
|
|
@@ -27,15 +28,13 @@ def safe_load(stream, version=None) -> Any:
|
|
|
27
28
|
return _safe_yaml.load(stream)
|
|
28
29
|
|
|
29
30
|
|
|
30
|
-
def dump(
|
|
31
|
-
data, stream: Any = None, *, transform: Any = None
|
|
32
|
-
) -> Any:
|
|
31
|
+
def dump(data, stream: Any = None, *, transform: Any = None) -> Any:
|
|
33
32
|
return _yaml.dump(data, stream, transform=transform)
|
|
34
33
|
|
|
35
34
|
|
|
36
35
|
def safe_load_yaml(file_path):
|
|
37
36
|
try:
|
|
38
|
-
with open(file_path,
|
|
37
|
+
with open(file_path, "r", encoding="utf-8") as f:
|
|
39
38
|
payload = safe_load(f)
|
|
40
39
|
except yaml.YAMLError as e:
|
|
41
40
|
print(e)
|
|
@@ -46,7 +45,7 @@ def safe_load_yaml(file_path):
|
|
|
46
45
|
|
|
47
46
|
|
|
48
47
|
def round_trip_load_yaml(file_path):
|
|
49
|
-
with open(file_path,
|
|
48
|
+
with open(file_path, "r", encoding="utf-8") as f:
|
|
50
49
|
try:
|
|
51
50
|
payload = load(f)
|
|
52
51
|
except yaml.YAMLError as e:
|
|
@@ -55,7 +54,5 @@ def round_trip_load_yaml(file_path):
|
|
|
55
54
|
return payload
|
|
56
55
|
|
|
57
56
|
|
|
58
|
-
def round_trip_dump(
|
|
59
|
-
data: Any,
|
|
60
|
-
stream=None):
|
|
57
|
+
def round_trip_dump(data: Any, stream=None):
|
|
61
58
|
return yaml.round_trip_dump(data, stream)
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: recce-nightly
|
|
3
|
+
Version: 1.30.0.20251221
|
|
4
|
+
Summary: Environment diff tool for dbt
|
|
5
|
+
Project-URL: Bug Tracker, https://github.com/InfuseAI/recce/issues
|
|
6
|
+
Project-URL: Homepage, https://github.com/InfuseAI/recce
|
|
7
|
+
Author-email: InfuseAI Dev Team <dev@infuseai.io>
|
|
8
|
+
License: Apache-2.0
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Requires-Python: >=3.9
|
|
19
|
+
Requires-Dist: boto3
|
|
20
|
+
Requires-Dist: click>=7.1
|
|
21
|
+
Requires-Dist: deepdiff<9.0,>=7.0
|
|
22
|
+
Requires-Dist: fastapi
|
|
23
|
+
Requires-Dist: gitpython
|
|
24
|
+
Requires-Dist: itsdangerous
|
|
25
|
+
Requires-Dist: jinja2
|
|
26
|
+
Requires-Dist: packaging
|
|
27
|
+
Requires-Dist: portalocker
|
|
28
|
+
Requires-Dist: py-markdown-table
|
|
29
|
+
Requires-Dist: pydantic
|
|
30
|
+
Requires-Dist: pygithub
|
|
31
|
+
Requires-Dist: python-dateutil
|
|
32
|
+
Requires-Dist: python-multipart
|
|
33
|
+
Requires-Dist: pytz
|
|
34
|
+
Requires-Dist: requests>=2.28.1
|
|
35
|
+
Requires-Dist: rich>=12.0.0
|
|
36
|
+
Requires-Dist: ruamel-yaml>=0.18.6
|
|
37
|
+
Requires-Dist: sentry-sdk
|
|
38
|
+
Requires-Dist: sqlglot<28.0,>=27.29.0
|
|
39
|
+
Requires-Dist: uvicorn
|
|
40
|
+
Requires-Dist: watchdog
|
|
41
|
+
Requires-Dist: websockets
|
|
42
|
+
Provides-Extra: dev
|
|
43
|
+
Requires-Dist: black>=25.1.0; extra == 'dev'
|
|
44
|
+
Requires-Dist: dbt-duckdb; extra == 'dev'
|
|
45
|
+
Requires-Dist: flake8>=7.2.0; extra == 'dev'
|
|
46
|
+
Requires-Dist: httpx; extra == 'dev'
|
|
47
|
+
Requires-Dist: isort>=6.0.1; extra == 'dev'
|
|
48
|
+
Requires-Dist: pandas; extra == 'dev'
|
|
49
|
+
Requires-Dist: pre-commit>=4.2.0; extra == 'dev'
|
|
50
|
+
Requires-Dist: pytest-asyncio<1.0,>=0.23; extra == 'dev'
|
|
51
|
+
Requires-Dist: pytest-cov; extra == 'dev'
|
|
52
|
+
Requires-Dist: pytest-flake8; extra == 'dev'
|
|
53
|
+
Requires-Dist: pytest-mypy; extra == 'dev'
|
|
54
|
+
Requires-Dist: pytest>=4.6; extra == 'dev'
|
|
55
|
+
Requires-Dist: tox; extra == 'dev'
|
|
56
|
+
Requires-Dist: tox-uv; extra == 'dev'
|
|
57
|
+
Requires-Dist: twine; extra == 'dev'
|
|
58
|
+
Provides-Extra: mcp
|
|
59
|
+
Requires-Dist: mcp>=1.0.0; (python_version >= '3.10') and extra == 'mcp'
|
|
60
|
+
Description-Content-Type: text/markdown
|
|
61
|
+
|
|
62
|
+
<p align="center">
|
|
63
|
+
<a href="https://reccehq.com">
|
|
64
|
+
<picture>
|
|
65
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://reccehq.com/assets/images/recce-logo-stacked.avif">
|
|
66
|
+
<source media="(prefers-color-scheme: light)" srcset="https://reccehq.com/assets/images/recce-logo-stacked.avif">
|
|
67
|
+
<img alt="Recce: DataRecce.io" src="https://reccehq.com/assets/images/recce-logo-stacked.avif" width="200" style="display: block; margin: 0 auto 20px;">
|
|
68
|
+
</picture>
|
|
69
|
+
</a>
|
|
70
|
+
</p>
|
|
71
|
+
|
|
72
|
+
<h3 align="center">Helping data teams preview, validate, and ship data changes with confidence.</h3>
|
|
73
|
+
|
|
74
|
+
<p align="center">
|
|
75
|
+
<a href="https://pypi.org/project/recce/"><img src="https://img.shields.io/badge/pip_install-recce-006DAD?style=flat-square" alt="install"></a>
|
|
76
|
+
<a href="https://pypi.org/project/recce/"><img src="https://img.shields.io/pypi/v/recce?style=flat-square" alt="pipy"></a>
|
|
77
|
+
<a href="https://pypi.org/project/recce/"><img src="https://img.shields.io/pypi/pyversions/recce?style=flat-square" alt="Python"></a>
|
|
78
|
+
<a href="https://pypi.org/project/recce/#files"><img src="https://img.shields.io/pypi/dw/recce?style=flat-square" alt="downloads"></a>
|
|
79
|
+
<a href="https://github.com/DataRecce/recce/blob/main/LICENSE"><img src="https://img.shields.io/github/license/DataRecce/recce?style=flat-square" alt="license"></a>
|
|
80
|
+
<a href="https://getdbt.slack.com/archives/C05C28V7CPP"><img src="https://img.shields.io/badge/Slack-4A154B?style=flat-square&logo=slack&logoColor=white" alt="Slack"></a>
|
|
81
|
+
<a href="https://discord.com/invite/5zb2aK9KBV"><img src="https://img.shields.io/discord/664381609771925514?color=%237289DA&label=chat&logo=discord&logoColor=white&style=flat-square" alt="InfuseAI Discord Invite"></a>
|
|
82
|
+
</p>
|
|
83
|
+
|
|
84
|
+
<p align="center">
|
|
85
|
+
<a href="https://cal.com/team/recce/chat?utm_source=banner&utm_campaign=oss">
|
|
86
|
+
<img alt="Book us with Cal.com" src="https://cal.com/book-with-cal-light.svg" />
|
|
87
|
+
</a>
|
|
88
|
+
</p>
|
|
89
|
+
|
|
90
|
+
## Trust, Verify, Ship
|
|
91
|
+
|
|
92
|
+
Cut dbt review time by 90% and ship accurate data fast
|
|
93
|
+
|
|
94
|
+
Recce gives data teams a faster, more reliable way to understand, review, and ship changes without all the guesswork or manual overhead.
|
|
95
|
+
|
|
96
|
+
## Quick Start
|
|
97
|
+
|
|
98
|
+
### Installation
|
|
99
|
+
|
|
100
|
+
Recce offers two packages to fit different use cases:
|
|
101
|
+
|
|
102
|
+
**For full local development and Recce Cloud features:**
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
pip install -U recce
|
|
106
|
+
recce server
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**For CI/CD artifact uploads only (lightweight):**
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
pip install -U recce-cloud
|
|
113
|
+
recce-cloud upload
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
The `recce-cloud` package is a lightweight CLI tool designed specifically for CI/CD environments where you only need to upload dbt artifacts to Recce Cloud. It has minimal dependencies and installs faster than the full `recce` package.
|
|
117
|
+
|
|
118
|
+
### Getting Started
|
|
119
|
+
|
|
120
|
+
You can launch Recce in any dbt project in just two commands:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# cd into your dbt project
|
|
124
|
+
pip install -U recce
|
|
125
|
+
recce server
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
(Note: while recce is not version spsecific, `dbt-core` is currently [not compatible with Python 3.13](https://docs.getdbt.com/faqs/Core/install-python-compatibility). Please make sure to use Python 3.10 - 3.12.)
|
|
129
|
+
|
|
130
|
+
This starts Recce locally, where you can explore lineage and run queries. To unlock the full set of diffing tools, such as data comparisons and impact checks, you'll need to prepare two environments to compare against. You can follow our [Getting Started](https://docs.reccehq.com/get-started/) and [5-minute Jaffle Shop tutorial](https://docs.reccehq.com/get-started-jaffle-shop/) to try it out step-by-step.
|
|
131
|
+
|
|
132
|
+
## What You Get
|
|
133
|
+
|
|
134
|
+
Recce gives you a clear, fast way to understand what your data changes are doing and why they matter. It helps you catch problems early, verify metrics, and share your findings with others, all as part of your normal workflow.
|
|
135
|
+
|
|
136
|
+
<a href="https://pr46.demo.reccehq.com/"><img width="1347" alt="readme" src="https://github.com/user-attachments/assets/773e4c3a-0a15-49e0-8d1b-38a55af17cb0" /></a>
|
|
137
|
+
|
|
138
|
+
<a href="https://reccehq.com"><img src="https://docs.reccehq.com/assets/images/1-whats-recce/diff-readme2.png" style="width: 100%; max-width: 600px; display: block; margin: 0 auto 20px;" alt="Model and column level diff"/></a>
|
|
139
|
+
|
|
140
|
+
<a href="https://reccehq.com"><img src="https://docs.reccehq.com/assets/images/1-whats-recce/checklist-readme3.png" style="width: 100%; max-width: 600px; display: block; margin: 0 auto 20px;" alt="Checklist for collaboration"/></a>
|
|
141
|
+
|
|
142
|
+
### Using Recce for Impact Assessment in dbt PR Review
|
|
143
|
+
|
|
144
|
+
- Select nodes in the lineage to perform Checks (diffs) as part of your impact assessment during development or PR
|
|
145
|
+
review.
|
|
146
|
+
- Add Checks to your Checklist to note observed impacts.
|
|
147
|
+
- Share your Checklist with the PR reviewer.
|
|
148
|
+
- (`Recce Cloud`) Automatically sync Check status between Recce Instances
|
|
149
|
+
- (`Recce Cloud`) Block PR merging until all Recce Checks have been approved
|
|
150
|
+
|
|
151
|
+
Read more about using Recce on our [blog](https://blog.reccehq.com).
|
|
152
|
+
|
|
153
|
+
### What’s Included
|
|
154
|
+
|
|
155
|
+
- [Lineage and impact mapping](https://docs.reccehq.com/features/lineage/): Quickly see which models and columns are affected by a change. Navigate lineage down to the column level, and spot breaking changes with clear visual cues.
|
|
156
|
+
- Metric and data comparisons: Use [Profile, Value, Top-K, and Histogram Diffs](https://docs.reccehq.com/features/lineage/#node-details) to compare results before and after changes. Validate things like row counts, category distributions, and numeric ranges without writing extra SQL.
|
|
157
|
+
- [Query diff](https://docs.reccehq.com/features/query/): Write and compare any two queries side by side. This is helpful when validating fixes or reviewing changes with teammates.
|
|
158
|
+
- [Checklist for reviews and approvals](https://docs.reccehq.com/features/checklist/): Turn your validation steps into a checklist. Add notes, rerun checks, and share the results with reviewers or stakeholders. In Recce Cloud, checklists can sync automatically and even block PRs until checks are approved.
|
|
159
|
+
- Secure by design: Recce is [SOC 2 compliant](https://trust.reccehq.com/) to meet enterprise security standards. It runs locally or in your private environment, and your data stays in your warehouse.
|
|
160
|
+
|
|
161
|
+
👉 Want to dive deeper? Check out the [full documentation](https://docs.reccehq.com/).
|
|
162
|
+
|
|
163
|
+
## Recce Cloud
|
|
164
|
+
|
|
165
|
+
Ready to collaborate and move faster as a team? Recce Cloud adds real-time collaboration, automatic checklist sync, and PR gating, so nothing gets merged without a full review.
|
|
166
|
+
|
|
167
|
+
- Share checklists across environments
|
|
168
|
+
- Invite stakeholders to review data changes
|
|
169
|
+
- Block merges until all Checks are approved
|
|
170
|
+
- Launch demo links from your CI with full context
|
|
171
|
+
|
|
172
|
+
Recce Cloud is a hosted version of Recce that standardizes your workflow, keeps teams aligned, and reduces errors—so you can ship data changes with confidence.
|
|
173
|
+
👉 [View Pricing and Plans](https://reccehq.com/pricing)
|
|
174
|
+
|
|
175
|
+
## Community & Support
|
|
176
|
+
|
|
177
|
+
Here's where you can get in touch with the Recce team and find support, add a subscribe to our newsletter option as well:
|
|
178
|
+
|
|
179
|
+
- [chat on our website](https://reccehq.com/). We welcome you to start a chat or drop us a note. Our team monitors the chat box and will follow up soon.
|
|
180
|
+
- [Our discord](https://discord.com/invite/VpwXRC34jz)
|
|
181
|
+
- [dbt Slack](https://www.getdbt.com/community/join-the-community) in the [#tools-recce](https://getdbt.slack.com/archives/C05C28V7CPP) channel
|
|
182
|
+
- Email us [help@reccehq.com](mailto:help@reccehq.com)
|
|
183
|
+
|
|
184
|
+
If you believe you have found a bug on our open source, or there is some missing functionality in Recce, please open a [GitHub Issue](https://github.com/DataRecce/recce/issues).
|
|
185
|
+
|
|
186
|
+
## Recce on the web
|
|
187
|
+
|
|
188
|
+
You can follow along with news about Recce and blogs from our team in the following places:
|
|
189
|
+
|
|
190
|
+
- [RecceHQ.com](https://reccehq.com/)
|
|
191
|
+
- [LinkedIn](https://www.linkedin.com/company/datarecce)
|
|
192
|
+
- [Blog](https://blog.reccehq.com/)
|
|
193
|
+
- [@datarecce](https://x.com/DataRecce) on Twitter/X
|
|
194
|
+
- [@DataRecce@mastodon.social](https://mastodon.social/@DataRecce) on Mastodon
|
|
195
|
+
- [@datarecce.bsky.social](https://bsky.app/profile/datarecce.bsky.social) on BlueSky
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
recce/VERSION,sha256=9izsnSUBqid_33HZ0DBeqsxiw1PQui05hbqXaxu7Ucw,16
|
|
2
|
+
recce/__init__.py,sha256=gT5G7sJ78C1GHAWr4pna6UvVNxPKs29_EgFS_ia3DT4,2554
|
|
3
|
+
recce/artifact.py,sha256=zksgrKEONdMmBRgM59gzf6srsr0As_UADZTQrWfC2cE,9759
|
|
4
|
+
recce/cli.py,sha256=TY2l_BKVVe_bdr0t0J5xEfo-N3irbTHCuspVB0yTDs8,61119
|
|
5
|
+
recce/config.py,sha256=noWimlOdGHAtBhNoApK5gRTQMwNPmUGAmZu39MV7szo,4697
|
|
6
|
+
recce/connect_to_cloud.py,sha256=CT7ELcVCTNa9ukSp_gMrJ0Av2UCUpF9H03tIk9y7U-4,4768
|
|
7
|
+
recce/core.py,sha256=Fph2kodFqzXy3cob80M9-nPVcv-Xxzme-E-bKFJ4cBQ,10754
|
|
8
|
+
recce/diff.py,sha256=L2_bzQ3__PO-0aeir8PHF8FvSOUmQ8WcDXgML1-mHdY,748
|
|
9
|
+
recce/exceptions.py,sha256=SclQ678GrHGjw7p_ZFJ3vZaL_yMU5xABeIAm2u_W2bk,592
|
|
10
|
+
recce/git.py,sha256=8Eg-6NzL-KjA3rT-ibbAyaCwGlzV0JqH3yGikrJNMDA,2344
|
|
11
|
+
recce/github.py,sha256=vIwHTpB8YWEUcHQlW0nToUUKmGGO0NcmB_Q5RvxQLLE,7438
|
|
12
|
+
recce/mcp_server.py,sha256=0CRfMaPOgxV_Fji4EWy6vBgg0SpCV0o7xUnpGTnGaKQ,31560
|
|
13
|
+
recce/pull_request.py,sha256=dLHsdiMtL4NC6Vkwp8Mq4baJmnqbm19lfiDti9MREN0,3850
|
|
14
|
+
recce/run.py,sha256=_PQeeCQDWqAyTQdEoydzY5_hfEg7d6-WH5quCZzkGvo,14616
|
|
15
|
+
recce/server.py,sha256=x_6YK-8qb6aaGSmBMhq-CUxTcEDxnT04U2USrecHUNs,28605
|
|
16
|
+
recce/summary.py,sha256=JRQxHLdeCUomGXmeyt9oOydosaKtlR0jGywI5xlocno,20245
|
|
17
|
+
recce/adapter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
recce/adapter/base.py,sha256=T_JNeLHgiHSaegw-DbrvHOaYjMyZcjj2Qtg5cWh_fco,3548
|
|
19
|
+
recce/adapter/sqlmesh_adapter.py,sha256=IU3N-F6ToDoO7_bV5vsG8pmTuDcbFtewTIuCxedTaRM,5046
|
|
20
|
+
recce/adapter/dbt_adapter/__init__.py,sha256=IsmxDxiammhZrwPB6M7mL56gRotr4UySbn3ZW8Vw9oE,68041
|
|
21
|
+
recce/adapter/dbt_adapter/dbt_version.py,sha256=M7aedZIWslXnJsryK8Ki4OL_t2oAKxy4uE2pRwfWIkk,1228
|
|
22
|
+
recce/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
+
recce/apis/check_api.py,sha256=bNqzZmH1O9l3NFzmcKs9NEqM0O8wQHUd1xLI5gCOtew,6479
|
|
24
|
+
recce/apis/check_events_api.py,sha256=_NCL-JMHVtc7WnWi5TsGctitRQhw55x0C20shiixEbM,10561
|
|
25
|
+
recce/apis/check_func.py,sha256=inDJc1WL_HdDEKUWU3fjQ5YT7DI9o3oJBtifNhBF3Uo,4219
|
|
26
|
+
recce/apis/run_api.py,sha256=eOaxOxXDkH59uqGCd4blld7edavUx7JU_DCd2WAYrL8,3416
|
|
27
|
+
recce/apis/run_func.py,sha256=8twHQxbc75RTMcdSUEH4bLn1Lu6JGpdZ9Ap6BtqH_Sc,9015
|
|
28
|
+
recce/data/404.html,sha256=UVNZXi99MpSwgO_vtvgSvamUFMztzZOcsuHPzMDZR-k,26886
|
|
29
|
+
recce/data/__next.@lineage.!KHNsb3Qp.__PAGE__.txt,sha256=aBQtd8X9kTehIIGJranZKTIU4FmHdyllSmLZ3dDtdTo,1268
|
|
30
|
+
recce/data/__next.@lineage.!KHNsb3Qp.txt,sha256=-HntdvSmiL0r_eX1h1QXLmOcblb0eUVznxNWTL67Uw8,434
|
|
31
|
+
recce/data/__next.__PAGE__.txt,sha256=uIPnIZNdKBxZ7kM_lJeVQTQQAZGwUNplOu2n9eRr9tE,430
|
|
32
|
+
recce/data/__next._full.txt,sha256=2yv9-t12KqNsZ4VNce7Y4_cj0ndS-Ez6gWKXx3Q2ZWU,10155
|
|
33
|
+
recce/data/__next._head.txt,sha256=bwlMRNh8v9PVquYO1AJmVfA9liNOA0ORjXHmGBZMQLU,1088
|
|
34
|
+
recce/data/__next._index.txt,sha256=ckQvSQcHluZ3xmn6eqizq6g6Dn0KVUSs56xsO-6EHyQ,8070
|
|
35
|
+
recce/data/__next._tree.txt,sha256=214v8neRplMPJ9WCQmIS72_pqXEY92rJbkd_0Lfqmqo,900
|
|
36
|
+
recce/data/auth_callback.html,sha256=H-XfdlAFiw5VU2RpKBVQbwh1AIqJrPHrFA0S09nNJZA,94779
|
|
37
|
+
recce/data/favicon.ico,sha256=B2mBumUOnzvUrXrqNkrc5QfdDXjzEXRcWkWur0fJ6sM,2565
|
|
38
|
+
recce/data/index.html,sha256=BbCH-R30b2FPtUiz3HlfN9YAXF0Bh3xYoTRlWLE-5Rc,28941
|
|
39
|
+
recce/data/index.txt,sha256=2yv9-t12KqNsZ4VNce7Y4_cj0ndS-Ez6gWKXx3Q2ZWU,10155
|
|
40
|
+
recce/data/404/index.html,sha256=UVNZXi99MpSwgO_vtvgSvamUFMztzZOcsuHPzMDZR-k,26886
|
|
41
|
+
recce/data/_next/static/chunks/025a7e3e3f9f40ae.js,sha256=rOc8WokLfdpWrnNxuIq_fq4tfP0VP8DwzBMJZ43H-50,174692
|
|
42
|
+
recce/data/_next/static/chunks/0ce56d67ef5779ca.js,sha256=0aOpQ4EQOrCPh9lQAZiVJLE-Q7zVgU3kJuKhnUvt1y0,93091
|
|
43
|
+
recce/data/_next/static/chunks/1a6a78780155dac7.js,sha256=CdOegRmpUUNCCqhVrkNljexLd1jM8W6gPiUyN5OJ0PA,172887
|
|
44
|
+
recce/data/_next/static/chunks/1de8485918b9182a.css,sha256=rt7z52vPIrlyx9aKsNuh8bEjVTU-C7m7m3uztp0zD-I,15538
|
|
45
|
+
recce/data/_next/static/chunks/1e4b1b50d1e34993.js,sha256=Ars9KX22w8WR2FdA8jg9Es7en-aeCZozcep40cLj550,29737
|
|
46
|
+
recce/data/_next/static/chunks/206d5d181e4c738e.js,sha256=Rs3VpgT5XONFfJQ_Z-P6BbU2OgbTB9Yp7lcBcMjVF3I,20116
|
|
47
|
+
recce/data/_next/static/chunks/2c357efc34c5b859.js,sha256=_7ZIusm3-Klwk6lOmKPUlPdxraCNw1lUA-lUU7lH0Ps,405348
|
|
48
|
+
recce/data/_next/static/chunks/2e9d95d2d48c479c.js,sha256=FKL5fPCCvJ1bUnDx721jrS4VIgNQZXn0TQcgvR0biko,27948
|
|
49
|
+
recce/data/_next/static/chunks/2f016dc4a3edad2e.js,sha256=wuHBAbH8qRPC3bMZSco9NpI0FHtqxym6MWmHxy5Qu6k,84376
|
|
50
|
+
recce/data/_next/static/chunks/313251962d698f7c.js,sha256=yIGfATfAvt9D9pzZm6EB2woCKQbFSB4Px3qqXoHIU24,440
|
|
51
|
+
recce/data/_next/static/chunks/3a9f021f38eb5574.css,sha256=SXXGi5Mue-CmYS4h6GKVgCwCAwb1JP9YIH0KP5rOO3I,12396
|
|
52
|
+
recce/data/_next/static/chunks/40079da8d2b8f651.js,sha256=NQi4p_6u2WaQQUU_BYpaEboqhAK26_8uR_Ga71gEpaE,15512
|
|
53
|
+
recce/data/_next/static/chunks/4599182bffb64661.js,sha256=f_pkryuB1c4EkOzDjSrcvTAjzgA1qrc-zpV_j_CXy4I,80248
|
|
54
|
+
recce/data/_next/static/chunks/4e62f6e184173580.js,sha256=3zVhR6h7yw16S5Fku4Be8kBm8SbK5hTvqwBDt3WXHMY,29737
|
|
55
|
+
recce/data/_next/static/chunks/5c4dfb0d09eaa401.js,sha256=0bySikUAHpLgNOi_9c7Kp7mZi3xkGw2NwRoWZqXO-oY,7219
|
|
56
|
+
recce/data/_next/static/chunks/69e4f06ccfdfc3ac.js,sha256=bDd7rdLQ3l0ERP_R75iC6KJr9LOQBX-4Lh-QW0aVvmE,12881
|
|
57
|
+
recce/data/_next/static/chunks/6b206cb4707d6bee.js,sha256=B-Ep9aZyeBH1zA7l1yXk9gjdOsFgki_zqe3GUPgd-BM,440
|
|
58
|
+
recce/data/_next/static/chunks/6d8557f062aa4386.css,sha256=MlgjxPGfcm3dWpwn8RZQaP4YtoIUW6M62XKopFlYtis,2957
|
|
59
|
+
recce/data/_next/static/chunks/7fbe3650bd83b6b5.js,sha256=w7mKQG-6o4Pv504eL56DSdqlL0-tdpMcNpTZFwwTpmA,4951
|
|
60
|
+
recce/data/_next/static/chunks/83fa823a825674f6.js,sha256=ZB-GXtRvNiziwDOzRWAzeuNSXATAF4XF-LFdNJSQAJY,30746
|
|
61
|
+
recce/data/_next/static/chunks/848a6c9b5f55f7ed.js,sha256=R699K85Acm9as9890ypfbrU9NVCiShRlpjJ40Ra2VXY,1273
|
|
62
|
+
recce/data/_next/static/chunks/859462b0858aef88.css,sha256=uSRJVK5WQZu_EXy-BtMLYkQVU8ies8oeGYhRSe9SH-c,8572
|
|
63
|
+
recce/data/_next/static/chunks/923964f18c87d0f1.css,sha256=vB4QbU4MAeW0I6PF1Wm-yglXwXrX6xf-ru7hFk1EnuY,1799
|
|
64
|
+
recce/data/_next/static/chunks/939390f911895d7c.js,sha256=JEBd-3jSCEieJgBGrFV4inCMf9ZRYORqG5hirMPtZ9s,172887
|
|
65
|
+
recce/data/_next/static/chunks/99a9817237a07f43.js,sha256=RKul9jIW0h5M7cizGBxy6V0sHKUbEiyl4JgTiL0Zca8,29737
|
|
66
|
+
recce/data/_next/static/chunks/9fed8b4b2b924054.js,sha256=6T4ZIAjWJDZNU4e-TH8oppnTWAVkMTvVSYNYgaXYHbI,1785127
|
|
67
|
+
recce/data/_next/static/chunks/a6dad97d9634a72d.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
|
|
68
|
+
recce/data/_next/static/chunks/b6949f6c5892110c.js,sha256=3JV0fQPqn7OL5eIqzH2pmsUybKesfC12yrmecIJGZPM,1468
|
|
69
|
+
recce/data/_next/static/chunks/b851a1d3f8149828.js,sha256=ac6TuzYwbEpdg_gWMXJWUWY4XPCstxworyodlyPV5pM,119839
|
|
70
|
+
recce/data/_next/static/chunks/c734f9ad957de0b4.js,sha256=fz3ogjk1Wan2duSu7T73mfR5qQZva8Z4MneBkWGNK4M,283
|
|
71
|
+
recce/data/_next/static/chunks/cdde321b0ec75717.js,sha256=Ckh6S8wwqwqbPDaNWd6ENOz9jLLncR7vqpTae3ifpuQ,10305
|
|
72
|
+
recce/data/_next/static/chunks/d0f91117d77ff844.css,sha256=JcMeYq6PYzPIXv6t2e8xoHD2JVVqN49CMDvI5LsmO1o,561
|
|
73
|
+
recce/data/_next/static/chunks/d6c8667911c2500f.js,sha256=sJIIcsWr5TtcfnPnHatN5D_xf0gQRjTAp0GAKoJ5VjU,213907
|
|
74
|
+
recce/data/_next/static/chunks/da8dab68c02752cf.js,sha256=W5O2UV7KaITUdjMHrsAi9xR598guQFHTFY6n26Fw1Is,922023
|
|
75
|
+
recce/data/_next/static/chunks/dc074049c9d12d97.js,sha256=p0gCbQdt2nkL7pxaqL-o6N7zewVGcRkZRBq20L6yVTI,114172
|
|
76
|
+
recce/data/_next/static/chunks/ee7f1a8227342421.js,sha256=buyZVNJX310ZivnAKsznX0rERLhPwvp7CtycV-HEoSU,1389
|
|
77
|
+
recce/data/_next/static/chunks/fa2f4e56c2fccc73.js,sha256=C4Z3H0SGkujIdNYOdeg6mldZ5j8lUb_8nwj0FYqSjJE,440
|
|
78
|
+
recce/data/_next/static/chunks/turbopack-1fad664f62979b93.js,sha256=H5AKpg3wN8ADKK07g97Kz5KBFZn55Yh-hpy9QgsYYRA,9910
|
|
79
|
+
recce/data/_next/static/media/favicon.a8d38d84.ico,sha256=B2mBumUOnzvUrXrqNkrc5QfdDXjzEXRcWkWur0fJ6sM,2565
|
|
80
|
+
recce/data/_next/static/media/montserrat-cyrillic-800-normal.d80d830d.woff2,sha256=6XlujeGVTucujV3iPSa7j1d9S5A6uuH-EduJBCeVFu8,11180
|
|
81
|
+
recce/data/_next/static/media/montserrat-cyrillic-800-normal.f9d58125.woff,sha256=XiXifLCW_CfSR4eNCIxDzi3Cg59f6L34ARTHrw-hoDA,10924
|
|
82
|
+
recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.076c2a93.woff2,sha256=9hQT0vu2HmOb21Pk5Ht7bydZU7QIsY7rCyAPtm1VxM8,12144
|
|
83
|
+
recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.a4fa76b5.woff,sha256=lpODDPTBtDBAla5_gN_MO8RAFRT1bUJQ1XsBGNN3LHA,12036
|
|
84
|
+
recce/data/_next/static/media/montserrat-latin-800-normal.cde454cc.woff2,sha256=uoJvuEwulhV4rfOgi1d4uHkF1EQ0RdHVbYT58VfV6ks,19012
|
|
85
|
+
recce/data/_next/static/media/montserrat-latin-800-normal.d5761935.woff,sha256=JvnmESYLcsQ0Z9Cgq09WxQaOxDHkHZ4wiPp0EXyghtg,20660
|
|
86
|
+
recce/data/_next/static/media/montserrat-latin-ext-800-normal.40ec0659.woff2,sha256=Wfbr63GhTGTtxTjrp4oBDBye9oCmalWew89LDRLbGos,33624
|
|
87
|
+
recce/data/_next/static/media/montserrat-latin-ext-800-normal.b671449b.woff,sha256=1UdAsVT5LZ__hVWZ8WuyQ16miAO5eVOIV0Qy1FCS17c,41688
|
|
88
|
+
recce/data/_next/static/media/montserrat-vietnamese-800-normal.9f7b8541.woff,sha256=IOzp6YFKpjBM18q3jyRJYrgPJpNGDnEehwa3vyleQ6s,7328
|
|
89
|
+
recce/data/_next/static/media/montserrat-vietnamese-800-normal.f9eb854e.woff2,sha256=JPFJw2_X2Eih976ylPgpqHZJJxgdMAL3sCAhKV51-P0,7900
|
|
90
|
+
recce/data/_next/static/nX-Uz0AH6Tc6hIQUFGqaB/_buildManifest.js,sha256=lHbgr9P52mimTm7FhjEZH9PqymLJ9aN351F_6aieWeo,219
|
|
91
|
+
recce/data/_next/static/nX-Uz0AH6Tc6hIQUFGqaB/_clientMiddlewareManifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
|
|
92
|
+
recce/data/_next/static/nX-Uz0AH6Tc6hIQUFGqaB/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
|
93
|
+
recce/data/_not-found/__next._full.txt,sha256=PhoZBUQXVR-EJoamdjd_VnOeZR3IHXCe-eX48FC7VxM,8614
|
|
94
|
+
recce/data/_not-found/__next._head.txt,sha256=L1xYhymj_nSVAZANl4F9LC0Qnzau5XvbqDbYgC6tqBk,1139
|
|
95
|
+
recce/data/_not-found/__next._index.txt,sha256=IoXf-ZyL5uMNoSWvPmj4UCyJVgG-AjtDcp51qqHFivA,4952
|
|
96
|
+
recce/data/_not-found/__next._not-found.__PAGE__.txt,sha256=HDQGlUGx1MSwbXXopa8tZ6iFfN5L3OrTHFrp0dYdbeE,1450
|
|
97
|
+
recce/data/_not-found/__next._not-found.txt,sha256=-HntdvSmiL0r_eX1h1QXLmOcblb0eUVznxNWTL67Uw8,434
|
|
98
|
+
recce/data/_not-found/__next._tree.txt,sha256=Py_I7xg2Os5-P_depVVbM4M4ExR2banEWCyc58RgREA,711
|
|
99
|
+
recce/data/_not-found/index.html,sha256=UVNZXi99MpSwgO_vtvgSvamUFMztzZOcsuHPzMDZR-k,26886
|
|
100
|
+
recce/data/_not-found/index.txt,sha256=PhoZBUQXVR-EJoamdjd_VnOeZR3IHXCe-eX48FC7VxM,8614
|
|
101
|
+
recce/data/checks/__next.@lineage.__DEFAULT__.txt,sha256=z2Tao33BxSgm0G4gLlXXb8IwjcOddo2lAygJDt3aims,1268
|
|
102
|
+
recce/data/checks/__next._full.txt,sha256=tyKoVY7ibQA_gEXyU72P4OJVVJiC-k1vPryZJKvsfw0,11516
|
|
103
|
+
recce/data/checks/__next._head.txt,sha256=bwlMRNh8v9PVquYO1AJmVfA9liNOA0ORjXHmGBZMQLU,1088
|
|
104
|
+
recce/data/checks/__next._index.txt,sha256=ckQvSQcHluZ3xmn6eqizq6g6Dn0KVUSs56xsO-6EHyQ,8070
|
|
105
|
+
recce/data/checks/__next._tree.txt,sha256=coPsVGETp_po-RBaDJFYXgY9bMmgisHXmCWjJAQCCCY,906
|
|
106
|
+
recce/data/checks/__next.checks.__PAGE__.txt,sha256=ojalvfcOvRniwMf0gfvG1upkS9UIKd830vbvGDDHMiw,1559
|
|
107
|
+
recce/data/checks/__next.checks.txt,sha256=-HntdvSmiL0r_eX1h1QXLmOcblb0eUVznxNWTL67Uw8,434
|
|
108
|
+
recce/data/checks/index.html,sha256=oDz2mkzPpC5VIXCDM9vuXhLMbo3CrutkVhrhpDnPURM,32214
|
|
109
|
+
recce/data/checks/index.txt,sha256=tyKoVY7ibQA_gEXyU72P4OJVVJiC-k1vPryZJKvsfw0,11516
|
|
110
|
+
recce/data/imgs/reload-image.svg,sha256=l-jdOsD0OBCpFrVYh1ubO8oajafPuPNs6MYnbanO7K0,840
|
|
111
|
+
recce/data/imgs/feedback/thumbs-down.png,sha256=q9KVIbaZku1TWkYHuleYlO-b6HsTApYh3St5xNHMGMg,10695
|
|
112
|
+
recce/data/imgs/feedback/thumbs-up.png,sha256=VF3BH8bmYEqcSsMDJO57xMqW4t6crCXUXaMlOPgI_OE,10556
|
|
113
|
+
recce/data/lineage/__next.@lineage.__DEFAULT__.txt,sha256=z2Tao33BxSgm0G4gLlXXb8IwjcOddo2lAygJDt3aims,1268
|
|
114
|
+
recce/data/lineage/__next._full.txt,sha256=Pwd-r45GCsScEKzLgpdzT7JoWWAqkKvJhrkiVFaeGaA,11518
|
|
115
|
+
recce/data/lineage/__next._head.txt,sha256=bwlMRNh8v9PVquYO1AJmVfA9liNOA0ORjXHmGBZMQLU,1088
|
|
116
|
+
recce/data/lineage/__next._index.txt,sha256=ckQvSQcHluZ3xmn6eqizq6g6Dn0KVUSs56xsO-6EHyQ,8070
|
|
117
|
+
recce/data/lineage/__next._tree.txt,sha256=7XFDaJbeDAMO8SIS_Fu9OE8CT2DHwCDt6Sw3NIaV5BE,908
|
|
118
|
+
recce/data/lineage/__next.lineage.__PAGE__.txt,sha256=PrqEITviikmQUs-1AYIdbs0ZnlsUeDWTI4Bn-nUam0I,1559
|
|
119
|
+
recce/data/lineage/__next.lineage.txt,sha256=-HntdvSmiL0r_eX1h1QXLmOcblb0eUVznxNWTL67Uw8,434
|
|
120
|
+
recce/data/lineage/index.html,sha256=IQHrmSA39ozDaUYY1h8wqkx7tf0spFuwPoDBpLlIleU,30935
|
|
121
|
+
recce/data/lineage/index.txt,sha256=Pwd-r45GCsScEKzLgpdzT7JoWWAqkKvJhrkiVFaeGaA,11518
|
|
122
|
+
recce/data/logo/recce-logo-white.png,sha256=y3re8iEucJnMUkAkRS2CjWHTlOydyvgWdWjuQKcXDbk,46923
|
|
123
|
+
recce/data/query/__next.@lineage.__DEFAULT__.txt,sha256=z2Tao33BxSgm0G4gLlXXb8IwjcOddo2lAygJDt3aims,1268
|
|
124
|
+
recce/data/query/__next._full.txt,sha256=2cJV-j3R92S-QrSKHRCWrnljVejmNeIXbJVF_nBXcTM,11183
|
|
125
|
+
recce/data/query/__next._head.txt,sha256=bwlMRNh8v9PVquYO1AJmVfA9liNOA0ORjXHmGBZMQLU,1088
|
|
126
|
+
recce/data/query/__next._index.txt,sha256=ckQvSQcHluZ3xmn6eqizq6g6Dn0KVUSs56xsO-6EHyQ,8070
|
|
127
|
+
recce/data/query/__next._tree.txt,sha256=_00IyHkY6CKCkdzvxDunD2RhbqWJKqGE9iZK4B5fMQU,904
|
|
128
|
+
recce/data/query/__next.query.__PAGE__.txt,sha256=SYFe-etxmHi7st8Ehx4jjxD9LSbFr1qA-1vHSZmpM-I,1260
|
|
129
|
+
recce/data/query/__next.query.txt,sha256=-HntdvSmiL0r_eX1h1QXLmOcblb0eUVznxNWTL67Uw8,434
|
|
130
|
+
recce/data/query/index.html,sha256=meq1LXgVUXae41qH6m6c7Q2227zepWwtYGmvjHcU-B0,69114
|
|
131
|
+
recce/data/query/index.txt,sha256=2cJV-j3R92S-QrSKHRCWrnljVejmNeIXbJVF_nBXcTM,11183
|
|
132
|
+
recce/event/CONFIG,sha256=w8_AVcNu_JF-t8lNmjOqtsXbeOawMzpEhkISaMlm-iU,48
|
|
133
|
+
recce/event/CONFIG.bak,sha256=bs3XW12lptHahbwPpu0ibjLsgqlFK0j9UtjbA0IoTec,25
|
|
134
|
+
recce/event/SENTRY_DNS,sha256=nWXZevLC4qDScvNtjs329X13oxqvtFI_Kiu6cfCDOBA,83
|
|
135
|
+
recce/event/__init__.py,sha256=UKo0U0OZTkWsr7QBnCwXOHu7XtY0dhYPRTXuCsX8uIw,8847
|
|
136
|
+
recce/event/collector.py,sha256=6Vvcz9zejNNMytZ_K0HFV_kN6-S5B-SUOglBrlSPBo8,5884
|
|
137
|
+
recce/event/track.py,sha256=3wBzpB8l2gtnDzjh-wJatmLeBbtnP0q-BLQZQVQ23sM,5310
|
|
138
|
+
recce/models/__init__.py,sha256=F7cgALtdWnwv37R0eEgKZ_yBsMwxWnUfo3jAZ3u6qyU,209
|
|
139
|
+
recce/models/check.py,sha256=dSXnPZIUD8z8xy8Z9csSLxVQSOcqjfftqJLxTDw7GoA,16515
|
|
140
|
+
recce/models/run.py,sha256=QK2gvOWvko9YYhd2NLs3BPt5l4MSCZGwpzTAiqx9zJw,1161
|
|
141
|
+
recce/models/types.py,sha256=K8oWuYueqY2C7pKu65wSCaKMglPvtBH5DUkGrSYfFPk,6700
|
|
142
|
+
recce/state/__init__.py,sha256=V1FRPTQJUz-uwI3Cn8wDa5Z9bueVs86MR_1Ti4RGfPc,650
|
|
143
|
+
recce/state/cloud.py,sha256=7a6g9FXPVfq-beHQ8I7STlRMR2Y_peMJnlqysmeM7OY,25987
|
|
144
|
+
recce/state/const.py,sha256=5XwGWEv4RhGucgl1RHWg_67gVY7fV0-jsbZPpfnOCTs,828
|
|
145
|
+
recce/state/local.py,sha256=bZIkl7cAfyYaGgYEr3uD_JLrtwlHBnu8_o1Qz2djQzw,1920
|
|
146
|
+
recce/state/state.py,sha256=EKx4h0unxjC-dt2EGYFUyjKijotKHbE_wdS5AWBEq1k,3645
|
|
147
|
+
recce/state/state_loader.py,sha256=i4mw0nQ75uwB-O42HZvbYSJFkfSW7ak5mIhfapX5vi4,5965
|
|
148
|
+
recce/tasks/__init__.py,sha256=b553AtDHjYROgmMePv_Hv_X3fjh4iEn11gzzpUJz6_o,610
|
|
149
|
+
recce/tasks/core.py,sha256=JFYa1CfgOiRPQ7KVTwMuxJjhMB-pvCwB-xezVt-h3RU,4080
|
|
150
|
+
recce/tasks/dataframe.py,sha256=F9tOIjdJA_mkgzGmqdzfSfmhpJhdDb9DYYpWXAuBOyE,5868
|
|
151
|
+
recce/tasks/histogram.py,sha256=SMdSznzrBdAFvAbhsoUGAK9o0QUMYy00IVbamUVTpBk,13601
|
|
152
|
+
recce/tasks/lineage.py,sha256=_PbY0ZkDr620U8V2olqoX_T9XA0-G8ILt_6m1Q5TfBs,541
|
|
153
|
+
recce/tasks/profile.py,sha256=gMgms9qvdDsihh2aSC6LvCm9ggah4Oq3xjvmCh_exrU,11352
|
|
154
|
+
recce/tasks/query.py,sha256=NBNYRVgrc84NC12bq_daCPQ5HwMknPI_BQzMVsdqH98,14782
|
|
155
|
+
recce/tasks/rowcount.py,sha256=WZ1vNI0YJ40G-DBgx2apjNAhoQg1bvzrtBpUZFou1Nc,9908
|
|
156
|
+
recce/tasks/schema.py,sha256=s7CsmUoKNDx-WM87X_cCOpKieKxqEZITFzQTEq3ZckU,2432
|
|
157
|
+
recce/tasks/top_k.py,sha256=vY3VCBmg61E8I4V-9-hJOv5RCYCmhxl6sHiKR9Zv7eE,5521
|
|
158
|
+
recce/tasks/utils.py,sha256=xuU_5ZfQEZdSnNgxBJPsd-1sZfrraeKSRco7hhy4RKU,4966
|
|
159
|
+
recce/tasks/valuediff.py,sha256=IV2SOBeGMGHMGatmJQe12-Rfjp9y9B9qXaOndCR_EfM,18837
|
|
160
|
+
recce/util/__init__.py,sha256=cDvL3WT32cJR9CUPIJmibwJoyYcB3ZaKBFbOZDyvqP8,95
|
|
161
|
+
recce/util/api_token.py,sha256=iLS3VzLlsTfbXBLDoPPelmVlj6UdcEtGmfxdFQxXXSg,3223
|
|
162
|
+
recce/util/breaking.py,sha256=QMVq2l2fR7gNT4-n4kdhFTPf2NFev-jzecBSw_AwqFg,13086
|
|
163
|
+
recce/util/cache.py,sha256=QB6wzxe0M3jNTwP0M27Ys8F2hF-oda4-LyXXG9THuZQ,646
|
|
164
|
+
recce/util/cll.py,sha256=p8BrsG_1Lm-jXO8n4ulUgFw13C4mN0WjCXZbihDxQrs,13253
|
|
165
|
+
recce/util/io.py,sha256=UTUDncG4habAZZSZ1Y7i7Zpzu6FBtsfWI3y96k-0zkc,3495
|
|
166
|
+
recce/util/lineage.py,sha256=0XXOO05eJ3GPUNX9V9GBQS2iRFXxWZJoJbV7w-jQ0t8,2470
|
|
167
|
+
recce/util/logger.py,sha256=6UgLFkRiur9jJfu2ZRdo4LUvMw4f75V-l-1HT1-sgKo,747
|
|
168
|
+
recce/util/onboarding_state.py,sha256=kwFirKlfXdl5WFkR_nmilqGKFyELNcSPMqYq-by35fk,1991
|
|
169
|
+
recce/util/perf_tracking.py,sha256=FjhrdbbXIgybxS_oPpFsJ9VUDR93d7bUs8VNNqpXNxw,2483
|
|
170
|
+
recce/util/pydantic_model.py,sha256=KumKuyCjbTzEMsKLE4-b-eZfp0gLhYDdmVtw1-hxiJw,587
|
|
171
|
+
recce/util/recce_cloud.py,sha256=fTYOX8_ihvjovlnfPIl2sS-H72JD7v75--OwxDhISK4,18598
|
|
172
|
+
recce/util/singleton.py,sha256=1cU99I0f9tjuMQLMJyLsK1oK3fZJMsO5-TbRHAMXqds,627
|
|
173
|
+
recce/util/startup_perf.py,sha256=SU5yGG6R-U6VYWcbFtzxzNpfzbBqEgwLoQlj5H0E3vU,3764
|
|
174
|
+
recce/util/cloud/__init__.py,sha256=RIaTM5FZSUj1U4pVTJqvzUQxIdPZK-Re1i_vOwi3ECE,335
|
|
175
|
+
recce/util/cloud/base.py,sha256=vGeQK8YZD-bPTwA9mYuaND5qUnd1HZpXeTaoJ0oixXU,3717
|
|
176
|
+
recce/util/cloud/check_events.py,sha256=o8TibA0XxaPUajJaeS5tSafnDn7NdFfmwWILGMW4I5I,6303
|
|
177
|
+
recce/util/cloud/checks.py,sha256=4hxJpPZHzv3w2fEGXXo3PYMhDFPOE77fhqalaHCnpFI,7289
|
|
178
|
+
recce/yaml/__init__.py,sha256=PAym5akbtL24Ag7VR7EW8SS2VINNaJU06esbfe-ek-U,1328
|
|
179
|
+
recce_nightly-1.30.0.20251221.dist-info/METADATA,sha256=1i7otiJHb8NYrmZzVr34Qigiqez-1giWo0Jq_SWS_Uw,10253
|
|
180
|
+
recce_nightly-1.30.0.20251221.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
181
|
+
recce_nightly-1.30.0.20251221.dist-info/entry_points.txt,sha256=oqoY_IiwIqXbgrIsPnlqUqao2eiIeP2dprowkOlmeyg,40
|
|
182
|
+
recce_nightly-1.30.0.20251221.dist-info/licenses/LICENSE,sha256=CQjjMy9aYPhfe8xG_bcpIfKtNkdxLZ5IOb8oPygtUhY,11343
|
|
183
|
+
recce_nightly-1.30.0.20251221.dist-info/RECORD,,
|