documenteer 2.1.0__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. {documenteer-2.1.0 → documenteer-2.2.0}/CHANGELOG.md +23 -0
  2. {documenteer-2.1.0 → documenteer-2.2.0}/PKG-INFO +1 -1
  3. {documenteer-2.1.0 → documenteer-2.2.0}/docs/Makefile +1 -1
  4. {documenteer-2.1.0 → documenteer-2.2.0}/docs/_rst_epilog.rst +1 -0
  5. {documenteer-2.1.0 → documenteer-2.2.0}/docs/changelog.md +23 -0
  6. {documenteer-2.1.0 → documenteer-2.2.0}/docs/dev/api/documenteer.ext.rst +8 -2
  7. {documenteer-2.1.0 → documenteer-2.2.0}/docs/documenteer.toml +2 -1
  8. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/migrate.rst +47 -66
  9. documenteer-2.2.0/docs/technotes/start-a-technote.rst +45 -0
  10. documenteer-2.2.0/src/documenteer/ext/bibtex.py +147 -0
  11. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/jira.py +3 -1
  12. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/lsstdocushare.py +2 -0
  13. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/mockcoderefs.py +3 -1
  14. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/openapi.py +1 -1
  15. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/remotecodeblock.py +2 -0
  16. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/robots.py +1 -1
  17. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/localtemplates/technote/pre-commit-config.yaml +1 -1
  18. documenteer-2.2.0/src/documenteer/storage/localtemplates/technote/requirements.txt +1 -0
  19. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/technotetoml.py +14 -4
  20. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer.egg-info/PKG-INFO +1 -1
  21. documenteer-2.2.0/tests/storage/technotetoml_test.py +336 -0
  22. documenteer-2.1.0/docs/technotes/start-a-technote.rst +0 -35
  23. documenteer-2.1.0/src/documenteer/ext/bibtex.py +0 -57
  24. documenteer-2.1.0/src/documenteer/storage/localtemplates/technote/requirements.txt +0 -1
  25. documenteer-2.1.0/tests/storage/technotetoml_test.py +0 -125
  26. {documenteer-2.1.0 → documenteer-2.2.0}/.flake8 +0 -0
  27. {documenteer-2.1.0 → documenteer-2.2.0}/.github/CODE_OF_CONDUCT.md +0 -0
  28. {documenteer-2.1.0 → documenteer-2.2.0}/.github/CONTRIBUTING.md +0 -0
  29. {documenteer-2.1.0 → documenteer-2.2.0}/.github/SUPPORT.md +0 -0
  30. {documenteer-2.1.0 → documenteer-2.2.0}/.github/dependabot.yml +0 -0
  31. {documenteer-2.1.0 → documenteer-2.2.0}/.github/workflows/ci-cron.yaml +0 -0
  32. {documenteer-2.1.0 → documenteer-2.2.0}/.github/workflows/ci.yaml +0 -0
  33. {documenteer-2.1.0 → documenteer-2.2.0}/.gitignore +0 -0
  34. {documenteer-2.1.0 → documenteer-2.2.0}/.npmrc +0 -0
  35. {documenteer-2.1.0 → documenteer-2.2.0}/.nvmrc +0 -0
  36. {documenteer-2.1.0 → documenteer-2.2.0}/.pre-commit-config.yaml +0 -0
  37. {documenteer-2.1.0 → documenteer-2.2.0}/.prettierignore +0 -0
  38. {documenteer-2.1.0 → documenteer-2.2.0}/.prettierrc.yaml +0 -0
  39. {documenteer-2.1.0 → documenteer-2.2.0}/.vscode/settings.json +0 -0
  40. {documenteer-2.1.0 → documenteer-2.2.0}/.vscode/tasks.json +0 -0
  41. {documenteer-2.1.0 → documenteer-2.2.0}/LICENSE +0 -0
  42. {documenteer-2.1.0 → documenteer-2.2.0}/MANIFEST.in +0 -0
  43. {documenteer-2.1.0 → documenteer-2.2.0}/Makefile +0 -0
  44. {documenteer-2.1.0 → documenteer-2.2.0}/README.md +0 -0
  45. {documenteer-2.1.0 → documenteer-2.2.0}/changelog.d/_template.md.jinja +0 -0
  46. {documenteer-2.1.0 → documenteer-2.2.0}/demo/ipynb-technote/.gitignore +0 -0
  47. {documenteer-2.1.0 → documenteer-2.2.0}/demo/ipynb-technote/Makefile +0 -0
  48. {documenteer-2.1.0 → documenteer-2.2.0}/demo/ipynb-technote/conf.py +0 -0
  49. {documenteer-2.1.0 → documenteer-2.2.0}/demo/ipynb-technote/diagram.py +0 -0
  50. {documenteer-2.1.0 → documenteer-2.2.0}/demo/ipynb-technote/extra-notebook.ipynb +0 -0
  51. {documenteer-2.1.0 → documenteer-2.2.0}/demo/ipynb-technote/index.ipynb +0 -0
  52. {documenteer-2.1.0 → documenteer-2.2.0}/demo/ipynb-technote/subdir/subdir-notebook.ipynb +0 -0
  53. {documenteer-2.1.0 → documenteer-2.2.0}/demo/ipynb-technote/technote.toml +0 -0
  54. {documenteer-2.1.0 → documenteer-2.2.0}/demo/md-technote/.gitignore +0 -0
  55. {documenteer-2.1.0 → documenteer-2.2.0}/demo/md-technote/Makefile +0 -0
  56. {documenteer-2.1.0 → documenteer-2.2.0}/demo/md-technote/conf.py +0 -0
  57. {documenteer-2.1.0 → documenteer-2.2.0}/demo/md-technote/diagram.py +0 -0
  58. {documenteer-2.1.0 → documenteer-2.2.0}/demo/md-technote/index.md +0 -0
  59. {documenteer-2.1.0 → documenteer-2.2.0}/demo/md-technote/technote.toml +0 -0
  60. {documenteer-2.1.0 → documenteer-2.2.0}/demo/rst-technote/.gitignore +0 -0
  61. {documenteer-2.1.0 → documenteer-2.2.0}/demo/rst-technote/Makefile +0 -0
  62. {documenteer-2.1.0 → documenteer-2.2.0}/demo/rst-technote/conf.py +0 -0
  63. {documenteer-2.1.0 → documenteer-2.2.0}/demo/rst-technote/diagram.py +0 -0
  64. {documenteer-2.1.0 → documenteer-2.2.0}/demo/rst-technote/index.rst +0 -0
  65. {documenteer-2.1.0 → documenteer-2.2.0}/demo/rst-technote/technote.toml +0 -0
  66. {documenteer-2.1.0 → documenteer-2.2.0}/docs/.gitignore +0 -0
  67. {documenteer-2.1.0 → documenteer-2.2.0}/docs/conf.py +0 -0
  68. {documenteer-2.1.0 → documenteer-2.2.0}/docs/dev/api/documenteer.conf.rst +0 -0
  69. {documenteer-2.1.0 → documenteer-2.2.0}/docs/dev/api/index.rst +0 -0
  70. {documenteer-2.1.0 → documenteer-2.2.0}/docs/dev/development.rst +0 -0
  71. {documenteer-2.1.0 → documenteer-2.2.0}/docs/dev/html-templates.rst +0 -0
  72. {documenteer-2.1.0 → documenteer-2.2.0}/docs/dev/index.rst +0 -0
  73. {documenteer-2.1.0 → documenteer-2.2.0}/docs/dev/release.rst +0 -0
  74. {documenteer-2.1.0 → documenteer-2.2.0}/docs/dev/theme-assets.rst +0 -0
  75. {documenteer-2.1.0 → documenteer-2.2.0}/docs/dev/theme.rst +0 -0
  76. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/badges.rst +0 -0
  77. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/configuration-preset.rst +0 -0
  78. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/configuration.rst +0 -0
  79. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/diagrams.rst +0 -0
  80. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/extend-conf-py.rst +0 -0
  81. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/including-notebooks.ipynb +0 -0
  82. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/index.rst +0 -0
  83. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/markdown-primer.md +0 -0
  84. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/openapi.rst +0 -0
  85. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/organization.rst +0 -0
  86. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/overview.rst +0 -0
  87. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/page-redirects.rst +0 -0
  88. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/pyproject-configuration.rst +0 -0
  89. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/rst-epilog.rst +0 -0
  90. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/tabsets.rst +0 -0
  91. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/toml-reference.rst +0 -0
  92. {documenteer-2.1.0 → documenteer-2.2.0}/docs/guides/video-embeds.rst +0 -0
  93. {documenteer-2.1.0 → documenteer-2.2.0}/docs/index.rst +0 -0
  94. {documenteer-2.1.0 → documenteer-2.2.0}/docs/sphinx-extensions/docushare-reference.rst +0 -0
  95. {documenteer-2.1.0 → documenteer-2.2.0}/docs/sphinx-extensions/githubbibcache.rst +0 -0
  96. {documenteer-2.1.0 → documenteer-2.2.0}/docs/sphinx-extensions/index.rst +0 -0
  97. {documenteer-2.1.0 → documenteer-2.2.0}/docs/sphinx-extensions/jira-reference.rst +0 -0
  98. {documenteer-2.1.0 → documenteer-2.2.0}/docs/sphinx-extensions/lsst-pybtex-style.rst +0 -0
  99. {documenteer-2.1.0 → documenteer-2.2.0}/docs/sphinx-extensions/openapi.rst +0 -0
  100. {documenteer-2.1.0 → documenteer-2.2.0}/docs/sphinx-extensions/remote-code-block.rst +0 -0
  101. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/_templates/README.md +0 -0
  102. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/_templates/README.rst +0 -0
  103. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/author-metadata.rst +0 -0
  104. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/configuration.rst +0 -0
  105. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/document-status.rst +0 -0
  106. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/edit-locally.rst +0 -0
  107. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/edit-on-github.rst +0 -0
  108. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/extensions.rst +0 -0
  109. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/how-your-technote-gets-published.rst +0 -0
  110. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/index.rst +0 -0
  111. {documenteer-2.1.0 → documenteer-2.2.0}/docs/technotes/wide-content.rst +0 -0
  112. {documenteer-2.1.0 → documenteer-2.2.0}/licenses/README.md +0 -0
  113. {documenteer-2.1.0 → documenteer-2.2.0}/licenses/astropy-helpers.txt +0 -0
  114. {documenteer-2.1.0 → documenteer-2.2.0}/licenses/sphinx-issue.txt +0 -0
  115. {documenteer-2.1.0 → documenteer-2.2.0}/licenses/sphinx.txt +0 -0
  116. {documenteer-2.1.0 → documenteer-2.2.0}/licenses/sphinxcontrib-redoc.txt +0 -0
  117. {documenteer-2.1.0 → documenteer-2.2.0}/package-lock.json +0 -0
  118. {documenteer-2.1.0 → documenteer-2.2.0}/package.json +0 -0
  119. {documenteer-2.1.0 → documenteer-2.2.0}/postcss.config.js +0 -0
  120. {documenteer-2.1.0 → documenteer-2.2.0}/pyproject.toml +0 -0
  121. {documenteer-2.1.0 → documenteer-2.2.0}/ruff-shared.toml +0 -0
  122. {documenteer-2.1.0 → documenteer-2.2.0}/setup.cfg +0 -0
  123. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/SourceSans3VF-Italic.ttf.woff2 +0 -0
  124. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/SourceSans3VF-Upright.ttf.woff2 +0 -0
  125. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/_hacks.scss +0 -0
  126. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/_properties.scss +0 -0
  127. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/components/_article-header.scss +0 -0
  128. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/components/_authors.scss +0 -0
  129. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/components/_global-breadcrumbs.scss +0 -0
  130. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/components/_index.scss +0 -0
  131. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/components/_sidebar-section.scss +0 -0
  132. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/components/_version-info.scss +0 -0
  133. {documenteer-2.1.0 → documenteer-2.2.0}/src/assets/rubin-technote/styles/rubin-technote.scss +0 -0
  134. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/__init__.py +0 -0
  135. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/_packagemetadata.py +0 -0
  136. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/_requestsutils.py +0 -0
  137. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/_utils.py +0 -0
  138. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/.gitignore +0 -0
  139. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/731c8feefe13e72a8691.woff2 +0 -0
  140. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/b8bc3440ba2145e132f5.woff2 +0 -0
  141. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/favicon.ico +0 -0
  142. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/rsd-assets/rubin-imagotype-color-on-black-crop.svg +0 -0
  143. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/rsd-assets/rubin-imagotype-color-on-white-crop.svg +0 -0
  144. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/rubin-favicon-transparent-32px.png +0 -0
  145. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/rubin-favicon.svg +0 -0
  146. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/rubin-pydata-theme.css +0 -0
  147. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/rubin-technote.css +0 -0
  148. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/rubin-technote.css.map +0 -0
  149. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/rubin-titlebar-imagotype-dark.svg +0 -0
  150. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/rubin-titlebar-imagotype-light.svg +0 -0
  151. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/scripts/rubin-technote.js +0 -0
  152. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/assets/scripts/rubin-technote.js.map +0 -0
  153. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/cli.py +0 -0
  154. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/conf/__init__.py +0 -0
  155. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/conf/_toml.py +0 -0
  156. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/conf/_utils.py +0 -0
  157. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/conf/guide.py +0 -0
  158. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/conf/technote.py +0 -0
  159. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/__init__.py +0 -0
  160. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/githubbibcache.py +0 -0
  161. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/redoc/__init__.py +0 -0
  162. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/redoc/_redoc.py +0 -0
  163. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/ext/redoc/assets/redoc.html.jinja2 +0 -0
  164. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/py.typed +0 -0
  165. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/services/__init__.py +0 -0
  166. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/services/technoteauthor.py +0 -0
  167. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/services/technotemigration.py +0 -0
  168. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/__init__.py +0 -0
  169. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/authordb.py +0 -0
  170. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/latex.py +0 -0
  171. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/localtemplates/technote/Makefile +0 -0
  172. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/localtemplates/technote/README.rst +0 -0
  173. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/localtemplates/technote/ci.yaml +0 -0
  174. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/localtemplates/technote/conf.py +0 -0
  175. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/localtemplates/technote/dependabot.yml +0 -0
  176. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/localtemplates/technote/gitignore +0 -0
  177. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/localtemplates/technote/tox.ini +0 -0
  178. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/storage/localtemplates.py +0 -0
  179. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/templates/pydata/autosummary_core/exception.rst +0 -0
  180. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/templates/pydata/autosummary_core/pydantic_model.rst +0 -0
  181. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/templates/pydata/layout.html +0 -0
  182. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/templates/technote/.gitkeep +0 -0
  183. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/templates/technote/components/.gitkeep +0 -0
  184. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/templates/technote/components/sidebar-source.html +0 -0
  185. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/templates/technote/sections/.gitkeep +0 -0
  186. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/templates/technote/sections/header-article.html +0 -0
  187. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/templates/technote/sections/sidebar-primary.html +0 -0
  188. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer/version.py +0 -0
  189. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer.egg-info/SOURCES.txt +0 -0
  190. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer.egg-info/dependency_links.txt +0 -0
  191. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer.egg-info/entry_points.txt +0 -0
  192. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer.egg-info/requires.txt +0 -0
  193. {documenteer-2.1.0 → documenteer-2.2.0}/src/documenteer.egg-info/top_level.txt +0 -0
  194. {documenteer-2.1.0 → documenteer-2.2.0}/tests/__init__.py +0 -0
  195. {documenteer-2.1.0 → documenteer-2.2.0}/tests/conftest.py +0 -0
  196. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/afw.doxygen.conf +0 -0
  197. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/authordb.yaml +0 -0
  198. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/doxygen.tag.zip +0 -0
  199. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/package_alpha/doc/_static/package_alpha/README.md +0 -0
  200. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/package_alpha/doc/doxygen.conf.in +0 -0
  201. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/package_alpha/doc/manifest.yaml +0 -0
  202. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/package_alpha/doc/package.alpha/index.rst +0 -0
  203. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/package_alpha/doc/package_alpha/index.rst +0 -0
  204. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/package_alpha/include/README.md +0 -0
  205. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/package_alpha/src/README.md +0 -0
  206. {documenteer-2.1.0 → documenteer-2.2.0}/tests/data/package_beta/doc/README.md +0 -0
  207. {documenteer-2.1.0 → documenteer-2.2.0}/tests/ext/__init__.py +0 -0
  208. {documenteer-2.1.0 → documenteer-2.2.0}/tests/ext/jira_test.py +0 -0
  209. {documenteer-2.1.0 → documenteer-2.2.0}/tests/ext/lsstdocushare_test.py +0 -0
  210. {documenteer-2.1.0 → documenteer-2.2.0}/tests/ext/mockcoderefs_test.py +0 -0
  211. {documenteer-2.1.0 → documenteer-2.2.0}/tests/ext/redoc_test.py +0 -0
  212. {documenteer-2.1.0 → documenteer-2.2.0}/tests/ext/robots_test.py +0 -0
  213. {documenteer-2.1.0 → documenteer-2.2.0}/tests/packagemetadata_test.py +0 -0
  214. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-autocppapi/conf.py +0 -0
  215. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-autocppapi/doxygen.tag.zip +0 -0
  216. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-autocppapi/index.rst +0 -0
  217. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-redoc/_static/openapi.json +0 -0
  218. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-redoc/api.rst +0 -0
  219. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-redoc/conf.py +0 -0
  220. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-redoc/documenteer.toml +0 -0
  221. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-redoc/index.rst +0 -0
  222. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-robots-nositemap/conf.py +0 -0
  223. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-robots-nositemap/index.rst +0 -0
  224. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-robots-nositemap/page1.rst +0 -0
  225. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-robots-sitemap/conf.py +0 -0
  226. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-robots-sitemap/index.rst +0 -0
  227. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-robots-sitemap/page1.rst +0 -0
  228. {documenteer-2.1.0 → documenteer-2.2.0}/tests/roots/test-robots-sitemap/page2.rst +0 -0
  229. {documenteer-2.1.0 → documenteer-2.2.0}/tests/services/__init__.py +0 -0
  230. {documenteer-2.1.0 → documenteer-2.2.0}/tests/services/technotemigration_test.py +0 -0
  231. {documenteer-2.1.0 → documenteer-2.2.0}/tests/storage/__init__.py +0 -0
  232. {documenteer-2.1.0 → documenteer-2.2.0}/tests/storage/authordb_test.py +0 -0
  233. {documenteer-2.1.0 → documenteer-2.2.0}/tests/test_conf_toml.py +0 -0
  234. {documenteer-2.1.0 → documenteer-2.2.0}/tests/test_conf_utils.py +0 -0
  235. {documenteer-2.1.0 → documenteer-2.2.0}/tox.ini +0 -0
  236. {documenteer-2.1.0 → documenteer-2.2.0}/webpack.config.js +0 -0
