documenteer 2.1.0__tar.gz → 2.1.1__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 (233) hide show
  1. {documenteer-2.1.0 → documenteer-2.1.1}/CHANGELOG.md +7 -0
  2. {documenteer-2.1.0 → documenteer-2.1.1}/PKG-INFO +1 -1
  3. {documenteer-2.1.0 → documenteer-2.1.1}/docs/changelog.md +7 -0
  4. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/technotetoml.py +14 -4
  5. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/PKG-INFO +1 -1
  6. documenteer-2.1.1/tests/storage/technotetoml_test.py +336 -0
  7. documenteer-2.1.0/tests/storage/technotetoml_test.py +0 -125
  8. {documenteer-2.1.0 → documenteer-2.1.1}/.flake8 +0 -0
  9. {documenteer-2.1.0 → documenteer-2.1.1}/.github/CODE_OF_CONDUCT.md +0 -0
  10. {documenteer-2.1.0 → documenteer-2.1.1}/.github/CONTRIBUTING.md +0 -0
  11. {documenteer-2.1.0 → documenteer-2.1.1}/.github/SUPPORT.md +0 -0
  12. {documenteer-2.1.0 → documenteer-2.1.1}/.github/dependabot.yml +0 -0
  13. {documenteer-2.1.0 → documenteer-2.1.1}/.github/workflows/ci-cron.yaml +0 -0
  14. {documenteer-2.1.0 → documenteer-2.1.1}/.github/workflows/ci.yaml +0 -0
  15. {documenteer-2.1.0 → documenteer-2.1.1}/.gitignore +0 -0
  16. {documenteer-2.1.0 → documenteer-2.1.1}/.npmrc +0 -0
  17. {documenteer-2.1.0 → documenteer-2.1.1}/.nvmrc +0 -0
  18. {documenteer-2.1.0 → documenteer-2.1.1}/.pre-commit-config.yaml +0 -0
  19. {documenteer-2.1.0 → documenteer-2.1.1}/.prettierignore +0 -0
  20. {documenteer-2.1.0 → documenteer-2.1.1}/.prettierrc.yaml +0 -0
  21. {documenteer-2.1.0 → documenteer-2.1.1}/.vscode/settings.json +0 -0
  22. {documenteer-2.1.0 → documenteer-2.1.1}/.vscode/tasks.json +0 -0
  23. {documenteer-2.1.0 → documenteer-2.1.1}/LICENSE +0 -0
  24. {documenteer-2.1.0 → documenteer-2.1.1}/MANIFEST.in +0 -0
  25. {documenteer-2.1.0 → documenteer-2.1.1}/Makefile +0 -0
  26. {documenteer-2.1.0 → documenteer-2.1.1}/README.md +0 -0
  27. {documenteer-2.1.0 → documenteer-2.1.1}/changelog.d/_template.md.jinja +0 -0
  28. {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/.gitignore +0 -0
  29. {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/Makefile +0 -0
  30. {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/conf.py +0 -0
  31. {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/diagram.py +0 -0
  32. {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/extra-notebook.ipynb +0 -0
  33. {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/index.ipynb +0 -0
  34. {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/subdir/subdir-notebook.ipynb +0 -0
  35. {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/technote.toml +0 -0
  36. {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/.gitignore +0 -0
  37. {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/Makefile +0 -0
  38. {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/conf.py +0 -0
  39. {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/diagram.py +0 -0
  40. {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/index.md +0 -0
  41. {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/technote.toml +0 -0
  42. {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/.gitignore +0 -0
  43. {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/Makefile +0 -0
  44. {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/conf.py +0 -0
  45. {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/diagram.py +0 -0
  46. {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/index.rst +0 -0
  47. {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/technote.toml +0 -0
  48. {documenteer-2.1.0 → documenteer-2.1.1}/docs/.gitignore +0 -0
  49. {documenteer-2.1.0 → documenteer-2.1.1}/docs/Makefile +0 -0
  50. {documenteer-2.1.0 → documenteer-2.1.1}/docs/_rst_epilog.rst +0 -0
  51. {documenteer-2.1.0 → documenteer-2.1.1}/docs/conf.py +0 -0
  52. {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/api/documenteer.conf.rst +0 -0
  53. {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/api/documenteer.ext.rst +0 -0
  54. {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/api/index.rst +0 -0
  55. {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/development.rst +0 -0
  56. {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/html-templates.rst +0 -0
  57. {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/index.rst +0 -0
  58. {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/release.rst +0 -0
  59. {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/theme-assets.rst +0 -0
  60. {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/theme.rst +0 -0
  61. {documenteer-2.1.0 → documenteer-2.1.1}/docs/documenteer.toml +0 -0
  62. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/badges.rst +0 -0
  63. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/configuration-preset.rst +0 -0
  64. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/configuration.rst +0 -0
  65. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/diagrams.rst +0 -0
  66. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/extend-conf-py.rst +0 -0
  67. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/including-notebooks.ipynb +0 -0
  68. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/index.rst +0 -0
  69. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/markdown-primer.md +0 -0
  70. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/openapi.rst +0 -0
  71. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/organization.rst +0 -0
  72. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/overview.rst +0 -0
  73. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/page-redirects.rst +0 -0
  74. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/pyproject-configuration.rst +0 -0
  75. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/rst-epilog.rst +0 -0
  76. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/tabsets.rst +0 -0
  77. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/toml-reference.rst +0 -0
  78. {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/video-embeds.rst +0 -0
  79. {documenteer-2.1.0 → documenteer-2.1.1}/docs/index.rst +0 -0
  80. {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/docushare-reference.rst +0 -0
  81. {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/githubbibcache.rst +0 -0
  82. {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/index.rst +0 -0
  83. {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/jira-reference.rst +0 -0
  84. {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/lsst-pybtex-style.rst +0 -0
  85. {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/openapi.rst +0 -0
  86. {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/remote-code-block.rst +0 -0
  87. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/_templates/README.md +0 -0
  88. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/_templates/README.rst +0 -0
  89. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/author-metadata.rst +0 -0
  90. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/configuration.rst +0 -0
  91. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/document-status.rst +0 -0
  92. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/edit-locally.rst +0 -0
  93. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/edit-on-github.rst +0 -0
  94. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/extensions.rst +0 -0
  95. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/how-your-technote-gets-published.rst +0 -0
  96. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/index.rst +0 -0
  97. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/migrate.rst +0 -0
  98. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/start-a-technote.rst +0 -0
  99. {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/wide-content.rst +0 -0
  100. {documenteer-2.1.0 → documenteer-2.1.1}/licenses/README.md +0 -0
  101. {documenteer-2.1.0 → documenteer-2.1.1}/licenses/astropy-helpers.txt +0 -0
  102. {documenteer-2.1.0 → documenteer-2.1.1}/licenses/sphinx-issue.txt +0 -0
  103. {documenteer-2.1.0 → documenteer-2.1.1}/licenses/sphinx.txt +0 -0
  104. {documenteer-2.1.0 → documenteer-2.1.1}/licenses/sphinxcontrib-redoc.txt +0 -0
  105. {documenteer-2.1.0 → documenteer-2.1.1}/package-lock.json +0 -0
  106. {documenteer-2.1.0 → documenteer-2.1.1}/package.json +0 -0
  107. {documenteer-2.1.0 → documenteer-2.1.1}/postcss.config.js +0 -0
  108. {documenteer-2.1.0 → documenteer-2.1.1}/pyproject.toml +0 -0
  109. {documenteer-2.1.0 → documenteer-2.1.1}/ruff-shared.toml +0 -0
  110. {documenteer-2.1.0 → documenteer-2.1.1}/setup.cfg +0 -0
  111. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/SourceSans3VF-Italic.ttf.woff2 +0 -0
  112. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/SourceSans3VF-Upright.ttf.woff2 +0 -0
  113. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/_hacks.scss +0 -0
  114. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/_properties.scss +0 -0
  115. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_article-header.scss +0 -0
  116. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_authors.scss +0 -0
  117. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_global-breadcrumbs.scss +0 -0
  118. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_index.scss +0 -0
  119. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_sidebar-section.scss +0 -0
  120. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_version-info.scss +0 -0
  121. {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/rubin-technote.scss +0 -0
  122. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/__init__.py +0 -0
  123. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/_packagemetadata.py +0 -0
  124. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/_requestsutils.py +0 -0
  125. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/_utils.py +0 -0
  126. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/.gitignore +0 -0
  127. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/731c8feefe13e72a8691.woff2 +0 -0
  128. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/b8bc3440ba2145e132f5.woff2 +0 -0
  129. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/favicon.ico +0 -0
  130. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rsd-assets/rubin-imagotype-color-on-black-crop.svg +0 -0
  131. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rsd-assets/rubin-imagotype-color-on-white-crop.svg +0 -0
  132. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-favicon-transparent-32px.png +0 -0
  133. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-favicon.svg +0 -0
  134. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-pydata-theme.css +0 -0
  135. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-technote.css +0 -0
  136. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-technote.css.map +0 -0
  137. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-titlebar-imagotype-dark.svg +0 -0
  138. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-titlebar-imagotype-light.svg +0 -0
  139. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/scripts/rubin-technote.js +0 -0
  140. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/scripts/rubin-technote.js.map +0 -0
  141. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/cli.py +0 -0
  142. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/conf/__init__.py +0 -0
  143. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/conf/_toml.py +0 -0
  144. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/conf/_utils.py +0 -0
  145. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/conf/guide.py +0 -0
  146. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/conf/technote.py +0 -0
  147. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/__init__.py +0 -0
  148. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/bibtex.py +0 -0
  149. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/githubbibcache.py +0 -0
  150. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/jira.py +0 -0
  151. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/lsstdocushare.py +0 -0
  152. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/mockcoderefs.py +0 -0
  153. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/openapi.py +0 -0
  154. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/redoc/__init__.py +0 -0
  155. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/redoc/_redoc.py +0 -0
  156. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/redoc/assets/redoc.html.jinja2 +0 -0
  157. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/remotecodeblock.py +0 -0
  158. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/robots.py +0 -0
  159. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/py.typed +0 -0
  160. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/services/__init__.py +0 -0
  161. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/services/technoteauthor.py +0 -0
  162. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/services/technotemigration.py +0 -0
  163. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/__init__.py +0 -0
  164. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/authordb.py +0 -0
  165. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/latex.py +0 -0
  166. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/Makefile +0 -0
  167. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/README.rst +0 -0
  168. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/ci.yaml +0 -0
  169. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/conf.py +0 -0
  170. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/dependabot.yml +0 -0
  171. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/gitignore +0 -0
  172. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/pre-commit-config.yaml +0 -0
  173. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/requirements.txt +0 -0
  174. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/tox.ini +0 -0
  175. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates.py +0 -0
  176. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/pydata/autosummary_core/exception.rst +0 -0
  177. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/pydata/autosummary_core/pydantic_model.rst +0 -0
  178. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/pydata/layout.html +0 -0
  179. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/.gitkeep +0 -0
  180. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/components/.gitkeep +0 -0
  181. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/components/sidebar-source.html +0 -0
  182. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/sections/.gitkeep +0 -0
  183. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/sections/header-article.html +0 -0
  184. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/sections/sidebar-primary.html +0 -0
  185. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/version.py +0 -0
  186. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/SOURCES.txt +0 -0
  187. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/dependency_links.txt +0 -0
  188. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/entry_points.txt +0 -0
  189. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/requires.txt +0 -0
  190. {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/top_level.txt +0 -0
  191. {documenteer-2.1.0 → documenteer-2.1.1}/tests/__init__.py +0 -0
  192. {documenteer-2.1.0 → documenteer-2.1.1}/tests/conftest.py +0 -0
  193. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/afw.doxygen.conf +0 -0
  194. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/authordb.yaml +0 -0
  195. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/doxygen.tag.zip +0 -0
  196. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/doc/_static/package_alpha/README.md +0 -0
  197. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/doc/doxygen.conf.in +0 -0
  198. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/doc/manifest.yaml +0 -0
  199. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/doc/package.alpha/index.rst +0 -0
  200. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/doc/package_alpha/index.rst +0 -0
  201. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/include/README.md +0 -0
  202. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/src/README.md +0 -0
  203. {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_beta/doc/README.md +0 -0
  204. {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/__init__.py +0 -0
  205. {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/jira_test.py +0 -0
  206. {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/lsstdocushare_test.py +0 -0
  207. {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/mockcoderefs_test.py +0 -0
  208. {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/redoc_test.py +0 -0
  209. {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/robots_test.py +0 -0
  210. {documenteer-2.1.0 → documenteer-2.1.1}/tests/packagemetadata_test.py +0 -0
  211. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-autocppapi/conf.py +0 -0
  212. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-autocppapi/doxygen.tag.zip +0 -0
  213. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-autocppapi/index.rst +0 -0
  214. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-redoc/_static/openapi.json +0 -0
  215. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-redoc/api.rst +0 -0
  216. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-redoc/conf.py +0 -0
  217. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-redoc/documenteer.toml +0 -0
  218. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-redoc/index.rst +0 -0
  219. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-nositemap/conf.py +0 -0
  220. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-nositemap/index.rst +0 -0
  221. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-nositemap/page1.rst +0 -0
  222. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-sitemap/conf.py +0 -0
  223. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-sitemap/index.rst +0 -0
  224. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-sitemap/page1.rst +0 -0
  225. {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-sitemap/page2.rst +0 -0
  226. {documenteer-2.1.0 → documenteer-2.1.1}/tests/services/__init__.py +0 -0
  227. {documenteer-2.1.0 → documenteer-2.1.1}/tests/services/technotemigration_test.py +0 -0
  228. {documenteer-2.1.0 → documenteer-2.1.1}/tests/storage/__init__.py +0 -0
  229. {documenteer-2.1.0 → documenteer-2.1.1}/tests/storage/authordb_test.py +0 -0
  230. {documenteer-2.1.0 → documenteer-2.1.1}/tests/test_conf_toml.py +0 -0
  231. {documenteer-2.1.0 → documenteer-2.1.1}/tests/test_conf_utils.py +0 -0
  232. {documenteer-2.1.0 → documenteer-2.1.1}/tox.ini +0 -0
  233. {documenteer-2.1.0 → documenteer-2.1.1}/webpack.config.js +0 -0
@@ -2,6 +2,13 @@
2
2
 
3
3
  <!-- scriv-insert-here -->
4
4
 
5
+ <a id='changelog-2.1.1'></a>
6
+ ## 2.1.1 (2025-07-17)
7
+
8
+ ### Bug fixes
9
+
10
+ - When adding or updating authors in `technote.toml`, Documenteer avoids setting null values. TOML represents null values as absent keys, but previous versions of Documenteer included null `ror` values.
11
+
5
12
  <a id='changelog-2.1.0'></a>
6
13
  ## 2.1.0 (2025-07-16)
7
14
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: documenteer
3
- Version: 2.1.0
3
+ Version: 2.1.1
4
4
  Summary: Rubin Observatory / LSST Sphinx documentation tools, extensions, and configurations.
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://documenteer.lsst.io
@@ -2,6 +2,13 @@
2
2
 
3
3
  <!-- scriv-insert-here -->
4
4
 
5
+ <a id='changelog-2.1.1'></a>
6
+ ## 2.1.1 (2025-07-17)
7
+
8
+ ### Bug fixes
9
+
10
+ - When adding or updating authors in `technote.toml`, Documenteer avoids setting null values. TOML represents null values as absent keys, but previous versions of Documenteer included null `ror` values.
11
+
5
12
  <a id='changelog-2.1.0'></a>
6
13
  ## 2.1.0 (2025-07-16)
7
14
 
@@ -105,17 +105,26 @@ class TechnoteTomlFile:
105
105
  ) -> None:
106
106
  """Update a toml author table with the Author data."""
107
107
  name_table = tomlkit.inline_table()
108
- name_table["given"] = author.given_name
109
- name_table["family"] = author.family_name
108
+ if author.given_name is not None:
109
+ name_table["given"] = author.given_name
110
+ if author.family_name is not None:
111
+ name_table["family"] = author.family_name
112
+
110
113
  table["name"] = name_table
114
+
111
115
  table["internal_id"] = author.internal_id
116
+
112
117
  if author.orcid is not None:
113
118
  table["orcid"] = str(author.orcid)
114
119
 
115
120
  if "affiliations" not in table:
116
121
  table.add("affiliations", tomlkit.aot())
117
122
  affiliations_aot = cast(tomlkit.items.AoT, table["affiliations"])
118
- existing_affiliation_ids = [a["internal_id"] for a in affiliations_aot]
123
+
124
+ existing_affiliation_ids = [
125
+ a["internal_id"] for a in affiliations_aot if "internal_id" in a
126
+ ]
127
+
119
128
  for affiliation in author.affiliations:
120
129
  if affiliation.internal_id not in existing_affiliation_ids:
121
130
  # Add a new affiliation
@@ -134,4 +143,5 @@ class TechnoteTomlFile:
134
143
  ) -> None:
135
144
  t["name"] = affiliation_info.name
136
145
  t["internal_id"] = affiliation_info.internal_id
137
- t["ror"] = str(affiliation_info.ror)
146
+ if affiliation_info.ror is not None:
147
+ t["ror"] = str(affiliation_info.ror)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: documenteer
3
- Version: 2.1.0
3
+ Version: 2.1.1
4
4
  Summary: Rubin Observatory / LSST Sphinx documentation tools, extensions, and configurations.
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://documenteer.lsst.io
@@ -0,0 +1,336 @@
1
+ """Tests for the documenteer.stoarge.technotetoml module."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import cast
6
+
7
+ import pytest_responses # noqa: F401
8
+ import tomlkit
9
+ import tomlkit.items
10
+ from responses import RequestsMock
11
+
12
+ from documenteer.storage.authordb import AuthorDb
13
+ from documenteer.storage.technotetoml import TechnoteTomlFile
14
+
15
+ BASIC_TECHNOTE_TOML = """
16
+ [technote]
17
+ title = "A Test Technote"
18
+ """
19
+
20
+
21
+ def test_append_author(responses: RequestsMock) -> None:
22
+ js_response_data = """
23
+ {
24
+ "affiliations": [
25
+ {
26
+ "address": {
27
+ "city": "Ontario",
28
+ "country": "Canada",
29
+ "postal_code": null,
30
+ "state": null,
31
+ "street": "Penetanguishene"
32
+ },
33
+ "department": null,
34
+ "internal_id": "JSickCodes",
35
+ "name": "J.Sick Codes Inc.",
36
+ "ror": null
37
+ },
38
+ {
39
+ "address": {
40
+ "city": "Tucson",
41
+ "country": "USA",
42
+ "postal_code": "85719",
43
+ "state": "AZ",
44
+ "street": "950 N. Cherry Ave."
45
+ },
46
+ "department": null,
47
+ "internal_id": "RubinObs",
48
+ "name": "Vera C. Rubin Observatory Project Office",
49
+ "ror": "https://ror.org/048g3cy84"
50
+ }
51
+ ],
52
+ "family_name": "Sick",
53
+ "given_name": "Jonathan",
54
+ "internal_id": "sickj",
55
+ "notes": [],
56
+ "orcid": "https://orcid.org/0000-0003-3001-676X"
57
+ }
58
+ """
59
+ responses.get(
60
+ "https://roundtable.lsst.cloud/ook/authors/sickj",
61
+ body=js_response_data,
62
+ content_type="application/json",
63
+ status=200,
64
+ )
65
+
66
+ fe_response_data = """
67
+ {
68
+ "affiliations": [
69
+ {
70
+ "address": {
71
+ "city": "Tucson",
72
+ "country": "USA",
73
+ "postal_code": "85719",
74
+ "state": "AZ",
75
+ "street": "950 N. Cherry Ave."
76
+ },
77
+ "department": null,
78
+ "internal_id": "RubinObs",
79
+ "name": "Vera C. Rubin Observatory Project Office",
80
+ "ror": "https://ror.org/048g3cy84"
81
+ }
82
+ ],
83
+ "family_name": "Economou",
84
+ "given_name": "Frossie",
85
+ "internal_id": "economouf",
86
+ "notes": [],
87
+ "orcid": "https://orcid.org/0000-0002-8333-7615"
88
+ }
89
+ """
90
+ responses.get(
91
+ "https://roundtable.lsst.cloud/ook/authors/economouf",
92
+ body=fe_response_data,
93
+ content_type="application/json",
94
+ status=200,
95
+ )
96
+
97
+ # Assert that the AuthorDb object is created correctly
98
+ author_db = AuthorDb()
99
+ author = author_db.get_author("sickj")
100
+
101
+ technote = TechnoteTomlFile(BASIC_TECHNOTE_TOML)
102
+ technote.upsert_author(author)
103
+ print(technote.doc)
104
+
105
+ authors_aot = technote.authors_aot
106
+ a = authors_aot[0]
107
+ name = cast("tomlkit.items.Table", a["name"])
108
+ assert cast("str", name["given"]) == "Jonathan"
109
+ assert cast("str", name["family"]) == "Sick"
110
+ assert cast("str", a["internal_id"]) == "sickj"
111
+ assert cast("str", a["orcid"]) == "https://orcid.org/0000-0003-3001-676X"
112
+ affiliations_aot = cast("tomlkit.items.AoT", a["affiliations"])
113
+ assert cast("str", affiliations_aot[1]["internal_id"]) == "RubinObs"
114
+
115
+ # Modify that author and re-append. It should be modified since author_id
116
+ # matches
117
+ author.given_name = "Jon"
118
+ technote.upsert_author(author)
119
+ name = cast("tomlkit.items.Table", authors_aot[0]["name"])
120
+ assert cast("str", name["given"]) == "Jon"
121
+
122
+ # Append a different author
123
+ author2 = author_db.get_author("economouf")
124
+ technote.upsert_author(author2)
125
+ name = cast("tomlkit.items.Table", authors_aot[1]["name"])
126
+ assert cast("str", name["given"]) == "Frossie"
127
+
128
+
129
+ def test_author_with_null_orcid(responses: RequestsMock) -> None:
130
+ """Test handling of author with null ORCID."""
131
+ author_response_data = """
132
+ {
133
+ "affiliations": [
134
+ {
135
+ "address": {
136
+ "city": "Tucson",
137
+ "country": "USA",
138
+ "postal_code": "85719",
139
+ "state": "AZ",
140
+ "street": "950 N. Cherry Ave."
141
+ },
142
+ "department": null,
143
+ "internal_id": "RubinObs",
144
+ "name": "Vera C. Rubin Observatory Project Office",
145
+ "ror": "https://ror.org/048g3cy84"
146
+ }
147
+ ],
148
+ "family_name": "Smith",
149
+ "given_name": "John",
150
+ "internal_id": "smithj",
151
+ "notes": [],
152
+ "orcid": null
153
+ }
154
+ """
155
+ responses.get(
156
+ "https://roundtable.lsst.cloud/ook/authors/smithj",
157
+ body=author_response_data,
158
+ content_type="application/json",
159
+ status=200,
160
+ )
161
+
162
+ author_db = AuthorDb()
163
+ author = author_db.get_author("smithj")
164
+
165
+ technote = TechnoteTomlFile(BASIC_TECHNOTE_TOML)
166
+ technote.upsert_author(author)
167
+
168
+ authors_aot = technote.authors_aot
169
+ a = authors_aot[0]
170
+ name = cast("tomlkit.items.Table", a["name"])
171
+ assert cast("str", name["given"]) == "John"
172
+ assert cast("str", name["family"]) == "Smith"
173
+ assert cast("str", a["internal_id"]) == "smithj"
174
+ # ORCID should not be present in the TOML when it's null
175
+ assert "orcid" not in a
176
+
177
+
178
+ def test_author_with_null_given_name(responses: RequestsMock) -> None:
179
+ """Test handling of author with null given name."""
180
+ author_response_data = """
181
+ {
182
+ "affiliations": [
183
+ {
184
+ "address": {
185
+ "city": "Cambridge",
186
+ "country": "USA",
187
+ "postal_code": "02138",
188
+ "state": "MA",
189
+ "street": "1 Harvard Yard"
190
+ },
191
+ "department": null,
192
+ "internal_id": "Harvard",
193
+ "name": "Harvard University",
194
+ "ror": "https://ror.org/03vek6s52"
195
+ }
196
+ ],
197
+ "family_name": "Lastname",
198
+ "given_name": null,
199
+ "internal_id": "lastnamex",
200
+ "notes": [],
201
+ "orcid": "https://orcid.org/0000-0000-0000-0000"
202
+ }
203
+ """
204
+ responses.get(
205
+ "https://roundtable.lsst.cloud/ook/authors/lastnamex",
206
+ body=author_response_data,
207
+ content_type="application/json",
208
+ status=200,
209
+ )
210
+
211
+ author_db = AuthorDb()
212
+ author = author_db.get_author("lastnamex")
213
+
214
+ technote = TechnoteTomlFile(BASIC_TECHNOTE_TOML)
215
+ technote.upsert_author(author)
216
+
217
+ authors_aot = technote.authors_aot
218
+ a = authors_aot[0]
219
+ name = cast("tomlkit.items.Table", a["name"])
220
+ # Given name should not be present in the TOML when it's null
221
+ assert "given" not in name
222
+ assert cast("str", name["family"]) == "Lastname"
223
+ assert cast("str", a["internal_id"]) == "lastnamex"
224
+ assert cast("str", a["orcid"]) == "https://orcid.org/0000-0000-0000-0000"
225
+
226
+
227
+ def test_author_with_affiliation_null_ror(responses: RequestsMock) -> None:
228
+ """Test handling of affiliation with null ROR."""
229
+ author_response_data = """
230
+ {
231
+ "affiliations": [
232
+ {
233
+ "address": {
234
+ "city": "Small Town",
235
+ "country": "USA",
236
+ "postal_code": "12345",
237
+ "state": "ST",
238
+ "street": "123 Main St"
239
+ },
240
+ "department": "Engineering",
241
+ "internal_id": "SmallOrg",
242
+ "name": "Small Organization Inc.",
243
+ "ror": null
244
+ }
245
+ ],
246
+ "family_name": "Doe",
247
+ "given_name": "Jane",
248
+ "internal_id": "doej",
249
+ "notes": [],
250
+ "orcid": "https://orcid.org/0000-0000-0000-0001"
251
+ }
252
+ """
253
+ responses.get(
254
+ "https://roundtable.lsst.cloud/ook/authors/doej",
255
+ body=author_response_data,
256
+ content_type="application/json",
257
+ status=200,
258
+ )
259
+
260
+ author_db = AuthorDb()
261
+ author = author_db.get_author("doej")
262
+
263
+ technote = TechnoteTomlFile(BASIC_TECHNOTE_TOML)
264
+ technote.upsert_author(author)
265
+
266
+ authors_aot = technote.authors_aot
267
+ a = authors_aot[0]
268
+ name = cast("tomlkit.items.Table", a["name"])
269
+ assert cast("str", name["given"]) == "Jane"
270
+ assert cast("str", name["family"]) == "Doe"
271
+ assert cast("str", a["internal_id"]) == "doej"
272
+ assert cast("str", a["orcid"]) == "https://orcid.org/0000-0000-0000-0001"
273
+
274
+ affiliations_aot = cast("tomlkit.items.AoT", a["affiliations"])
275
+ affiliation = affiliations_aot[0]
276
+ assert cast("str", affiliation["name"]) == "Small Organization Inc."
277
+ assert cast("str", affiliation["internal_id"]) == "SmallOrg"
278
+ # ROR should not be present in the TOML when it's null
279
+ assert "ror" not in affiliation
280
+
281
+
282
+ def test_author_with_multiple_null_fields(responses: RequestsMock) -> None:
283
+ """Test handling of author with multiple null fields."""
284
+ author_response_data = """
285
+ {
286
+ "affiliations": [
287
+ {
288
+ "address": {
289
+ "city": "Unknown City",
290
+ "country": "Unknown Country",
291
+ "postal_code": null,
292
+ "state": null,
293
+ "street": null
294
+ },
295
+ "department": null,
296
+ "internal_id": "UnknownOrg",
297
+ "name": "Unknown Organization",
298
+ "ror": null
299
+ }
300
+ ],
301
+ "family_name": "Anonymous",
302
+ "given_name": null,
303
+ "internal_id": "anon",
304
+ "notes": [],
305
+ "orcid": null
306
+ }
307
+ """
308
+ responses.get(
309
+ "https://roundtable.lsst.cloud/ook/authors/anon",
310
+ body=author_response_data,
311
+ content_type="application/json",
312
+ status=200,
313
+ )
314
+
315
+ author_db = AuthorDb()
316
+ author = author_db.get_author("anon")
317
+
318
+ technote = TechnoteTomlFile(BASIC_TECHNOTE_TOML)
319
+ technote.upsert_author(author)
320
+
321
+ authors_aot = technote.authors_aot
322
+ a = authors_aot[0]
323
+ name = cast("tomlkit.items.Table", a["name"])
324
+ # Given name should not be present when null
325
+ assert "given" not in name
326
+ assert cast("str", name["family"]) == "Anonymous"
327
+ assert cast("str", a["internal_id"]) == "anon"
328
+ # ORCID should not be present when null
329
+ assert "orcid" not in a
330
+
331
+ affiliations_aot = cast("tomlkit.items.AoT", a["affiliations"])
332
+ affiliation = affiliations_aot[0]
333
+ assert cast("str", affiliation["name"]) == "Unknown Organization"
334
+ assert cast("str", affiliation["internal_id"]) == "UnknownOrg"
335
+ # ROR should not be present when null
336
+ assert "ror" not in affiliation
@@ -1,125 +0,0 @@
1
- """Tests for the documenteer.stoarge.technotetoml module."""
2
-
3
- from __future__ import annotations
4
-
5
- from typing import cast
6
-
7
- import pytest_responses # noqa: F401
8
- import tomlkit
9
- from responses import RequestsMock
10
-
11
- from documenteer.storage.authordb import AuthorDb
12
- from documenteer.storage.technotetoml import TechnoteTomlFile
13
-
14
- BASIC_TECHNOTE_TOML = """
15
- [technote]
16
- title = "A Test Technote"
17
- """
18
-
19
-
20
- def test_append_author(responses: RequestsMock) -> None:
21
- js_response_data = """
22
- {
23
- "affiliations": [
24
- {
25
- "address": {
26
- "city": "Ontario",
27
- "country": "Canada",
28
- "postal_code": null,
29
- "state": null,
30
- "street": "Penetanguishene"
31
- },
32
- "department": null,
33
- "internal_id": "JSickCodes",
34
- "name": "J.Sick Codes Inc.",
35
- "ror": null
36
- },
37
- {
38
- "address": {
39
- "city": "Tucson",
40
- "country": "USA",
41
- "postal_code": "85719",
42
- "state": "AZ",
43
- "street": "950 N. Cherry Ave."
44
- },
45
- "department": null,
46
- "internal_id": "RubinObs",
47
- "name": "Vera C. Rubin Observatory Project Office",
48
- "ror": "https://ror.org/048g3cy84"
49
- }
50
- ],
51
- "family_name": "Sick",
52
- "given_name": "Jonathan",
53
- "internal_id": "sickj",
54
- "notes": [],
55
- "orcid": "https://orcid.org/0000-0003-3001-676X"
56
- }
57
- """
58
- responses.get(
59
- "https://roundtable.lsst.cloud/ook/authors/sickj",
60
- body=js_response_data,
61
- content_type="application/json",
62
- status=200,
63
- )
64
-
65
- fe_response_data = """
66
- {
67
- "affiliations": [
68
- {
69
- "address": {
70
- "city": "Tucson",
71
- "country": "USA",
72
- "postal_code": "85719",
73
- "state": "AZ",
74
- "street": "950 N. Cherry Ave."
75
- },
76
- "department": null,
77
- "internal_id": "RubinObs",
78
- "name": "Vera C. Rubin Observatory Project Office",
79
- "ror": "https://ror.org/048g3cy84"
80
- }
81
- ],
82
- "family_name": "Economou",
83
- "given_name": "Frossie",
84
- "internal_id": "economouf",
85
- "notes": [],
86
- "orcid": "https://orcid.org/0000-0002-8333-7615"
87
- }
88
- """
89
- responses.get(
90
- "https://roundtable.lsst.cloud/ook/authors/economouf",
91
- body=fe_response_data,
92
- content_type="application/json",
93
- status=200,
94
- )
95
-
96
- # Assert that the AuthorDb object is created correctly
97
- author_db = AuthorDb()
98
- author = author_db.get_author("sickj")
99
-
100
- technote = TechnoteTomlFile(BASIC_TECHNOTE_TOML)
101
- technote.upsert_author(author)
102
- print(technote.doc)
103
-
104
- authors_aot = technote.authors_aot
105
- a = authors_aot[0]
106
- name = cast("tomlkit.items.Table", a["name"])
107
- assert cast("str", name["given"]) == "Jonathan"
108
- assert cast("str", name["family"]) == "Sick"
109
- assert cast("str", a["internal_id"]) == "sickj"
110
- assert cast("str", a["orcid"]) == "https://orcid.org/0000-0003-3001-676X"
111
- affiliations_aot = cast("tomlkit.items.AoT", a["affiliations"])
112
- assert cast("str", affiliations_aot[1]["internal_id"]) == "RubinObs"
113
-
114
- # Modify that author and re-append. It should be modified since author_id
115
- # matches
116
- author.given_name = "Jon"
117
- technote.upsert_author(author)
118
- name = cast("tomlkit.items.Table", authors_aot[0]["name"])
119
- assert cast("str", name["given"]) == "Jon"
120
-
121
- # Append a different author
122
- author2 = author_db.get_author("economouf")
123
- technote.upsert_author(author2)
124
- name = cast("tomlkit.items.Table", authors_aot[1]["name"])
125
- assert cast("str", name["given"]) == "Frossie"
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