Schema workflow#
src/rsm_schema/schema/rsm.schema.json is canonical. Everything else in the package
is derived from it.
After changing the schema#
Regenerate the models and run the checks:
poetry run datamodel-codegen
poetry run pre-commit run --all-files
poetry run pytest
Commit the schema and the regenerated src/rsm_schema/generated/models.py together.
CI regenerates the models and rejects a stale generated module.
Generation is configured under [tool.datamodel-codegen] in pyproject.toml.
If a change adds a name to $defs, export its generated counterpart from
src/rsm_schema/generated/__init__.py to include it in the public API.
Releasing a new version#
The release version appears in both the schema’s $id and its published URL. Update
them together:
Bump
versioninpyproject.toml.Set
$idtohttps://lumc-dcc.github.io/rsm-schema/schema/<version>/rsm.schema.json.Copy the schema into the archive:
mkdir -p schema-archive/<version> cp src/rsm_schema/schema/rsm.schema.json schema-archive/<version>/
Update the versioned URL quoted at the top of
README.mdand the documentation home.
Where the two validation paths differ#
The package has two validation paths with one documented difference.
When contributors is non-empty, JSON Schema validation requires at least one
author. datamodel-code-generator cannot express this list-wide if/then
condition in a Pydantic model. A list containing only maintainers therefore fails
validate_document() but passes RSMMetadata.model_validate().
Everything else the schema states is enforced on both paths, including the per-entry
roles requirement. Use rsm_schema.validate_document() when conditional rules
must be enforced. It validates against the bundled JSON Schema.
Inspection scope#
The inspection API provides JSON Pointer lookup, local
$ref resolution, property and definition traversal, array items, and
oneOf/anyOf/allOf traversal. It does not fetch external $ref targets.
Building the docs locally#
poetry install --with docs
poetry run sphinx-build -b html -W --keep-going docs docs/_build/html
-W matches CI and treats warnings as errors.