@@ -2,6 +2,29 @@
2
2
 
3
3
  <!-- scriv-insert-here -->
4
4
 
5
+ <a id='changelog-2.2.0'></a>
6
+ ## 2.2.0 (2025-08-06)
7
+
8
+ ### New features
9
+
10
+ - Updated the `documenteer technote migrate` command to use Documenteer 2.0 for new technotes.
11
+ - Technote migration documentation now uses uv/uvx for running migration tools.
12
+ - Improved the formatting for reference section in technotes with the Rubin BibTeX style:
13
+
14
+ - If an entry has more than 7 authors, the first three authors are listed, followed by "and others."
15
+ - LaTeX macros for journals are now converted to their expected names in the bibliography.
16
+
17
+ ### Other changes
18
+
19
+ - Cleanup the API documentation for cleaner documentation builds.
20
+
21
+ <a id='changelog-2.1.1'></a>
22
+ ## 2.1.1 (2025-07-17)
23
+
24
+ ### Bug fixes
25
+
26
+ - 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.
27
+
5
28
  <a id='changelog-2.1.0'></a>
6
29
  ## 2.1.0 (2025-07-16)
7
30
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: documenteer
3
- Version: 2.1.0
3
+ Version: 2.2.0
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
@@ -1,7 +1,7 @@
1
1
  # Makefile for Sphinx documentation
