recce-nightly 1.10.0.20250626__tar.gz → 1.10.0.20250629__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.

Files changed (164) hide show
  1. {recce_nightly-1.10.0.20250626/recce_nightly.egg-info → recce_nightly-1.10.0.20250629}/PKG-INFO +1 -1
  2. recce_nightly-1.10.0.20250629/recce/VERSION +1 -0
  3. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/adapter/dbt_adapter/__init__.py +231 -195
  4. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/404.html +2 -2
  5. recce_nightly-1.10.0.20250629/recce/data/_next/static/chunks/92-68460b15fe448f33.js +1 -0
  6. recce_nightly-1.10.0.20250629/recce/data/_next/static/chunks/app/page-598f8acc82179d01.js +1 -0
  7. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/index.html +2 -2
  8. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/index.txt +3 -3
  9. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/server.py +6 -5
  10. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/lineage.py +5 -0
  11. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629/recce_nightly.egg-info}/PKG-INFO +1 -1
  12. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce_nightly.egg-info/SOURCES.txt +4 -4
  13. recce_nightly-1.10.0.20250629/tests/adapter/dbt_adapter/test_dbt_cll.py +666 -0
  14. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/test_core.py +1 -3
  15. recce_nightly-1.10.0.20250626/recce/VERSION +0 -1
  16. recce_nightly-1.10.0.20250626/recce/data/_next/static/chunks/92-a7039e44bc8aeae4.js +0 -1
  17. recce_nightly-1.10.0.20250626/recce/data/_next/static/chunks/app/page-2b926bca5d62174f.js +0 -1
  18. recce_nightly-1.10.0.20250626/tests/adapter/dbt_adapter/test_dbt_cll.py +0 -384
  19. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/LICENSE +0 -0
  20. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/README.md +0 -0
  21. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/pyproject.toml +0 -0
  22. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/__init__.py +0 -0
  23. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/adapter/__init__.py +0 -0
  24. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/adapter/base.py +0 -0
  25. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/adapter/dbt_adapter/dbt_version.py +0 -0
  26. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/adapter/sqlmesh_adapter.py +0 -0
  27. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/apis/__init__.py +0 -0
  28. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/apis/check_api.py +0 -0
  29. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/apis/check_func.py +0 -0
  30. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/apis/run_api.py +0 -0
  31. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/apis/run_func.py +0 -0
  32. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/artifact.py +0 -0
  33. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/cli.py +0 -0
  34. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/config.py +0 -0
  35. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/connect_to_cloud.py +0 -0
  36. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/core.py +0 -0
  37. {recce_nightly-1.10.0.20250626/recce/data/_next/static/GQi98nWlz4aR914nimi1i → recce_nightly-1.10.0.20250629/recce/data/_next/static/Mrb9CZ3toH6Q8xrzNzCrg}/_buildManifest.js +0 -0
  38. {recce_nightly-1.10.0.20250626/recce/data/_next/static/GQi98nWlz4aR914nimi1i → recce_nightly-1.10.0.20250629/recce/data/_next/static/Mrb9CZ3toH6Q8xrzNzCrg}/_ssgManifest.js +0 -0
  39. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/181-acc61ddada3bc0ca.js +0 -0
  40. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js +0 -0
  41. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/217-879a84d70f7a907c.js +0 -0
  42. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/29e3cc0d-60045b2e47aa3916.js +0 -0
  43. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/36e1c10d-8e7be4a6c1f6ab2d.js +0 -0
  44. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/3998a672-03adacad07b346ac.js +0 -0
  45. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/3a92ee20-1081c360214f9602.js +0 -0
  46. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/41-f30276c289169376.js +0 -0
  47. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/450c323b-fd94e7ffaa4a5efa.js +0 -0
  48. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/47d8844f-929aed9b1c73a905.js +0 -0
  49. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/608-3b079b544e5d5f5e.js +0 -0
  50. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/6dc81886-adbfa45836061d79.js +0 -0
  51. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/7a8a3e83-edf6dc64b5d5f0a5.js +0 -0
  52. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/7f27ae6c-d5f0438edd5c2a5b.js +0 -0
  53. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/86730205-cfb14e3f051bab35.js +0 -0
  54. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/8d700b6a.8bb140898499c512.js +0 -0
  55. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/9746af58-a42b7d169cacadf0.js +0 -0
  56. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/a30376cd-de84559016d7e133.js +0 -0
  57. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/app/_not-found/page-01ed58b7f971d311.js +0 -0
  58. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/app/layout-292f035bb0d2a98e.js +0 -0
  59. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/b63b1b3f-4282bdcf459e075c.js +0 -0
  60. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js +0 -0
  61. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/c132bf7d-08cb668a789d6afd.js +0 -0
  62. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/ce84277d-2e5d1d46910cf052.js +0 -0
  63. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/febdd86e-c6b525341634b860.js +0 -0
  64. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/fee69bc6-2dbccaf9b90474e6.js +0 -0
  65. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -0
  66. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/main-app-39061b0166c47f55.js +0 -0
  67. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/main-b5b3ae20a1405261.js +0 -0
  68. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/pages/_app-437c455677d62394.js +0 -0
  69. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/pages/_error-e7650df18ca04bde.js +0 -0
  70. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
  71. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/chunks/webpack-7b49d5ba7e3a434d.js +0 -0
  72. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/css/17a96168e3a9db13.css +0 -0
  73. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/css/35c6679a098e1e34.css +0 -0
  74. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/css/951e2e0eea2d4a5b.css +0 -0
  75. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/css/a2b12b4ba4227f0a.css +0 -0
  76. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
  77. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.bd5c9f50.woff +0 -0
  78. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
  79. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.e6e0d8d0.woff +0 -0
  80. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
  81. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/montserrat-latin-800-normal.fc315020.woff +0 -0
  82. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
  83. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.2e5381b2.woff +0 -0
  84. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.20c545e6.woff +0 -0
  85. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
  86. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/_next/static/media/reload-image.79aabb7d.svg +0 -0
  87. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/auth_callback.html +0 -0
  88. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/favicon.ico +0 -0
  89. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/imgs/feedback/thumbs-down.png +0 -0
  90. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/imgs/feedback/thumbs-up.png +0 -0
  91. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/imgs/reload-image.svg +0 -0
  92. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/data/logo/recce-logo-white.png +0 -0
  93. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/diff.py +0 -0
  94. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/event/CONFIG +0 -0
  95. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/event/SENTRY_DNS +0 -0
  96. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/event/__init__.py +0 -0
  97. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/event/collector.py +0 -0
  98. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/event/track.py +0 -0
  99. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/exceptions.py +0 -0
  100. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/git.py +0 -0
  101. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/github.py +0 -0
  102. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/models/__init__.py +0 -0
  103. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/models/check.py +0 -0
  104. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/models/run.py +0 -0
  105. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/models/types.py +0 -0
  106. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/pull_request.py +0 -0
  107. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/run.py +0 -0
  108. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/state.py +0 -0
  109. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/summary.py +0 -0
  110. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/__init__.py +0 -0
  111. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/core.py +0 -0
  112. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/dataframe.py +0 -0
  113. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/histogram.py +0 -0
  114. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/lineage.py +0 -0
  115. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/profile.py +0 -0
  116. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/query.py +0 -0
  117. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/rowcount.py +0 -0
  118. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/schema.py +0 -0
  119. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/top_k.py +0 -0
  120. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/tasks/valuediff.py +0 -0
  121. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/__init__.py +0 -0
  122. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/api_token.py +0 -0
  123. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/breaking.py +0 -0
  124. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/cache.py +0 -0
  125. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/cll.py +0 -0
  126. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/io.py +0 -0
  127. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/logger.py +0 -0
  128. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/onboarding_state.py +0 -0
  129. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/pydantic_model.py +0 -0
  130. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/recce_cloud.py +0 -0
  131. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/util/singleton.py +0 -0
  132. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce/yaml/__init__.py +0 -0
  133. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce_nightly.egg-info/dependency_links.txt +0 -0
  134. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce_nightly.egg-info/entry_points.txt +0 -0
  135. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce_nightly.egg-info/requires.txt +0 -0
  136. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/recce_nightly.egg-info/top_level.txt +0 -0
  137. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/setup.cfg +0 -0
  138. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/setup.py +0 -0
  139. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/__init__.py +0 -0
  140. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/adapter/__init__.py +0 -0
  141. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/adapter/dbt_adapter/__init__.py +0 -0
  142. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/adapter/dbt_adapter/conftest.py +0 -0
  143. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/adapter/dbt_adapter/dbt_test_helper.py +0 -0
  144. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -0
  145. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/adapter/dbt_adapter/test_selector.py +0 -0
  146. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/__init__.py +0 -0
  147. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/conftest.py +0 -0
  148. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/test_histogram.py +0 -0
  149. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/test_lineage.py +0 -0
  150. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/test_preset_checks.py +0 -0
  151. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/test_profile.py +0 -0
  152. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/test_query.py +0 -0
  153. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/test_row_count.py +0 -0
  154. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/test_schema.py +0 -0
  155. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/test_top_k.py +0 -0
  156. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/tasks/test_valuediff.py +0 -0
  157. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/test_cli.py +0 -0
  158. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/test_config.py +0 -0
  159. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/test_connect_to_cloud.py +0 -0
  160. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/test_dbt.py +0 -0
  161. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/test_pull_request.py +0 -0
  162. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/test_server.py +0 -0
  163. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/test_state.py +0 -0
  164. {recce_nightly-1.10.0.20250626 → recce_nightly-1.10.0.20250629}/tests/test_summary.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: recce-nightly
