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.
- {documenteer-2.1.0 → documenteer-2.1.1}/CHANGELOG.md +7 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/PKG-INFO +1 -1
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/changelog.md +7 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/technotetoml.py +14 -4
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/PKG-INFO +1 -1
- documenteer-2.1.1/tests/storage/technotetoml_test.py +336 -0
- documenteer-2.1.0/tests/storage/technotetoml_test.py +0 -125
- {documenteer-2.1.0 → documenteer-2.1.1}/.flake8 +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.github/CODE_OF_CONDUCT.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.github/CONTRIBUTING.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.github/SUPPORT.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.github/dependabot.yml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.github/workflows/ci-cron.yaml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.github/workflows/ci.yaml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.gitignore +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.npmrc +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.nvmrc +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.pre-commit-config.yaml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.prettierignore +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.prettierrc.yaml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.vscode/settings.json +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/.vscode/tasks.json +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/LICENSE +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/MANIFEST.in +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/Makefile +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/README.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/changelog.d/_template.md.jinja +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/.gitignore +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/Makefile +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/conf.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/diagram.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/extra-notebook.ipynb +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/index.ipynb +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/subdir/subdir-notebook.ipynb +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/ipynb-technote/technote.toml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/.gitignore +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/Makefile +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/conf.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/diagram.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/index.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/md-technote/technote.toml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/.gitignore +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/Makefile +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/conf.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/diagram.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/demo/rst-technote/technote.toml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/.gitignore +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/Makefile +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/_rst_epilog.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/conf.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/api/documenteer.conf.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/api/documenteer.ext.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/api/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/development.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/html-templates.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/release.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/theme-assets.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/dev/theme.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/documenteer.toml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/badges.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/configuration-preset.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/configuration.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/diagrams.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/extend-conf-py.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/including-notebooks.ipynb +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/markdown-primer.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/openapi.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/organization.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/overview.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/page-redirects.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/pyproject-configuration.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/rst-epilog.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/tabsets.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/toml-reference.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/guides/video-embeds.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/docushare-reference.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/githubbibcache.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/jira-reference.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/lsst-pybtex-style.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/openapi.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/sphinx-extensions/remote-code-block.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/_templates/README.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/_templates/README.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/author-metadata.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/configuration.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/document-status.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/edit-locally.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/edit-on-github.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/extensions.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/how-your-technote-gets-published.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/migrate.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/start-a-technote.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/docs/technotes/wide-content.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/licenses/README.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/licenses/astropy-helpers.txt +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/licenses/sphinx-issue.txt +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/licenses/sphinx.txt +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/licenses/sphinxcontrib-redoc.txt +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/package-lock.json +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/package.json +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/postcss.config.js +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/pyproject.toml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/ruff-shared.toml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/setup.cfg +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/SourceSans3VF-Italic.ttf.woff2 +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/SourceSans3VF-Upright.ttf.woff2 +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/_hacks.scss +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/_properties.scss +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_article-header.scss +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_authors.scss +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_global-breadcrumbs.scss +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_index.scss +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_sidebar-section.scss +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/components/_version-info.scss +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/assets/rubin-technote/styles/rubin-technote.scss +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/__init__.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/_packagemetadata.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/_requestsutils.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/_utils.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/.gitignore +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/731c8feefe13e72a8691.woff2 +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/b8bc3440ba2145e132f5.woff2 +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/favicon.ico +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rsd-assets/rubin-imagotype-color-on-black-crop.svg +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rsd-assets/rubin-imagotype-color-on-white-crop.svg +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-favicon-transparent-32px.png +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-favicon.svg +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-pydata-theme.css +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-technote.css +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-technote.css.map +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-titlebar-imagotype-dark.svg +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/rubin-titlebar-imagotype-light.svg +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/scripts/rubin-technote.js +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/assets/scripts/rubin-technote.js.map +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/cli.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/conf/__init__.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/conf/_toml.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/conf/_utils.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/conf/guide.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/conf/technote.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/__init__.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/bibtex.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/githubbibcache.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/jira.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/lsstdocushare.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/mockcoderefs.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/openapi.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/redoc/__init__.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/redoc/_redoc.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/redoc/assets/redoc.html.jinja2 +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/remotecodeblock.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/ext/robots.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/py.typed +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/services/__init__.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/services/technoteauthor.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/services/technotemigration.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/__init__.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/authordb.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/latex.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/Makefile +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/README.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/ci.yaml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/conf.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/dependabot.yml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/gitignore +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/pre-commit-config.yaml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/requirements.txt +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates/technote/tox.ini +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/storage/localtemplates.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/pydata/autosummary_core/exception.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/pydata/autosummary_core/pydantic_model.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/pydata/layout.html +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/.gitkeep +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/components/.gitkeep +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/components/sidebar-source.html +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/sections/.gitkeep +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/sections/header-article.html +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/templates/technote/sections/sidebar-primary.html +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer/version.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/SOURCES.txt +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/dependency_links.txt +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/entry_points.txt +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/requires.txt +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/src/documenteer.egg-info/top_level.txt +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/__init__.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/conftest.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/afw.doxygen.conf +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/authordb.yaml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/doxygen.tag.zip +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/doc/_static/package_alpha/README.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/doc/doxygen.conf.in +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/doc/manifest.yaml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/doc/package.alpha/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/doc/package_alpha/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/include/README.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_alpha/src/README.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/data/package_beta/doc/README.md +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/__init__.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/jira_test.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/lsstdocushare_test.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/mockcoderefs_test.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/redoc_test.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/ext/robots_test.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/packagemetadata_test.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-autocppapi/conf.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-autocppapi/doxygen.tag.zip +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-autocppapi/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-redoc/_static/openapi.json +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-redoc/api.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-redoc/conf.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-redoc/documenteer.toml +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-redoc/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-nositemap/conf.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-nositemap/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-nositemap/page1.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-sitemap/conf.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-sitemap/index.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-sitemap/page1.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/roots/test-robots-sitemap/page2.rst +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/services/__init__.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/services/technotemigration_test.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/storage/__init__.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/storage/authordb_test.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/test_conf_toml.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tests/test_conf_utils.py +0 -0
- {documenteer-2.1.0 → documenteer-2.1.1}/tox.ini +0 -0
- {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
|
|
|
@@ -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
|
-
|
|
109
|
-
|
|
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
|
-
|
|
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
|
-
|
|
146
|
+
if affiliation_info.ror is not None:
|
|
147
|
+
t["ror"] = str(affiliation_info.ror)
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|