2
2
 
3
3
  # You can set these variables from the command line.
4
- SPHINXOPTS = -n
4
+ SPHINXOPTS = -n -W
5
5
  SPHINXBUILD = sphinx-build
6
6
  BUILDDIR = _build
7
7
 
@@ -62,6 +62,7 @@
62
62
  .. _`authordb.yaml`: https://github.com/lsst/lsst-texmf/blob/main/etc/authordb.yaml
63
63
  .. _pipx: https://pipx.pypa.io
64
64
  .. _`LSSTC Slack Workspace`: https://lsstc.slack.com
65
+ .. _`uv`: https://docs.astral.sh/uv/
65
66
 
66
67
  .. |dmw-squarebot| replace:: `direct message with @squarebot <https://slack.com/app_redirect?app=A07PWG9UG9M&team=T02SVMGU4>`__
67
68
 
@@ -2,6 +2,29 @@
2
2
 
3
3
  <!-- scriv-insert-here -->
4
4
 
5
+ <a id='changelog-2.2.0'></a>
6
+ ## 2.2.0 (2025-08-06)
7
+
8
+ ### New features
9
+
10
+ - Updated the `documenteer technote migrate` command to use Documenteer 2.0 for new technotes.
11
+ - Technote migration documentation now uses uv/uvx for running migration tools.
12
+ - Improved the formatting for reference section in technotes with the Rubin BibTeX style:
13
+
14
+ - If an entry has more than 7 authors, the first three authors are listed, followed by "and others."
15
+ - LaTeX macros for journals are now converted to their expected names in the bibliography.
16
+
17
+ ### Other changes
18
+
19
+ - Cleanup the API documentation for cleaner documentation builds.
20
+
21
+ <a id='changelog-2.1.1'></a>
22
+ ## 2.1.1 (2025-07-17)
23
+
24
+ ### Bug fixes
25
+
26
+ - 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.
27
+
5
28
  <a id='changelog-2.1.0'></a>