3
- Version: 1.10.0.20250626
3
+ Version: 1.10.0.20250629
4
4
  Summary: Environment diff tool for dbt
5
5
  Home-page: https://github.com/InfuseAI/recce
6
6
  Author: InfuseAI Dev Team
@@ -0,0 +1 @@
1
+ 1.10.0.20250629
@@ -3,6 +3,7 @@ import logging
3
3
  import os
4
4
  import uuid
5
5
  from contextlib import contextmanager
6
+ from copy import deepcopy
6
7
  from dataclasses import dataclass, fields
7
8
  from errno import ENOENT
8
9
  from functools import lru_cache
@@ -25,15 +26,14 @@ from recce.event import log_performance
25
26
  from recce.exceptions import RecceException
26
27
  from recce.util.cll import CLLPerformanceTracking, cll
27
28
  from recce.util.lineage import (
29
+ build_column_key,
28
30
  filter_dependency_maps,
29
- filter_lineage_vertices,
30
- find_column_dependencies,
31
31
  find_downstream,
32
32
  find_upstream,
33
33
  )
34
34
 
35
35
  from ...tasks.profile import ProfileTask
36
- from ...util.breaking import BreakingPerformanceTracking, parse_change_category
36
+ from ...util.breaking import parse_change_category
37
37
 
