pymetadata 0.6.1__tar.gz → 0.6.2__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.
Files changed (215) hide show
  1. {pymetadata-0.6.1 → pymetadata-0.6.2}/.bumpversion.toml +4 -2
  2. pymetadata-0.6.2/.github/CODEOWNERS +1 -0
  3. pymetadata-0.6.2/.github/pull_request_template.md +12 -0
  4. pymetadata-0.6.2/.github/rulesets/apply.sh +43 -0
  5. pymetadata-0.6.2/.github/rulesets/develop.json +61 -0
  6. pymetadata-0.6.2/.github/rulesets/main.json +17 -0
  7. pymetadata-0.6.2/.github/rulesets/tags.json +16 -0
  8. {pymetadata-0.6.1 → pymetadata-0.6.2}/.github/workflows/ci-cd.yml +41 -3
  9. {pymetadata-0.6.1 → pymetadata-0.6.2}/.github/workflows/docs.yml +9 -3
  10. {pymetadata-0.6.1 → pymetadata-0.6.2}/.github/workflows/ruff.yml +8 -2
  11. {pymetadata-0.6.1 → pymetadata-0.6.2}/.github/workflows/ty.yml +8 -2
  12. {pymetadata-0.6.1 → pymetadata-0.6.2}/CITATION.cff +1 -1
  13. {pymetadata-0.6.1 → pymetadata-0.6.2}/CLAUDE.md +12 -4
  14. {pymetadata-0.6.1 → pymetadata-0.6.2}/PKG-INFO +1 -1
  15. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/development.md +103 -9
  16. pymetadata-0.6.2/release-notes/0.6.2.md +21 -0
  17. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/__init__.py +1 -1
  18. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/core/annotation.py +4 -6
  19. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/omex.py +1 -0
  20. {pymetadata-0.6.1 → pymetadata-0.6.2}/zensical.toml +3 -3
  21. {pymetadata-0.6.1 → pymetadata-0.6.2}/.github/dependabot.yml +0 -0
  22. {pymetadata-0.6.1 → pymetadata-0.6.2}/.gitignore +0 -0
  23. {pymetadata-0.6.1 → pymetadata-0.6.2}/.pre-commit-config.yaml +0 -0
  24. {pymetadata-0.6.1 → pymetadata-0.6.2}/.python-version +0 -0
  25. {pymetadata-0.6.1 → pymetadata-0.6.2}/.ruff.toml +0 -0
  26. {pymetadata-0.6.1 → pymetadata-0.6.2}/.zenodo.json +0 -0
  27. {pymetadata-0.6.1 → pymetadata-0.6.2}/LICENSE +0 -0
  28. {pymetadata-0.6.1 → pymetadata-0.6.2}/README.md +0 -0
  29. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/README.md +0 -0
  30. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/annotations.md +0 -0
  31. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/cache.md +0 -0
  32. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/console.md +0 -0
  33. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/core.annotation.md +0 -0
  34. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/core.creator.md +0 -0
  35. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/core.miriam.md +0 -0
  36. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/core.xref.md +0 -0
  37. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/index.md +0 -0
  38. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/log.md +0 -0
  39. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/omex.md +0 -0
  40. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/ontologies.term.md +0 -0
  41. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/webservices.chebi.md +0 -0
  42. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/webservices.ols.md +0 -0
  43. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/webservices.registry.md +0 -0
  44. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/webservices.unichem.md +0 -0
  45. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/api/webservices.webservice.md +0 -0
  46. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/HARMONY2026_slides.png +0 -0
  47. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/favicon/about.txt +0 -0
  48. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/favicon/android-chrome-192x192.png +0 -0
  49. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/favicon/android-chrome-512x512.png +0 -0
  50. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/favicon/apple-touch-icon.png +0 -0
  51. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/favicon/favicon-16x16.png +0 -0
  52. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/favicon/favicon-32x32.png +0 -0
  53. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/favicon/favicon.ico +0 -0
  54. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/favicon/favicon_io.zip +0 -0
  55. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/favicon/pymetadata-100x100-300dpi.png +0 -0
  56. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/images/favicon/site.webmanifest +0 -0
  57. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/index.md +0 -0
  58. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/installation.md +0 -0
  59. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/omex.md +0 -0
  60. {pymetadata-0.6.1 → pymetadata-0.6.2}/docs/robots.txt +0 -0
  61. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/annotation.py +0 -0
  62. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/cache_path.py +0 -0
  63. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/MODEL2402290004.4_pymetadata.omex +0 -0
  64. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/create_omex.py +0 -0
  65. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/BioModelsMetadata_MODEL2402290004.csv +0 -0
  66. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/EndoAcuteBZ1.m +0 -0
  67. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/EndoAcuteBZ2.m +0 -0
  68. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/EndoAcuteBZ3.m +0 -0
  69. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/EndoChronicBZ.m +0 -0
  70. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/EndoChronicRZ1.m +0 -0
  71. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/EndoChronicRZ2.m +0 -0
  72. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/EndoNZ.m +0 -0
  73. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/POM253.mat +0 -0
  74. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/PlotAPCaTTaAcuteAndChronic.m +0 -0
  75. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/Zhou2024_Updated-model.m +0 -0
  76. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/getCurrentsStructureCaMKSKJrelpKinetics.m +0 -0
  77. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/getStartingState.m +0 -0
  78. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/main.m +0 -0
  79. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/manifest.xml +0 -0
  80. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/metadata.rdf +0 -0
  81. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/modelRunnerCaMKSKJrelpKinetics1ms.m +0 -0
  82. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/biomodels_omex/files/model_ToRORd_LandCaMKSKJrelpKinetics.m +0 -0
  83. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/omex.py +0 -0
  84. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/omex_from_url.py +0 -0
  85. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/omex/test.omex +0 -0
  86. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/pbpko.py +0 -0
  87. {pymetadata-0.6.1 → pymetadata-0.6.2}/examples/sbo.py +0 -0
  88. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/.gitignore +0 -0
  89. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/README.md +0 -0
  90. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/_extensions/grantmcdermott/clean/_extension.yml +0 -0
  91. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/_extensions/grantmcdermott/clean/clean.scss +0 -0
  92. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/_extensions/grantmcdermott/clean/mathjax-config.js +0 -0
  93. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/custom.scss +0 -0
  94. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/images/annotation_example.png +0 -0
  95. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/images/annotation_resolved.png +0 -0
  96. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/images/annotation_resolved_small.png +0 -0
  97. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/images/github_screenshot.png +0 -0
  98. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/images/headshot.png +0 -0
  99. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/images/omex_logo.png +0 -0
  100. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/images/omex_overview.png +0 -0
  101. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/images/pymetadata.png +0 -0
  102. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/images/pymetadata_large.png +0 -0
  103. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/images/qr_livermetabolism.png +0 -0
  104. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/mathjax-config.js +0 -0
  105. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/pymetadata.bib +0 -0
  106. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/pymetadata.qmd +0 -0
  107. {pymetadata-0.6.1 → pymetadata-0.6.2}/presentations/HARMONY2026/styles.css +0 -0
  108. {pymetadata-0.6.1 → pymetadata-0.6.2}/pyproject.toml +0 -0
  109. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.10.md +0 -0
  110. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.11.md +0 -0
  111. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.12.md +0 -0
  112. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.13.md +0 -0
  113. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.14.md +0 -0
  114. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.15.md +0 -0
  115. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.16.md +0 -0
  116. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.17.md +0 -0
  117. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.18.md +0 -0
  118. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.19.md +0 -0
  119. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.2.md +0 -0
  120. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.20.md +0 -0
  121. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.21.md +0 -0
  122. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.22.md +0 -0
  123. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.3.md +0 -0
  124. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.4.md +0 -0
  125. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.5.md +0 -0
  126. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.6.md +0 -0
  127. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.7.md +0 -0
  128. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.8.md +0 -0
  129. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.0.9.md +0 -0
  130. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.1.0.md +0 -0
  131. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.2.1.md +0 -0
  132. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.2.10.md +0 -0
  133. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.2.2.md +0 -0
  134. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.2.3.md +0 -0
  135. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.2.4.md +0 -0
  136. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.2.5.md +0 -0
  137. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.2.6.md +0 -0
  138. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.2.7.md +0 -0
  139. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.2.8.md +0 -0
  140. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.2.9.md +0 -0
  141. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.0.md +0 -0
  142. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.1.md +0 -0
  143. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.10.md +0 -0
  144. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.11.md +0 -0
  145. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.2.md +0 -0
  146. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.3.md +0 -0
  147. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.4.md +0 -0
  148. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.5.md +0 -0
  149. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.6.md +0 -0
  150. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.7.md +0 -0
  151. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.8.md +0 -0
  152. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.3.9.md +0 -0
  153. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.4.0.md +0 -0
  154. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.4.1.md +0 -0
  155. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.4.2.md +0 -0
  156. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.4.3.md +0 -0
  157. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.4.4.md +0 -0
  158. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.0.md +0 -0
  159. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.1.md +0 -0
  160. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.10.md +0 -0
  161. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.11.md +0 -0
  162. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.12.md +0 -0
  163. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.2.md +0 -0
  164. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.3.md +0 -0
  165. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.4.md +0 -0
  166. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.5.md +0 -0
  167. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.6.md +0 -0
  168. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.7.md +0 -0
  169. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.8.md +0 -0
  170. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.5.9.md +0 -0
  171. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.6.0.md +0 -0
  172. {pymetadata-0.6.1 → pymetadata-0.6.2}/release-notes/0.6.1.md +0 -0
  173. {pymetadata-0.6.1 → pymetadata-0.6.2}/scripts/llms_txt.py +0 -0
  174. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/cache.py +0 -0
  175. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/console.py +0 -0
  176. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/core/__init__.py +0 -0
  177. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/core/creator.py +0 -0
  178. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/core/miriam.py +0 -0
  179. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/core/synonym.py +0 -0
  180. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/core/xref.py +0 -0
  181. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/log.py +0 -0
  182. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/ontologies/__init__.py +0 -0
  183. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/ontologies/_ontology_builder.py +0 -0
  184. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/ontologies/kisao.py +0 -0
  185. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/ontologies/pbpko.py +0 -0
  186. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/ontologies/sbo.py +0 -0
  187. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/ontologies/term.py +0 -0
  188. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/py.typed +0 -0
  189. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/resources/ontologies/README.md +0 -0
  190. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/webservices/__init__.py +0 -0
  191. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/webservices/chebi.py +0 -0
  192. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/webservices/ols.py +0 -0
  193. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/webservices/registry.py +0 -0
  194. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/webservices/unichem.py +0 -0
  195. {pymetadata-0.6.1 → pymetadata-0.6.2}/src/pymetadata/webservices/webservice.py +0 -0
  196. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/core/test_annotation.py +0 -0
  197. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/core/test_creator.py +0 -0
  198. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/data/omex/BIOMD0000000001.omex +0 -0
  199. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/data/omex/CombineArchiveShowCase.omex +0 -0
  200. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/data/omex/CombineArchiveShowCase_manifest.xml +0 -0
  201. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/data/omex/CompModels.omex +0 -0
  202. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/data/omex/CompModels_manifest.xml +0 -0
  203. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/data/omex/iCGB21FR.omex +0 -0
  204. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_cache.py +0 -0
  205. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_chebi.py +0 -0
  206. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_log.py +0 -0
  207. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_offline.py +0 -0
  208. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_ols.py +0 -0
  209. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_omex.py +0 -0
  210. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_ontology.py +0 -0
  211. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_registry.py +0 -0
  212. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_sbo_kisao.py +0 -0
  213. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_unichem.py +0 -0
  214. {pymetadata-0.6.1 → pymetadata-0.6.2}/tests/test_webservice.py +0 -0
  215. {pymetadata-0.6.1 → pymetadata-0.6.2}/tox.ini +0 -0