6
29
  ## 2.1.0 (2025-07-16)
7
30
 
@@ -2,12 +2,12 @@
2
2
  documenteer.ext
3
3
  ###############
4
4
 
5
- .. automodapi:: documenteer.ext.openapi
6
-
7
5
  .. automodapi:: documenteer.ext.bibtex
8
6
  :no-inherited-members:
9
7
  :no-inheritance-diagram:
10
8
 
9
+ .. automodapi:: documenteer.ext.githubbibcache
10
+
11
11
  .. automodapi:: documenteer.ext.jira
12
12
  :no-inheritance-diagram:
13
13
 
@@ -16,3 +16,9 @@ documenteer.ext
16
16
 
17
17
  .. automodapi:: documenteer.ext.mockcoderefs
18
18
  :no-inheritance-diagram:
19
+
20
+ .. automodapi:: documenteer.ext.openapi
21
+
22
+ .. automodapi:: documenteer.ext.remotecodeblock
23
+
24
+ .. automodapi:: documenteer.ext.robots
@@ -44,7 +44,8 @@ technote = "https://technote.lsst.io/"
44
44
 
45
45
  [sphinx.linkcheck]
46
46
  ignore = [
47
- "https://mermaid-js.github.io"
47
+ "https://mermaid-js.github.io",
48
+ "https://rubin-obs.slack.com"
48
49
  ]