38
38
  try:
39
39
  import agate
@@ -793,15 +793,38 @@ class DbtAdapter(BaseAdapter):
793
793
  def _get_lineage_diff_cached(self, cache_key) -> LineageDiff:
794
794
  base = self.get_lineage(base=True)
795
795
  current = self.get_lineage(base=False)
796
- keys = {*base.get("nodes", {}).keys(), *current.get("nodes", {}).keys()}
797
796
 
798
- # Start to diff
799
- perf_tracking = BreakingPerformanceTracking()
800
- perf_tracking.start_lineage_diff()
797
+ modified_nodes = self.select_nodes(select="state:modified")
798
+ diff = {}
799
+ for node_id in modified_nodes:
800
+ base_node = base.get("nodes", {}).get(node_id)
801
+ curr_node = current.get("nodes", {}).get(node_id)
802
+ if base_node and curr_node:
803
+ diff[node_id] = NodeDiff(change_status="modified")
804
+ elif base_node:
805
+ diff[node_id] = NodeDiff(change_status="removed")
806
+ elif curr_node:
807
+ diff[node_id] = NodeDiff(change_status="added")
808
+
809
+ return LineageDiff(
810
+ base=base,
811
+ current=current,
812
+ diff=diff,
813
+ )
814
+
815
+ @lru_cache(maxsize=128)
816
+ def get_change_analysis_cached(self, node_id: str):
817
+ lineage_diff = self.get_lineage_diff()
818
+ diff = lineage_diff.diff
819
+
820
+ if node_id not in diff or diff[node_id].change_status != "modified":
821
+ return diff.get(node_id)
822
+
823
+ base = lineage_diff.base
824
+ current = lineage_diff.current
801
825
 
802
826
  base_manifest = as_manifest(self.get_manifest(True))
803
827
  curr_manifest = as_manifest(self.get_manifest(False))
804
- perf_tracking.record_checkpoint("manifest")
805
828
 
806
829
  def ref_func(*args):
807
830
  if len(args) == 1:
@@ -821,108 +844,91 @@ class DbtAdapter(BaseAdapter):
821
844
  source=source_func,
822
845
  )
823
846
 
