Skip to main content

gen3-metadata-templates

CI PyPI version Python versions

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.

Documentation

Install

pipx install gen3-metadata-templates      # installs the `g3mt` command

# everything of one kind (e.g. all your clinical data) in one workbook
g3mt generate schema.json --category clinical -o clinical_template.xlsx

# ...or a single node
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

The schema can be a local file or an http(s):// URL — e.g. a bundle published on GitHub:

g3mt generate \
  https://raw.githubusercontent.com/AustralianBioCommons/acdc-schema-json/refs/tags/v1.2.0/dictionary/prod_dict/acdc_schema.json \
  lipidomics_file -o lipidomics_file_template.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 or an http(s):// URL — plus what you want to submit: a node, several nodes, or a whole category.
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

  • Whole-category templates — --category clinical gives a researcher every clinical sheet in one workbook, in the right fill order, without having to know the node names.
  • One sheet per node, in fill order — parents before children, so links always resolve.
  • Cross-sheet link dropdowns — a subject.submitter_id column 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 and a --json-out report artifact for pipelines.
  • Paste-friendly protection — the header rows can't be edited, but pasting, formatting, sorting and row insert/delete all work (--no-protect for fully editable sheets). Validation warns when pasting removed dropdowns, when data ran past the provisioned rows, and when Excel mangled IDs or dates.
  • Use it as a CLI or a Python library — the CLI is a thin shell over an importable core.

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 to main: Ruff lint + format check, the test suite on Python 3.9–3.12, a g3mt --help smoke 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 a PYPI_API_KEY repository secret.
  • TestPyPI (.github/workflows/publish_testpypi.yml) can be triggered manually from the Actions tab to publish a pre-release; it needs a TESTPYPI_API_KEY secret.

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.

Metadata

Release files for gen3_metadata_templates 2.4.0

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

Source distribution (sdist)

Source distribution for gen3_metadata_templates 2.4.0
File Size Uploaded
gen3_metadata_templates-2.4.0.tar.gz 52.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gen3_metadata_templates 2.4.0
File Interpreter ABI Platform
gen3_metadata_templates-2.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 114.2 kB

Release files / gen3_metadata_templates-2.4.0.tar.gz

Download URL gen3_metadata_templates-2.4.0.tar.gz
Size 52.7 kB
Tags Source
SHA-256 checksum
How to use checksums
e09f8b447e5466a9f6a658a9cacc5267b74d6e6822eabe90e477c2ec99d51332
BLAKE2b-256 checksum
How to use checksums
05405b94943279eafa30e5b9bbfe0f1537d5f6176c2f57bcaa459be0ac75e7ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.12.14 Linux/6.17.0-1022-azure

Release files / gen3_metadata_templates-2.4.0-py3-none-any.whl

Download URL gen3_metadata_templates-2.4.0-py3-none-any.whl
Size 61.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1733fc731cf06c102c8c74604b43eca8c0c7cd5de3aa0df55235db71069c4e71
BLAKE2b-256 checksum
How to use checksums
c24d2f2415de7e220026f82df2ab6030aaa0b3ac6734d991000a366967f43a1b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.12.14 Linux/6.17.0-1022-azure

Release history Release notifications | RSS feed

This release

2.4.0 This release

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.0.1

2 release files

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