Skip to main content

bods-fixtures

Canonical BODS v0.4 fixtures and edge-case conformance suite, shared across the BODS adapter and query-engine ecosystem.

Why this exists

The BODS adapter suite (OpenCorporates, ICIJ, Kyckr, BrightQuery, FtM, AML AI, Lance, Neo4j, GQL…) currently ships per-repo fixtures. That means each repo decides independently what "anonymous person" or "circular ownership" looks like, and nothing validates that an entity observed in two sources produces equivalent BODS.

bods-fixtures is the single source of truth:

  • a small, curated set of BODS v0.4 statement bundles, each targeting a specific semantic edge case
  • a co-located .expected.md spec per fixture describing what a correct adapter / query engine should do with it
  • a thin Python loader so adapters can parametrize their test suites against the shared pack

Install

pip install bods-v04-fixtures

The PyPI distribution is bods-v04-fixtures — the name makes the version scope explicit and leaves the generic bods-fixtures name available for future ecosystem-wide tooling. The Python import path is unchanged: from bods_fixtures import ....

Usage

from bods_fixtures import load, list_cases

fixture = load("core/01-direct-ownership")
fixture.statements                       # parsed BODS v0.4 statements
fixture.statement_ids                    # all statementIds
fixture.record_ids                       # all recordIds
fixture.by_record_type("person")         # filter by recordType: entity|person|relationship
fixture.find_record("rec-jane-smith-1975")  # look up a record by recordId
fixture.description                      # rendered .expected.md spec

list_cases()                             # all fixtures
list_cases("edge-cases")                 # one category

BODS v0.4 only. Fixtures use the canonical recordType / recordDetails envelope and string-based recordId references for relationships, per the official 0.4 schema. Adapters built against the older statementType / describedByEntityStatement shape (BODS v0.3) will need updating before they can consume this pack — which is one of the things this pack exists to surface.

Parametrised tests

import pytest
from bods_fixtures import list_cases, load

@pytest.mark.parametrize("name", list_cases())
def test_my_adapter_round_trips(name):
    fixture = load(name)
    result = my_adapter.convert(fixture.statements)
    assert ...

What's in the pack

Today (v0.1):

Category Case Tests
core 01-direct-ownership baseline: one person, 75% shareholding + voting
edge-cases 10-circular-ownership A owns B owns A — UBO resolver termination
edge-cases 11-anonymous-person declared-unknown UBO, reason code preserved

Planned (see CHANGELOG for target versions):

  • core: person-with-control, entity-owns-entity, multiple-interest-types
  • edge-cases: indirect chain, threshold boundaries, trust/nominee, joint ownership, historical interest, replaced statement
  • cross-border: multi-jurisdiction chains, bearer shares
  • cross-source: same entity from ≥2 source adapters, for consistency tests
  • scale: synthetic 1k / 100k statement bundles for query-engine benchmarks
  • invalid: deliberately malformed, for negative tests

Governance

  • Versioning: semver. A fixture rename, removal, or semantic change bumps major. Field additions inside a fixture bump minor. Pure documentation edits bump patch.
  • Adding a fixture: the .expected.md is reviewed like a spec change. It is the durable record of what the fixture is testing and what correct behaviour looks like.
  • Removing a fixture: requires a deprecation cycle — mark in CHANGELOG one major version before removal.

Validation

The shipped tests are structural (references resolve, IDs unique, BODS version declared). For full schema validation against the BODS v0.4 JSON schema:

pip install 'bods-v04-fixtures[validate]'

(schema validation suite is a v0.2 deliverable.)

License

MIT. Fixture content is CC-BY-SA 4.0 to match BODS licensing conventions.

Metadata

Release files for bods-v04-fixtures 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bods-v04-fixtures 0.1.1
File Size Uploaded Provenance
bods_v04_fixtures-0.1.1.tar.gz 13.1 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for bods-v04-fixtures 0.1.1
File Interpreter ABI Platform
bods_v04_fixtures-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 26.0 kB

Release files / bods_v04_fixtures-0.1.1.tar.gz

Download URL bods_v04_fixtures-0.1.1.tar.gz
Size 13.1 kB
Tags Source
SHA-256 checksum
How to use checksums
061a0ff22c1c21b355303a75b6529ae4b46b483badd23b8f2fc0742a71962826
BLAKE2b-256 checksum
How to use checksums
c89cae1562b40c9bcdfd0fdb69c7979c7692bcc954ebdb16aaee718511edb456
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 20, 2026.

Transparency log

Release files / bods_v04_fixtures-0.1.1-py3-none-any.whl

Download URL bods_v04_fixtures-0.1.1-py3-none-any.whl
Size 13.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1d751709b3e7e5584f413b146fc7fa75e6e62d2061e1bf78f7ca9c2850bf1910
BLAKE2b-256 checksum
How to use checksums
c7c5ebc6053bf5923ada4b7d878c84544b87e4b60af244e19c4c29c23d9e26e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 20, 2026.

Transparency log

Security for bods-v04-fixtures 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for bods_v04_fixtures-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 20, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page