824
- # for each node, compare the base and current lineage
825
- diff = {}
826
- for key in keys:
827
- base_node = base.get("nodes", {}).get(key)
828
- curr_node = current.get("nodes", {}).get(key)
829
- if base_node and curr_node:
830
- base_checksum = base_node.get("checksum", {}).get("checksum")
831
- curr_checksum = curr_node.get("checksum", {}).get("checksum")
832
- change = None
833
- if base_checksum is None or curr_checksum is None or base_checksum == curr_checksum:
834
- continue
835
-
836
- if curr_node.get("resource_type") == "model":
837
- try:
838
- perf_tracking.increment_modified_nodes()
839
-
840
- def _get_schema(lineage):
841
- schema = {}
842
- nodes = lineage["nodes"]
843
- parent_list = lineage["parent_map"].get(key, [])
844
- for parent_id in parent_list:
845
- parent_node = nodes.get(parent_id)
846
- if parent_node is None:
847
- continue
848
- columns = parent_node.get("columns") or {}
849
- name = parent_node.get("name")
850
- if parent_node.get("resource_type") == "source":
851
- parts = parent_id.split(".")
852
- source = parts[2]
853
- table = parts[3]
854
- source = source.replace("-", "_")
855
- name = f"__{source}__{table}"
856
- schema[name] = {name: column.get("type") for name, column in columns.items()}
857
- return schema
858
-
859
- base_sql = self.generate_sql(
860
- base_node.get("raw_code"),
861
- context=jinja_context,
862
- provided_manifest=base_manifest,
863
- )
864
- curr_sql = self.generate_sql(
865
- curr_node.get("raw_code"),
866
- context=jinja_context,
867
- provided_manifest=curr_manifest,
868
- )
869
- base_schema = _get_schema(base)
870
- curr_schema = _get_schema(current)
871
- dialect = self.adapter.connections.TYPE
872
- if curr_manifest.metadata.adapter_type is not None:
873
- dialect = curr_manifest.metadata.adapter_type
874
-
875
- change = parse_change_category(
876
- base_sql,
877
- curr_sql,
878
- old_schema=base_schema,
879
- new_schema=curr_schema,
880
- dialect=dialect,
881
- perf_tracking=perf_tracking,
882
- )
883
-
884
- # Make sure that the case of the column names are the same
885
- changed_columns = {
886
- column.lower(): change_status for column, change_status in (change.columns or {}).items()
887
- }
888
- changed_columns_names = set(changed_columns)
889
- changed_columns_final = {}
847
+ base_node = base.get("nodes", {}).get(node_id)
848
+ curr_node = current.get("nodes", {}).get(node_id)
849
+ change = NodeChange(category="unknown")
850
+ if (
851
+ curr_node.get("resource_type") in ["model", "snapshot"]
852
+ and curr_node.get("raw_code") is not None
853
+ and base_node.get("raw_code") is not None
854
+ ):
855
+ try:
856
+
857
+ def _get_schema(lineage):
858
+ schema = {}
859
+ nodes = lineage["nodes"]
860
+ parent_list = lineage["parent_map"].get(node_id, [])
861
+ for parent_id in parent_list:
862
+ parent_node = nodes.get(parent_id)
863
+ if parent_node is None:
864
+ continue
865
+ columns = parent_node.get("columns") or {}
866
+ name = parent_node.get("name")
867
+ if parent_node.get("resource_type") == "source":
868
+ parts = parent_id.split(".")
869
+ source = parts[2]
870
+ table = parts[3]
871
+ source = source.replace("-", "_")
872
+ name = f"__{source}__{table}"
873
+ schema[name] = {name: column.get("type") for name, column in columns.items()}
874
+ return schema
875
+
876
+ base_sql = self.generate_sql(
877
+ base_node.get("raw_code"),
878
+ context=jinja_context,
879
+ provided_manifest=base_manifest,
880
+ )
881
+ curr_sql = self.generate_sql(
882
+ curr_node.get("raw_code"),
883
+ context=jinja_context,
884
+ provided_manifest=curr_manifest,
885
+ )
886
+ base_schema = _get_schema(base)
887
+ curr_schema = _get_schema(current)
888
+ dialect = self.adapter.connections.TYPE
889
+ if curr_manifest.metadata.adapter_type is not None:
890
+ dialect = curr_manifest.metadata.adapter_type
891
+
892
+ change = parse_change_category(
893
+ base_sql,
894
+ curr_sql,
895
+ old_schema=base_schema,
896
+ new_schema=curr_schema,
897
+ dialect=dialect,
898
+ )
890
899
 