49
50
 
50
51
  [sphinx.redirects]
@@ -5,7 +5,7 @@ Migrate legacy reStructuredText/Sphinx technical notes
5
5
  ######################################################
6
6
 
7
7
  Introduced in December 2023, Rubin Observatory has a new technical note format for Markdown and reStructuredText documents.
8
- This update provides many `new features <https://community.lsst.org/t/the-next-generation-of-rubin-observatory-technotes-with-documenteer-1-0/8166>`__ included a responsive and branded page design, Markdown support, improved build configuration, automated bibliography management, and citation-ready metadata.
8
+ This update provides many `new features <https://community.lsst.org/t/the-next-generation-of-rubin-observatory-technotes-with-documenteer-1-0/8166>`__ including a responsive and branded page design, Markdown support, improved build configuration, automated bibliography management, and citation-ready metadata.
9
9
 
10
10
  This page shows how to migrate your existing technotes with a command-line tool that largely automates the process.
11
11
  This page also provides file-by-file notes in case you need to revise the migration.
@@ -16,39 +16,17 @@ This page also provides file-by-file notes in case you need to revise the migrat
16
16
 
17
17
  LaTeX-format technotes are unaffected by this migration.
18
18
 
19
- Step 1. Install pipx
20
- ====================
19
+ Use the migration tool
20
+ ======================
21
21
 
22
- The migration tool needs **Python 3.11 or later**.
23
- You can verify this by running ``python --version`` from your shell.
22
+ Documenteer provides a command-line tool, :command:`documenteer technote migrate`, to migrate legacy technotes to the new format.
23
+ The migration tool requires:
24
24
 
25
- This official migration procedure uses the pipx_ tool to install and run the migration tool in an isolated Python environment.
26
- You can verify that pipx_ is installed by running ``pipx --version`` from your shell and checking for a version number.
25
+ - Python 3.12 or later
26
+ - The :command:`uvx` command from the `uv`_ package
27
27
 
28
- If you don't have the :command:`pipx` command-line tool already, you can install ``pipx`` several ways:
29
-
30
- .. tab-set::
31
-
32
- .. tab-item:: pip
33
-
34
- .. prompt:: bash
35
-
36
- python -m pip install pipx
37
-
38
- .. tab-item:: conda-forge
39
-
40
- .. prompt:: bash
41
-
42
- conda install -c conda-forge pipx
43
-
44
- .. tab-item:: homebrew
45
-
46
- .. prompt:: bash
47
-
48
- brew install pipx
49
-
50
- Step 2. Clone your technote and create a branch
51
- ===============================================
28
+ Step 1. Clone your technote and create a branch
29
+ -----------------------------------------------
52
30
 
53
31
  Since the migration is performed locally, you need to clone the repository:
54
32
 
