matchbox-db 0.7.14.dev46__tar.gz → 0.7.14.dev90__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 (248) hide show
  1. matchbox_db-0.7.14.dev90/.github/dependabot.yml +11 -0
  2. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.github/workflows/ci.yml +14 -11
  3. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.github/workflows/codeql.yml +4 -4
  4. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.github/workflows/prerelease.yml +10 -9
  5. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.github/workflows/release.yml +15 -14
  6. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.pre-commit-config.yaml +1 -1
  7. {matchbox_db-0.7.14.dev46/src/matchbox_db.egg-info → matchbox_db-0.7.14.dev90}/PKG-INFO +3 -2
  8. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/evaluation.md +28 -23
  9. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/contributing.md +19 -0
  10. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/pyproject.toml +4 -2
  11. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/_handler.py +8 -19
  12. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/_settings.py +1 -1
  13. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/app.py +29 -13
  14. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/run.py +19 -1
  15. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/dags.py +29 -5
  16. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/eval/__init__.py +0 -4
  17. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/eval/samples.py +47 -29
  18. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/locations.py +2 -1
  19. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/linkers/splinklinker.py +1 -0
  20. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/models.py +13 -6
  21. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/queries.py +7 -3
  22. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/results.py +23 -4
  23. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/sources.py +4 -0
  24. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/arrow.py +1 -1
  25. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/dtos.py +60 -54
  26. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/eval.py +2 -4
  27. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/exceptions.py +22 -4
  28. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/sources.py +1 -0
  29. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/logging.py +6 -2
  30. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/transform.py +8 -8
  31. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/routers/auth.py +1 -3
  32. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/routers/eval.py +18 -29
  33. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/base.py +178 -19
  34. matchbox_db-0.7.14.dev90/src/matchbox/server/postgresql/adapter/admin.py +570 -0
  35. matchbox_db-0.7.14.dev90/src/matchbox/server/postgresql/adapter/eval.py +312 -0
  36. matchbox_db-0.7.14.dev90/src/matchbox/server/postgresql/alembic/versions/58ee4e19fb7d_add_tag_to_judgement.py +30 -0
  37. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/orm.py +2 -1
  38. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90/src/matchbox_db.egg-info}/PKG-INFO +3 -2
  39. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox_db.egg-info/SOURCES.txt +2 -2
  40. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox_db.egg-info/requires.txt +2 -1
  41. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/cli/eval/test_app.py +2 -3
  42. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_dags.py +11 -0
  43. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_eval.py +90 -8
  44. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_handler.py +1 -1
  45. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_results.py +42 -8
  46. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/test_eval.py +3 -3
  47. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/e2e/test_e2e_evaluation.py +64 -36
  48. matchbox_db-0.7.14.dev90/test/server/adapter/test_adapter_admin.py +782 -0
  49. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/adapter/test_adapter_eval.py +42 -66
  50. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/test_routes_auth.py +2 -3
  51. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/test_routes_eval.py +7 -53
  52. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/uv.lock +10 -7
  53. matchbox_db-0.7.14.dev46/src/matchbox/server/postgresql/adapter/admin.py +0 -139
  54. matchbox_db-0.7.14.dev46/src/matchbox/server/postgresql/adapter/eval.py +0 -44
  55. matchbox_db-0.7.14.dev46/src/matchbox/server/postgresql/utils/evaluation.py +0 -317
  56. matchbox_db-0.7.14.dev46/test/data/all_companies.csv +0 -1001
  57. matchbox_db-0.7.14.dev46/test/server/adapter/test_adapter_admin.py +0 -169
  58. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.github/pull_request_template.md +0 -0
  59. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.gitignore +0 -0
  60. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.vscode/launch.json +0 -0
  61. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.vscode/settings.json +0 -0
  62. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/CODEOWNERS +0 -0
  63. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/LICENSE +0 -0
  64. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/README.md +0 -0
  65. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docker-compose.yml +0 -0
  66. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/dags.md +0 -0
  67. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/eval.md +0 -0
  68. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/index.md +0 -0
  69. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/locations.md +0 -0
  70. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/models.md +0 -0
  71. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/queries.md +0 -0
  72. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/results.md +0 -0
  73. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/sources.md +0 -0
  74. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/arrow.md +0 -0
  75. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/db.md +0 -0
  76. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/dtos.md +0 -0
  77. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/eval.md +0 -0
  78. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/exceptions.md +0 -0
  79. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/factories/entities.md +0 -0
  80. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/factories/index.md +0 -0
  81. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/factories/models.md +0 -0
  82. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/factories/scenarios.md +0 -0
  83. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/factories/sources.md +0 -0
  84. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/hash.md +0 -0
  85. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/index.md +0 -0
  86. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/logging.md +0 -0
  87. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/transform.md +0 -0
  88. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/server/api.md +0 -0
  89. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/server/backends/postgresql.md +0 -0
  90. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/server/index.md +0 -0
  91. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/server/uploads.md +0 -0
  92. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/assets/matchbox-icon-dark.png +0 -0
  93. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/assets/matchbox-icon.svg +0 -0
  94. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/assets/matchbox-logo-dark.svg +0 -0
  95. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/assets/matchbox-logo-light.svg +0 -0
  96. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/cli.md +0 -0
  97. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/explore-dags.md +0 -0
  98. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/install.md +0 -0
  99. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/link-data.md +0 -0
  100. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/look-up.md +0 -0
  101. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/index.md +0 -0
  102. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/server/concepts.md +0 -0
  103. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/server/install.md +0 -0
  104. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/server/risks.md +0 -0
  105. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/stylesheets/extra.css +0 -0
  106. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/use-cases.md +0 -0
  107. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/environments/containers.env +0 -0
  108. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/environments/development.env +0 -0
  109. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/environments/sample_client.env +0 -0
  110. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/environments/sample_server.env +0 -0
  111. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/justfile +0 -0
  112. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/mkdocs.yml +0 -0
  113. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/setup.cfg +0 -0
  114. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/__init__.py +0 -0
  115. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/__init__.py +0 -0
  116. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/__init__.py +0 -0
  117. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/auth.py +0 -0
  118. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/__init__.py +0 -0
  119. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/modals.py +0 -0
  120. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/styles.tcss +0 -0
  121. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/widgets/__init__.py +0 -0
  122. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/widgets/assignment.py +0 -0
  123. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/widgets/styling.py +0 -0
  124. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/widgets/table.py +0 -0
  125. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/main.py +0 -0
  126. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/server.py +0 -0
  127. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/__init__.py +0 -0
  128. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/comparison.py +0 -0
  129. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/dedupers/__init__.py +0 -0
  130. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/dedupers/base.py +0 -0
  131. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/dedupers/naive.py +0 -0
  132. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/linkers/__init__.py +0 -0
  133. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/linkers/base.py +0 -0
  134. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/linkers/deterministic.py +0 -0
  135. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/linkers/weighteddeterministic.py +0 -0
  136. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/__init__.py +0 -0
  137. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/db.py +0 -0
  138. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/__init__.py +0 -0
  139. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/dags.py +0 -0
  140. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/entities.py +0 -0
  141. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/models.py +0 -0
  142. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/scenarios.py +0 -0
  143. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/hash.py +0 -0
  144. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/Dockerfile +0 -0
  145. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/__init__.py +0 -0
  146. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/__init__.py +0 -0
  147. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/dependencies.py +0 -0
  148. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/main.py +0 -0
  149. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/routers/__init__.py +0 -0
  150. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/routers/collection.py +0 -0
  151. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/static/favicon.png +0 -0
  152. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/static/swagger-ui-bundle.js +0 -0
  153. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/static/swagger-ui.css +0 -0
  154. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/.gitkeep +0 -0
  155. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/__init__.py +0 -0
  156. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/adapter/__init__.py +0 -0
  157. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/adapter/collections.py +0 -0
  158. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/adapter/main.py +0 -0
  159. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/adapter/query.py +0 -0
  160. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/env.py +0 -0
  161. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/script.py.mako +0 -0
  162. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/05cc4181a0ad_removed_source_key_reference_and_added_.py +0 -0
  163. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/13095b44ff09_add_user_model_groups_and_permissions_.py +0 -0
  164. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/1907c34cfa1f_create_tables_given_schema.py +0 -0
  165. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/3754ae042254_move_orm_to_root_leaf_contains_structure.py +0 -0
  166. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/40a8e5ed48f2_create_schema_without_tables.py +0 -0
  167. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/4a7c35f86405_move_sourceconfigs_from_sourceaddress_.py +0 -0
  168. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/7a2d1b10ac0f_switch_from_location_uri_to_name.py +0 -0
  169. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/83b134a86713_simplify_resolution_naming_and_hashing.py +0 -0
  170. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/8c7f757b1046_remove_human_resolution_type.py +0 -0
  171. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/95c0b5c23446_renaming_sources_to_source_config.py +0 -0
  172. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/ae63f79f6b39_renamed_sourcecolumns_to_sourcefields.py +0 -0
  173. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/b38d61ab11cc_add_index_to_the_clustersourcekey_table.py +0 -0
  174. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/b694eb292dea_add_an_index_to_the_probabilities_.py +0 -0
  175. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/beba75a24962_add_pkspace_table.py +0 -0
  176. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/c4cb937d00f4_add_modelconfigs.py +0 -0
  177. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/c774fd4b69f8_add_upload_stage_to_resolutions.py +0 -0
  178. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/dd0c3a9ecdf9_add_migrations_for_first_eval_tables.py +0 -0
  179. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/e4122bdf9b0d_renamed_primary_keys_to_just_keys.py +0 -0
  180. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/f3c9279437f4_add_content_hash_to_resolutions.py +0 -0
  181. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/f500f7d832fe_adds_collections_and_versions_to_scope_.py +0 -0
  182. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic.ini +0 -0
  183. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/db.py +0 -0
  184. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/justfile +0 -0
  185. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/mixin.py +0 -0
  186. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/utils/__init__.py +0 -0
  187. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/utils/db.py +0 -0
  188. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/utils/insert.py +0 -0
  189. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/utils/query.py +0 -0
  190. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/utils/results.py +0 -0
  191. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/uploads.py +0 -0
  192. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox_db.egg-info/dependency_links.txt +0 -0
  193. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox_db.egg-info/entry_points.txt +0 -0
  194. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox_db.egg-info/top_level.txt +0 -0
  195. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/__init__.py +0 -0
  196. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/__init__.py +0 -0
  197. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/cli/__init__.py +0 -0
  198. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/cli/eval/__init__.py +0 -0
  199. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/cli/eval/test_widgets.py +0 -0
  200. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/cli/test_main.py +0 -0
  201. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/__init__.py +0 -0
  202. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/methodologies/__init__.py +0 -0
  203. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/methodologies/test_dedupers_deterministic.py +0 -0
  204. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/methodologies/test_linkers_deterministic.py +0 -0
  205. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/methodologies/test_linkers_probabilistic.py +0 -0
  206. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/test_comparison.py +0 -0
  207. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_locations.py +0 -0
  208. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_models.py +0 -0
  209. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_queries.py +0 -0
  210. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_sources.py +0 -0
  211. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/__init__.py +0 -0
  212. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/__init__.py +0 -0
  213. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_entity_factory.py +0 -0
  214. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_linked_factory.py +0 -0
  215. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_model_factory.py +0 -0
  216. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_probability_generation.py +0 -0
  217. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_scenarios.py +0 -0
  218. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_source_factory.py +0 -0
  219. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_testkit_dag.py +0 -0
  220. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/test_dto.py +0 -0
  221. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/test_hash.py +0 -0
  222. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/test_results.py +0 -0
  223. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/test_transform.py +0 -0
  224. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/conftest.py +0 -0
  225. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/e2e/test_e2e_dag.py +0 -0
  226. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/e2e/test_e2e_methodologies.py +0 -0
  227. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/fixtures/__init__.py +0 -0
  228. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/fixtures/client.py +0 -0
  229. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/fixtures/db.py +0 -0
  230. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/justfile +0 -0
  231. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/scripts/authorisation.py +0 -0
  232. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/scripts/eval.py +0 -0
  233. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/__init__.py +0 -0
  234. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/adapter/test_adapter_collections.py +0 -0
  235. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/adapter/test_adapter_main.py +0 -0
  236. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/adapter/test_adapter_query.py +0 -0
  237. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/__init__.py +0 -0
  238. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/__init__.py +0 -0
  239. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/test_routes_collection.py +0 -0
  240. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/test_routes_main.py +0 -0
  241. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/test_routes_resolution.py +0 -0
  242. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/postgresql/__init__.py +0 -0
  243. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/postgresql/test_pg_core.py +0 -0
  244. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/postgresql/test_pg_migrations.py +0 -0
  245. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/postgresql/test_pg_sql.py +0 -0
  246. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/test_uploads.py +0 -0
  247. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/utils.py +0 -0
  248. {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/trufflehog-exclude.txt +0 -0
@@ -0,0 +1,11 @@
1
+ ---
2
+ version: 2
3
+ updates:
4
+ - package-ecosystem: "github-actions"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ - package-ecosystem: uv
9
+ directory: "/"
10
+ schedule:
11
+ interval: "weekly"
@@ -13,13 +13,16 @@ jobs:
13
13
  contents: read
14
14
 
15
15
  steps:
16
- - uses: actions/checkout@v5
16
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
17
17
 
18
18
  - name: Install uv and Python
19
- uses: astral-sh/setup-uv@v6
19
+ uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a # v7.1.5
20
20
 
21
21
  - name: Install just
22
- uses: extractions/setup-just@v2
22
+ uses: extractions/setup-crate@4993624604c307fbca528d28a3c8b60fa5ecc859 # v1.4.0
23
+ with:
24
+ repo: casey/just
25
+ version: 1.42.4
23
26
 
24
27
  - name: Format and lint
25
28
  run: just format
@@ -37,10 +40,10 @@ jobs:
37
40
  - "3.13"
38
41
 
39
42
  steps:
40
- - uses: actions/checkout@v5
43
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
41
44
 
42
45
  - name: Install uv and Python
43
- uses: astral-sh/setup-uv@v6
46
+ uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a # v7.1.5
44
47
  with:
45
48
  enable-cache: true
46
49
  cache-dependency-glob: "uv.lock"
@@ -60,7 +63,7 @@ jobs:
60
63
 
61
64
  - name: Dump docker logs
62
65
  if: failure()
63
- uses: jwalton/gh-docker-logs@v2
66
+ uses: jwalton/gh-docker-logs@2741064ab9d7af54b0b1ffb6076cf64c16f0220e # v2.2.2
64
67
 
65
68
  scan-for-secrets:
66
69
  runs-on: ubuntu-latest
@@ -68,7 +71,7 @@ jobs:
68
71
  contents: read
69
72
 
70
73
  steps:
71
- - uses: actions/checkout@v5
74
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
72
75
  with:
73
76
  fetch-depth: 0
74
77
 
@@ -90,10 +93,10 @@ jobs:
90
93
  contents: read
91
94
 
92
95
  steps:
93
- - uses: actions/checkout@v5
96
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
94
97
 
95
98
  - name: Install uv and Python
96
- uses: astral-sh/setup-uv@v6
99
+ uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a # v7.1.5
97
100
  with:
98
101
  python-version: "3.11"
99
102
 
@@ -109,12 +112,12 @@ jobs:
109
112
  contents: read
110
113
 
111
114
  steps:
112
- - uses: actions/checkout@v5
115
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
113
116
  with:
114
117
  fetch-depth: 0
115
118
 
116
119
  - name: Install uv and Python
117
- uses: astral-sh/setup-uv@v6
120
+ uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a # v7.1.5
118
121
  with:
119
122
  python-version: "3.11"
120
123
 
@@ -33,17 +33,17 @@ jobs:
33
33
 
34
34
  steps:
35
35
  - name: Checkout repository
36
- uses: actions/checkout@v6
36
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
37
37
 
38
38
  - name: Initialise CodeQL
39
- uses: github/codeql-action/init@v4
39
+ uses: github/codeql-action/init@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
40
40
  with:
41
41
  languages: ${{ matrix.language }}
42
42
 
43
43
  # Details on CodeQL's query packs refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
44
- queries: security-and-quality
44
+ queries: security-extended
45
45
 
46
46
  - name: Perform CodeQL Analysis
47
- uses: github/codeql-action/analyze@v4
47
+ uses: github/codeql-action/analyze@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
48
48
  with:
49
49
  category: "/language:${{matrix.language}}"
@@ -19,19 +19,19 @@ jobs:
19
19
 
20
20
  steps:
21
21
  - name: Checkout repository
22
- uses: actions/checkout@v5
22
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
23
23
  with:
24
24
  fetch-depth: 0
25
25
 
26
26
  - name: Log in to GitHub packages Docker registry
27
- uses: docker/login-action@v3
27
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
28
28
  with:
29
29
  registry: ${{ env.REGISTRY }}
30
30
  username: ${{ github.actor }}
31
31
  password: ${{ secrets.GITHUB_TOKEN }}
32
32
 
33
33
  - name: Install uv
34
- uses: astral-sh/setup-uv@v6
34
+ uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a # v7.1.5
35
35
  with:
36
36
  python-version: "3.11"
37
37
 
@@ -47,14 +47,14 @@ jobs:
47
47
  run: uv build
48
48
 
49
49
  - name: Upload package artifacts
50
- uses: actions/upload-artifact@v4
50
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
51
51
  with:
52
52
  name: package-dist
53
53
  path: ./dist
54
54
 
55
55
  - name: Extract tag metadata for Docker
56
56
  id: meta
57
- uses: docker/metadata-action@v5
57
+ uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5.10.0
58
58
  with:
59
59
  images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
60
60
  tags: |
@@ -62,7 +62,7 @@ jobs:
62
62
  type=raw,value=development
63
63
 
64
64
  - name: Build and push Docker image
65
- uses: docker/build-push-action@v6
65
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
66
66
  with:
67
67
  context: .
68
68
  file: src/matchbox/server/Dockerfile
@@ -78,10 +78,11 @@ jobs:
78
78
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
79
79
 
80
80
  - name: Create development prerelease
81
- uses: ncipollo/release-action@v1
81
+ uses: ncipollo/release-action@b7eabc95ff50cbeeedec83973935c8f306dfcd0b # v1.20.0
82
82
  with:
83
83
  tag: development
84
84
  name: Development
85
+ immutableCreate: true
85
86
  prerelease: true
86
87
  body: |
87
88
  This is a development build, usually from the latest main branch.
@@ -101,10 +102,10 @@ jobs:
101
102
 
102
103
  steps:
103
104
  - name: Download package artifacts
104
- uses: actions/download-artifact@v4
105
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
105
106
  with:
106
107
  name: package-dist
107
108
  path: ./dist
108
109
 
109
110
  - name: Publish package to PyPI
110
- uses: pypa/gh-action-pypi-publish@release/v1
111
+ uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
@@ -27,7 +27,7 @@ jobs:
27
27
 
28
28
  steps:
29
29
  - name: Checkout repository
30
- uses: actions/checkout@v5
30
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
31
31
  with:
32
32
  ref: main
33
33
  fetch-depth: 0
@@ -66,7 +66,7 @@ jobs:
66
66
  echo "Git tag: $git_tag"
67
67
 
68
68
  - name: Install uv
69
- uses: astral-sh/setup-uv@v6
69
+ uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a # v7.1.5
70
70
  with:
71
71
  python-version: "3.11"
72
72
 
@@ -76,7 +76,7 @@ jobs:
76
76
  run: uv build
77
77
 
78
78
  - name: Upload package artifacts
79
- uses: actions/upload-artifact@v4
79
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
80
80
  with:
81
81
  name: package-dist
82
82
  path: ./dist
@@ -88,12 +88,12 @@ jobs:
88
88
  run: uv run mkdocs build
89
89
 
90
90
  - name: Upload documentation artifact
91
- uses: actions/upload-pages-artifact@v3
91
+ uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
92
92
  with:
93
93
  path: site/
94
94
 
95
95
  - name: Log in to GitHub packages Docker registry
96
- uses: docker/login-action@v3
96
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
97
97
  with:
98
98
  registry: ${{ env.REGISTRY }}
99
99
  username: ${{ github.actor }}
@@ -101,7 +101,7 @@ jobs:
101
101
 
102
102
  - name: Extract tag metadata for Docker
103
103
  id: meta
104
- uses: docker/metadata-action@v5
104
+ uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5.10.0
105
105
  with:
106
106
  images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
107
107
  tags: |
@@ -109,7 +109,7 @@ jobs:
109
109
  type=raw,value=latest
110
110
 
111
111
  - name: Build Docker image
112
- uses: docker/build-push-action@v6
112
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
113
113
  with:
114
114
  context: .
115
115
  file: src/matchbox/server/Dockerfile
@@ -126,7 +126,7 @@ jobs:
126
126
  > ${{ runner.temp }}/docker-image.tar
127
127
 
128
128
  - name: Upload Docker image artifact
129
- uses: actions/upload-artifact@v4
129
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
130
130
  with:
131
131
  name: docker-image
132
132
  path: ${{ runner.temp }}/docker-image.tar
@@ -141,13 +141,13 @@ jobs:
141
141
 
142
142
  steps:
143
143
  - name: Download package artifacts
144
- uses: actions/download-artifact@v4
144
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
145
145
  with:
146
146
  name: package-dist
147
147
  path: ./dist
148
148
 
149
149
  - name: Publish package to PyPI
150
- uses: pypa/gh-action-pypi-publish@release/v1
150
+ uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
151
151
 
152
152
  deploy-docs:
153
153
  needs: build
@@ -164,7 +164,7 @@ jobs:
164
164
  steps:
165
165
  - name: Deploy documentation to GitHub Pages
166
166
  id: deployment
167
- uses: actions/deploy-pages@v4
167
+ uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
168
168
 
169
169
  deploy-docker:
170
170
  needs: build
@@ -175,7 +175,7 @@ jobs:
175
175
 
176
176
  steps:
177
177
  - name: Download Docker image artifact
178
- uses: actions/download-artifact@v4
178
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
179
179
  with:
180
180
  name: docker-image
181
181
  path: ${{ runner.temp }}
@@ -184,7 +184,7 @@ jobs:
184
184
  run: docker load --input ${{ runner.temp }}/docker-image.tar
185
185
 
186
186
  - name: Log in to GitHub packages Docker registry
187
- uses: docker/login-action@v3
187
+ uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
188
188
  with:
189
189
  registry: ${{ env.REGISTRY }}
190
190
  username: ${{ github.actor }}
@@ -201,8 +201,9 @@ jobs:
201
201
 
202
202
  steps:
203
203
  - name: Create tag and GitHub release
204
- uses: ncipollo/release-action@v1
204
+ uses: ncipollo/release-action@b7eabc95ff50cbeeedec83973935c8f306dfcd0b # v1.20.0
205
205
  with:
206
206
  tag: ${{ needs.build.outputs.tag }}
207
207
  name: ${{ needs.build.outputs.tag }}
208
+ immutableCreate: true
208
209
  generateReleaseNotes: true
@@ -31,7 +31,7 @@ repos:
31
31
 
32
32
  # Mandatory internal hooks
33
33
  - repo: https://github.com/uktrade/github-standards
34
- rev: v1.1.2 # update periodically with pre-commit autoupdate
34
+ rev: v1.2.0 # update periodically with pre-commit autoupdate
35
35
  hooks:
36
36
  - id: run-security-scan
37
37
  verbose: false
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matchbox-db
3
- Version: 0.7.14.dev46
3
+ Version: 0.7.14.dev90
4
4
  Summary: A framework for orchestrating and comparing data linking and deduplication methodologies.
5
5
  Author: Department for Business and Trade
6
6
  Project-URL: Documentation, https://uktrade.github.io/matchbox/
@@ -11,12 +11,14 @@ License-File: LICENSE
11
11
  Requires-Dist: click>=8.1.7
12
12
  Requires-Dist: cryptography>=44.0.2
13
13
  Requires-Dist: duckdb>=1.1.1
14
+ Requires-Dist: email-validator>=2.3.0
14
15
  Requires-Dist: faker>=36.1.1
15
16
  Requires-Dist: frozendict>=2.4.6
16
17
  Requires-Dist: httpx>=0.28.0
17
18
  Requires-Dist: pandas>=2.2.3
18
19
  Requires-Dist: polars-hash>=0.5.3
19
20
  Requires-Dist: polars>=1.32.3
21
+ Requires-Dist: psutil>=7.1.3
20
22
  Requires-Dist: psycopg[binary,pool]>=3.2.6
21
23
  Requires-Dist: pyarrow>=17.0.0
22
24
  Requires-Dist: pydantic-settings>=2.5.2
@@ -29,7 +31,6 @@ Requires-Dist: sqlglot[rs]>=26.12.1
29
31
  Requires-Dist: tenacity>=9.1.2
30
32
  Requires-Dist: textual>=0.87.1
31
33
  Requires-Dist: typer>=0.15.0
32
- Requires-Dist: psutil>=7.1.3
33
34
  Provides-Extra: server
34
35
  Requires-Dist: adbc-driver-postgresql>=1.5.0; extra == "server"
35
36
  Requires-Dist: alembic>=1.15.2; extra == "server"
@@ -7,20 +7,36 @@ After running models to deduplicate and link your data, you’ll likely want to
7
7
 
8
8
  To calculate these, we need a **ground truth** - a set of correct matches created by people. This is called **validation data**.
9
9
 
10
+ ## Creating a sample set
11
+
12
+ First, you need to create a local set of sample clusters that you want to evaluate. If you're evaluating a single model:
13
+
14
+ ```python
15
+ dag = ... # your DAG, defined elsewhere
16
+ dag.resolve().as_dump().write_parquet("samples.pq")
17
+ ```
18
+
19
+ Or, if you're comparing two models:
20
+
21
+ ```python
22
+ dag = ... # your DAG, defined elsewhere
23
+
24
+ resolved_model1 = dag.resolve("model1")
25
+ resolved_model2 = dag.resolve("model2")
26
+ # Forms clusters as the union of the clusters output by each model
27
+ resolved_joint = resolved_model1.merge(resolved_model2)
28
+ resolved_joint.as_dump().write_parquet("samples.pq")
29
+ ```
30
+
10
31
  ## Creating validation data
11
32
 
12
33
  Matchbox provides a terminal-based UI to help you create this validation data. Here's how it works:
13
34
 
14
- 1. **Launch the evaluation tool** using `matchbox eval --collection <collection_name> --user <your_username>`
15
- a. You can also set your username with the `MB__CLIENT__USER` environment variable.
16
- b. Define `MB__CLIENT__DEFAULT_WAREHOUSE` (or use `--warehouse <connection_string>`) so the CLI can reach your warehouse.
17
- c. If your DAG isn't complete, include `--resolution <resolution_name>` to pick a specific run.
18
- 2. Matchbox will **download clusters** for you to review. It avoids clusters you've already judged and focuses on ones the model is unsure about.
19
- 3. In the terminal interface, you'll review each cluster:
20
- * Use keyboard commands like `b+1,3,5` to assign rows 1, 3, and 5 to group B
21
- * Press `space` to send your judgements to Matchbox
22
- * Skip to the next item without reviewing with `→` (right arrow)
23
- * Press `?` or `F1` for help with commands
35
+ 1. **Launch the evaluation tool** using `matchbox eval --collection <collection_name> --user <your_username> --file <path_to_samples>`
36
+ - Define `MB__CLIENT__DEFAULT_WAREHOUSE` (or use `--warehouse <connection_string>`) so the CLI can reach your warehouse.
37
+ - Use `--tag <session_tag>` to tag your judgements so they can be filtered later
38
+ 2. Matchbox will **load clusters** from your warehouse, for you to review.
39
+ 3. In the terminal interface, you will review each cluster.
24
40
 
25
41
  Once enough users have reviewed clusters, this data can be used to evaluate model performance.
26
42
 
@@ -80,11 +96,11 @@ model = source.query().deduper(
80
96
  results = model.run()
81
97
  ```
82
98
 
83
- Download validation data:
99
+ Download validation data, filtering by tag:
84
100
 
85
101
  ```python
86
102
  from matchbox.client.eval import EvalData
87
- eval_data = EvalData()
103
+ eval_data = EvalData(tag="companies__15_02_2025")
88
104
  ```
89
105
 
90
106
  Check precision and recall at a specific threshold:
@@ -93,17 +109,6 @@ Check precision and recall at a specific threshold:
93
109
  precision, recall = eval_data.precision_recall(results, threshold=0.5)
94
110
  ```
95
111
 
96
- Compare multiple model resolutions:
97
-
98
- ```python
99
- from matchbox.client.eval import compare_models, ModelResolutionPath
100
-
101
- comparison = compare_models([
102
- ModelResolutionPath(collection="companies", run=1, name="deduper"),
103
- ModelResolutionPath(collection="companies", run=2, name="deduper"),
104
- ])
105
- ```
106
-
107
112
  !!! tip "Deterministic models"
108
113
  Some types of model (like the `NaiveDeduper` used in the example) only output 1s for the matches they make, hence **threshold truth tuning doesn't apply**:
109
114
 
@@ -166,3 +166,22 @@ We commit as frequently as possible. We keep our commits as atomic as possible.
166
166
  ### AI
167
167
 
168
168
  In order to help reviewers prioritise their time appropriately, we expect any use of AI to be declared in your PR comment.
169
+
170
+ ### Actions
171
+
172
+ In order to avoid supply chain attacks, we [pin all actions in workflows](https://codeql.github.com/codeql-query-help/actions/actions-unpinned-tag/).
173
+
174
+ When upgrading actions, we expect PR comments to confirm that the new commit is safe. You need to cover:
175
+
176
+ * That the commit's `action.yml` only uses pinned child actions, if it has children
177
+ * That there are no critical security concerns raised in the issues
178
+
179
+ See [#395](https://github.com/uktrade/matchbox/pull/395) for an example of the due diligence we expect.
180
+
181
+ We suggest using tools like [`wayneashleyberry/gh-act`](https://github.com/wayneashleyberry/gh-act) to help manage this, allowing you to perform the upgrade in a single line:
182
+
183
+ ```shell
184
+ gh act update --pin
185
+ ```
186
+
187
+ You will still need to independently verify that the new pins are safe.
@@ -10,12 +10,14 @@ dependencies = [
10
10
  "click>=8.1.7",
11
11
  "cryptography>=44.0.2",
12
12
  "duckdb>=1.1.1",
13
+ "email-validator>=2.3.0",
13
14
  "faker>=36.1.1",
14
15
  "frozendict>=2.4.6",
15
16
  "httpx>=0.28.0",
16
17
  "pandas>=2.2.3",
17
18
  "polars-hash>=0.5.3",
18
19
  "polars>=1.32.3",
20
+ "psutil>=7.1.3",
19
21
  "psycopg[binary, pool]>=3.2.6",
20
22
  "pyarrow>=17.0.0",
21
23
  "pydantic-settings>=2.5.2",
@@ -28,7 +30,6 @@ dependencies = [
28
30
  "tenacity>=9.1.2",
29
31
  "textual>=0.87.1",
30
32
  "typer>=0.15.0",
31
- "psutil>=7.1.3"
32
33
  ]
33
34
 
34
35
  [project.optional-dependencies]
@@ -89,7 +90,8 @@ default-groups = ["dev", "typing"]
89
90
  package = true
90
91
  upgrade-package = ["ruff"]
91
92
  constraint-dependencies = [
92
- "urllib3>=2.5.0",
93
+ "urllib3>=2.6.0",
94
+ "werkzeug>=3.1.4",
93
95
  "setuptools-scm>=9.2.0"
94
96
  ]
95
97
 
@@ -50,7 +50,7 @@ from matchbox.common.dtos import (
50
50
  UploadStage,
51
51
  User,
52
52
  )
53
- from matchbox.common.eval import Judgement, ModelComparison
53
+ from matchbox.common.eval import Judgement
54
54
  from matchbox.common.exceptions import (
55
55
  MatchboxCollectionNotFoundError,
56
56
  MatchboxDataNotFound,
@@ -189,7 +189,7 @@ def login(user_name: str) -> int:
189
189
  """Log into Matchbox and return the user ID."""
190
190
  logger.debug(f"Log in attempt for {user_name}")
191
191
  response = CLIENT.post("/auth/login", json=User(user_name=user_name).model_dump())
192
- return User.model_validate(response.json()).user_id
192
+ return User.model_validate(response.json()).user_name
193
193
 
194
194
 
195
195
  @http_retry
@@ -515,7 +515,7 @@ def delete_resolution(
515
515
 
516
516
 
517
517
  @http_retry
518
- def sample_for_eval(n: int, resolution: ModelResolutionPath, user_id: int) -> Table:
518
+ def sample_for_eval(n: int, resolution: ModelResolutionPath, user_name: str) -> Table:
519
519
  """Sample model results for evaluation."""
520
520
  res = CLIENT.get(
521
521
  "/eval/samples",
@@ -525,7 +525,7 @@ def sample_for_eval(n: int, resolution: ModelResolutionPath, user_id: int) -> Ta
525
525
  "collection": resolution.collection,
526
526
  "run_id": resolution.run,
527
527
  "resolution": resolution.name,
528
- "user_id": user_id,
528
+ "user_name": user_name,
529
529
  }
530
530
  ),
531
531
  )
@@ -533,31 +533,21 @@ def sample_for_eval(n: int, resolution: ModelResolutionPath, user_id: int) -> Ta
533
533
  return read_table(BytesIO(res.content))
534
534
 
535
535
 
536
- @http_retry
537
- def compare_models(
538
- resolutions: list[ModelResolutionPath],
539
- ) -> ModelComparison:
540
- """Get a model comparison for a set of model resolutions."""
541
- res = CLIENT.post("/eval/compare", json=[r.model_dump() for r in resolutions])
542
- scores = {resolution: tuple(pr) for resolution, pr in res.json().items()}
543
- return scores
544
-
545
-
546
536
  @http_retry
547
537
  def send_eval_judgement(judgement: Judgement) -> None:
548
538
  """Send judgements to the server."""
549
539
  logger.debug(
550
540
  f"Submitting judgement {judgement.shown}:{judgement.endorsed} "
551
- f"for {judgement.user_id}"
541
+ f"for {judgement.user_name}"
552
542
  )
553
543
  CLIENT.post("/eval/judgements", json=judgement.model_dump())
554
544
 
555
545
 
556
546
  @http_retry
557
- def download_eval_data() -> tuple[Table, Table]:
547
+ def download_eval_data(tag: str | None = None) -> tuple[Table, Table]:
558
548
  """Download all judgements from the server."""
559
549
  logger.debug("Retrieving all judgements.")
560
- res = CLIENT.get("/eval/judgements")
550
+ res = CLIENT.get("/eval/judgements", params=url_params({"tag": tag}))
561
551
 
562
552
  zip_bytes = BytesIO(res.content)
563
553
  with zipfile.ZipFile(zip_bytes, "r") as zip_file:
@@ -592,8 +582,7 @@ def count_backend_items(
592
582
  log_prefix = "Backend count"
593
583
  logger.debug("Counting", prefix=log_prefix)
594
584
 
595
- params = {"entity": entity} if entity else {}
596
- res = CLIENT.get("/database/count", params=url_params(params))
585
+ res = CLIENT.get("/database/count", params=url_params({"entity": entity}))
597
586
 
598
587
  counts = res.json()
599
588
  logger.debug(f"Counts: {counts}", prefix=log_prefix)
@@ -42,7 +42,7 @@ class ClientSettings(BaseSettings):
42
42
  # Decode header and payload
43
43
  header = json.loads(base64.urlsafe_b64decode(parts[0] + "=="))
44
44
  payload = json.loads(base64.urlsafe_b64decode(parts[1] + "=="))
45
- except Exception as e: # noqa: BLE0001
45
+ except Exception as e: # noqa: BLE001
46
46
  raise ValueError("Invalid JWT.") from e
47
47
 
48
48
  # Basic header checks