891
- base_columns = base_node.get("columns") or {}
892
- curr_columns = curr_node.get("columns") or {}
893
- columns_names = set(base_columns) | set(curr_columns)
900
+ # Make sure that the case of the column names are the same
901
+ changed_columns = {
902
+ column.lower(): change_status for column, change_status in (change.columns or {}).items()
903
+ }
904
+ changed_columns_names = set(changed_columns)
905
+ changed_columns_final = {}
894
906
 
895
- for column_name in columns_names:
896
- if column_name.lower() in changed_columns_names:
897
- changed_columns_final[column_name] = changed_columns[column_name.lower()]
907
+ base_columns = base_node.get("columns") or {}
908
+ curr_columns = curr_node.get("columns") or {}
909
+ columns_names = set(base_columns) | set(curr_columns)
898
910
 
899
- change.columns = changed_columns_final
900
- except Exception:
901
- change = NodeChange(category="unknown")
911
+ for column_name in columns_names:
912
+ if column_name.lower() in changed_columns_names:
913
+ changed_columns_final[column_name] = changed_columns[column_name.lower()]
902
914
 
903
- diff[key] = NodeDiff(change_status="modified", change=change)
904
- elif base_node:
905
- diff[key] = NodeDiff(change_status="removed")
906
- elif curr_node:
907
- diff[key] = NodeDiff(change_status="added")
908
-
909
- perf_tracking.end_lineage_diff()
910
- log_performance("model lineage diff", perf_tracking.to_dict())
915
+ change.columns = changed_columns_final
916
+ except Exception:
917
+ # TODO: telemetry
918
+ pass
911
919
 
912
- return LineageDiff(
913
- base=base,
914
- current=current,
915
- diff=diff,
916
- )
920
+ node_diff = diff.get(node_id)
921
+ node_diff.change = change
922
+ return node_diff
917
923
 
918
924
  def get_cll(
919
925
  self,
920
926
  node_id: Optional[str] = None,
921
927
  column: Optional[str] = None,
922
928
  change_analysis: Optional[bool] = False,
923
- cll: Optional[bool] = True,
924
- upstream: Optional[bool] = True,
925
- downstream: Optional[bool] = True,
929
+ no_cll: Optional[bool] = False,
930
+ no_upstream: Optional[bool] = False,
931
+ no_downstream: Optional[bool] = False,
926
932
  no_filter: Optional[bool] = False,
927
933
  ) -> CllData:
928
934
  cll_tracker = CLLPerformanceTracking()
@@ -936,19 +942,19 @@ class DbtAdapter(BaseAdapter):
936
942
  cll_node_ids = {node_id}
937
943
  else:
938
944
  lineage_diff = self.get_lineage_diff()
939
- cll_node_ids = lineage_diff.diff.keys()
945
+ cll_node_ids = set(lineage_diff.diff.keys())
940
946
 
941
947
  nodes = {}
942
948
  columns = {}
943
949
  parent_map = {}
944
950
  child_map = {}
945
951
 
946
- if upstream:
952
+ if not no_upstream:
947
953
  cll_node_ids = cll_node_ids.union(find_upstream(cll_node_ids, manifest_dict.get("parent_map")))
948
- if downstream:
954
+ if not no_downstream:
949
955
  cll_node_ids = cll_node_ids.union(find_downstream(cll_node_ids, manifest_dict.get("child_map")))
950
956
 
951
- if cll:
957
+ if not no_cll:
952
958
  for cll_node_id in cll_node_ids:
953
959
  if (
954
960
  cll_node_id not in manifest.sources
@@ -956,27 +962,93 @@ class DbtAdapter(BaseAdapter):
956
962
  and cll_node_id not in manifest.exposures
957
963
  ):
958
964
  continue
959
- cll_data_one = self.get_cll_cached(cll_node_id, base=False)
965
+ cll_data_one = deepcopy(self.get_cll_cached(cll_node_id, base=False))
960
966
  if cll_data_one is None:
961
967
  continue
962
968
 
963
- node_diff = self.get_lineage_diff().diff.get(cll_node_id) if change_analysis else None
964
- for n_id, n in cll_data_one.nodes.items():
965
- nodes[n_id] = n
966
-
967
- if node_diff is not None:
968
- n.change_status = node_diff.change_status
969
- if node_diff.change is not None:
970
- n.change_category = node_diff.change.category
969
+ nodes[cll_node_id] = cll_data_one.nodes.get(cll_node_id)
970
+ node_diff = self.get_change_analysis_cached(cll_node_id) if change_analysis else None
971
+ if node_diff is not None:
972
+ nodes[cll_node_id].change_status = node_diff.change_status
973
+ if node_diff.change is not None:
974
+ nodes[cll_node_id].change_category = node_diff.change.category
971
975
  for c_id, c in cll_data_one.columns.items():
