hca-metadata-schema 0.2.0__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.
- hca_metadata_schema-0.2.0/.gitignore +209 -0
- hca_metadata_schema-0.2.0/CHANGELOG.md +33 -0
- hca_metadata_schema-0.2.0/Makefile +55 -0
- hca_metadata_schema-0.2.0/PKG-INFO +54 -0
- hca_metadata_schema-0.2.0/README.md +43 -0
- hca_metadata_schema-0.2.0/pyproject.toml +36 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/__init__.py +11 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/bionetwork/adipose.yaml +32 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/bionetwork/gut.yaml +35 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/bionetwork/musculoskeletal.yaml +25 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/cell.yaml +69 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/core.yaml +23 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/dataset.yaml +297 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/donor.yaml +91 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/enums.yaml +122 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/generated/__init__.py +3 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/generated/core.py +1703 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/sample.yaml +442 -0
- hca_metadata_schema-0.2.0/src/hca_metadata_schema/slots.yaml +106 -0
- hca_metadata_schema-0.2.0/tests/__init__.py +0 -0
- hca_metadata_schema-0.2.0/tests/test_package.py +46 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# MCP server config (machine-specific virtualenv paths)
|
|
2
|
+
.mcp.json
|
|
3
|
+
|
|
4
|
+
# Claude Code per-user settings (permissions, etc.)
|
|
5
|
+
.claude/settings.local.json
|
|
6
|
+
|
|
7
|
+
# Claude Code agent worktrees (isolated subagent working copies)
|
|
8
|
+
.claude/worktrees/
|
|
9
|
+
|
|
10
|
+
# Byte-compiled / optimized / DLL files
|
|
11
|
+
__pycache__/
|
|
12
|
+
*.py[cod]
|
|
13
|
+
*$py.class
|
|
14
|
+
|
|
15
|
+
# C extensions
|
|
16
|
+
*.so
|
|
17
|
+
|
|
18
|
+
# Distribution / packaging
|
|
19
|
+
.Python
|
|
20
|
+
build/
|
|
21
|
+
develop-eggs/
|
|
22
|
+
dist/
|
|
23
|
+
downloads/
|
|
24
|
+
eggs/
|
|
25
|
+
.eggs/
|
|
26
|
+
lib/
|
|
27
|
+
lib64/
|
|
28
|
+
parts/
|
|
29
|
+
sdist/
|
|
30
|
+
var/
|
|
31
|
+
wheels/
|
|
32
|
+
share/python-wheels/
|
|
33
|
+
*.egg-info/
|
|
34
|
+
.installed.cfg
|
|
35
|
+
*.egg
|
|
36
|
+
MANIFEST
|
|
37
|
+
|
|
38
|
+
# PyInstaller
|
|
39
|
+
# Usually these files are written by a python script from a template
|
|
40
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
41
|
+
*.manifest
|
|
42
|
+
*.spec
|
|
43
|
+
|
|
44
|
+
# Installer logs
|
|
45
|
+
pip-log.txt
|
|
46
|
+
pip-delete-this-directory.txt
|
|
47
|
+
|
|
48
|
+
# Unit test / coverage reports
|
|
49
|
+
htmlcov/
|
|
50
|
+
.tox/
|
|
51
|
+
.nox/
|
|
52
|
+
.coverage
|
|
53
|
+
.coverage.*
|
|
54
|
+
.cache
|
|
55
|
+
nosetests.xml
|
|
56
|
+
coverage.xml
|
|
57
|
+
*.cover
|
|
58
|
+
*.py,cover
|
|
59
|
+
.hypothesis/
|
|
60
|
+
.pytest_cache/
|
|
61
|
+
cover/
|
|
62
|
+
|
|
63
|
+
# Translations
|
|
64
|
+
*.mo
|
|
65
|
+
*.pot
|
|
66
|
+
|
|
67
|
+
# Django stuff:
|
|
68
|
+
*.log
|
|
69
|
+
local_settings.py
|
|
70
|
+
db.sqlite3
|
|
71
|
+
db.sqlite3-journal
|
|
72
|
+
|
|
73
|
+
# Flask stuff:
|
|
74
|
+
instance/
|
|
75
|
+
.webassets-cache
|
|
76
|
+
|
|
77
|
+
# Scrapy stuff:
|
|
78
|
+
.scrapy
|
|
79
|
+
|
|
80
|
+
# Sphinx documentation
|
|
81
|
+
docs/_build/
|
|
82
|
+
|
|
83
|
+
# PyBuilder
|
|
84
|
+
.pybuilder/
|
|
85
|
+
target/
|
|
86
|
+
|
|
87
|
+
# Jupyter Notebook
|
|
88
|
+
.ipynb_checkpoints
|
|
89
|
+
|
|
90
|
+
# IPython
|
|
91
|
+
profile_default/
|
|
92
|
+
ipython_config.py
|
|
93
|
+
|
|
94
|
+
# pyenv
|
|
95
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
96
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
97
|
+
# .python-version
|
|
98
|
+
|
|
99
|
+
# pipenv
|
|
100
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
101
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
102
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
103
|
+
# install all needed dependencies.
|
|
104
|
+
#Pipfile.lock
|
|
105
|
+
|
|
106
|
+
# UV
|
|
107
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
108
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
109
|
+
# commonly ignored for libraries.
|
|
110
|
+
# Everything under packages/ is a published library, not a deployed app: nothing in the build
|
|
111
|
+
# or deploy path reads these locks (uv build resolves from pyproject.toml; the Docker images use
|
|
112
|
+
# the services' poetry.lock). Tracking them only invited drift, because release-please bumps
|
|
113
|
+
# pyproject.toml but not uv.lock (see #483). Scoped to packages/ so future uv-based *services*
|
|
114
|
+
# (apps) can still commit their locks.
|
|
115
|
+
packages/*/uv.lock
|
|
116
|
+
# shared/ is the same shape: a library consumed only as a path dependency, never
|
|
117
|
+
# installed from its own lock (services build it through their poetry.lock; uv
|
|
118
|
+
# build/sync resolve from pyproject.toml). Nothing reads shared/uv.lock, so ignore it.
|
|
119
|
+
shared/uv.lock
|
|
120
|
+
|
|
121
|
+
# poetry
|
|
122
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
123
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
124
|
+
# commonly ignored for libraries.
|
|
125
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
126
|
+
#poetry.lock
|
|
127
|
+
|
|
128
|
+
# pdm
|
|
129
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
130
|
+
#pdm.lock
|
|
131
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
132
|
+
# in version control.
|
|
133
|
+
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
|
134
|
+
.pdm.toml
|
|
135
|
+
.pdm-python
|
|
136
|
+
.pdm-build/
|
|
137
|
+
|
|
138
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
139
|
+
__pypackages__/
|
|
140
|
+
|
|
141
|
+
# Celery stuff
|
|
142
|
+
celerybeat-schedule
|
|
143
|
+
celerybeat.pid
|
|
144
|
+
|
|
145
|
+
# SageMath parsed files
|
|
146
|
+
*.sage.py
|
|
147
|
+
|
|
148
|
+
# Environments
|
|
149
|
+
.env
|
|
150
|
+
.env.make
|
|
151
|
+
.venv
|
|
152
|
+
env/
|
|
153
|
+
venv/
|
|
154
|
+
ENV/
|
|
155
|
+
env.bak/
|
|
156
|
+
venv.bak/
|
|
157
|
+
|
|
158
|
+
# Spyder project settings
|
|
159
|
+
.spyderproject
|
|
160
|
+
.spyproject
|
|
161
|
+
|
|
162
|
+
# Rope project settings
|
|
163
|
+
.ropeproject
|
|
164
|
+
|
|
165
|
+
# mkdocs documentation
|
|
166
|
+
/site
|
|
167
|
+
|
|
168
|
+
# mypy
|
|
169
|
+
.mypy_cache/
|
|
170
|
+
.dmypy.json
|
|
171
|
+
dmypy.json
|
|
172
|
+
|
|
173
|
+
# Pyre type checker
|
|
174
|
+
.pyre/
|
|
175
|
+
|
|
176
|
+
# pytype static type analyzer
|
|
177
|
+
.pytype/
|
|
178
|
+
|
|
179
|
+
# Cython debug symbols
|
|
180
|
+
cython_debug/
|
|
181
|
+
|
|
182
|
+
# PyCharm
|
|
183
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
184
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
185
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
186
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
187
|
+
#.idea/
|
|
188
|
+
|
|
189
|
+
# Ruff stuff:
|
|
190
|
+
.ruff_cache/
|
|
191
|
+
|
|
192
|
+
# PyPI configuration file
|
|
193
|
+
.pypirc
|
|
194
|
+
|
|
195
|
+
# Lambda deployment packages and environments
|
|
196
|
+
*.zip
|
|
197
|
+
deployment/layers/
|
|
198
|
+
deployment/test-lambda-env/
|
|
199
|
+
deployment/entry-sheet-validator/output/
|
|
200
|
+
response.json
|
|
201
|
+
|
|
202
|
+
# macOS
|
|
203
|
+
.DS_Store
|
|
204
|
+
|
|
205
|
+
# Drafting space for outbound correspondence with atlas teams — notes to the
|
|
206
|
+
# breast, gut, immune and pancreas teams while they are being written. These
|
|
207
|
+
# are not code and do not belong in a tools repo, but they should not be one
|
|
208
|
+
# `git clean` from gone either. Anything sent lands in hca-ingest-coordination.
|
|
209
|
+
notes/
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.2.0](https://github.com/clevercanary/hca-validation-tools/compare/hca-schema-v0.1.0...hca-schema-v0.2.0) (2026-10-28)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add 10th and 11th decade development stages ([#202](https://github.com/clevercanary/hca-validation-tools/issues/202)) ([775091e](https://github.com/clevercanary/hca-validation-tools/commit/775091ebff3033f526e5d434fd9da3f0cce5dc0c))
|
|
9
|
+
* add musculoskeletal dataset schema ([#172](https://github.com/clevercanary/hca-validation-tools/issues/172)) ([#173](https://github.com/clevercanary/hca-validation-tools/issues/173)) ([4ff848b](https://github.com/clevercanary/hca-validation-tools/commit/4ff848b1b63db0da66558c852544e6ff96809fa1))
|
|
10
|
+
* move ambient_count_correction and doublet_detection from uns to obs ([#349](https://github.com/clevercanary/hca-validation-tools/issues/349)) ([90b2b0b](https://github.com/clevercanary/hca-validation-tools/commit/90b2b0bea36500f7bb9a54961fd3dfc3f74c9cf9))
|
|
11
|
+
* **schema:** give the LinkML schema its own version, bumped by release-please ([#537](https://github.com/clevercanary/hca-validation-tools/issues/537)) ([#803](https://github.com/clevercanary/hca-validation-tools/issues/803)) ([d016fa3](https://github.com/clevercanary/hca-validation-tools/commit/d016fa3a4e14abe9d99fadfe2d3c8164f7d85b96))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* **schema:** make three obs columns visible to annDataLocation discovery ([#545](https://github.com/clevercanary/hca-validation-tools/issues/545)) ([2f4679b](https://github.com/clevercanary/hca-validation-tools/commit/2f4679b87424e3c2c6ea0c5f408106c466843b36))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Code Refactoring
|
|
20
|
+
|
|
21
|
+
* update file structure to support multiple independent services ([#124](https://github.com/clevercanary/hca-validation-tools/issues/124)) ([ef1782a](https://github.com/clevercanary/hca-validation-tools/commit/ef1782a247af1fe9f562a12256b8ebc8e3ff657f))
|
|
22
|
+
|
|
23
|
+
## 0.1.0 (unversioned baseline)
|
|
24
|
+
|
|
25
|
+
`0.1.0` does not name one fixed schema. The schema was first given this version in
|
|
26
|
+
August 2025 (#124) and changed many times afterwards without a bump, including the
|
|
27
|
+
musculoskeletal bionetwork schema (December 2025) and the `Cell` class (#538). A file
|
|
28
|
+
or report that says `0.1.0` was checked against some schema from that period, but which
|
|
29
|
+
one cannot be told from the version alone.
|
|
30
|
+
|
|
31
|
+
From 0.2.0 on, `core.yaml`'s `version:` is bumped by release-please according to
|
|
32
|
+
`docs/schema-version-contract.md`, and every change is listed here (#537). The 0.2.0 entry
|
|
33
|
+
also lists the earlier, unversioned changes, since no release marked where they ended.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# hca-metadata-schema Makefile
|
|
2
|
+
# Schema validation and model generation. The data dictionary is built from shared/ (it needs shared's code).
|
|
3
|
+
|
|
4
|
+
SCHEMA_DIR := src/hca_metadata_schema
|
|
5
|
+
GENERATED := $(SCHEMA_DIR)/generated/core.py
|
|
6
|
+
SCHEMAS := $(wildcard $(SCHEMA_DIR)/*.yaml)
|
|
7
|
+
UV := uv run --group codegen
|
|
8
|
+
SUPPRESS_WARNINGS := 2>/dev/null
|
|
9
|
+
|
|
10
|
+
.PHONY: help
|
|
11
|
+
help:
|
|
12
|
+
@echo "hca-metadata-schema tasks:"
|
|
13
|
+
@echo " validate-schema - Validate all schema files"
|
|
14
|
+
@echo " lint-schema - Lint schema files"
|
|
15
|
+
@echo " gen-schema - Generate the Pydantic models from the LinkML schemas"
|
|
16
|
+
@echo " test - Run the package tests"
|
|
17
|
+
|
|
18
|
+
# Schema validation
|
|
19
|
+
.PHONY: validate-schema
|
|
20
|
+
validate-schema:
|
|
21
|
+
@echo "Validating all schema files..."
|
|
22
|
+
@for schema in $(SCHEMAS); do \
|
|
23
|
+
echo "Validating $$(basename $$schema)..."; \
|
|
24
|
+
$(UV) gen-yaml $$schema > /dev/null $(SUPPRESS_WARNINGS) || exit 1; \
|
|
25
|
+
echo "✓ $$(basename $$schema) is valid"; \
|
|
26
|
+
done
|
|
27
|
+
@echo "All schema files are valid!"
|
|
28
|
+
|
|
29
|
+
# Lint schema files
|
|
30
|
+
.PHONY: lint-schema
|
|
31
|
+
lint-schema:
|
|
32
|
+
@echo "Linting schema files..."
|
|
33
|
+
@$(UV) linkml lint $(SCHEMA_DIR) --validate
|
|
34
|
+
|
|
35
|
+
# Lint schema files with only errors (no style warnings)
|
|
36
|
+
.PHONY: lint-schema-errors
|
|
37
|
+
lint-schema-errors:
|
|
38
|
+
@echo "Linting schema files (errors only)..."
|
|
39
|
+
@$(UV) linkml lint $(SCHEMA_DIR) --validate --ignore-warnings || (echo "❌ Schema has critical errors" && exit 1)
|
|
40
|
+
@echo "✓ No critical errors found in schema files"
|
|
41
|
+
|
|
42
|
+
# Generate Python models from schemas
|
|
43
|
+
.PHONY: gen-schema
|
|
44
|
+
gen-schema:
|
|
45
|
+
@echo "Generating models..."
|
|
46
|
+
@# Generate to a temp file so a failed run leaves the committed model intact. sed marks the schema version line
|
|
47
|
+
@# so release-please bumps it with core.yaml (docs/schema-version-contract.md).
|
|
48
|
+
@$(UV) gen-pydantic $(SCHEMA_DIR)/core.yaml --meta AUTO > $(GENERATED).tmp
|
|
49
|
+
@sed -E 's/^(version = "[^"]*")$$/\1 # x-release-please-version/' $(GENERATED).tmp > $(GENERATED)
|
|
50
|
+
@rm $(GENERATED).tmp
|
|
51
|
+
@echo "Done"
|
|
52
|
+
|
|
53
|
+
.PHONY: test
|
|
54
|
+
test:
|
|
55
|
+
@uv run pytest tests/ -v
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: hca-metadata-schema
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: HCA metadata schema: LinkML definitions and the Pydantic models generated from them
|
|
5
|
+
Project-URL: Homepage, https://github.com/clevercanary/hca-validation-tools
|
|
6
|
+
Author-email: Clever Canary <dave@clevercanary.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Requires-Python: <4.0,>=3.10
|
|
9
|
+
Requires-Dist: pydantic<3,>=2
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
|
|
12
|
+
# hca-metadata-schema
|
|
13
|
+
|
|
14
|
+
The HCA metadata schema: the LinkML YAML definitions and the Pydantic models generated from them.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pip install hca-metadata-schema
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
from hca_metadata_schema import CORE_SCHEMA_PATH, __version__
|
|
26
|
+
from hca_metadata_schema.generated.core import Cell, Dataset, Donor, Sample
|
|
27
|
+
|
|
28
|
+
# The Pydantic models validate a record against the schema
|
|
29
|
+
Donor(...)
|
|
30
|
+
|
|
31
|
+
# The LinkML source, for tools that read the schema itself (e.g. linkml-runtime's SchemaView)
|
|
32
|
+
CORE_SCHEMA_PATH # .../hca_metadata_schema/core.yaml
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The package depends only on pydantic. Reading the YAML with `SchemaView` needs `linkml-runtime`, which
|
|
36
|
+
you install yourself.
|
|
37
|
+
|
|
38
|
+
## Versioning
|
|
39
|
+
|
|
40
|
+
The schema has one version, in `core.yaml`, and the package version is the same number. What each bump
|
|
41
|
+
means is set out in
|
|
42
|
+
[`docs/schema-version-contract.md`](https://github.com/clevercanary/hca-validation-tools/blob/main/docs/schema-version-contract.md).
|
|
43
|
+
|
|
44
|
+
## Development
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
make gen-schema # regenerate generated/core.py from the YAML
|
|
48
|
+
make validate-schema # check every YAML file compiles
|
|
49
|
+
uv run pytest tests/ -v
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
After editing the YAML, regenerate the models and the data dictionary (`make -C shared gen-schema
|
|
53
|
+
generate-data-dictionary` from the repo root) and commit the result. CI's `generated-schema` job fails if either is
|
|
54
|
+
stale, and the opt-in pre-commit hook `schema-generated` regenerates them when a schema YAML file is committed.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# hca-metadata-schema
|
|
2
|
+
|
|
3
|
+
The HCA metadata schema: the LinkML YAML definitions and the Pydantic models generated from them.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install hca-metadata-schema
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```python
|
|
14
|
+
from hca_metadata_schema import CORE_SCHEMA_PATH, __version__
|
|
15
|
+
from hca_metadata_schema.generated.core import Cell, Dataset, Donor, Sample
|
|
16
|
+
|
|
17
|
+
# The Pydantic models validate a record against the schema
|
|
18
|
+
Donor(...)
|
|
19
|
+
|
|
20
|
+
# The LinkML source, for tools that read the schema itself (e.g. linkml-runtime's SchemaView)
|
|
21
|
+
CORE_SCHEMA_PATH # .../hca_metadata_schema/core.yaml
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The package depends only on pydantic. Reading the YAML with `SchemaView` needs `linkml-runtime`, which
|
|
25
|
+
you install yourself.
|
|
26
|
+
|
|
27
|
+
## Versioning
|
|
28
|
+
|
|
29
|
+
The schema has one version, in `core.yaml`, and the package version is the same number. What each bump
|
|
30
|
+
means is set out in
|
|
31
|
+
[`docs/schema-version-contract.md`](https://github.com/clevercanary/hca-validation-tools/blob/main/docs/schema-version-contract.md).
|
|
32
|
+
|
|
33
|
+
## Development
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
make gen-schema # regenerate generated/core.py from the YAML
|
|
37
|
+
make validate-schema # check every YAML file compiles
|
|
38
|
+
uv run pytest tests/ -v
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
After editing the YAML, regenerate the models and the data dictionary (`make -C shared gen-schema
|
|
42
|
+
generate-data-dictionary` from the repo root) and commit the result. CI's `generated-schema` job fails if either is
|
|
43
|
+
stale, and the opt-in pre-commit hook `schema-generated` regenerates them when a schema YAML file is committed.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "hca-metadata-schema"
|
|
3
|
+
version = "0.2.0"
|
|
4
|
+
description = "HCA metadata schema: LinkML definitions and the Pydantic models generated from them"
|
|
5
|
+
authors = [{ name = "Clever Canary", email = "dave@clevercanary.com" }]
|
|
6
|
+
license = "MIT"
|
|
7
|
+
readme = "README.md"
|
|
8
|
+
requires-python = ">=3.10,<4.0"
|
|
9
|
+
# The generated models import only pydantic and the standard library. Keep it that way: this package
|
|
10
|
+
# is what lets hca-anndata-tools use the schema without pulling in linkml.
|
|
11
|
+
dependencies = [
|
|
12
|
+
"pydantic>=2,<3",
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
[project.urls]
|
|
16
|
+
Homepage = "https://github.com/clevercanary/hca-validation-tools"
|
|
17
|
+
|
|
18
|
+
[dependency-groups]
|
|
19
|
+
dev = [
|
|
20
|
+
"pytest>=8.0,<9",
|
|
21
|
+
"pyyaml>=6.0,<7",
|
|
22
|
+
]
|
|
23
|
+
# gen-pydantic and gen-yaml for the Makefile's schema targets, kept out of `dev` so the tests (and CI)
|
|
24
|
+
# do not install linkml. Same pin and linkml-runtime cap as shared/pyproject.toml, for the same reason.
|
|
25
|
+
codegen = [
|
|
26
|
+
"linkml==1.9.2",
|
|
27
|
+
"linkml-runtime>=1.9.2,<1.10",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[build-system]
|
|
31
|
+
requires = ["hatchling"]
|
|
32
|
+
build-backend = "hatchling.build"
|
|
33
|
+
|
|
34
|
+
# Ships every file under the package directory, which is how the LinkML YAML reaches the wheel.
|
|
35
|
+
[tool.hatch.build.targets.wheel]
|
|
36
|
+
packages = ["src/hca_metadata_schema"]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""The HCA metadata schema: LinkML YAML definitions and the Pydantic models generated from them.
|
|
2
|
+
|
|
3
|
+
`CORE_SCHEMA_PATH` is the root schema; it imports every other YAML file shipped here. The models are in
|
|
4
|
+
`hca_metadata_schema.generated.core`, regenerated from the YAML by `make gen-schema`.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
__version__ = "0.2.0" # x-release-please-version
|
|
10
|
+
|
|
11
|
+
CORE_SCHEMA_PATH = Path(__file__).parent / "core.yaml"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: https://github.com/clevercanary/hca-validation-tools/schema/bionetwork/adipose
|
|
2
|
+
name: hca-validation-adipose
|
|
3
|
+
title: Adipose BioNetwork Extensions
|
|
4
|
+
description: Adipose network–specific refinements to the HCA dataset schema
|
|
5
|
+
license: MIT
|
|
6
|
+
|
|
7
|
+
prefixes:
|
|
8
|
+
linkml: https://w3id.org/linkml/
|
|
9
|
+
hca: https://github.com/clevercanary/hca-validation-tools/schema/
|
|
10
|
+
|
|
11
|
+
default_prefix: hca
|
|
12
|
+
default_range: string
|
|
13
|
+
|
|
14
|
+
imports:
|
|
15
|
+
- linkml:types
|
|
16
|
+
- ../dataset
|
|
17
|
+
- ../slots
|
|
18
|
+
- ../enums
|
|
19
|
+
|
|
20
|
+
classes:
|
|
21
|
+
AdiposeDataset:
|
|
22
|
+
is_a: Dataset
|
|
23
|
+
description: Dataset with Adipose BioNetwork–specific metadata requirements.
|
|
24
|
+
slots:
|
|
25
|
+
- ambient_count_correction
|
|
26
|
+
- doublet_detection
|
|
27
|
+
|
|
28
|
+
AdiposeSample:
|
|
29
|
+
is_a: Sample
|
|
30
|
+
description: Sample with Adipose BioNetwork–specific metadata requirements.
|
|
31
|
+
slots:
|
|
32
|
+
- dissociation_protocol
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: https://github.com/clevercanary/hca-validation-tools/schema/bionetwork/gut
|
|
2
|
+
name: hca-validation-gut
|
|
3
|
+
title: Gut BioNetwork Extensions
|
|
4
|
+
description: Gut network–specific refinements to the HCA dataset schema
|
|
5
|
+
license: MIT
|
|
6
|
+
|
|
7
|
+
prefixes:
|
|
8
|
+
linkml: https://w3id.org/linkml/
|
|
9
|
+
hca: https://github.com/clevercanary/hca-validation-tools/schema/
|
|
10
|
+
|
|
11
|
+
default_prefix: hca
|
|
12
|
+
default_range: string
|
|
13
|
+
|
|
14
|
+
imports:
|
|
15
|
+
- linkml:types
|
|
16
|
+
- ../dataset
|
|
17
|
+
- ../slots
|
|
18
|
+
- ../enums
|
|
19
|
+
classes:
|
|
20
|
+
GutDataset:
|
|
21
|
+
is_a: Dataset
|
|
22
|
+
description: Dataset with Gut BioNetwork–specific metadata requirements.
|
|
23
|
+
slots:
|
|
24
|
+
- ambient_count_correction
|
|
25
|
+
- doublet_detection
|
|
26
|
+
|
|
27
|
+
GutSample:
|
|
28
|
+
is_a: Sample
|
|
29
|
+
description: Sample with Gut BioNetwork–specific metadata requirements.
|
|
30
|
+
slots:
|
|
31
|
+
- radial_tissue_term
|
|
32
|
+
- dissociation_protocol
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: https://github.com/clevercanary/hca-validation-tools/schema/bionetwork/musculoskeletal
|
|
2
|
+
name: hca-validation-musculoskeletal
|
|
3
|
+
title: Musculoskeletal BioNetwork Extensions
|
|
4
|
+
description: Musculoskeletal network–specific refinements to the HCA dataset schema
|
|
5
|
+
license: MIT
|
|
6
|
+
|
|
7
|
+
prefixes:
|
|
8
|
+
linkml: https://w3id.org/linkml/
|
|
9
|
+
hca: https://github.com/clevercanary/hca-validation-tools/schema/
|
|
10
|
+
|
|
11
|
+
default_prefix: hca
|
|
12
|
+
default_range: string
|
|
13
|
+
|
|
14
|
+
imports:
|
|
15
|
+
- linkml:types
|
|
16
|
+
- ../dataset
|
|
17
|
+
- ../slots
|
|
18
|
+
- ../enums
|
|
19
|
+
classes:
|
|
20
|
+
MusculoskeletalDataset:
|
|
21
|
+
is_a: Dataset
|
|
22
|
+
description: Dataset with Musculoskeletal BioNetwork–specific metadata requirements.
|
|
23
|
+
slots:
|
|
24
|
+
- ambient_count_correction
|
|
25
|
+
- doublet_detection
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
id: https://github.com/clevercanary/hca-validation-tools/schema/cell
|
|
2
|
+
name: hca-validation-cell
|
|
3
|
+
title: HCA Validation Cell Schema
|
|
4
|
+
description: Schema for validating Human Cell Atlas (HCA) cell metadata
|
|
5
|
+
license: MIT
|
|
6
|
+
|
|
7
|
+
prefixes:
|
|
8
|
+
linkml: https://w3id.org/linkml/
|
|
9
|
+
hca: https://github.com/clevercanary/hca-validation-tools/schema/
|
|
10
|
+
|
|
11
|
+
default_prefix: hca
|
|
12
|
+
default_range: string
|
|
13
|
+
|
|
14
|
+
imports:
|
|
15
|
+
- linkml:types
|
|
16
|
+
|
|
17
|
+
classes:
|
|
18
|
+
Cell:
|
|
19
|
+
description: >-
|
|
20
|
+
A single cell derived from a sample
|
|
21
|
+
slots:
|
|
22
|
+
- author_cell_type
|
|
23
|
+
- cell_type_ontology_term_id
|
|
24
|
+
|
|
25
|
+
slots:
|
|
26
|
+
author_cell_type:
|
|
27
|
+
title: Author Cell Type
|
|
28
|
+
description: Encoding of author intuition of cellular annotation in the dataset.
|
|
29
|
+
examples:
|
|
30
|
+
- value: Goblet cell; microglia
|
|
31
|
+
annotations:
|
|
32
|
+
annDataLocation: obs
|
|
33
|
+
tier: Tier 1
|
|
34
|
+
range: string
|
|
35
|
+
required: false
|
|
36
|
+
multivalued: false
|
|
37
|
+
comments:
|
|
38
|
+
- Encoding of author intuition of cellular annotation in their dataset.
|
|
39
|
+
- >-
|
|
40
|
+
Retained alongside the ontology term so the author's original naming is not lost
|
|
41
|
+
when terms are mapped to CL.
|
|
42
|
+
|
|
43
|
+
cell_type_ontology_term_id:
|
|
44
|
+
title: Cell Type Ontology Term ID
|
|
45
|
+
description: Cell Ontology (CL) term.
|
|
46
|
+
examples:
|
|
47
|
+
- value: CL:0001204
|
|
48
|
+
annotations:
|
|
49
|
+
annDataLocation: obs
|
|
50
|
+
tier: Tier 1
|
|
51
|
+
cxg: cell_type_ontology_term_id
|
|
52
|
+
range: string
|
|
53
|
+
required: false
|
|
54
|
+
multivalued: false
|
|
55
|
+
notes:
|
|
56
|
+
- |
|
|
57
|
+
This must be a Cell Ontology (CL) term (http://www.ebi.ac.uk/ols4/ontologies/cl).
|
|
58
|
+
|
|
59
|
+
If no appropriate high-level term can be found or the cell type is unknown, then it is strongly recommended to use 'unknown'.
|
|
60
|
+
|
|
61
|
+
The following terms must not be used: "CL:0000255" for eukaryotic cell; "CL:0000257" for Eumycetozoan cell; "CL:0000548" for animal cell.
|
|
62
|
+
- >-
|
|
63
|
+
ZFA, FBbt, and WBbt terms are allowed depending on the organism, and "na" is
|
|
64
|
+
allowed if tissue_type is "cell line" — per the h5ad validator's curie_constraints.
|
|
65
|
+
comments:
|
|
66
|
+
- Encoding of cell type to help alignment with other datasets.
|
|
67
|
+
- >-
|
|
68
|
+
Unrecoverable once dropped — populate_labels derives cell_type from this column,
|
|
69
|
+
not the reverse. Optional here to match the h5ad validator's requirement_level.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
id: https://github.com/clevercanary/hca-validation-tools/schema/core
|
|
2
|
+
name: hca-validation-core
|
|
3
|
+
title: HCA Validation Core Schema
|
|
4
|
+
description: Core schema for validating Human Cell Atlas (HCA) data
|
|
5
|
+
license: MIT
|
|
6
|
+
version: 0.2.0 # x-release-please-version
|
|
7
|
+
|
|
8
|
+
prefixes:
|
|
9
|
+
linkml: https://w3id.org/linkml/
|
|
10
|
+
hca: https://github.com/clevercanary/hca-validation-tools/schema/
|
|
11
|
+
|
|
12
|
+
default_prefix: hca
|
|
13
|
+
default_range: string
|
|
14
|
+
|
|
15
|
+
imports:
|
|
16
|
+
- linkml:types
|
|
17
|
+
- dataset
|
|
18
|
+
- bionetwork/adipose
|
|
19
|
+
- bionetwork/gut
|
|
20
|
+
- bionetwork/musculoskeletal
|
|
21
|
+
- donor
|
|
22
|
+
- sample
|
|
23
|
+
- cell
|