@@ -1,5 +1,5 @@
1
1
  [tool.bumpversion]
2
- current_version = "0.6.1"
2
+ current_version = "0.6.2"
3
3
  commit = true
4
4
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
5
5
  serialize = ["{major}.{minor}.{patch}"]
@@ -7,7 +7,9 @@ search = "{current_version}"
7
7
  replace = "{new_version}"
8
8
  regex = false
9
9
  ignore_missing_version = false
10
- tag = true
10
+ # no tag: the bump is merged into develop through a pull request, which
11
+ # rewrites the commit, so the tag is created on develop afterwards
12
+ tag = false
11
13
  sign_tags = false
12
14
  tag_name = "{new_version}"
13
15
  tag_message = "Bump version: {current_version} → {new_version}"
@@ -0,0 +1 @@
1
+ * @matthiaskoenig
@@ -0,0 +1,12 @@
1
+ ## Summary
2
+
3
+ <!-- what does this change and why -->
4
+
5
+ ## Checklist
6
+
7
+ - [ ] the pull request targets `develop`
8
+ - [ ] tests were added or updated for the change
9
+ - [ ] `tox run-parallel` passes locally (tests and `ty`)
10
+ - [ ] `ruff check` and `ruff format` are clean, e.g., via `pre-commit run --all-files`
11
+ - [ ] public functions and classes have type annotations and a docstring
12
+ - [ ] user visible changes are in `release-notes/` and, if needed, in `docs/`
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Apply the repository policies of pymetadata: the merge settings of the
4
+ # repository and the rulesets in this directory. The script is idempotent, i.e.,
5
+ # a ruleset which already exists is updated instead of added a second time, so
6
+ # it can be run again after every change of the json files.
7
+ #
8
+ # The file name of a ruleset has to match the "name" in the json. A ruleset which
9
+ # is removed from this directory stays on the repository, delete it with
10
+ # `gh api -X DELETE repos/<owner>/<repo>/rulesets/<id>`.
11
+ #
12
+ # Requires the github cli (https://cli.github.com) authenticated as a user with
13
+ # admin permission on the repository:
14
+ #
15
+ # gh auth login
16
+ # .github/rulesets/apply.sh [owner/repo]
17
+ #
18
+ set -euo pipefail
19
+
20
+ REPO="${1:-matthiaskoenig/pymetadata}"
21
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
22
+
23
+ echo "repository settings of ${REPO}"
24
+ gh api -X PATCH "repos/${REPO}" \
25
+ -F allow_auto_merge=true \
26
+ -F delete_branch_on_merge=true \
27
+ -F allow_update_branch=true \
28
+ -F allow_squash_merge=true \
29
+ -F allow_rebase_merge=true \
30
+ -F allow_merge_commit=false \
31
+ --silent
32
+
33
+ for path in "${DIR}"/*.json; do
34
+ name="$(basename "${path}" .json)"
35
+ id="$(gh api "repos/${REPO}/rulesets" --jq "map(select(.name == \"${name}\")) | .[0].id // empty")"
36
+ if [[ -n "${id}" ]]; then
37
+ gh api -X PUT "repos/${REPO}/rulesets/${id}" --input "${path}" --silent
38
+ echo "ruleset ${name} updated (${id})"
39
+ else
40
+ id="$(gh api -X POST "repos/${REPO}/rulesets" --input "${path}" --jq .id)"
41
+ echo "ruleset ${name} created (${id})"
42
+ fi
43
+ done
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "develop",
3
+ "target": "branch",
4
+ "enforcement": "active",
5
+ "bypass_actors": [],
6
+ "conditions": {
7
+ "ref_name": {
8
+ "include": [
9
+ "refs/heads/develop"
10
+ ],
11
+ "exclude": []
12
+ }
13
+ },
14
+ "rules": [
15
+ {
16
+ "type": "deletion"
17
+ },
18
+ {
19
+ "type": "non_fast_forward"
20
+ },
21
+ {
22
+ "type": "required_linear_history"
23
+ },
24
+ {
25
+ "type": "pull_request",
26
+ "parameters": {
27
+ "required_approving_review_count": 0,
28
+ "dismiss_stale_reviews_on_push": true,
29
+ "require_code_owner_review": false,
30
+ "require_last_push_approval": false,
31
+ "required_review_thread_resolution": true,
32
+ "allowed_merge_methods": [
33
+ "squash",
34
+ "rebase"
35
+ ],
36
+ "require_extra_approval_for_unattributed_changes": false
37
+ }
38
+ },
39
+ {
40
+ "type": "required_status_checks",
41
+ "parameters": {
42
+ "strict_required_status_checks_policy": false,
43
+ "do_not_enforce_on_create": false,
44
+ "required_status_checks": [
45
+ {
46
+ "context": "tests"
47
+ },
48
+ {
49
+ "context": "ruff"
50
+ },
51
+ {
52
+ "context": "ty"
53
+ },
54
+ {
55
+ "context": "docs"
56
+ }
57
+ ]
58
+ }
59
+ }
60
+ ]
61
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "main",
3
+ "target": "branch",
4
+ "enforcement": "active",
5
+ "bypass_actors": [],
6
+ "conditions": {
7
+ "ref_name": {
8
+ "include": ["refs/heads/main"],
9
+ "exclude": []
10
+ }
11
+ },
12
+ "rules": [
13
+ {"type": "deletion"},
14
+ {"type": "non_fast_forward"},
15
+ {"type": "required_linear_history"}
16
+ ]
17
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "tags",
3
+ "target": "tag",
4
+ "enforcement": "active",
5
+ "bypass_actors": [],
6
+ "conditions": {
7
+ "ref_name": {
8
+ "include": ["~ALL"],
9
+ "exclude": []
10
+ }
11
+ },
12
+ "rules": [
13
+ {"type": "deletion"},
14
+ {"type": "non_fast_forward"}
15
+ ]
16
+ }
@@ -2,14 +2,19 @@ name: CI-CD
2
2
 
3
3
  on:
4
4
  push:
5
+ # feature branches are tested through their pull request, tags release
6
+ branches: [develop, main]
7
+ tags: ['*']
8
+ pull_request:
9
+ branches: [develop, main]
5
10
  workflow_dispatch:
6
11
 
7
- # least privilege by default, the release job raises what it needs
12
+ # least privilege by default, the release and sync jobs raise what they need
8
13
  permissions:
9
14
  contents: read
10
15
 
11
16
  concurrency:
12
- group: ${{ github.workflow }}-${{ github.ref }}
17
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
13
18
  # superseded branch runs are cancelled, release runs are never cancelled
14
19
  cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/') }}
15
20
 
@@ -51,8 +56,24 @@ jobs:
51
56
  run:
52
57
  uvx --with tox-uv tox -e py${{ matrix.python-version }}
53
58
 
54
- release:
59
+ tests:
60
+ # the one check the branch protection requires; the names of the matrix
61
+ # jobs change with the matrix, this name does not
62
+ name: tests
55
63
  needs: test
64
+ if: always()
65
+ runs-on: ubuntu-latest
66
+ timeout-minutes: 5
67
+ steps:
68
+ - name: Check the result of the test matrix
69
+ env:
70
+ RESULT: ${{ needs.test.result }}
71
+ run: |
72
+ echo "test matrix: $RESULT"
73
+ test "$RESULT" = "success"
74
+
75
+ release:
76
+ needs: tests
56
77
  if: startsWith(github.ref, 'refs/tags/')
57
78
  runs-on: ubuntu-latest
58
79
  timeout-minutes: 20
@@ -85,3 +106,20 @@ jobs:
85
106
  body_path: "release-notes/${{ github.ref_name }}.md"
86
107
  draft: false
87
108
  prerelease: false
109
+
110
+ sync-main:
111
+ # main tracks the latest published release, see docs/development.md
112
+ needs: release
113
+ if: startsWith(github.ref, 'refs/tags/')
114
+ runs-on: ubuntu-latest
115
+ timeout-minutes: 5
116
+ permissions:
117
+ contents: write # fast-forward main to the released commit
118
+ steps:
119
+ - uses: actions/checkout@v7
120
+ with:
121
+ # a shallow clone cannot be pushed to another branch
122
+ fetch-depth: 0
123
+ - name: Fast-forward main to the release
124
+ # no --force: the push fails loudly if it would not be a fast-forward
125
+ run: git push origin HEAD:main
@@ -2,18 +2,24 @@ name: documentation
2
2
 
3
3
  on:
4
4
  push:
5
+ # feature branches are built through their pull request
6
+ branches: [develop, main]
7
+ pull_request:
8
+ branches: [develop, main]
5
9
  workflow_dispatch:
6
10
 
7
11
  permissions:
8
12
  contents: read
9
13
 
10
14
  concurrency:
15
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
11
16
  # never cancel a running deployment, it would leave the site half published
12
- group: pages
13
17
  cancel-in-progress: false
14
18
 
15
19
  jobs:
16
- build:
20
+ docs:
21
+ # required by the branch protection, see .github/rulesets/develop.json
22
+ name: docs
17
23
  runs-on: ubuntu-latest
18
24
  timeout-minutes: 15
19
25
  steps:
@@ -42,7 +48,7 @@ jobs:
42
48
  path: site
43
49
 
44
50
  deploy:
45
- needs: build
51
+ needs: docs
46
52
  # only the default branch publishes to https://matthiaskoenig.github.io/pymetadata
47
53
  if: github.ref == 'refs/heads/develop'
48
54
  runs-on: ubuntu-latest
@@ -2,17 +2,23 @@ name: ruff
2
2
 
3
3
  on:
4
4
  push:
5
+ # feature branches are checked through their pull request
6
+ branches: [develop, main]
7
+ pull_request:
8
+ branches: [develop, main]
5
9
  workflow_dispatch:
6
10
 
7
11
  permissions:
8
12
  contents: read
9
13
 
10
14
  concurrency:
11
- group: ${{ github.workflow }}-${{ github.ref }}
12
- cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/') }}
15
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
16
+ cancel-in-progress: true
13
17
 
14
18
  jobs:
15
19
  ruff:
20
+ # required by the branch protection, see .github/rulesets/develop.json
21
+ name: ruff
16
22
  runs-on: ubuntu-latest
17
23
  timeout-minutes: 10
18
24
  steps:
@@ -2,17 +2,23 @@ name: ty
2
2
 
3
3
  on:
4
4
  push:
5
+ # feature branches are checked through their pull request
6
+ branches: [develop, main]
7
+ pull_request:
8
+ branches: [develop, main]
5
9
  workflow_dispatch:
6
10
 
7
11
  permissions:
8
12
  contents: read
9
13
 
10
14
  concurrency:
11
- group: ${{ github.workflow }}-${{ github.ref }}
12
- cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/') }}
15
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
16
+ cancel-in-progress: true
13
17
 
14
18
  jobs:
15
19
  ty:
20
+ # required by the branch protection, see .github/rulesets/develop.json
21
+ name: ty
16
22
  runs-on: ubuntu-latest
17
23
  timeout-minutes: 15
18
24
  steps:
@@ -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.1"
11
+ version: "0.6.2"
12
12
  date-released: "2026-09-07"
13
13
  doi: "10.5281/zenodo.5308801"
14
14
  license: MIT
@@ -32,10 +32,18 @@ tox -e ty # ty type check (config in [tool.ty] in pyprojec
32
32
  uvx ty check # same check, straight from the working tree
33
33
  ```
34
34
 
35
- Release steps are in `docs/development.md` (there is no separate `RELEASE.md`);
36
- version bumps go through `uvx bump-my-version bump [major|minor|patch]` (updates
37
- `src/pymetadata/__init__.py` and `CITATION.cff`), and pushing the tag triggers
38
- the PyPI release workflow.
35
+ `develop` is the default branch and takes every change through a pull request;
36
+ direct pushes are rejected by the rulesets in `.github/rulesets/` (applied with
37
+ `.github/rulesets/apply.sh`), which require the `tests`, `ruff`, `ty` and `docs`
38
+ checks. `main` only tracks the latest release and is fast-forwarded by the
39
+ `sync-main` job of the release workflow, never by hand.
40
+
41
+ Release steps are in `docs/development.md` (there is no separate `RELEASE.md`):
42
+ the release is prepared on a branch, `uvx bump-my-version bump [major|minor|patch]`
43
+ updates `src/pymetadata/__init__.py` and `CITATION.cff` and commits without
44
+ tagging (`tag = false`, a squash merge would rewrite the commit), and the tag is
45
+ created on `develop` after the pull request was merged, which triggers the PyPI
46
+ release workflow.
39
47
 
40
48
  Documentation is [Zensical](https://zensical.org/): markdown sources in `docs/`,
41
49
  configured in `zensical.toml`, built into the gitignored `site/`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: pymetadata
3
- Version: 0.6.1
3
+ Version: 0.6.2
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
@@ -2,6 +2,83 @@
2
2
 
3
3
  Contributions are welcome. The repository is [matthiaskoenig/pymetadata](https://github.com/matthiaskoenig/pymetadata); development happens against the `develop` branch via pull requests.
4
4
 
5
+ ## Branch model
6
+
7
+ Two branches are permanent:
8
+
9
+ - **`develop`** is the default branch and the branch everything is integrated
10
+ into. The documentation on
11
+ [matthiaskoenig.github.io/pymetadata](https://matthiaskoenig.github.io/pymetadata)
12
+ is published from it.
13
+ - **`main`** tracks the latest published release. It is fast-forwarded to the
14
+ released commit by the `sync-main` job of the `CI-CD` workflow after the
15
+ package went to pypi, so `main` and the newest version on pypi always agree.
16
+ Nothing is developed on `main` and nothing is merged into it by hand.
17
+
18
+ Work happens on short lived branches off `develop`, which GitHub deletes after
19
+ the merge. Releases are tagged on `develop`, see [Release](#release).
20
+
21
+ ## Pull requests
22
+
23
+ Neither branch accepts a direct push, every change goes through a pull request
24
+ against `develop`. This includes the maintainer, there is no bypass.
25
+
26
+ A pull request can only be merged once the four required checks are green:
27
+
28
+ | check | workflow | content |
29
+ | ------- | ------------- | -------------------------------------------------------------------- |
30
+ | `tests` | `ci-cd.yml` | the test matrix, linux, macos and windows with python 3.11 to 3.14 |
31
+ | `ruff` | `ruff.yml` | `ruff check` and `ruff format --check` |
32
+ | `ty` | `ty.yml` | `tox r -e ty` |
33
+ | `docs` | `docs.yml` | the zensical build including the api reference and the agent files |
34
+
35
+ `tests` aggregates the test matrix into a single job, so the name of the
36
+ required check stays the same when the matrix changes.
37
+
38
+ Further rules of a pull request:
39
+
40
+ - conversations have to be resolved before the merge
41
+ - an approval is dismissed when new commits are pushed
42
+ - the history stays linear, i.e., a pull request is merged with squash or
43
+ rebase; merge commits are disabled
44
+ - the maintainer is the code owner of the repository (`.github/CODEOWNERS`) and
45
+ is requested for review on every pull request. A pull request of a contributor
46
+ is therefore reviewed and merged by the maintainer, who has the only write
47
+ access. The rulesets themselves do not require an approval: on a personal
48
+ repository a ruleset cannot ask for an approval only from somebody else, and
49
+ requiring one would block the pull requests of the maintainer, who cannot
50
+ approve their own. Once a second person has write access, a ruleset requiring
51
+ an approving review of a code owner can be added
52
+
53
+ [Auto-merge](https://docs.github.com/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request)
54
+ is enabled for the repository, so a pull request can be queued and is merged as
55
+ soon as the checks pass and the required approval is there.
56
+
57
+ ### Repository policies { #repository-policies }
58
+
59
+ The protection is implemented with
60
+ [repository rulesets](https://docs.github.com/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets).
61
+ They are part of the repository in `.github/rulesets/` instead of only living in
62
+ the web interface, so a change to a policy is reviewed like any other change:
63
+
64
+ | ruleset | applies to | rules |
65
+ | ----------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
66
+ | `develop.json` | `develop` | pull request required, the four checks above, resolved conversations, linear history, no force push, no deletion. **No bypass, for anybody.** |
67
+ | `main.json` | `main` | linear history, no force push, no deletion, no bypass. The fast-forward of the release workflow needs none, only a force push or a merge commit would be rejected |
68
+ | `tags.json` | all tags | a tag cannot be deleted or moved, so a release tag keeps pointing at what was released |
69
+
70
+ Changing a policy means changing the json and applying it:
71
+
72
+ ```bash
73
+ .github/rulesets/apply.sh
74
+ ```
75
+
76
+ The script is idempotent: it updates the rulesets which exist and creates the
77
+ missing ones. It also sets the merge settings of the repository, i.e.,
78
+ auto-merge, delete branch on merge, and squash and rebase as the only merge
79
+ methods. It needs the [github cli](https://cli.github.com) authenticated as a
80
+ user with admin permission on the repository.
81
+
5
82
  ## Setup development environment
6
83
 
7
84
  Development needs [uv](https://docs.astral.sh/uv/) and a checkout of the repository:
@@ -138,19 +215,36 @@ Run `ruff format` afterwards, since the rendered modules are not formatted.
138
215
 
139
216
  ## Release
140
217
 
141
- A release is made from `develop`:
218
+ A release is made from `develop`. Since `develop` only accepts pull requests,
219
+ the release is prepared on a branch and tagged once that pull request is merged:
220
+
221
+ 1. branch off `develop`: `git switch -c release/x.y.z develop`
222
+ 2. update the ontology modules, see [Regenerating the ontologies](#regenerating-the-ontologies), and commit the changes
223
+ 3. write the release notes for the version in `release-notes/x.y.z.md`
224
+ 4. make sure everything passes: `tox run-parallel`, `ruff check`, `tox r -e ty`
225
+ 5. check the version bump: `uvx bump-my-version bump [major|minor|patch] --dry-run -vv`
226
+ 6. bump the version: `uvx bump-my-version bump [major|minor|patch]`, which updates `src/pymetadata/__init__.py` and `CITATION.cff` and commits. It does not create the tag; a squash or rebase merge would rewrite the commit and leave the tag behind on a commit which is not part of `develop`
227
+ 7. push the branch, open the pull request against `develop` and merge it once the checks are green
228
+ 8. tag the merged commit on `develop` and push the tag:
229
+
230
+ ```bash
231
+ git switch develop
232
+ git pull
233
+ git tag x.y.z
234
+ git push origin x.y.z
235
+ ```
236
+
237
+ This starts the `CI-CD` workflow, which runs the test matrix, publishes to
238
+ [pypi](https://pypi.org/project/pymetadata/), creates the GitHub release
239
+ from `release-notes/x.y.z.md` and fast-forwards `main` to the tagged commit.
240
+ Check the version before pushing, a tag cannot be moved or deleted
241
+ afterwards.
142
242
 
143
- 1. update the ontology modules, see [Regenerating the ontologies](#regenerating-the-ontologies), and commit the changes
144
- 2. write the release notes for the version in `release-notes/`
145
- 3. make sure everything passes: `tox run-parallel`, `ruff check`, `tox r -e ty`
146
- 4. check the version bump: `uvx bump-my-version bump [major|minor|patch] --dry-run -vv`
147
- 5. bump the version: `uvx bump-my-version bump [major|minor|patch]`, which updates `src/pymetadata/__init__.py` and `CITATION.cff`, commits and tags
148
- 6. `git push --tags`, which triggers the release workflow publishing to [pypi](https://pypi.org/project/pymetadata/), followed by `git push`
149
- 7. test the installation from pypi in a fresh environment:
243
+ 9. test the installation from pypi in a fresh environment:
150
244
 
151
245
  ```bash
152
246
  uv venv --python 3.14
153
247
  uv pip install pymetadata
154
248
  ```
155
249
 
156
- 8. once Zenodo has archived the release, update the citation information, i.e., `date-released` in `CITATION.cff` and the version, date and version DOI of the release in the citation of `README.md` and `docs/index.md`. `bump-my-version` only updates the version, not the date and the DOI, which are only known after the release
250
+ 10. once Zenodo has archived the release, update the citation information, i.e., `date-released` in `CITATION.cff` and the version, date and version DOI of the release in the citation of `README.md` and `docs/index.md`. `bump-my-version` only updates the version, not the date and the DOI, which are only known after the release. These changes go in through a pull request like everything else
@@ -0,0 +1,21 @@
1
+ # Release notes for pymetadata 0.6.2
2
+ ![pymetadata](./docs/images/favicon/pymetadata-100x100-300dpi.png)
3
+
4
+ We are pleased to release the next version of pymetadata including the
5
+ following changes:
6
+
7
+ ## Features
8
+ - `EntryFormat.ANTIMONY` for Antimony model files in COMBINE archives (`text/plain`)
9
+
10
+ ## Development
11
+ - every change goes into `develop` through a pull request; the tests, `ruff`, `ty` and the documentation build have to pass before a merge is possible
12
+ - `main` tracks the latest published release and is fast-forwarded to the released commit by the release workflow
13
+ - the workflows also run on pull requests, so contributions from forks are tested
14
+ - the branch protection is part of the repository as rulesets in `.github/rulesets/`, together with `CODEOWNERS` and a pull request template
15
+ - the branch model, the pull request rules and the adjusted release process are documented in `docs/development.md`
16
+ - the mkdocstrings options in `zensical.toml` use the plugin table directly, as required by zensical 0.0.60
17
+
18
+ ## Fixes
19
+ - `RDFAnnotation` raises a `ValueError` for a qualifier which is not a `BQB` or `BQM`, instead of only for a missing one, so an invalid qualifier fails where it is passed
20
+
21
+ Your pymetadata team
@@ -7,7 +7,7 @@ from pathlib import Path
7
7
  logging.getLogger(__name__).addHandler(logging.NullHandler())
8
8
 
9
9
  __author__ = "Matthias Koenig"
10
- __version__ = "0.6.1"
10
+ __version__ = "0.6.2"
11
11
 
12
12
 
13
13
  program_name: str = "pymetadata"
@@ -118,10 +118,10 @@ class RDFAnnotation:
118
118
  self.resource: str = resource
119
119
  self.provider: ProviderType = ProviderType.NONE
120
120
 
121
- if not qualifier:
121
+ if not isinstance(qualifier, BQB | BQM):
122
122
  raise ValueError(
123
- f"MIRIAM qualifiers are required for rdf annotation, but no "
124
- f"qualifier for resource '{resource}' was provided."
123
+ f"MIRIAM qualifiers are required for rdf annotation, but "
124
+ f"'{qualifier}' was provided for resource '{resource}'."
125
125
  )
126
126
  if not resource:
127
127
  raise ValueError(
@@ -341,9 +341,7 @@ class RDFAnnotation:
341
341
  True if the qualifier is a MIRIAM qualifier and the term matches the
342
342
  pattern of its collection.
343
343
  """
344
- valid_qualifier: bool = False
345
- if self.qualifier:
346
- valid_qualifier = self.check_qualifier(self.qualifier)
344
+ valid_qualifier: bool = self.check_qualifier(self.qualifier)
347
345
  valid_term: bool = True
348
346
  if self.collection and self.term:
349
347
  valid_term = self.check_miriam_term()
@@ -131,6 +131,7 @@ class EntryFormat(str, Enum):
131
131
  SCI = PURL_PREFIX + "application/x-scilab"
132
132
  XPP = PURL_PREFIX + "text/plain"
133
133
  SEDX = PURL_PREFIX + "application/x-sed-ml-archive"
134
+ ANTIMONY = PURL_PREFIX + "text/plain"
134
135
 
135
136
  H323 = PURL_PREFIX + "text/h323"
136
137
  ACX = PURL_PREFIX + "application/internet-property-stream"
@@ -96,13 +96,13 @@ icon = "fontawesome/brands/python"
96
96
  link = "https://pypi.org/project/pymetadata/"
97
97
 
98
98
  # API reference is rendered from the docstrings, see the `docs/api` pages
99
- [project.plugins.mkdocstrings.config]
99
+ [project.plugins.mkdocstrings]
100
100
  default_handler = "python"
101
101
 
102
- [project.plugins.mkdocstrings.config.handlers.python]
102
+ [project.plugins.mkdocstrings.handlers.python]
103
103
  paths = ["src"]
104
104
 
105
- [project.plugins.mkdocstrings.config.handlers.python.options]
105
+ [project.plugins.mkdocstrings.handlers.python.options]
106
106
  docstring_style = "google"
107
107
  docstring_section_style = "table"
108
108
  show_source = false
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