972
976
  columns[c_id] = c
973
- if node_diff is not None and node_diff.change is not None:
977
+ if node_diff is not None and node_diff.change is not None and node_diff.change.columns is not None:
974
978
  column_diff = node_diff.change.columns.get(c.name)
975
979
  if column_diff:
976
980
  c.change_status = column_diff
977
981
 
978
982
  for p_id, parents in cll_data_one.parent_map.items():
979
983
  parent_map[p_id] = parents
984
+ else:
985
+ for cll_node_id in cll_node_ids:
986
+ cll_node = None
987
+ cll_node_columns: Dict[str, CllColumn] = {}
988
+
989
+ if cll_node_id in manifest.sources:
990
+ n = manifest.sources[cll_node_id]
991
+ cll_node = CllNode(
992
+ id=n.unique_id,
993
+ name=n.name,
994
+ source_name=n.source_name,
995
+ package_name=n.package_name,
996
+ )
997
+ if self.curr_catalog and cll_node_id in self.curr_catalog.sources:
998
+ cll_node_columns = {
999
+ column.name: CllColumn(
1000
+ id=f"{cll_node_id}_{column.name}",
1001
+ table_id=cll_node_id,
1002
+ name=column.name,
1003
+ type=column.type,
1004
+ )
1005
+ for column in self.curr_catalog.sources[cll_node_id].columns.values()
1006
+ }
1007
+ elif cll_node_id in manifest.nodes:
1008
+ n = manifest.nodes[cll_node_id]
1009
+ if n.resource_type not in ["model", "seed", "snapshot"]:
1010
+ continue
1011
+ cll_node = CllNode(
1012
+ id=n.unique_id,
1013
+ name=n.name,
1014
+ package_name=n.package_name,
1015
+ resource_type=n.resource_type,
1016
+ )
1017
+ if self.curr_catalog and cll_node_id in self.curr_catalog.nodes:
1018
+ cll_node_columns = {
1019
+ column.name: CllColumn(
1020
+ id=f"{cll_node_id}_{column.name}",
1021
+ table_id=cll_node_id,
1022
+ name=column.name,
1023
+ type=column.type,
1024
+ )
1025
+ for column in self.curr_catalog.nodes[cll_node_id].columns.values()
1026
+ }
1027
+ elif cll_node_id in manifest.exposures:
1028
+ n = manifest.exposures[cll_node_id]
1029
+ cll_node = CllNode(
1030
+ id=n.unique_id,
1031
+ name=n.name,
1032
+ package_name=n.package_name,
1033
+ resource_type=n.resource_type,
1034
+ )
1035
+
1036
+ if not cll_node:
1037
+ continue
1038
+ nodes[cll_node_id] = cll_node
1039
+
1040
+ node_diff = self.get_change_analysis_cached(cll_node_id) if change_analysis else None
1041
+ if node_diff is not None:
1042
+ cll_node.change_status = node_diff.change_status
1043
+ if node_diff.change is not None:
1044
+ cll_node.change_category = node_diff.change.category
1045
+ for c, cll_column in cll_node_columns.items():
1046
+ cll_node.columns[c] = cll_column
1047
+ columns[cll_column.id] = cll_column
1048
+ if node_diff.change.columns and c in node_diff.change.columns:
1049
+ cll_column.change_status = node_diff.change.columns[c]
1050
+
1051
+ parent_map[cll_node_id] = manifest.parent_map.get(cll_node_id, [])
980
1052
 
981
1053
  # build the child map
982
1054
  for parent_id, parents in parent_map.items():
@@ -987,43 +1059,69 @@ class DbtAdapter(BaseAdapter):
987
1059
 
988
1060
  # Find the anchor nodes
989
1061
  anchor_node_ids = set()
1062
+ extra_node_ids = set()
990
1063
  if node_id is None and column is None:
991
1064
  if change_analysis:
992
1065
  # If change analysis is requested, we need to find the nodes that have changes
