pymetadata 0.6.2__tar.gz → 0.6.3__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.
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.bumpversion.toml +1 -1
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/workflows/ci-cd.yml +5 -1
- {pymetadata-0.6.2 → pymetadata-0.6.3}/CITATION.cff +1 -1
- {pymetadata-0.6.2 → pymetadata-0.6.3}/CLAUDE.md +1 -1
- {pymetadata-0.6.2 → pymetadata-0.6.3}/PKG-INFO +3 -2
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/development.md +4 -4
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/installation.md +1 -1
- {pymetadata-0.6.2 → pymetadata-0.6.3}/pyproject.toml +2 -1
- pymetadata-0.6.3/release-notes/0.6.3.md +16 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/__init__.py +1 -1
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/webservices/unichem.py +59 -32
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_unichem.py +42 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tox.ini +1 -1
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/CODEOWNERS +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/dependabot.yml +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/pull_request_template.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/rulesets/apply.sh +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/rulesets/develop.json +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/rulesets/main.json +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/rulesets/tags.json +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/workflows/docs.yml +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/workflows/ruff.yml +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.github/workflows/ty.yml +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.gitignore +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.pre-commit-config.yaml +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.python-version +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.ruff.toml +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/.zenodo.json +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/LICENSE +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/README.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/README.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/annotations.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/cache.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/console.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/core.annotation.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/core.creator.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/core.miriam.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/core.xref.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/index.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/log.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/omex.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/ontologies.term.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/webservices.chebi.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/webservices.ols.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/webservices.registry.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/webservices.unichem.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/api/webservices.webservice.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/HARMONY2026_slides.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/favicon/about.txt +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/favicon/android-chrome-192x192.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/favicon/android-chrome-512x512.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/favicon/apple-touch-icon.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/favicon/favicon-16x16.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/favicon/favicon-32x32.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/favicon/favicon.ico +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/favicon/favicon_io.zip +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/favicon/pymetadata-100x100-300dpi.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/images/favicon/site.webmanifest +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/index.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/omex.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/docs/robots.txt +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/annotation.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/cache_path.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/MODEL2402290004.4_pymetadata.omex +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/create_omex.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/BioModelsMetadata_MODEL2402290004.csv +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/EndoAcuteBZ1.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/EndoAcuteBZ2.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/EndoAcuteBZ3.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/EndoChronicBZ.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/EndoChronicRZ1.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/EndoChronicRZ2.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/EndoNZ.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/POM253.mat +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/PlotAPCaTTaAcuteAndChronic.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/Zhou2024_Updated-model.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/getCurrentsStructureCaMKSKJrelpKinetics.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/getStartingState.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/main.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/manifest.xml +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/metadata.rdf +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/modelRunnerCaMKSKJrelpKinetics1ms.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/model_ToRORd_LandCaMKSKJrelpKinetics.m +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/omex.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/omex_from_url.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/test.omex +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/pbpko.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/examples/sbo.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/.gitignore +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/README.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/_extensions/grantmcdermott/clean/_extension.yml +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/_extensions/grantmcdermott/clean/clean.scss +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/_extensions/grantmcdermott/clean/mathjax-config.js +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/custom.scss +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/annotation_example.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/annotation_resolved.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/annotation_resolved_small.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/github_screenshot.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/headshot.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/omex_logo.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/omex_overview.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/pymetadata.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/pymetadata_large.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/qr_livermetabolism.png +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/mathjax-config.js +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/pymetadata.bib +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/pymetadata.qmd +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/styles.css +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.10.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.11.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.12.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.13.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.14.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.15.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.16.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.17.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.18.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.19.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.2.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.20.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.21.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.22.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.3.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.4.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.5.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.6.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.7.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.8.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.0.9.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.1.0.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.2.1.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.2.10.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.2.2.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.2.3.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.2.4.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.2.5.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.2.6.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.2.7.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.2.8.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.2.9.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.0.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.1.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.10.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.11.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.2.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.3.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.4.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.5.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.6.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.7.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.8.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.3.9.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.4.0.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.4.1.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.4.2.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.4.3.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.4.4.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.0.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.1.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.10.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.11.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.12.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.2.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.3.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.4.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.5.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.6.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.7.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.8.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.5.9.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.6.0.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.6.1.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/release-notes/0.6.2.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/scripts/llms_txt.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/cache.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/console.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/core/__init__.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/core/annotation.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/core/creator.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/core/miriam.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/core/synonym.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/core/xref.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/log.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/omex.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/ontologies/__init__.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/ontologies/_ontology_builder.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/ontologies/kisao.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/ontologies/pbpko.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/ontologies/sbo.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/ontologies/term.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/py.typed +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/resources/ontologies/README.md +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/webservices/__init__.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/webservices/chebi.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/webservices/ols.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/webservices/registry.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/src/pymetadata/webservices/webservice.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/core/test_annotation.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/core/test_creator.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/data/omex/BIOMD0000000001.omex +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/data/omex/CombineArchiveShowCase.omex +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/data/omex/CombineArchiveShowCase_manifest.xml +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/data/omex/CompModels.omex +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/data/omex/CompModels_manifest.xml +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/data/omex/iCGB21FR.omex +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_cache.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_chebi.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_log.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_offline.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_ols.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_omex.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_ontology.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_registry.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_sbo_kisao.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/tests/test_webservice.py +0 -0
- {pymetadata-0.6.2 → pymetadata-0.6.3}/zensical.toml +0 -0
|
@@ -26,7 +26,7 @@ jobs:
|
|
|
26
26
|
fail-fast: false
|
|
27
27
|
matrix:
|
|
28
28
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
29
|
-
python-version: ["3.11", "3.12", "3.13", "3.14"]
|
|
29
|
+
python-version: ["3.11", "3.12", "3.13", "3.14", "3.15"]
|
|
30
30
|
# linux covers the full range, windows and macos only the newest version
|
|
31
31
|
exclude:
|
|
32
32
|
- os: windows-latest
|
|
@@ -35,12 +35,16 @@ jobs:
|
|
|
35
35
|
python-version: "3.12"
|
|
36
36
|
- os: windows-latest
|
|
37
37
|
python-version: "3.13"
|
|
38
|
+
- os: windows-latest
|
|
39
|
+
python-version: "3.14"
|
|
38
40
|
- os: macos-latest
|
|
39
41
|
python-version: "3.11"
|
|
40
42
|
- os: macos-latest
|
|
41
43
|
python-version: "3.12"
|
|
42
44
|
- os: macos-latest
|
|
43
45
|
python-version: "3.13"
|
|
46
|
+
- os: macos-latest
|
|
47
|
+
python-version: "3.14"
|
|
44
48
|
|
|
45
49
|
steps:
|
|
46
50
|
- uses: actions/checkout@v7
|
|
@@ -8,7 +8,7 @@ authors:
|
|
|
8
8
|
given-names: "Matthias"
|
|
9
9
|
orcid: "https://orcid.org/0000-0003-1725-179X"
|
|
10
10
|
affiliation: "Humboldt-University Berlin, Faculty of Life Science, Institute for Biology, Biology, Berlin; University Lübeck; University Hospital Schleswig-Holstein, Campus Lübeck, First Department of Medicine, Germany"
|
|
11
|
-
version: "0.6.
|
|
11
|
+
version: "0.6.3"
|
|
12
12
|
date-released: "2026-09-07"
|
|
13
13
|
doi: "10.5281/zenodo.5308801"
|
|
14
14
|
license: MIT
|
|
@@ -22,7 +22,7 @@ uv run pre-commit install
|
|
|
22
22
|
pytest # all tests
|
|
23
23
|
pytest tests/test_omex.py # single file
|
|
24
24
|
pytest tests/test_omex.py::test_entry_from_dict # single test
|
|
25
|
-
tox r -e py3.
|
|
25
|
+
tox r -e py3.15 # single tox env (py3.11-3.15 available)
|
|
26
26
|
tox run-parallel # full matrix + ty
|
|
27
27
|
|
|
28
28
|
# lint / format / types
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: pymetadata
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.3
|
|
4
4
|
Summary: pymetadata are python utilities for working with metadata.
|
|
5
5
|
Project-URL: Homepage, https://matthiaskoenig.github.io/pymetadata
|
|
6
6
|
Project-URL: Documentation, https://matthiaskoenig.github.io/pymetadata
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.14
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
23
24
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
24
25
|
Classifier: Topic :: Scientific/Engineering
|
|
25
26
|
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
@@ -37,7 +38,7 @@ Requires-Dist: pytest>=9.1.1; extra == 'dev'
|
|
|
37
38
|
Requires-Dist: ruff>=0.16.6; extra == 'dev'
|
|
38
39
|
Requires-Dist: tox>=4.61.2; extra == 'dev'
|
|
39
40
|
Requires-Dist: ty>=0.0.78; extra == 'dev'
|
|
40
|
-
Requires-Dist: zensical>=0.0.
|
|
41
|
+
Requires-Dist: zensical>=0.0.60; extra == 'dev'
|
|
41
42
|
Provides-Extra: ontology
|
|
42
43
|
Requires-Dist: pronto>=2.7.3; extra == 'ontology'
|
|
43
44
|
Description-Content-Type: text/markdown
|
|
@@ -27,7 +27,7 @@ A pull request can only be merged once the four required checks are green:
|
|
|
27
27
|
|
|
28
28
|
| check | workflow | content |
|
|
29
29
|
| ------- | ------------- | -------------------------------------------------------------------- |
|
|
30
|
-
| `tests` | `ci-cd.yml` | the test matrix, linux, macos and windows with python 3.11 to 3.
|
|
30
|
+
| `tests` | `ci-cd.yml` | the test matrix, linux, macos and windows with python 3.11 to 3.15 |
|
|
31
31
|
| `ruff` | `ruff.yml` | `ruff check` and `ruff format --check` |
|
|
32
32
|
| `ty` | `ty.yml` | `tox r -e ty` |
|
|
33
33
|
| `docs` | `docs.yml` | the zensical build including the api reference and the agent files |
|
|
@@ -118,16 +118,16 @@ From now on every commit is checked with ruff (lint and format) and ty, i.e., th
|
|
|
118
118
|
|
|
119
119
|
The tests are written with pytest, tox runs them against every supported python version.
|
|
120
120
|
|
|
121
|
-
The tox environments are named after the interpreter (`py3.11` to `py3.
|
|
121
|
+
The tox environments are named after the interpreter (`py3.11` to `py3.15`, see `envlist` in `tox.ini`), a single one is run with
|
|
122
122
|
```bash
|
|
123
|
-
tox r -e py3.
|
|
123
|
+
tox r -e py3.15
|
|
124
124
|
```
|
|
125
125
|
and the complete matrix, including the `ty` environment, in parallel with
|
|
126
126
|
```bash
|
|
127
127
|
tox run-parallel
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
This needs the interpreters to be available, which uv installs with `uv python install 3.11 3.12 3.13 3.14`. Continuous integration runs the same environments as `uvx --with tox-uv tox -e py3.
|
|
130
|
+
This needs the interpreters to be available, which uv installs with `uv python install 3.11 3.12 3.13 3.14 3.15`. Continuous integration runs the same environments as `uvx --with tox-uv tox -e py3.15`.
|
|
131
131
|
|
|
132
132
|
To run the tests directly against the development environment use
|
|
133
133
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Installation
|
|
2
2
|
|
|
3
|
-
`pymetadata` requires python >= 3.11 and is available from [pypi](https://pypi.python.org/pypi/pymetadata). It is pure python
|
|
3
|
+
`pymetadata` requires python >= 3.11 and is available from [pypi](https://pypi.python.org/pypi/pymetadata). It is pure python and tested with python 3.11 to 3.15 on Linux, macOS and Windows. The only compiled dependency is `pydantic-core`, which comes with [pydantic](https://docs.pydantic.dev/) and is installed from a wheel; for python 3.15 these wheels are part of pydantic 2.14, with an older pydantic it is built from source, which requires a Rust toolchain.
|
|
4
4
|
|
|
5
5
|
## With uv
|
|
6
6
|
|
|
@@ -24,6 +24,7 @@ classifiers = [
|
|
|
24
24
|
"Programming Language :: Python :: 3.12",
|
|
25
25
|
"Programming Language :: Python :: 3.13",
|
|
26
26
|
"Programming Language :: Python :: 3.14",
|
|
27
|
+
"Programming Language :: Python :: 3.15",
|
|
27
28
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
28
29
|
"Topic :: Scientific/Engineering",
|
|
29
30
|
"Topic :: Scientific/Engineering :: Bio-Informatics",
|
|
@@ -57,7 +58,7 @@ dev = [
|
|
|
57
58
|
"tox>=4.61.2",
|
|
58
59
|
"pytest>=9.1.1",
|
|
59
60
|
"pytest-cov>=7.1.0",
|
|
60
|
-
"zensical>=0.0.
|
|
61
|
+
"zensical>=0.0.60",
|
|
61
62
|
"mkdocstrings-python>=2.0.8",
|
|
62
63
|
]
|
|
63
64
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Release notes for pymetadata 0.6.3
|
|
2
|
+

|
|
3
|
+
|
|
4
|
+
We are pleased to release the next version of pymetadata including the
|
|
5
|
+
following changes:
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
- support for python 3.15, which is part of the test matrix and the tox environments
|
|
9
|
+
|
|
10
|
+
## Fixes
|
|
11
|
+
- `UnichemQuery` works with the current UniChem web service again, which changed the fields of a source (`lastChecked` and `srcLastUpdated` are new, `lastUpdated`, `srcReleaseDate` and `srcReleaseNumber` were removed). Only `sourceID` and `name` of a `UnichemSource` are required now and `UnichemSource.from_dict` ignores unknown fields, so such a change, or a cache written by an older version, no longer breaks the queries
|
|
12
|
+
|
|
13
|
+
## Development
|
|
14
|
+
- the development environment requires zensical 0.0.60, the version the documentation is built with
|
|
15
|
+
|
|
16
|
+
Your pymetadata team
|
|
@@ -17,9 +17,9 @@ See <https://www.ebi.ac.uk/unichem/info/webservices>.
|
|
|
17
17
|
import contextlib
|
|
18
18
|
import logging
|
|
19
19
|
import urllib.parse
|
|
20
|
-
from dataclasses import dataclass, field
|
|
20
|
+
from dataclasses import dataclass, field, fields
|
|
21
21
|
from pathlib import Path
|
|
22
|
-
from typing import ClassVar
|
|
22
|
+
from typing import Any, ClassVar
|
|
23
23
|
|
|
24
24
|
import pymetadata
|
|
25
25
|
from pymetadata.cache import (
|
|
@@ -37,34 +37,62 @@ logger = logging.getLogger(__name__)
|
|
|
37
37
|
|
|
38
38
|
@dataclass
|
|
39
39
|
class UnichemSource:
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
40
|
+
"""Database known to UniChem, see the `sources` endpoint of the web service.
|
|
41
|
+
|
|
42
|
+
Only `sourceID` and `name` are required. UniChem adds and removes the
|
|
43
|
+
descriptive fields without notice, so they are optional, and
|
|
44
|
+
`UnichemSource.from_dict` ignores fields which are not declared here.
|
|
45
|
+
|
|
46
|
+
Attributes:
|
|
47
|
+
sourceID: id of the source in UniChem
|
|
48
|
+
name: unique name of the source in UniChem, always lower case
|
|
49
|
+
nameLabel: name suitable as label of the source, in the case used by
|
|
50
|
+
the source
|
|
51
|
+
nameLong: full name of the source, as defined by the source
|
|
52
|
+
srcUrl: home page of the source
|
|
53
|
+
baseIdUrl: base url for links to a compound in the source; the
|
|
54
|
+
identifier of the compound is appended or replaces `{$id}`
|
|
55
|
+
description: description of the content of the source
|
|
56
|
+
UCICount: number of UniChem compound identifiers in the source
|
|
57
|
+
created: date the source was added to UniChem
|
|
58
|
+
lastChecked: date UniChem checked the source for an update
|
|
59
|
+
srcLastUpdated: date of the last update of the source
|
|
60
|
+
srcDetails: details on the source
|
|
61
|
+
updateComments: comments on the update of the source
|
|
62
|
+
private: the source is not public
|
|
51
63
|
"""
|
|
52
64
|
|
|
53
65
|
sourceID: int
|
|
54
|
-
srcUrl: str
|
|
55
66
|
name: str
|
|
56
|
-
nameLabel: str = field(repr=False)
|
|
57
|
-
nameLong: str = field(repr=False)
|
|
58
|
-
|
|
59
|
-
baseIdUrl: str = field(repr=False)
|
|
60
|
-
description: str = field(repr=False)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
updateComments: str = field(repr=False)
|
|
67
|
-
private: bool = field(repr=False)
|
|
67
|
+
nameLabel: str | None = field(default=None, repr=False)
|
|
68
|
+
nameLong: str | None = field(default=None, repr=False)
|
|
69
|
+
srcUrl: str | None = None
|
|
70
|
+
baseIdUrl: str | None = field(default=None, repr=False)
|
|
71
|
+
description: str | None = field(default=None, repr=False)
|
|
72
|
+
UCICount: int | None = field(default=None, repr=False)
|
|
73
|
+
created: str | None = field(default=None, repr=False)
|
|
74
|
+
lastChecked: str | None = field(default=None, repr=False)
|
|
75
|
+
srcLastUpdated: str | None = field(default=None, repr=False)
|
|
76
|
+
srcDetails: str | None = field(default=None, repr=False)
|
|
77
|
+
updateComments: str | None = field(default=None, repr=False)
|
|
78
|
+
private: bool | None = field(default=None, repr=False)
|
|
79
|
+
|
|
80
|
+
@classmethod
|
|
81
|
+
def from_dict(cls, data: dict[str, Any]) -> "UnichemSource":
|
|
82
|
+
"""Create a source from a source of the web service or of the cache.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
data: fields of the source, fields unknown to `UnichemSource` are
|
|
86
|
+
ignored
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
The source.
|
|
90
|
+
"""
|
|
91
|
+
names = {f.name for f in fields(cls)}
|
|
92
|
+
unknown = sorted(set(data) - names)
|
|
93
|
+
if unknown:
|
|
94
|
+
logger.debug("Ignored fields of UniChem source: %s", unknown)
|
|
95
|
+
return cls(**{k: v for k, v in data.items() if k in names})
|
|
68
96
|
|
|
69
97
|
|
|
70
98
|
class UnichemQuery:
|
|
@@ -117,7 +145,7 @@ class UnichemQuery:
|
|
|
117
145
|
data = read_json_cache(
|
|
118
146
|
unichem_sources_path, max_age=CACHE_DURATION_ONTOLOGY
|
|
119
147
|
)
|
|
120
|
-
return {int(k): UnichemSource(
|
|
148
|
+
return {int(k): UnichemSource.from_dict(v) for k, v in data.items()}
|
|
121
149
|
|
|
122
150
|
url = "https://www.ebi.ac.uk/unichem/api/v1/sources/"
|
|
123
151
|
try:
|
|
@@ -131,11 +159,13 @@ class UnichemQuery:
|
|
|
131
159
|
unichem_sources_path, reason=str(err)
|
|
132
160
|
)
|
|
133
161
|
if fallback is not None:
|
|
134
|
-
return {
|
|
162
|
+
return {
|
|
163
|
+
int(k): UnichemSource.from_dict(v) for k, v in fallback.items()
|
|
164
|
+
}
|
|
135
165
|
raise
|
|
136
166
|
|
|
137
167
|
sources_list: list[UnichemSource] = [
|
|
138
|
-
UnichemSource(
|
|
168
|
+
UnichemSource.from_dict(v) for v in data["sources"]
|
|
139
169
|
]
|
|
140
170
|
sources = {source.sourceID: source for source in sources_list}
|
|
141
171
|
|
|
@@ -219,9 +249,6 @@ class UnichemQuery:
|
|
|
219
249
|
accession = item["src_compound_id"]
|
|
220
250
|
if source.baseIdUrl:
|
|
221
251
|
# create and clean url
|
|
222
|
-
if not source.baseIdUrl:
|
|
223
|
-
continue
|
|
224
|
-
|
|
225
252
|
url = f"{source.baseIdUrl}{accession}"
|
|
226
253
|
|
|
227
254
|
url_accession = urllib.parse.quote(accession)
|
|
@@ -8,6 +8,48 @@ import requests
|
|
|
8
8
|
from pymetadata.webservices.unichem import UnichemQuery, UnichemSource
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
def test_source_from_dict_current_fields() -> None:
|
|
12
|
+
"""Test creating a source from the fields UniChem answers with."""
|
|
13
|
+
source = UnichemSource.from_dict(
|
|
14
|
+
{
|
|
15
|
+
"UCICount": 29916004,
|
|
16
|
+
"baseIdUrl": "https://www.surechembl.org/chemical/",
|
|
17
|
+
"created": None,
|
|
18
|
+
"description": "SureChEMBL extracts chemistry from patents.",
|
|
19
|
+
"lastChecked": "2026-09-15",
|
|
20
|
+
"name": "surechembl",
|
|
21
|
+
"nameLabel": "SureChEMBL",
|
|
22
|
+
"nameLong": "SureChEMBL",
|
|
23
|
+
"private": False,
|
|
24
|
+
"sourceID": 15,
|
|
25
|
+
"srcDetails": None,
|
|
26
|
+
"srcLastUpdated": "2026-09-12 00:49:52",
|
|
27
|
+
"srcUrl": "https://www.surechembl.org/",
|
|
28
|
+
"updateComments": None,
|
|
29
|
+
}
|
|
30
|
+
)
|
|
31
|
+
assert source.sourceID == 15
|
|
32
|
+
assert source.name == "surechembl"
|
|
33
|
+
assert source.baseIdUrl == "https://www.surechembl.org/chemical/"
|
|
34
|
+
assert source.lastChecked == "2026-09-15"
|
|
35
|
+
assert source.srcLastUpdated == "2026-09-12 00:49:52"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_source_from_dict_schema_changes() -> None:
|
|
39
|
+
"""Test that added and removed fields of UniChem do not break a source.
|
|
40
|
+
|
|
41
|
+
UniChem changed the fields of a source without notice, e.g., `lastChecked`
|
|
42
|
+
appeared and `srcReleaseNumber` disappeared.
|
|
43
|
+
"""
|
|
44
|
+
source = UnichemSource.from_dict(
|
|
45
|
+
{"sourceID": 1, "name": "chembl", "srcReleaseNumber": 1, "newField": "x"}
|
|
46
|
+
)
|
|
47
|
+
assert source.sourceID == 1
|
|
48
|
+
assert source.name == "chembl"
|
|
49
|
+
assert source.baseIdUrl is None
|
|
50
|
+
assert not hasattr(source, "newField")
|
|
51
|
+
|
|
52
|
+
|
|
11
53
|
def test_get_sources(tmp_path: Path) -> None:
|
|
12
54
|
"""Test retrieving sources."""
|
|
13
55
|
cache_path: Path = tmp_path
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/MODEL2402290004.4_pymetadata.omex
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pymetadata-0.6.2 → pymetadata-0.6.3}/examples/omex/biomodels_omex/files/Zhou2024_Updated-model.m
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/annotation_example.png
RENAMED
|
File without changes
|
{pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/annotation_resolved.png
RENAMED
|
File without changes
|
{pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/annotation_resolved_small.png
RENAMED
|
File without changes
|
{pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/github_screenshot.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pymetadata-0.6.2 → pymetadata-0.6.3}/presentations/HARMONY2026/images/qr_livermetabolism.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|