resolvekit 0.1.5__tar.gz → 0.1.7__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.
Files changed (343) hide show
  1. {resolvekit-0.1.5 → resolvekit-0.1.7}/PKG-INFO +1 -1
  2. {resolvekit-0.1.5 → resolvekit-0.1.7}/pyproject.toml +1 -1
  3. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/loading/module_catalog.py +36 -68
  4. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/resolver.py +13 -3
  5. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/byod/cache.py +38 -12
  6. {resolvekit-0.1.5 → resolvekit-0.1.7}/LICENSE +0 -0
  7. {resolvekit-0.1.5 → resolvekit-0.1.7}/README.md +0 -0
  8. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/NOTICE.md +0 -0
  9. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/__init__.py +0 -0
  10. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_convenience.py +0 -0
  11. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/admin1/metadata.json +0 -0
  12. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/admin2/metadata.json +0 -0
  13. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/admin3/metadata.json +0 -0
  14. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/admin4/metadata.json +0 -0
  15. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/admin5/metadata.json +0 -0
  16. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/cities/metadata.json +0 -0
  17. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/continental_unions/entities.sqlite +0 -0
  18. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/continental_unions/metadata.json +0 -0
  19. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/continental_unions/symspell.dict +0 -0
  20. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/continents/entities.sqlite +0 -0
  21. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/continents/metadata.json +0 -0
  22. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/continents/symspell.dict +0 -0
  23. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/countries/entities.sqlite +0 -0
  24. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/countries/geo_calibrator.json +0 -0
  25. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/countries/metadata.json +0 -0
  26. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/countries/symspell.dict +0 -0
  27. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/regions/entities.sqlite +0 -0
  28. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/regions/metadata.json +0 -0
  29. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/geo/regions/symspell.dict +0 -0
  30. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/manifest.json +0 -0
  31. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/companies/entities.sqlite +0 -0
  32. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/companies/metadata.json +0 -0
  33. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/companies/symspell.dict +0 -0
  34. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/data_sources/entities.sqlite +0 -0
  35. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/data_sources/metadata.json +0 -0
  36. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/data_sources/symspell.dict +0 -0
  37. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/governments/entities.sqlite +0 -0
  38. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/governments/metadata.json +0 -0
  39. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/governments/symspell.dict +0 -0
  40. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/lenders/entities.sqlite +0 -0
  41. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/lenders/metadata.json +0 -0
  42. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/lenders/symspell.dict +0 -0
  43. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/political_parties/entities.sqlite +0 -0
  44. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/political_parties/metadata.json +0 -0
  45. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/political_parties/symspell.dict +0 -0
  46. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/providers/entities.sqlite +0 -0
  47. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/providers/metadata.json +0 -0
  48. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/org/providers/symspell.dict +0 -0
  49. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_data/parse/deny_list.json +0 -0
  50. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_pandas_integration.py +0 -0
  51. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/_polars_integration.py +0 -0
  52. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/__init__.py +0 -0
  53. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/_outcomes.py +0 -0
  54. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/api.py +0 -0
  55. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/containment.py +0 -0
  56. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/country_geonames_aliases.py +0 -0
  57. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/datapack_layout.py +0 -0
  58. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/entity_validity.py +0 -0
  59. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/formal_names.py +0 -0
  60. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/geo_shared.py +0 -0
  61. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/groups.py +0 -0
  62. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/inspection.py +0 -0
  63. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/models.py +0 -0
  64. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/module_catalog.py +0 -0
  65. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/oecd_dac.py +0 -0
  66. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/__init__.py +0 -0
  67. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/build_report.py +0 -0
  68. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/changelog.py +0 -0
  69. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/chunk.py +0 -0
  70. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/contribution.py +0 -0
  71. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/core.py +0 -0
  72. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/discover.py +0 -0
  73. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/enrich.py +0 -0
  74. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/geo_staging.py +0 -0
  75. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/packaging.py +0 -0
  76. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/promote.py +0 -0
  77. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/qa.py +0 -0
  78. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/reconcile.py +0 -0
  79. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/stages.py +0 -0
  80. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/pipeline/types.py +0 -0
  81. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/presets.py +0 -0
  82. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/registry.py +0 -0
  83. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/__init__.py +0 -0
  84. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/__init__.py +0 -0
  85. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/adapter.py +0 -0
  86. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/base_dc_api.py +0 -0
  87. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/bundle.py +0 -0
  88. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/canonicalize.py +0 -0
  89. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/client.py +0 -0
  90. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/constants.py +0 -0
  91. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/__init__.py +0 -0
  92. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/_admin_walk.py +0 -0
  93. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/_chunk_callback.py +0 -0
  94. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/_geo_regions.py +0 -0
  95. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/_ordered_emitter.py +0 -0
  96. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/_progress_context.py +0 -0
  97. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/_streaming.py +0 -0
  98. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/_type_mappings.py +0 -0
  99. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/adapter.py +0 -0
  100. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/dc_api.py +0 -0
  101. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/discovery.py +0 -0
  102. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/fetch.py +0 -0
  103. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/mappings.py +0 -0
  104. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/profile.py +0 -0
  105. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/geo/prominence.py +0 -0
  106. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/models.py +0 -0
  107. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/node.py +0 -0
  108. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/org/__init__.py +0 -0
  109. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/org/adapter.py +0 -0
  110. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/org/dc_api.py +0 -0
  111. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/org/discovery.py +0 -0
  112. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/org/fetch.py +0 -0
  113. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/org/mappings.py +0 -0
  114. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/org/profile.py +0 -0
  115. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/rows.py +0 -0
  116. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/specs.py +0 -0
  117. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/datacommons/text.py +0 -0
  118. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/discovery_events.py +0 -0
  119. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/protocol.py +0 -0
  120. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/seed/__init__.py +0 -0
  121. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/seed/continents.py +0 -0
  122. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/seed/m49.py +0 -0
  123. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/wikidata/__init__.py +0 -0
  124. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/wikidata/aliases.py +0 -0
  125. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sources/wikidata/sitelinks.py +0 -0
  126. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sqlite/__init__.py +0 -0
  127. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sqlite/constants.py +0 -0
  128. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sqlite/context.py +0 -0
  129. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sqlite/diff.py +0 -0
  130. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sqlite/export.py +0 -0
  131. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sqlite/specs.py +0 -0
  132. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sqlite/validate.py +0 -0
  133. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/sqlite/write.py +0 -0
  134. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/state.py +0 -0
  135. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/builder/utils.py +0 -0
  136. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/__init__.py +0 -0
  137. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/adapters/__init__.py +0 -0
  138. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/adapters/_cldr_source.py +0 -0
  139. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/adapters/_latin_filter.py +0 -0
  140. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/adapters/_wikidata_client.py +0 -0
  141. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/adapters/cldr.py +0 -0
  142. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/adapters/geonames.py +0 -0
  143. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/adapters/multilingual_names.py +0 -0
  144. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/adapters/synthetic.py +0 -0
  145. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/adapters/wikidata.py +0 -0
  146. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/dataset.py +0 -0
  147. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/evaluation.py +0 -0
  148. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/fitting.py +0 -0
  149. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/models.py +0 -0
  150. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/scoring_model.py +0 -0
  151. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/train.py +0 -0
  152. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/calibration/vectorize.py +0 -0
  153. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/__init__.py +0 -0
  154. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/__init__.py +0 -0
  155. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/_byod.py +0 -0
  156. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/_pivot.py +0 -0
  157. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/batch.py +0 -0
  158. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/bulk.py +0 -0
  159. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/cache.py +0 -0
  160. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/code_lookup.py +0 -0
  161. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/containment_api.py +0 -0
  162. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/context_input.py +0 -0
  163. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/diagnostics.py +0 -0
  164. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/entity_lookup.py +0 -0
  165. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/group_api.py +0 -0
  166. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/info.py +0 -0
  167. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/inspect.py +0 -0
  168. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/loading/__init__.py +0 -0
  169. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/loading/pack_loader.py +0 -0
  170. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/loading/paths.py +0 -0
  171. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/loading/store_builder.py +0 -0
  172. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/modules.py +0 -0
  173. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/output_spec.py +0 -0
  174. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/output_view.py +0 -0
  175. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/query_prep.py +0 -0
  176. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/resolve_flow.py +0 -0
  177. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/snap.py +0 -0
  178. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/api/suggest_flow.py +0 -0
  179. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/byod/__init__.py +0 -0
  180. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/byod/build.py +0 -0
  181. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/byod/builder.py +0 -0
  182. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/byod/intake.py +0 -0
  183. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/byod/result.py +0 -0
  184. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/config.py +0 -0
  185. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/datapack.py +0 -0
  186. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/download_api.py +0 -0
  187. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/__init__.py +0 -0
  188. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/_stages.py +0 -0
  189. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/config.py +0 -0
  190. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/decision.py +0 -0
  191. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/enrichment.py +0 -0
  192. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/interfaces.py +0 -0
  193. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/multi_runner.py +0 -0
  194. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/router.py +0 -0
  195. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/runner.py +0 -0
  196. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/suggest_rank.py +0 -0
  197. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/engine/tier_utils.py +0 -0
  198. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/errors.py +0 -0
  199. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/errors_base.py +0 -0
  200. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/explain/__init__.py +0 -0
  201. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/explain/events.py +0 -0
  202. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/explain/feature_text.py +0 -0
  203. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/explain/helpers.py +0 -0
  204. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/explain/protocol.py +0 -0
  205. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/explain/renderers.py +0 -0
  206. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/explain/result_html.py +0 -0
  207. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/explain/result_types.py +0 -0
  208. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/explain/scorecard.py +0 -0
  209. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/explain/sink.py +0 -0
  210. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/linking/__init__.py +0 -0
  211. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/linking/base_linker.py +0 -0
  212. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/linking/base_normalizer.py +0 -0
  213. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/linking/linker.py +0 -0
  214. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/linking/normalizer.py +0 -0
  215. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/merge.py +0 -0
  216. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/__init__.py +0 -0
  217. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/_repr.py +0 -0
  218. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/bulk_result.py +0 -0
  219. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/candidate.py +0 -0
  220. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/crosswalk.py +0 -0
  221. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/entity.py +0 -0
  222. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/entity_attributes.py +0 -0
  223. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/features.py +0 -0
  224. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/generation.py +0 -0
  225. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/inspection.py +0 -0
  226. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/name_grammar.py +0 -0
  227. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/query.py +0 -0
  228. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/model/result.py +0 -0
  229. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/module_registry.py +0 -0
  230. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/overlay_loader.py +0 -0
  231. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/parse/__init__.py +0 -0
  232. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/parse/_pivot.py +0 -0
  233. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/parse/automaton.py +0 -0
  234. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/parse/denylist.py +0 -0
  235. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/parse/detect.py +0 -0
  236. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/parse/engine.py +0 -0
  237. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/parse/link.py +0 -0
  238. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/parse/offsets.py +0 -0
  239. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/parse/result.py +0 -0
  240. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/registry.py +0 -0
  241. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/remote.py +0 -0
  242. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/store/__init__.py +0 -0
  243. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/store/composed_sqlite.py +0 -0
  244. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/store/composite.py +0 -0
  245. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/store/interface.py +0 -0
  246. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/store/merging.py +0 -0
  247. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/store/sqlite.py +0 -0
  248. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/store/sqlite_helpers.py +0 -0
  249. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/store/store_view.py +0 -0
  250. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/util/__init__.py +0 -0
  251. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/util/iso_codes.py +0 -0
  252. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/util/normalization.py +0 -0
  253. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/util/sentinel.py +0 -0
  254. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/core/version.py +0 -0
  255. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/diagnostics/__init__.py +0 -0
  256. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/errors/__init__.py +0 -0
  257. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/extensions.py +0 -0
  258. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/__init__.py +0 -0
  259. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/_artifacts.py +0 -0
  260. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/__init__.py +0 -0
  261. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/decision.py +0 -0
  262. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/extractor.py +0 -0
  263. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/features.py +0 -0
  264. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/normalizer.py +0 -0
  265. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/pack.py +0 -0
  266. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/scoring.py +0 -0
  267. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/sources/__init__.py +0 -0
  268. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/sources/exact_code.py +0 -0
  269. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/sources/exact_name.py +0 -0
  270. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/sources/fts.py +0 -0
  271. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/sources/fuzzy.py +0 -0
  272. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/custom/sources/fuzzy_retrieval.py +0 -0
  273. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/__init__.py +0 -0
  274. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/_specificity.py +0 -0
  275. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/build/__init__.py +0 -0
  276. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/build/builder.py +0 -0
  277. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/constraints/__init__.py +0 -0
  278. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/constraints/containment.py +0 -0
  279. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/constraints/membership.py +0 -0
  280. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/constraints/temporal.py +0 -0
  281. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/constraints/type_constraint.py +0 -0
  282. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/data/.gitkeep +0 -0
  283. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/decision.py +0 -0
  284. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/extractor.py +0 -0
  285. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/features.py +0 -0
  286. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/linker.py +0 -0
  287. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/normalizer.py +0 -0
  288. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/pack.py +0 -0
  289. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/routing.py +0 -0
  290. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/scoring.py +0 -0
  291. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/sources/__init__.py +0 -0
  292. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/sources/_short_input.py +0 -0
  293. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/sources/exact_code.py +0 -0
  294. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/sources/exact_name.py +0 -0
  295. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/sources/fts.py +0 -0
  296. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/sources/fuzzy.py +0 -0
  297. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/sources/fuzzy_retrieval.py +0 -0
  298. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/sources/query_shapes.py +0 -0
  299. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/geo/sources/symspell.py +0 -0
  300. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/__init__.py +0 -0
  301. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/_acronym.py +0 -0
  302. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/build/__init__.py +0 -0
  303. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/build/builder.py +0 -0
  304. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/constraints/__init__.py +0 -0
  305. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/constraints/country_relevance.py +0 -0
  306. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/constraints/parent_org.py +0 -0
  307. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/constraints/temporal.py +0 -0
  308. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/constraints/type_constraint.py +0 -0
  309. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/data/.gitkeep +0 -0
  310. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/decision.py +0 -0
  311. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/feature_extractor.py +0 -0
  312. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/features.py +0 -0
  313. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/linker.py +0 -0
  314. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/normalizer.py +0 -0
  315. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/pack.py +0 -0
  316. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/routing.py +0 -0
  317. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/scoring.py +0 -0
  318. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/sources/__init__.py +0 -0
  319. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/sources/acronym.py +0 -0
  320. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/sources/exact_code.py +0 -0
  321. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/sources/exact_name.py +0 -0
  322. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/sources/fts.py +0 -0
  323. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/sources/fuzzy.py +0 -0
  324. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/packs/org/sources/symspell.py +0 -0
  325. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/pandas/__init__.py +0 -0
  326. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/polars/__init__.py +0 -0
  327. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/py.typed +0 -0
  328. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/__init__.py +0 -0
  329. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/build/__init__.py +0 -0
  330. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/build/base_builder.py +0 -0
  331. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/build/schema.py +0 -0
  332. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/constraints/__init__.py +0 -0
  333. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/constraints/temporal_constraint.py +0 -0
  334. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/constraints/type_constraint.py +0 -0
  335. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/scoring_base.py +0 -0
  336. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/sources/__init__.py +0 -0
  337. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/sources/code_helpers.py +0 -0
  338. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/sources/fts_base.py +0 -0
  339. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/sources/fuzzy_base.py +0 -0
  340. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/sources/fuzzy_retrieval_base.py +0 -0
  341. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/sources/fuzzy_retrieval_brute_base.py +0 -0
  342. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/shared/sources/symspell_base.py +0 -0
  343. {resolvekit-0.1.5 → resolvekit-0.1.7}/src/resolvekit/types/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: resolvekit