993
- for node_id, node_diff in self.get_lineage_diff().diff.items():
994
- if node_diff.change.category == "breaking":
995
- anchor_node_ids.add(node_id)
996
- for column_name in node_diff.change.columns:
997
- anchor_node_ids.add(f"{node_id}_{column_name}")
1066
+ for nid in self.get_lineage_diff().diff.keys():
1067
+ node_diff = self.get_change_analysis_cached(nid)
1068
+ if node_diff is not None and node_diff.change is not None:
1069
+ extra_node_ids.add(nid)
1070
+ if no_cll:
1071
+ if node_diff.change.category in ["breaking", "partial_breaking", "unknown"]:
1072
+ anchor_node_ids.add(nid)
1073
+ else:
1074
+ if node_diff.change.category in ["breaking", "unknown"]:
1075
+ anchor_node_ids.add(nid)
1076
+ if node_diff.change.columns is not None:
1077
+ for column_name in node_diff.change.columns:
1078
+ anchor_node_ids.add(f"{nid}_{column_name}")
998
1079
  else:
999
1080
  lineage_diff = self.get_lineage_diff()
1000
1081
  anchor_node_ids = lineage_diff.diff.keys()
1001
1082
  elif node_id is not None and column is None:
1002
1083
  if change_analysis:
1003
1084
  # If change analysis is requested, we need to find the nodes that have changes
1004
- node_diff = self.get_lineage_diff().diff.get(node_id)
1005
- if node_diff:
1006
- if node_diff.change.category == "breaking":
1007
- anchor_node_ids.add(node_id)
1008
- for column_name in node_diff.change.columns:
1009
- anchor_node_ids.add(f"{node_id}_{column_name}")
1085
+ node_diff = self.get_change_analysis_cached(node_id)
1086
+ if node_diff is not None and node_diff.change is not None:
1087
+ extra_node_ids.add(node_id)
1088
+ if no_cll:
1089
+ if node_diff.change.category in ["breaking", "partial_breaking", "unknown"]:
1090
+ anchor_node_ids.add(node_id)
1091
+ else:
1092
+ if node_diff.change.category in ["breaking", "unknown"]:
1093
+ anchor_node_ids.add(node_id)
1094
+ if node_diff.change.columns is not None:
1095
+ for column_name in node_diff.change.columns:
1096
+ anchor_node_ids.add(f"{node_id}_{column_name}")
1010
1097
  else:
1011
1098
  anchor_node_ids.add(node_id)
1012
1099
  else:
1013
1100
  anchor_node_ids.add(node_id)
1101
+ if not no_cll:
1102
+ node = nodes.get(node_id)
1103
+ if node:
1104
+ for column_name in node.columns:
1105
+ column_key = build_column_key(node_id, column_name)
1106
+ anchor_node_ids.add(column_key)
1014
1107
  else:
1015
1108
  anchor_node_ids.add(f"{node_id}_{column}")
1016
1109
 
1017
1110
  result_node_ids = set(anchor_node_ids)
1018
- if upstream:
1111
+ if not no_upstream:
1019
1112
  result_node_ids = result_node_ids.union(find_upstream(anchor_node_ids, parent_map))
1020
- if downstream:
1113
+ if not no_downstream:
1021
1114
  result_node_ids = result_node_ids.union(find_downstream(anchor_node_ids, child_map))
1022
1115
 
1023
1116
  # Filter the nodes and columns based on the anchor nodes
1024
1117
  if not no_filter:
1025
- nodes = {k: v for k, v in nodes.items() if k in result_node_ids}
1026
- columns = {k: v for k, v in columns.items() if k in result_node_ids}
1118
+ nodes = {k: v for k, v in nodes.items() if k in result_node_ids or k in extra_node_ids}
1119
+ columns = {k: v for k, v in columns.items() if k in result_node_ids or k in extra_node_ids}
1120
+
1121
+ for node in nodes.values():
1122
+ node.columns = {
1123
+ k: v for k, v in node.columns.items() if v.id in result_node_ids or v.id in extra_node_ids
1124
+ }
1027
1125
  parent_map, child_map = filter_dependency_maps(parent_map, child_map, result_node_ids)
1028
1126
 
1029
1127
  cll_tracker.end_column_lineage()
@@ -1250,73 +1348,6 @@ class DbtAdapter(BaseAdapter):
1250
1348
  }
1251
1349
  return None
1252
1350
 
