Documentation#
This page documents the documentation workflow used in this repository, with a focus on notebook-backed pages and contributor maintenance tasks.
Notebook Paths: Public Placeholders, Local Execution#
The public documentation must not expose machine-specific paths such as
/Users/... or /Volumes/.... At the same time, maintainers need to
execute notebooks locally against real files.
MARIO supports this through a two-layer workflow:
notebook-backed docs committed under
doc/source/notebooks/...anddoc/source/user_guide/...keep generic placeholders instead of local absolute paths;local machine paths are stored in
doc/notebook_paths.local.yaml(git-ignored);doc/scripts/resolve_notebooks.pyexecutes an in-memory copy where placeholders are replaced with local paths, then copies only outputs back to the source notebook;output sanitization replaces local paths back to placeholders before writeback and fails on private path leaks by default.
This keeps examples executable for maintainers and generic for users.
The current docs build keeps nbsphinx_execute = "never" in
doc/source/conf.py. In practice, that means notebook outputs are committed
artifacts: Read the Docs renders them, but does not execute them during the
build.
Configuration#
Start from:
cp doc/notebook_paths.example.yaml doc/notebook_paths.local.yaml
Then fill local values in doc/notebook_paths.local.yaml.
The configuration supports:
global replacements;
notebook-scoped replacements;
optional cell-scoped replacements (zero-based cell indexes);
optional
skip_cellsfor expensive or intentionally non-executed cells.
Execution Workflow#
Execute one or more notebooks with local replacements:
python doc/scripts/resolve_notebooks.py \
doc/source/notebooks/parsers/oecd/walkthrough_oecd.ipynb
Execute a user-guide notebook:
python doc/scripts/resolve_notebooks.py \
doc/source/user_guide/advanced/greenhouse_gas_calculations.ipynb
Execute many notebooks (shell glob expansion):
python doc/scripts/resolve_notebooks.py doc/source/notebooks/parsers/**/*.ipynb
Useful options:
--dry-run: validate replacements without executing;--kernel-name <name>: force a specific kernel;--sanitize-local-paths: migrate accidental local literals in notebook sources into placeholders and append mappings todoc/notebook_paths.local.yaml.
Other maintainer tasks#
The docs also include a few generated assets and helper indexes.
If you touch the terminology workbook, regenerate the terminology tables:
python doc/scripts/generate_terminology_tables.py
If you touch parser coverage metadata or the packaged country coverage workbook, regenerate the parser coverage assets:
python doc/scripts/generate_parser_coverage_table.py
When adding, moving, or deleting public pages, also check:
the relevant
toctreeentries and high-level indexes;links in
doc/source/_static/data/docs-assistant-manifest.json;links in
doc/source/_static/docs-assistant-data.jswhen the docs assistant should expose the page.
Validation#
For non-trivial doc changes, run a local build before committing:
conda run -n mario make -C doc html
Policy#
When editing notebook docs:
keep public source cells generic;
never commit private machine paths;
keep local mappings only in
doc/notebook_paths.local.yaml;run
resolve_notebooks.pyto refresh outputs before doc builds when needed.