3
- Version: 0.1.5
3
+ Version: 0.1.7
4
4
  Summary: Entity and place resolution system that maps messy place/entity strings and codes to canonical entities
5
5
  Keywords: entity-resolution,geocoding,place-names,data-commons,iso-codes,offline,disambiguation,normalization
6
6
  Author: Jorge Rivera
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "resolvekit"
3
- version = "0.1.5"
3
+ version = "0.1.7"
4
4
  description = "Entity and place resolution system that maps messy place/entity strings and codes to canonical entities"
5
5
  requires-python = ">=3.12"
6
6
 
@@ -134,41 +134,26 @@ def _load_and_separate_datapacks(
134
134
  return base_packs, overlay_packs
135
135
 
136
136
 
137
- def _remote_dependency_uncached(
138
- module_id: str,
139
- available: dict[str, Path],
140
- manifest_overrides: dict[str, dict[str, object]],
141
- ) -> bool:
142
- """Return True if ``module_id`` is a remote-distribution module whose data
143
- is not in the local cache.
144
-
145
- Such a dependency may be absent from a load set without error: remote
146
- packs the user hasn't downloaded are not hard errors (partial caches are
147
- first-class, and ``Resolver.auto()`` never triggers a network fetch).
148
- Bundled dependencies and unknown module ids stay hard errors.
149
- """
150
- from resolvekit.core.module_registry import load_module_metadata
151
- from resolvekit.core.remote import is_cached
152
-
153
- if module_id not in available:
154
- return False
155
- path = available[module_id]
156
- if not (path / "metadata.json").exists():
157
- return False
158
- metadata = load_module_metadata(module_id, path, overrides=manifest_overrides)
159
- return metadata.distribution == "remote" and not is_cached(metadata)
160
-
161
-
162
137
  def _validate_module_dependencies(
163
138
  base_packs: dict[str, LoadedDataPack],
164
139
  overlay_packs: dict[str, LoadedDataPack],
165
140
  pack_filter: set[str],
166
141
  ) -> None:
167
- from resolvekit.core.module_registry import get_manifest_overrides
168
-
142
+ """Log any declared ``module_dependencies`` absent from the load set.
143
+
144
+ ``module_dependencies`` are advisory cross-reference links, not hard load
145
+ requirements. An explicit selection is authoritative and ``auto()`` loads
146
+ whatever is locally available, so a declared dependency not being in the
147
+ load set is expected — partial loads are first-class, a deployed image may
148
+ ship a subset, and a dependency may simply not be installed in this
149
+ environment. None of that is an error here; it is logged for diagnostics.
150
+
151
+ (Naming an unknown module in the *request* is a different matter — that
152
+ raises ``DataModuleNotFoundError`` from :func:`_resolve_requested_module_paths`.
153
+ Hard structural requirements, overlay → base, are enforced separately by
154
+ :func:`_validate_overlay_relationships`.)
155
+ """
169
156
  available_module_ids = set(base_packs) | set(overlay_packs)
170
- registry: dict[str, Path] | None = None
171
- manifest_overrides: dict[str, dict[str, object]] | None = None
172
157
  for loaded in [*base_packs.values(), *overlay_packs.values()]:
173
158
  if pack_filter and loaded.pack_id not in pack_filter:
174
159
  continue
@@ -179,23 +164,12 @@ def _validate_module_dependencies(
179
164
  if module_id not in available_module_ids
180
165
  ]
181
166
  if missing:
182
- # An absent dependency is only a hard error when its data could
183
- # have been loaded a declared dep on a remote pack the user
184
- # hasn't downloaded is skipped, mirroring the auto-mode intent in
185
- # _resolve_requested_module_paths.
186
- if registry is None:
187
- registry = list_available_modules()
188
- manifest_overrides = get_manifest_overrides()
189
- assert manifest_overrides is not None
190
- missing = [
191
- module_id
192
- for module_id in missing
193
- if not _remote_dependency_uncached(
194
- module_id, registry, manifest_overrides
195
- )
196
- ]
197
- if missing:
198
- raise MissingModuleDependencyError(loaded.module_id, missing)
167
+ logger.debug(
168
+ "Module %s declares dependencies absent from the load set: %s "
169
+ "(advisory; honoring authoritative selection)",
170
+ loaded.module_id,
171
+ ", ".join(sorted(missing)),
172
+ )
199
173
 
200
174
 
201
175
  def _validate_overlay_relationships(
@@ -290,29 +264,23 @@ def _resolve_requested_module_paths(
290
264
  resolved[module_id] = path
291
265
 
292
266
  metadata = load_module_metadata(module_id, path, overrides=manifest_overrides)
293
- for dependency in metadata.module_dependencies:
294
- if dependency in resolved:
295
- continue
296
- # In auto mode, silently skip dependencies whose data isn't
297
- # locally available (remote packs the user hasn't downloaded
298
- # are not hard errors see v1-scope §225). In explicit mode,
299
- # likewise skip remote-uncached dependencies so requesting one
300
- # module never transitively forces sibling downloads; unknown
301
- # module ids are still queued so the queue-loop's own
302
- # ``module_id not in available`` check raises
303
- # ``DataModuleNotFoundError``.
304
- if auto_mode and (
305
- dependency not in available
306
- or not _module_data_locally_available(
267
+ # ``module_dependencies`` are advisory cross-reference links, not load
268
+ # requirements. Expand them only in auto() mode, where the load set is
269
+ # "everything locally available" anyway (silently skipping remote packs
270
+ # the user hasn't downloaded see v1-scope §225). Explicit ``module_ids``
271
+ # are AUTHORITATIVE: the load set is exactly what the caller named (plus
272
+ # overlay bases, which are structural), independent of cache or on-disk
273
+ # state so resolution is identical on a dev box with extra packs
274
+ # downloaded and on a lean deployment that bakes only the named modules.
275
+ if auto_mode:
276
+ for dependency in metadata.module_dependencies:
277
+ if dependency in resolved:
278
+ continue
279
+ if dependency not in available or not _module_data_locally_available(
307
280
  dependency, available[dependency], manifest_overrides
308
- )
309
- ):
310
- continue
311
- if not auto_mode and _remote_dependency_uncached(
312
- dependency, available, manifest_overrides
313
- ):
314
- continue
315
- queue.append(dependency)
281
+ ):
282
+ continue
283
+ queue.append(dependency)
316
284
  if metadata.is_overlay:
317
285
  for dependency in metadata.base_module_ids or []:
318
286
  if dependency in resolved:
@@ -882,7 +882,16 @@ class Resolver:
882
882
 
883
883
  Args:
884
884
  module_ids: Specific module IDs to load (e.g. ``["geo.countries"]``).
885
- Pass ``None`` to load all installed modules (same as ``auto()``).
885
+ Authoritative: the load set is exactly these modules. Declared
886
+ ``module_dependencies`` are advisory cross-references and are
887
+ NOT auto-loaded — name every module you want (e.g.
888
+ ``["geo.cities", "geo.countries"]`` for city resolution backed
889
+ by country context). The load set therefore depends only on this
890
+ argument, never on which packs happen to be cached or shipped,
891
+ so resolution is identical on a dev box and a lean deployment.
892
+ Overlay base modules are the one exception (an overlay is not a
893
+ standalone dataset, so its base is always pulled in). Pass
894
+ ``None`` to load all installed modules (same as ``auto()``).
886
895
  domains: Which domain packs to enable (default: all in modules).
887
896
  routing_mode: How to route queries (see ``Resolver.__init__`` for full docs).
888
897
  trace: Whether to collect trace events.
@@ -1032,8 +1041,9 @@ class Resolver:
1032
1041
  )
1033
1042
 
1034
1043
  # -- Country-level geo module IDs for the lite preset --
1035
- # Deliberately excludes geo.admin1 and deeper tiers whose dependency
1036
- # chains (admin2, admin3, cities …) trigger heavy SQLite composition.
1044
+ # Deliberately excludes geo.admin1 and the deeper admin / cities tiers to
1045
+ # keep cold-start time and resident memory small. Selection is authoritative,
1046
+ # so the load set is exactly these IDs — naming a tier loads only that tier.
1037
1047
  # To add admin-1 coverage, pass module_ids=["geo.countries", "geo.admin1"].
1038
1048
  _LITE_GEO_MODULE_IDS: tuple[str, ...] = (
1039
1049
  "geo.countries",
@@ -19,11 +19,11 @@ A cache hit is ``dir.exists() and (dir / "metadata.json").exists()``.
19
19
  Atomicity and cleanup
20
20
  ---------------------
21
21
  On a cache miss the build writes to a sibling ``<key>.tmp`` directory, then
22
- ``os.replace(tmp, dir)`` atomically moves it. The superseded temp dir is
23
- removed with ``shutil.rmtree(tmp, ignore_errors=True)`` (matching the pattern
24
- in ``composed_sqlite.py:326``). When ``cache=False``, the build writes to a
25
- fresh temp directory that is NOT moved into the cache it is kept for the
26
- resolver's lifetime.
22
+ ``commit_build`` promotes it to the final location (first-writer-wins: if a
23
+ valid pack already exists at the target it is kept and the redundant build is
24
+ discarded; a corrupt leftover without ``metadata.json`` is cleared first).
25
+ When ``cache=False``, the build writes to a fresh temp directory that is NOT
26
+ moved into the cache — it is kept for the resolver's lifetime.
27
27
  """
28
28
 
29
29
  from __future__ import annotations
@@ -168,20 +168,46 @@ def prepare_build_dir(key: str, *, cache: bool) -> tuple[Path, Path | None]:
168
168
 
169
169
 
170
170
  def commit_build(build_dir: Path, final_dir: Path) -> None:
171
- """Atomically promote *build_dir* to *final_dir* and clean up.
171
+ """Promote *build_dir* into *final_dir*, tolerating an existing pack.
172
172
 
173
- Uses ``os.replace(build_dir, final_dir)`` for an atomic last-writer-wins
174
- swap. If the parent of *final_dir* does not exist it is created first.
173
+ The cache key is a content hash, so a pack already present at *final_dir* —
174
+ left by a concurrent build, a retry, or a re-submit of identical content —
175
+ is equivalent to the one just built. First writer wins: an existing valid
176
+ pack is kept and *build_dir* is discarded. A corrupt leftover (a directory
177
+ without ``metadata.json``) is cleared and replaced.
178
+
179
+ ``os.replace`` cannot rename a directory onto a non-empty one (POSIX raises
180
+ ENOTEMPTY / EEXIST), so the swap is attempted optimistically and the
181
+ populated-target case is recovered below. An ``OSError`` that does not
182
+ correspond to a populated *final_dir* (e.g. ENOSPC, a permission error) is
183
+ re-raised rather than silently swallowed.
175
184
 
176
185
  Args:
177
186
  build_dir: Temp directory where the build was written.
178
187
  final_dir: Target cache directory (``cached_pack_dir(key)``).
179
188
  """
180
189
  final_dir.parent.mkdir(parents=True, exist_ok=True)
181
- os.replace(build_dir, final_dir)
182
- # Belt-and-suspenders cleanup: ``shutil.rmtree`` with ignore_errors=True
183
- # handles both cases (build_dir doesn't exist after replace, or final_dir
184
- # was clobbered by a concurrent write) without raising.
190
+ try:
191
+ os.replace(build_dir, final_dir)
192
+ except OSError:
193
+ if is_cache_hit(final_dir):
194
+ # A concurrent build, retry, or re-submit already committed an
195
+ # equivalent pack; keep it and drop our redundant build below.
196
+ pass
197
+ elif final_dir.exists():
198
+ # Corrupt/incomplete leftover (no metadata.json): clear it and move
199
+ # our build in. If another writer races a valid pack into the slot
200
+ # first, accept that pack rather than surfacing the error.
201
+ shutil.rmtree(final_dir, ignore_errors=True)
202
+ try:
203
+ os.replace(build_dir, final_dir)
204
+ except OSError:
205
+ if not is_cache_hit(final_dir):
206
+ raise
207
+ else:
208
+ # final_dir is absent, so the failure was not "target populated"
209
+ # (e.g. ENOSPC, EACCES). Surface it instead of hiding it.
210
+ raise
185
211
  shutil.rmtree(build_dir, ignore_errors=True)
186
212
 
187
213
 
File without changes
File without changes