1253
- def get_impact_radius(self, node_id: str) -> CllData:
1254
- impacted_nodes = self.get_impacted_nodes(node_id)
1255
- impacted_cll = self.get_impacted_cll(node_id)
1256
-
1257
- # merge impact radius
1258
- return self._merge_cll_data(impacted_nodes, impacted_cll)
1259
-
1260
- def get_impacted_nodes(self, node_id: str) -> CllData:
1261
- lineage_diff = self.get_lineage_diff()
1262
- diff_info = lineage_diff.diff.get(node_id)
1263
- if diff_info is None:
1264
- return CllData()
1265
- change_category = diff_info.change.category
1266
-
1267
- if change_category == "breaking":
1268
- cll = self.get_cll(node_id, no_filter=True)
1269
- _, downstream = find_column_dependencies(node_id, cll.parent_map, cll.child_map)
1270
- relevant_columns = {node_id}
1271
- relevant_columns.update(downstream)
1272
- nodes, columns = filter_lineage_vertices(cll.nodes, cll.columns, relevant_columns)
1273
- p_map, c_map = filter_dependency_maps(cll.parent_map, cll.child_map, relevant_columns)
1274
-
1275
- return CllData(nodes=nodes, columns=columns, parent_map=p_map, child_map=c_map)
1276
-
1277
- return CllData()
1278
-
1279
- def get_impacted_cll(self, node_id: str) -> CllData:
1280
- lineage_diff = self.get_lineage_diff()
1281
- diff_info = lineage_diff.diff.get(node_id)
1282
- if diff_info is None:
1283
- return CllData()
1284
- change_columns = diff_info.change.columns
1285
-
1286
- cll = self.get_cll(node_id, no_filter=True)
1287
- relevant_columns = set()
1288
- for col, change_status in change_columns.items():
1289
- if change_status == "removed":
1290
- continue
1291
- target_column = f"{node_id}_{col}"
1292
- _, downstream = find_column_dependencies(target_column, cll.parent_map, cll.child_map)
1293
- relevant_columns.add(target_column)
1294
- relevant_columns.update(downstream)
1295
-
1296
- nodes, columns = filter_lineage_vertices(cll.nodes, cll.columns, relevant_columns)
1297
- p_map, c_map = filter_dependency_maps(cll.parent_map, cll.child_map, relevant_columns)
1298
-
1299
- return CllData(nodes=nodes, columns=columns, parent_map=p_map, child_map=c_map)
1300
-
1301
- @staticmethod
1302
- def _merge_cll_data(base: CllData, target: CllData) -> CllData:
1303
- merged_nodes = {**base.nodes, **target.nodes}
1304
- merged_columns = {**base.columns, **target.columns}
1305
-
1306
- merged_parent_map = {}
1307
- merged_keys = set(base.parent_map.keys()).union(set(target.parent_map.keys()))
1308
- for key in merged_keys:
1309
- merged_parent_map[key] = base.parent_map.get(key, set()).union(target.parent_map.get(key, set()))
1310
-
1311
- merged_child_map = {}
1312
- merged_keys = set(base.child_map.keys()).union(set(target.child_map.keys()))
1313
- for key in merged_keys:
1314
- merged_child_map[key] = base.child_map.get(key, set()).union(target.child_map.get(key, set()))
1315
-
1316
- return CllData(
1317
- nodes=merged_nodes, columns=merged_columns, parent_map=merged_parent_map, child_map=merged_child_map
1318
- )
1319
-
1320
1351
  def build_name_to_unique_id_index(self) -> Dict[str, str]:
1321
1352
  name_to_unique_id = {}
1322
1353
  curr_manifest = self.get_manifest(base=False)
@@ -1404,13 +1435,18 @@ class DbtAdapter(BaseAdapter):
1404
1435
  self.curr_manifest = load_manifest(path=refresh_file_path)
1405
1436
  self.manifest = as_manifest(self.curr_manifest)
1406
1437
  self.get_cll_cached.cache_clear()
1438
+ self.get_change_analysis_cached.cache_clear()
1407
1439
  elif refresh_file_path.endswith("catalog.json"):
1408
1440
  self.curr_catalog = load_catalog(path=refresh_file_path)
1441
+ self.get_cll_cached.cache_clear()
1442
+ self.get_change_analysis_cached.cache_clear()
1409
1443
  elif self.base_path and target_type == os.path.basename(self.base_path):
1410
1444
  if refresh_file_path.endswith("manifest.json"):
1411
1445
  self.base_manifest = load_manifest(path=refresh_file_path)
1446
+ self.get_change_analysis_cached.cache_clear()
1412
1447
  elif refresh_file_path.endswith("catalog.json"):
1413
1448
  self.base_catalog = load_catalog(path=refresh_file_path)
1449
+ self.get_change_analysis_cached.cache_clear()
1414
1450
 
1415
1451
  def create_relation(self, model, base=False):
1416
1452
  node = self.find_node_by_name(model, base)