@@ -60,12 +38,12 @@ Then create a branch for the migration (see the `Developer Guide <https://develo
60
38
 
61
39
  .. code-block:: bash
62
40
 
63
- git switch -c {...}
41
+ git switch -c technote-migration
64
42
 
65
43
  Working from a branch allows you to create a pull request to verify the migration before merging it into the main branch.
66
44
 
67
- Step 3. Look up author IDs
68
- ==========================
45
+ Step 2. Look up author IDs
46
+ --------------------------
69
47
 
70
48
  The migration tool needs the IDs of the technote's authors to fully configure the technote's metadata.
71
49
 
@@ -74,15 +52,39 @@ For example, ``sickj`` is the ID for Jonathan Sick.
74
52
 
75
53
  .. _technote-migration-tool:
76
54
 
77
- Step 4. Run the migration tool
78
- ==============================
55
+ Step 3. Run the migration tool
56
+ ------------------------------
79
57
 
80
58
  From the root of the cloned technote repository, run the migration tool, listing any identified authors that are relevant to your technote:
81
59
 
82
60
  .. code-block:: bash
83
61
  :caption: Set author IDs with the -a option
84
62
 
85
- pipx run documenteer technote migrate -a sickj -a economouf
63
+ uvx documenteer technote migrate -a sickj -a economouf
64
+
65
+ .. dropdown:: Details for installing uv/uvx...
66
+
67
+ The migration tool needs **Python 3.12 or later**.
68
+ You can verify this by running ``python --version`` from your shell.
69
+
70
+ This official migration procedure uses the :command:`uvx` command from uv_ to install and run the migration tool in an isolated Python environment.
71
+
72
+ If you don't have the :command:`uvx` command-line tool already, you can install ``uv`` several ways:
73
+
74
+ .. tab-set::
75
+
76
+ .. tab-item:: pip
77
+
78
+ .. prompt:: bash
79
+
80
+ python -m pip install uv
81
+
82
+ .. tab-item:: homebrew
83
+
84
+ .. prompt:: bash
85
+
86
+ brew install uv
87
+
86
88
 
87
89
  When the migration runs, it shows a summary of the files changed and deleted.
88
90
  Use ``git diff`` to review the changes in case you need to make tweaks before committing.
@@ -91,22 +93,21 @@ If you want to learn more about the changes made by the migration tool, you can
91
93
 
92
94
  .. _technote-migration-markdown:
93
95
 
94
- Step 5 (optional). Migrate to Markdown
95
- ======================================
96
+ Step 4 (optional). Migrate to Markdown
97
+ --------------------------------------
96
98
 
97
99
  The new technote format supports Markdown as well as reStructuredText.
98
100
  If you wish to use Markdown, you can use MyST Parser's migration tool:
99
101
 
100
102
  .. prompt:: bash
101
103
 
102
- pipx install "rst-to-myst[sphinx]"
103
- rst2myst convert index.rst
104
+ uvx --from "rst-to-myst[sphinx]" rst2myst convert index.rst
104
105
 
105
106
  The Markdown flavor used by the new technote format is MyST Markdown, which is a superset of CommonMark Markdown with support for Sphinx roles and directives.
106
107
  See the `MyST Parser documentation <https://myst-parser.readthedocs.io/en/latest/syntax/roles-and-directives.html#roles-directives>`__ for more information.
107
108
 
108
- Step 6 (optional). Build the technote locally
109
- =============================================
109
+ Step 5 (optional). Build the technote locally
110
+ ---------------------------------------------
110
111
 
111
112
  You can build the technote locally to verify that the migrated technote compiles successfully.
112
113
 
@@ -136,8 +137,8 @@ You might also want to run the linter to check links and find common issues:
136
137
  If you have any questions or issues about the build, you should still proceed with committing and creating a pull request (see next step).
137
138
  This way you can link to the repository when you reach out for help in `#square-docs-support`_ on Slack.
138
139
 
139
- Step 7. Commit the migration, pull request, and merge
140
- =====================================================
140
+ Step 6. Commit the migration, pull request, and merge
141
+ -----------------------------------------------------
141
142
 
142
143
  At this point, you should have a working technote in the new format.
143
144
  If you haven't already, commit your work, push your branch to the GitHub repository, and open a pull request.
@@ -225,26 +226,6 @@ The new technote format requires some changes to this file: the title is now par
225
226
  Additionally, the new technote format supports Markdown as well as reStructuredText.
226
227
  See :ref:`migrate to Markdown <technote-migration-markdown>` to learn how to switch to Markdown.
227
228
 
228
- .. tip::
229
-
230
- Besides these changes, your technote can also be written in Markdown (:file:`index.md`).
231
- If you wish to switch from ReStructuredText to Markdown, you can use MyST Parser's migration tool:
232
-
233
- .. prompt:: bash
234
-
235
- pipx install "rst-to-myst[sphinx]"
236
- rst2myst convert index.rst
237
-
238
- This procedure uses pipx_ to install the ``rst-to-myst`` tool in an isolated Python environment (you might have already installed pipx_ to run the :ref:`main migration tool <technote-migration-tool>`).
239
-
240
- Finally, delete the original :file:`index.rst` file and edit :file:`index.md` to fix any formatting issues.
241
-
242
- .. prompt:: bash
243
-
244
- git rm index.rst
245
- git add index.md
246
- git commit -m "Switch to Markdown format"
247
-
248
229
  Title
249
230
  ~~~~~
250
231
 
@@ -402,7 +383,7 @@ To start, add a :file:`.pre-commit-config.yaml` file:
402
383
 
403
384
  .. tip::
404
385
 
405
- You can add additional pre-commit hooks to this file to suite your needs.
386
+ You can add additional pre-commit hooks to this file to suit your needs.
406
387
  See Pre-commit's `directory of available hooks <https://pre-commit.com/hooks.html>`__ for ideas.
407
388
 
408
389
  requirements.txt file (updated)
@@ -0,0 +1,45 @@
1
+ ####################
2
+ Start a new technote
3
+ ####################
4
+
5
+ Rubin Observatory staff can start a new technote through the rubin-obs.slack.com workspace.
6
+ This page explains how to create a new technote project in either the Markdown or reStructuredText format.
7
+
8
+ Prerequisites
9
+ =============
10
+
11
+ To create and edit a technote, you'll need access to the rubin-obs.slack.com workspace.
12
+ You'll also need push access to the technote.
13
+ If you don't have push access in the whole organization, you can ask an organization administrator to add you as a `collaborator <https://docs.github.com/en/organizations/managing-user-access-to-your-organizations-repositories/managing-outside-collaborators/adding-outside-collaborators-to-repositories-in-your-organization>`__ to the technote's repository after you create it.
14
+
15
+ To create and edit a technote, you'll need:
16
+
17
+ 1. Access to the rubin-obs.slack.com workspace
18
+ 2. Push access to edit the technote repository after it's created
19
+
20
+ For GitHub access, you have two options:
21
+
22
+ - **Organization member**: If you have push access to the relevant GitHub organization (different technote series are hosted in different organizations), you'll automatically have access to your new technote repository.
23
+ - **External collaborator**: If you don't have organization-wide access, ask an organization administrator to add you as a `collaborator <https://docs.github.com/en/organizations/managing-user-access-to-your-organizations-repositories/managing-outside-collaborators/adding-outside-collaborators-to-repositories-in-your-organization>`__ to the technote repository once it's created.
24
+
25
+ Create a technote repository through Slack
26
+ ==========================================
27
+
28
+ 1. In the rubin-obs.slack.com workspace, send a message to ``@Squarebot``:
29
+
30
+ .. code-block:: text
31
+
32
+ /msg @Squarebot create project
33
+
34
+ 2. In response, a message with a drop-down appears. From the drop-down, select a template based on the preferred format:
35
+
36
+ - For reStructuredText: :menuselection:`Documents --> Technote (reStructuredText)`
37
+ - For Markdown: :menuselection:`Documents --> Technote (Markdown)`
38
+
39
+ 3. Watch for threaded replies in Slack that provide a link to the GitHub repository and the technote's publication URL.
40
+
41
+ Next steps
42
+ ==========
43
+
44
+ - :doc:`edit-locally`
45
+ - :doc:`edit-on-github`
@@ -0,0 +1,147 @@
1
+ """Support for Rubin BibTeX files for pybtex/sphinxcontrib.bibtex."""
2
+
3
+ import typing
4
+
5
+ import pybtex.style.formatting.plain
6
+ from pybtex.database import Entry, Person
7
+ from pybtex.plugin import register_plugin
8
+ from pybtex.style.formatting import toplevel
9
+ from pybtex.style.template import (
10
+ FieldIsMissing,
11
+ Node,
12
+ field,
13
+ first_of,
14
+ href,
15
+ join,
16
+ node,
17
+ optional,
18
+ optional_field,
19
+ sentence,
20
+ tag,
21
+ )
22
+ from sphinx.application import Sphinx
23
+ from sphinx.util.typing import ExtensionMetadata
24
+
25
+ from ..version import __version__
26
+
27
+ __all__ = ["setup"]
28
+
29
+
30
+ @node
31
+ def truncated_names(
32
+ children: list[Node], context: typing.Any, role: str, **kwargs: typing.Any
33
+ ) -> Node:
34
+ """Return formatted names, truncating long author lists."""
35
+ assert not children # noqa: S101 (matches pybtex original)
36
+
37
+ try:
38
+ persons = context["entry"].persons[role]
39
+ except KeyError:
40
+ raise FieldIsMissing(role, context["entry"]) from None
41
+
42
+ # If there are more than 7 authors we return the first 3.
43
+ if len(persons) > 7:
44
+ persons = persons[:3] + [Person("others")]
45
+ style = context["style"]
46
+ formatted_names = [
47
+ style.format_name(person, style.abbreviate_names) for person in persons
48
+ ]
49
+ return join(**kwargs)[formatted_names].format_data(context)
50
+
51
+
52
+ class LsstBibtexStyle(pybtex.style.formatting.plain.Style):
53
+ """Bibtex style used for Rubin tech notes.
54
+
55
+ * Limits the number of authors for large author lists.
56
+ * Handles LaTeX journal macros.
57
+ """
58
+
59
+ # Allows a mapping of journal or series name found in the bibtex file
60
+ # to a more usable name for the Sphinx output. In particular ADS returns
61
+ # bib entries that assume latex commands exist to convert from \apj
62
+ # to ApJ or Astrophys. J as needed (allowing each style to decide how
63
+ # to report journal names).
64
+ bib_to_display_name: typing.ClassVar = {
65
+ r"\actaa": "Acta Astron.",
66
+ r"\aap": "A&A",
67
+ r"\aaps": "A&AS",
68
+ r"\aj": "AJ",
69
+ r"\ao": "Appl. Opt.",
70
+ r"\apj": "ApJ",
71
+ r"\apjl": "ApJL",
72
+ r"\apjs": "ApJS",
73
+ r"\apss": "Ap&SS",
74
+ r"\araa": "ARA&A",
75
+ r"\icarus": "Icarus",
76
+ r"\memsai": "Mem. Soc. Ast. Italiana",
77
+ r"\mnras": "MNRAS",
78
+ r"\nat": "Nature",
79
+ r"\pasa": "PASA",
80
+ r"\pasj": "PASJ",
81
+ r"\pasp": "PASP",
82
+ r"\physrep": "Phys. Rep.",
83
+ r"\prd": "Phys. Rev. D.",
84
+ r"\procspie": "Proc. SPIE",
85
+ "Society of Photo-Optical Instrumentation Engineers (SPIE) Conference"
86
+ " Series": "Proc. SPIE",
87
+ }
88
+
89
+ def _rewrite_field(self, e: Entry, field: str) -> None:
90
+ """Rewrite the field contents based on the bib name map."""
91
+ if field in e.fields:
92
+ bib_name = e.fields[field]
93
+ if modified_name := self.bib_to_display_name.get(bib_name):
94
+ e.fields[field] = modified_name
95
+
96
+ def get_article_template(self, e: Entry) -> Node:
97
+ # Fix up the journal name before rendering.
98
+ # In particular journal entries from ADS tend to use \apj style
99
+ # latex commands which need expanding.
100
+ self._rewrite_field(e, "journal")
101
+ return super().get_article_template(e)
102
+
103
+ def get_inproceedings_template(self, e: Entry) -> Node:
104
+ # Potentially modify the series string before formatting it.
105
+ self._rewrite_field(e, "series")
106
+ self._rewrite_field(e, "booktitle")
107
+ return super().get_inproceedings_template(e)
108
+
109
+ def format_docushare(self, e: Entry) -> str:
110
+ default_url = join["https://ls.st/", field("handle", raw=True)]
111
+
112
+ template = toplevel[
113
+ sentence[tag("b")["[", href[default_url, field("handle")], "]"]],
114
+ self.format_names("author"),
115
+ self.format_title(e, "title"),
116
+ sentence[field("year")],
117
+ sentence[optional_field("note")],
118
+ # Use URL if we have it, else provide own
119
+ first_of[
120
+ optional[self.format_url(e)],
121
+ # define our own URL
122
+ sentence["URL", href[default_url, default_url]],
123
+ ],
124
+ ]
125
+ return template.format_data(e)
126
+
127
+ def format_names(self, role: str, as_sentence: bool = True) -> Node: # noqa: FBT001, FBT002
128
+ # Copied from pybtex but using a different names function that
129
+ # caps the number of authors.
130
+ formatted_names = truncated_names(
131
+ role, sep=", ", sep2=" and ", last_sep=", and "
132
+ )
133
+ if as_sentence:
134
+ return sentence[formatted_names]
135
+ else:
136
+ return formatted_names
137
+
138
+
139
+ def setup(app: Sphinx) -> ExtensionMetadata:
140
+ """Add this plugin to the Sphinx application."""
141
+ register_plugin("pybtex.style.formatting", "lsst_aa", LsstBibtexStyle)
142
+
143
+ return {
144
+ "version": __version__,
145
+ "parallel_read_safe": True,
146
+ "parallel_write_safe": True,
147
+ }
@@ -14,7 +14,9 @@ from sphinx.util.typing import ExtensionMetadata
14
14
 
15
15
  from ..version import __version__
16
16
 
17
- log = getLogger(__name__)
17
+ __all__ = ["setup"]
18
+
19
+ logger = getLogger(__name__)
18
20
 
19
21
 
20
22
  def _make_ticket_node(
@@ -14,6 +14,8 @@ if TYPE_CHECKING:
14
14
  from sphinx.application import Sphinx
15
15
  from sphinx.util.typing import ExtensionMetadata
16
16
 
17
+ __all__ = ["setup"]
18
+
17
19
 
18
20
  def lsstio_doc_shortlink_role(
19
21
  name: str,
@@ -16,7 +16,9 @@ from sphinx.util.typing import ExtensionMetadata
16
16
 
17
17
  from ..version import __version__
18
18
 
19
- log = getLogger(__name__)
19
+ __all__ = ["setup"]
20
+
21
+ logger = getLogger(__name__)
20
22
 
21
23
 
22
24
  def mock_code_ref_role(
@@ -15,7 +15,7 @@ from sphinx.util.typing import ExtensionMetadata
15
15
 
16
16
  from ..version import __version__
17
17
 
18
- __all__ = ["generate_openapi_spec", "setup"]
18
+ __all__ = ["setup"]
19
19
 
20
20
 
21
21
  def generate_openapi_spec(app: Sphinx, config: Config) -> None:
@@ -20,6 +20,8 @@ from sphinx.util.typing import ExtensionMetadata
20
20
  from .._requestsutils import requests_retry_session
21
21
  from ..version import __version__
22
22
 
23
+ __all__ = ["setup"]
24
+
23
25
  logger = logging.getLogger(__name__)
24
26
 
25
27
 
@@ -99,7 +99,7 @@ def setup(app: Sphinx) -> ExtensionMetadata:
99
99
 
100
100
  Returns
101
101
  -------
102
- ExtensionMetadata
102
+ sphinx.util.typing.ExtensionMetadata
103
103
  Extension metadata for Sphinx.
104
104
  """
105
105
  # Connect to the build-finished event
@@ -1,6 +1,6 @@
1
1
  repos:
2
2
  - repo: https://github.com/pre-commit/pre-commit-hooks
3
- rev: v4.5.0
3
+ rev: v5.0.0
4
4
  hooks:
5
5
  # - id: trailing-whitespace
6
6
  - id: check-yaml
@@ -0,0 +1 @@
1
+ documenteer[technote]>=2.0,<3
@@ -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.2.0
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