gen3-metadata-templates
Turn a Gen3 schema into friendly Excel submission templates, then validate the filled-in workbooks — with every error pinned to the exact sheet, row, and column, in plain English.
pipx install gen3-metadata-templates # installs the `g3mt` command
g3mt generate schema.json sample -o sample_template.xlsx
# ...fill sample_template.xlsx in Excel...
g3mt validate sample_template.xlsx --schema schema.json --annotate checked.xlsx
Why this exists
Submitting metadata to a Gen3 data commons means producing records that conform to a graph-shaped data model: nodes (subject, sample, file, …) linked parent-to-child, each with typed, sometimes-controlled properties. That is hard for people who aren't fluent in linked data — and mistakes are usually only discovered late, as opaque errors.
g3mt closes that gap from both ends:
- Generation produces a workbook a non-specialist can fill in confidently — parent links and controlled values are dropdowns, so most errors can't be made in the first place.
- Validation catches whatever still slips through and reports it as "Sheet subject, cell C4: 'ten' isn't a whole number" rather than a stack trace.
Input and output
| Input (generate) | A Gen3 JSON schema bundle (a single .json file of node definitions) + the name of the node you want to submit. |
| Output (generate) | An .xlsx workbook: one sheet per node on the path to your target, with dropdowns, guidance, and reference sheets. |
| Input (validate) | Your filled .xlsx workbook + the same schema. |
| Output (validate) | A console report grouped by sheet (and optionally a highlighted copy of the workbook or a JSON report). Exit code 0 = clean, 1 = problems found, 2 = usage error. |
Key features
- One sheet per node, in fill order — parents before children, so links always resolve.
- Cross-sheet link dropdowns — a
subject.submitter_idcolumn on the sample sheet is a dropdown of the IDs you entered on the subject sheet. Reusing a parent ID across child rows is all "one-to-many" requires — no theory needed. - Controlled-value dropdowns — enum and boolean fields become dropdowns.
- Self-documenting workbooks — required vs optional headers, a type/required hint row, per-column description comments, plus an Instructions sheet and a full Dictionary sheet.
- Path selection — when a node is reachable by more than one chain of parents, you choose which one the template covers.
- Precise, plain-English validation — errors located to the cell, rephrased for non-developers, with an optional highlighted copy of your file.
- Use it as a CLI or a Python library — the CLI is a thin shell over an importable core.
Documentation
- Quickstart — the shortest path from a schema to a validated workbook.
- Concepts — nodes, links, paths, and
submitter_id, for readers new to Gen3. - Generating templates — path selection, node/column filtering, and what every part of the workbook means.
- Filling in a template — how linking, one-to-many, and multi-value cells work.
- Validating — the error types, the annotated copy, and exit codes.
- CLI reference — every command and flag.
- Library API — using the core from Python.
- Troubleshooting — common problems and fixes.
Requirements
- Python ≥ 3.9.5
gen3-validator≥ 2.1 (installed automatically)
Development
git clone https://github.com/AustralianBioCommons/gen3-metadata-templates.git
cd gen3-metadata-templates
pip install poetry
poetry install
poetry run pytest -vv
Before pushing, run the same checks CI does:
poetry run ruff check . # lint
poetry run ruff format --check . # formatting
poetry run pytest -vv # tests
To preview the documentation site locally:
poetry install --with docs
poetry run mkdocs serve # then open http://127.0.0.1:8000
Continuous integration & releases
- CI (
.github/workflows/build.yml) runs on every push and pull request tomain: Ruff lint + format check, the test suite on Python 3.9–3.12, ag3mt --helpsmoke test, and a strict docs build. - Publishing (
.github/workflows/publish_pypi.yml) runs when a GitHub Release is published: it verifies the release tag matches the package version, then builds and publishes to PyPI. It needs aPYPI_API_KEYrepository secret. - TestPyPI (
.github/workflows/publish_testpypi.yml) can be triggered manually from the Actions tab to publish a pre-release; it needs aTESTPYPI_API_KEYsecret.
To cut a release:
poetry version <major|minor|patch> # bump the version in pyproject.toml
git commit -am "chore: release vX.Y.Z"
git tag vX.Y.Z && git push --tags
gh release create vX.Y.Z --generate-notes # publishing the release runs the workflow
A note on 2.0
Version 2.0 is a full rewrite. The old Python API
(generate_xlsx_template, make_node_template_pd, PropExtractor) has been
replaced by the library and g3mt CLI documented here.
License
Apache 2.0 — see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gen3_metadata_templates-2.0.0.tar.gz.
File metadata
- Download URL: gen3_metadata_templates-2.0.0.tar.gz
- Upload date:
- Size: 33.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
poetry/2.4.1 CPython/3.12.13 Linux/6.17.0-1020-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb0b2f6a9b9451ff71e57c1e1aac495d566b7d759904790ddf7bdcbc50492eff
|
|
| MD5 |
58b34926fcaa4ea9918a321d6b3fa16f
|
|
| BLAKE2b-256 |
afc78b58ac88d7ec97ade4615a1767ac2d02a7bd882a5d06efe88125515b15e2
|
File details
Details for the file gen3_metadata_templates-2.0.0-py3-none-any.whl.
File metadata
- Download URL: gen3_metadata_templates-2.0.0-py3-none-any.whl
- Upload date:
- Size: 40.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
poetry/2.4.1 CPython/3.12.13 Linux/6.17.0-1020-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0db2dd74c242b18cfe68191dcec683dcdcb269cc0ffad99791ba95a5355e193f
|
|
| MD5 |
a6da627213666e6b3941285a5c996f17
|
|
| BLAKE2b-256 |
c5a07a1479a887af1e74153b3c2996b084165b953196c5b990452e3c46f2f7ca
|