recce-nightly 0.61.0.20250413__tar.gz → 0.61.0.20250415__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of recce-nightly might be problematic. Click here for more details.
- {recce_nightly-0.61.0.20250413/recce_nightly.egg-info → recce_nightly-0.61.0.20250415}/PKG-INFO +1 -1
- recce_nightly-0.61.0.20250415/recce/VERSION +1 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/adapter/dbt_adapter/__init__.py +66 -10
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/cli.py +18 -10
- recce_nightly-0.61.0.20250415/recce/data/404.html +1 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/-FZ7AfDqKYJ7K1mEhSe5l/_buildManifest.js +1 -0
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/38610ee6-24a85e2dfb424ddb.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/1f229bf6-d9fe92e56db8d93b.js +1 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/29e3cc0d-6e3b0cf904a6874d.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/29e3cc0d-8c150e37dff9631b.js +1 -1
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/36e1c10d-bb0210cbd6573a8d.js +1 -0
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/3998a672-63fc54b2b517ee2b.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/3998a672-eaad84bdd88cc73e.js +1 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/450c323b-b36e745822edebe2.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/450c323b-1bb5db526e54435a.js +1 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/47d8844f-0516cea2ef568380.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/47d8844f-79a1b53c66a7d7ec.js +1 -1
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/500-e51c92a025a51234.js +65 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/6dc81886-c94b9b91bc2c3caf.js +1 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/700-3b65fc3666820d00.js +2 -0
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/7a8a3e83-dd26fafa0a7421e5.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/7a8a3e83-d7fa409d97b38b2b.js +1 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/7f27ae6c-4ddea120696db611.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/7f27ae6c-413f6b869a04183a.js +1 -1
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/9746af58-d74bef4d03eea6ab.js +1 -0
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/a30376cd-1ad5a3f522da896c.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/a30376cd-7d806e1602f2dc3a.js +1 -1
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/app/_not-found/page-8a886fa0855c3105.js +1 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/app/layout-9102e22cb73f74d6.js +1 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/app/page-635a088390dcb7ac.js +1 -0
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/b63b1b3f-fe714039749c1250.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/b63b1b3f-7395c74e11a14e95.js +1 -1
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/c132bf7d-8102037f9ccf372a.js +1 -0
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/c1ceaa8b-64142a5184f1b8b2.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/c1ceaa8b-a1e442154d23515e.js +1 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/cd9f8d63-543677b0ef49da87.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/cd9f8d63-cf0d5a7b0f7a92e8.js +3 -3
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/ce84277d-f42c2c58049cea2d.js +1 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/e24bf851-0f8cbc99656833e7.js +1 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/fee69bc6-f17d36c080742e74.js +1 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/main-a0859f1f36d0aa6c.js +1 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/main-app-0225a2255968e566.js +1 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/pages/_app-d5672bf3d8b6371b.js +1 -0
- recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/pages/_error-ed75be3f25588548.js +1 -0
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/webpack-8a8709fe9d22c323.js → recce_nightly-0.61.0.20250415/recce/data/_next/static/chunks/webpack-567d72f0bc0820d5.js +1 -1
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/index.html +2 -2
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/index.txt +5 -5
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/models/types.py +10 -2
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/server.py +40 -1
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/state.py +6 -8
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/util/breaking.py +32 -35
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/util/recce_cloud.py +2 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415/recce_nightly.egg-info}/PKG-INFO +1 -1
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce_nightly.egg-info/SOURCES.txt +30 -30
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/test_core.py +1 -1
- recce_nightly-0.61.0.20250413/recce/VERSION +0 -1
- recce_nightly-0.61.0.20250413/recce/data/404.html +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/269-83bbdbcbd0cc1ddb.js +0 -65
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/36e1c10d-800596efe83e74a6.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/6dc81886-9871b611a22bd997.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/783-784ce10322400a48.js +0 -2
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/9746af58-527fd8cbd2d17eee.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/app/_not-found/page-76f691066176b63a.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/app/layout-fdacc83a3bf974a3.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/app/page-35403e208468490c.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/c132bf7d-4cb4c4a123e27340.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/ce84277d-4bca7695ec1ada94.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/e24bf851-5db5db8459b0b291.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/fee69bc6-1df8306af9d11293.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/main-7183c49fe89a1f9b.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/main-app-cfd795a5fe58bf37.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/pages/_app-9f1049bbd7b90455.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/chunks/pages/_error-71ed60313c005df1.js +0 -1
- recce_nightly-0.61.0.20250413/recce/data/_next/static/hD8g5-RYxHasL_ZuMPw1A/_buildManifest.js +0 -1
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/LICENSE +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/README.md +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/adapter/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/adapter/base.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/adapter/dbt_adapter/dbt_version.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/adapter/sqlmesh_adapter.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/apis/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/apis/check_api.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/apis/check_func.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/apis/run_api.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/apis/run_func.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/artifact.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/config.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/core.py +0 -0
- {recce_nightly-0.61.0.20250413/recce/data/_next/static/hD8g5-RYxHasL_ZuMPw1A → recce_nightly-0.61.0.20250415/recce/data/_next/static/-FZ7AfDqKYJ7K1mEhSe5l}/_ssgManifest.js +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/css/c9ecb46a4b21c126.css +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.31d693bb.woff +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.7e2c1e62.woff +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/media/montserrat-latin-800-normal.97e20d5e.woff +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.aff52ab0.woff +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.5f21869b.woff +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/favicon.ico +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/imgs/feedback/thumbs-down.png +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/imgs/feedback/thumbs-up.png +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/data/logo/recce-logo-white.png +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/diff.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/event/CONFIG +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/event/SENTRY_DNS +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/event/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/event/collector.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/event/track.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/exceptions.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/git.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/github.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/models/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/models/check.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/models/run.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/pull_request.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/run.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/summary.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/core.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/dataframe.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/histogram.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/lineage.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/profile.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/query.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/rowcount.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/schema.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/top_k.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/tasks/valuediff.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/util/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/util/cache.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/util/cll.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/util/io.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/util/lineage.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/util/logger.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/util/pydantic_model.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/util/singleton.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce/yaml/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce_nightly.egg-info/dependency_links.txt +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce_nightly.egg-info/entry_points.txt +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce_nightly.egg-info/requires.txt +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/recce_nightly.egg-info/top_level.txt +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/setup.cfg +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/setup.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/adapter/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/adapter/dbt_adapter/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/adapter/dbt_adapter/conftest.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/adapter/dbt_adapter/dbt_test_helper.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/adapter/dbt_adapter/test_dbt_cll.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/adapter/dbt_adapter/test_selector.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/__init__.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/conftest.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/test_histogram.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/test_lineage.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/test_preset_checks.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/test_profile.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/test_query.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/test_row_count.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/test_schema.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/test_top_k.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/tasks/test_valuediff.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/test_cli.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/test_config.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/test_dbt.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/test_pull_request.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/test_server.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/test_state.py +0 -0
- {recce_nightly-0.61.0.20250413 → recce_nightly-0.61.0.20250415}/tests/test_summary.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.61.0.20250415
|
|
@@ -13,8 +13,9 @@ from typing import Callable, Dict, List, Optional, Tuple, Iterator, Any, Set, Un
|
|
|
13
13
|
from recce.event import log_performance
|
|
14
14
|
from recce.exceptions import RecceException
|
|
15
15
|
from recce.util.cll import cll, CLLPerformanceTracking
|
|
16
|
-
from ...tasks.profile import ProfileTask
|
|
17
16
|
from recce.util.lineage import find_upstream, find_downstream
|
|
17
|
+
from ...tasks.profile import ProfileTask
|
|
18
|
+
from ...util.breaking import parse_change_category
|
|
18
19
|
|
|
19
20
|
try:
|
|
20
21
|
import agate
|
|
@@ -31,7 +32,7 @@ from recce.adapter.base import BaseAdapter
|
|
|
31
32
|
from recce.state import ArtifactsRoot
|
|
32
33
|
from .dbt_version import DbtVersion
|
|
33
34
|
from ...models import RunType
|
|
34
|
-
from ...models.types import LineageDiff, NodeDiff
|
|
35
|
+
from ...models.types import LineageDiff, NodeDiff, NodeChange
|
|
35
36
|
from ...tasks import Task, QueryTask, QueryBaseTask, QueryDiffTask, ValueDiffTask, ValueDiffDetailTask, ProfileDiffTask, \
|
|
36
37
|
RowCountTask, RowCountDiffTask, TopKDiffTask, HistogramDiffTask
|
|
37
38
|
|
|
@@ -740,6 +741,26 @@ class DbtAdapter(BaseAdapter):
|
|
|
740
741
|
*base.get('nodes', {}).keys(),
|
|
741
742
|
*current.get('nodes', {}).keys()
|
|
742
743
|
}
|
|
744
|
+
base_manifest = as_manifest(self.get_manifest(True))
|
|
745
|
+
curr_manifest = as_manifest(self.get_manifest(False))
|
|
746
|
+
|
|
747
|
+
def ref_func(*args):
|
|
748
|
+
if len(args) == 1:
|
|
749
|
+
node = args[0]
|
|
750
|
+
elif len(args) > 1:
|
|
751
|
+
node = args[1]
|
|
752
|
+
else:
|
|
753
|
+
return None
|
|
754
|
+
return node
|
|
755
|
+
|
|
756
|
+
def source_func(source_name, table_name):
|
|
757
|
+
source_name = source_name.replace('-', '_')
|
|
758
|
+
return f"__{source_name}__{table_name}"
|
|
759
|
+
|
|
760
|
+
jinja_context = dict(
|
|
761
|
+
ref=ref_func,
|
|
762
|
+
source=source_func,
|
|
763
|
+
)
|
|
743
764
|
|
|
744
765
|
# for each node, compare the base and current lineage
|
|
745
766
|
diff = {}
|
|
@@ -752,19 +773,54 @@ class DbtAdapter(BaseAdapter):
|
|
|
752
773
|
if base_checksum is None or curr_checksum is None or base_checksum == curr_checksum:
|
|
753
774
|
continue
|
|
754
775
|
|
|
755
|
-
change_category = 'breaking'
|
|
756
776
|
if curr_node.get('resource_type') == 'model':
|
|
757
777
|
try:
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
778
|
+
def _get_schema(lineage):
|
|
779
|
+
schema = {}
|
|
780
|
+
nodes = lineage['nodes']
|
|
781
|
+
parent_list = lineage['parent_map'].get(key, [])
|
|
782
|
+
for parent_id in parent_list:
|
|
783
|
+
parent_node = nodes.get(parent_id)
|
|
784
|
+
if parent_node is None:
|
|
785
|
+
continue
|
|
786
|
+
columns = parent_node.get('columns') or {}
|
|
787
|
+
name = parent_node.get('name')
|
|
788
|
+
if parent_node.get('resource_type') == 'source':
|
|
789
|
+
parts = parent_id.split('.')
|
|
790
|
+
source = parts[2]
|
|
791
|
+
table = parts[3]
|
|
792
|
+
source = source.replace('-', '_')
|
|
793
|
+
name = f"__{source}__{table}"
|
|
794
|
+
schema[name] = {
|
|
795
|
+
name: column.get('type') for name, column in columns.items()
|
|
796
|
+
}
|
|
797
|
+
return schema
|
|
798
|
+
|
|
799
|
+
base_sql = self.generate_sql(
|
|
800
|
+
base_node.get('raw_code'),
|
|
801
|
+
context=jinja_context,
|
|
802
|
+
provided_manifest=base_manifest
|
|
803
|
+
)
|
|
804
|
+
curr_sql = self.generate_sql(
|
|
805
|
+
curr_node.get('raw_code'),
|
|
806
|
+
context=jinja_context,
|
|
807
|
+
provided_manifest=curr_manifest
|
|
808
|
+
)
|
|
809
|
+
base_schema = _get_schema(base)
|
|
810
|
+
curr_schema = _get_schema(current)
|
|
761
811
|
dialect = self.adapter.connections.TYPE
|
|
762
|
-
|
|
763
|
-
|
|
812
|
+
|
|
813
|
+
change = parse_change_category(
|
|
814
|
+
base_sql,
|
|
815
|
+
curr_sql,
|
|
816
|
+
old_schema=base_schema,
|
|
817
|
+
new_schema=curr_schema,
|
|
818
|
+
dialect=dialect
|
|
819
|
+
)
|
|
764
820
|
except Exception:
|
|
765
|
-
|
|
821
|
+
change = NodeChange(category='unknown')
|
|
766
822
|
|
|
767
|
-
diff[key] = NodeDiff(change_status='modified',
|
|
823
|
+
diff[key] = NodeDiff(change_status='modified', change=change)
|
|
768
824
|
elif base_node:
|
|
769
825
|
diff[key] = NodeDiff(change_status='removed')
|
|
770
826
|
elif curr_node:
|
|
@@ -201,6 +201,8 @@ def diff(sql, primary_keys: List[str] = None, keep_shape: bool = False, keep_equ
|
|
|
201
201
|
@click.option('--host', default='localhost', show_default=True, help='The host to bind to.')
|
|
202
202
|
@click.option('--port', default=8000, show_default=True, help='The port to bind to.', type=int)
|
|
203
203
|
@click.option('--review', is_flag=True, help='Open the state file in the review mode.')
|
|
204
|
+
@click.option('--api-token', help='The token used by Recce Cloud API.', type=click.STRING,
|
|
205
|
+
envvar='RECCE_API_TOKEN')
|
|
204
206
|
@add_options(dbt_related_options)
|
|
205
207
|
@add_options(sqlmesh_related_options)
|
|
206
208
|
@add_options(recce_options)
|
|
@@ -257,6 +259,10 @@ def server(host, port, state_file=None, **kwargs):
|
|
|
257
259
|
cloud_onboarding_state = get_recce_cloud_onboarding_state(kwargs.get('cloud_token'))
|
|
258
260
|
flag['show_onboarding_guide'] = False if cloud_onboarding_state == 'completed' else True
|
|
259
261
|
|
|
262
|
+
auth_options = {}
|
|
263
|
+
api_token = kwargs.get('api_token') if kwargs.get('api_token') else get_recce_api_token()
|
|
264
|
+
auth_options['api_token'] = api_token
|
|
265
|
+
|
|
260
266
|
# Check Single Environment Onboarding Mode if the review mode is False
|
|
261
267
|
if not os.path.isdir(kwargs.get('target_base_path')) and is_review is False:
|
|
262
268
|
# Mark as single env onboarding mode if user provides the target-path only
|
|
@@ -293,7 +299,7 @@ def server(host, port, state_file=None, **kwargs):
|
|
|
293
299
|
console.print(f"[[red]Error[/red]] {message}")
|
|
294
300
|
exit(1)
|
|
295
301
|
|
|
296
|
-
state = AppState(state_loader=state_loader, kwargs=kwargs, flag=flag)
|
|
302
|
+
state = AppState(state_loader=state_loader, kwargs=kwargs, flag=flag, auth_options=auth_options)
|
|
297
303
|
app.state = state
|
|
298
304
|
|
|
299
305
|
uvicorn.run(app, host=host, port=port, lifespan='on')
|
|
@@ -763,15 +769,12 @@ def share(state_file, **kwargs):
|
|
|
763
769
|
"""
|
|
764
770
|
from rich.console import Console
|
|
765
771
|
|
|
766
|
-
handle_debug_flag(**kwargs)
|
|
767
|
-
cloud_options = {
|
|
768
|
-
'api_token': kwargs.get('api_token'),
|
|
769
|
-
}
|
|
770
|
-
|
|
771
772
|
console = Console()
|
|
773
|
+
handle_debug_flag(**kwargs)
|
|
774
|
+
cloud_options = None
|
|
772
775
|
|
|
773
776
|
# read or input the api token
|
|
774
|
-
api_token =
|
|
777
|
+
api_token = kwargs.get('api_token') if kwargs.get('api_token') else get_recce_api_token()
|
|
775
778
|
if api_token is None:
|
|
776
779
|
console.print("Please login Recce Cloud and copy the API token from the setting page.\n"
|
|
777
780
|
f"{RECCE_CLOUD_API_HOST}/settings#tokens\n"
|
|
@@ -779,7 +782,7 @@ def share(state_file, **kwargs):
|
|
|
779
782
|
api_token = click.prompt('Your Recce API token', type=str, hide_input=True, show_default=False)
|
|
780
783
|
update_user_profile({'api_token': api_token})
|
|
781
784
|
|
|
782
|
-
|
|
785
|
+
auth_options = {'api_token': api_token}
|
|
783
786
|
|
|
784
787
|
# load local state
|
|
785
788
|
state_loader = create_state_loader(review_mode=True, cloud_mode=False, state_file=state_file,
|
|
@@ -792,7 +795,7 @@ def share(state_file, **kwargs):
|
|
|
792
795
|
exit(1)
|
|
793
796
|
|
|
794
797
|
# check if state exists in cloud
|
|
795
|
-
state_manager = RecceShareStateManager(
|
|
798
|
+
state_manager = RecceShareStateManager(auth_options)
|
|
796
799
|
if not state_manager.verify():
|
|
797
800
|
error, hint = state_manager.error_and_hint
|
|
798
801
|
console.print(f"[[red]Error[/red]] {error}")
|
|
@@ -803,7 +806,12 @@ def share(state_file, **kwargs):
|
|
|
803
806
|
state_file_name = os.path.basename(state_file)
|
|
804
807
|
|
|
805
808
|
try:
|
|
806
|
-
|
|
809
|
+
response = state_manager.share_state(state_file_name, state_loader.state)
|
|
810
|
+
if response.get('status') == 'error':
|
|
811
|
+
console.print("[[red]Error[/red]] Failed to share the state.\n"
|
|
812
|
+
f"Reason: {response.get('message')}")
|
|
813
|
+
else:
|
|
814
|
+
console.print(f"Shared Link: {response.get('share_url')}")
|
|
807
815
|
except RecceCloudException as e:
|
|
808
816
|
console.print(f"[[red]Error[/red]] {e}")
|
|
809
817
|
console.print(f"Reason: {e.reason}")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-567d72f0bc0820d5.js"/><script src="/_next/static/chunks/1f229bf6-d9fe92e56db8d93b.js" async=""></script><script src="/_next/static/chunks/700-3b65fc3666820d00.js" async=""></script><script src="/_next/static/chunks/main-app-0225a2255968e566.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>recce</title><meta name="description" content="Recce: Data validation toolkit for comprehensive PR review"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>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)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-567d72f0bc0820d5.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:I[37194,[],\"\"]\n3:I[79137,[],\"\"]\n4:I[63846,[],\"\"]\na:I[67160,[],\"\"]\n5:{\"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\"}\n6:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n7:{\"display\":\"inline-block\"}\n8:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nb:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L1\",null,{\"buildId\":\"-FZ7AfDqKYJ7K1mEhSe5l\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L2\",[[\"$\",\"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.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$5\",\"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\":\"$6\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$7\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$8\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$L9\"],\"globalErrorComponent\":\"$a\",\"missingSlots\":\"$Wb\"}]\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"recce\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Recce: Data validation toolkit for comprehensive PR review\"}]]\n2:null\n"])</script></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/_error":["static/chunks/pages/_error-ed75be3f25588548.js"],sortedPages:["/_app","/_error"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|