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.
- matchbox_db-0.7.14.dev90/.github/dependabot.yml +11 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.github/workflows/ci.yml +14 -11
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.github/workflows/codeql.yml +4 -4
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.github/workflows/prerelease.yml +10 -9
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.github/workflows/release.yml +15 -14
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.pre-commit-config.yaml +1 -1
- {matchbox_db-0.7.14.dev46/src/matchbox_db.egg-info → matchbox_db-0.7.14.dev90}/PKG-INFO +3 -2
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/evaluation.md +28 -23
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/contributing.md +19 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/pyproject.toml +4 -2
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/_handler.py +8 -19
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/_settings.py +1 -1
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/app.py +29 -13
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/run.py +19 -1
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/dags.py +29 -5
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/eval/__init__.py +0 -4
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/eval/samples.py +47 -29
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/locations.py +2 -1
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/linkers/splinklinker.py +1 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/models.py +13 -6
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/queries.py +7 -3
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/results.py +23 -4
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/sources.py +4 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/arrow.py +1 -1
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/dtos.py +60 -54
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/eval.py +2 -4
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/exceptions.py +22 -4
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/sources.py +1 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/logging.py +6 -2
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/transform.py +8 -8
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/routers/auth.py +1 -3
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/routers/eval.py +18 -29
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/base.py +178 -19
- matchbox_db-0.7.14.dev90/src/matchbox/server/postgresql/adapter/admin.py +570 -0
- matchbox_db-0.7.14.dev90/src/matchbox/server/postgresql/adapter/eval.py +312 -0
- matchbox_db-0.7.14.dev90/src/matchbox/server/postgresql/alembic/versions/58ee4e19fb7d_add_tag_to_judgement.py +30 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/orm.py +2 -1
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90/src/matchbox_db.egg-info}/PKG-INFO +3 -2
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox_db.egg-info/SOURCES.txt +2 -2
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox_db.egg-info/requires.txt +2 -1
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/cli/eval/test_app.py +2 -3
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_dags.py +11 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_eval.py +90 -8
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_handler.py +1 -1
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_results.py +42 -8
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/test_eval.py +3 -3
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/e2e/test_e2e_evaluation.py +64 -36
- matchbox_db-0.7.14.dev90/test/server/adapter/test_adapter_admin.py +782 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/adapter/test_adapter_eval.py +42 -66
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/test_routes_auth.py +2 -3
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/test_routes_eval.py +7 -53
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/uv.lock +10 -7
- matchbox_db-0.7.14.dev46/src/matchbox/server/postgresql/adapter/admin.py +0 -139
- matchbox_db-0.7.14.dev46/src/matchbox/server/postgresql/adapter/eval.py +0 -44
- matchbox_db-0.7.14.dev46/src/matchbox/server/postgresql/utils/evaluation.py +0 -317
- matchbox_db-0.7.14.dev46/test/data/all_companies.csv +0 -1001
- matchbox_db-0.7.14.dev46/test/server/adapter/test_adapter_admin.py +0 -169
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.github/pull_request_template.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.gitignore +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.vscode/launch.json +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/.vscode/settings.json +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/CODEOWNERS +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/LICENSE +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/README.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docker-compose.yml +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/dags.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/eval.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/index.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/locations.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/models.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/queries.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/results.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/client/sources.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/arrow.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/db.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/dtos.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/eval.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/exceptions.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/factories/entities.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/factories/index.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/factories/models.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/factories/scenarios.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/factories/sources.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/hash.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/index.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/logging.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/common/transform.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/server/api.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/server/backends/postgresql.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/server/index.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/api/server/uploads.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/assets/matchbox-icon-dark.png +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/assets/matchbox-icon.svg +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/assets/matchbox-logo-dark.svg +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/assets/matchbox-logo-light.svg +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/cli.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/explore-dags.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/install.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/link-data.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/client/look-up.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/index.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/server/concepts.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/server/install.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/server/risks.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/stylesheets/extra.css +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/docs/use-cases.md +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/environments/containers.env +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/environments/development.env +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/environments/sample_client.env +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/environments/sample_server.env +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/justfile +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/mkdocs.yml +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/setup.cfg +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/auth.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/modals.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/styles.tcss +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/widgets/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/widgets/assignment.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/widgets/styling.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/eval/widgets/table.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/main.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/cli/server.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/comparison.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/dedupers/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/dedupers/base.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/dedupers/naive.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/linkers/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/linkers/base.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/linkers/deterministic.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/client/models/linkers/weighteddeterministic.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/db.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/dags.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/entities.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/models.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/factories/scenarios.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/common/hash.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/Dockerfile +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/dependencies.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/main.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/routers/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/routers/collection.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/static/favicon.png +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/static/swagger-ui-bundle.js +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/api/static/swagger-ui.css +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/.gitkeep +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/adapter/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/adapter/collections.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/adapter/main.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/adapter/query.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/env.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/script.py.mako +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic/versions/c4cb937d00f4_add_modelconfigs.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/alembic.ini +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/db.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/justfile +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/mixin.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/utils/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/utils/db.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/utils/insert.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/utils/query.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/postgresql/utils/results.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox/server/uploads.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox_db.egg-info/dependency_links.txt +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox_db.egg-info/entry_points.txt +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/src/matchbox_db.egg-info/top_level.txt +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/cli/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/cli/eval/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/cli/eval/test_widgets.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/cli/test_main.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/methodologies/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/methodologies/test_dedupers_deterministic.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/methodologies/test_linkers_deterministic.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/methodologies/test_linkers_probabilistic.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/models/test_comparison.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_locations.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_models.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_queries.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/client/test_sources.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_entity_factory.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_linked_factory.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_model_factory.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_probability_generation.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_scenarios.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_source_factory.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/factories/test_testkit_dag.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/test_dto.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/test_hash.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/test_results.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/common/test_transform.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/conftest.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/e2e/test_e2e_dag.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/e2e/test_e2e_methodologies.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/fixtures/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/fixtures/client.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/fixtures/db.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/justfile +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/scripts/authorisation.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/scripts/eval.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/adapter/test_adapter_collections.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/adapter/test_adapter_main.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/adapter/test_adapter_query.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/test_routes_collection.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/test_routes_main.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/api/routes/test_routes_resolution.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/postgresql/__init__.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/postgresql/test_pg_core.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/postgresql/test_pg_migrations.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/postgresql/test_pg_sql.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/server/test_uploads.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/test/utils.py +0 -0
- {matchbox_db-0.7.14.dev46 → matchbox_db-0.7.14.dev90}/trufflehog-exclude.txt +0 -0
|
@@ -13,13 +13,16 @@ jobs:
|
|
|
13
13
|
contents: read
|
|
14
14
|
|
|
15
15
|
steps:
|
|
16
|
-
- uses: actions/checkout@
|
|
16
|
+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
17
17
|
|
|
18
18
|
- name: Install uv and Python
|
|
19
|
-
uses: astral-sh/setup-uv@
|
|
19
|
+
uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a # v7.1.5
|
|
20
20
|
|
|
21
21
|
- name: Install just
|
|
22
|
-
uses: extractions/setup-
|
|
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@
|
|
43
|
+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
41
44
|
|
|
42
45
|
- name: Install uv and Python
|
|
43
|
-
uses: astral-sh/setup-uv@
|
|
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@
|
|
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@
|
|
96
|
+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
94
97
|
|
|
95
98
|
- name: Install uv and Python
|
|
96
|
-
uses: astral-sh/setup-uv@
|
|
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@
|
|
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@
|
|
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-
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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.
|
|
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.
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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.
|
|
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
|
|
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()).
|
|
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,
|
|
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
|
-
"
|
|
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.
|
|
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
|
-
|
|
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:
|
|
45
|
+
except Exception as e: # noqa: BLE001
|
|
46
46
|
raise ValueError("Invalid JWT.") from e
|
|
47
47
|
|
|
48
48
|
# Basic header checks
|