Write builder specific output files.
(
self,
build_docnames: Iterable[str] | None,
updated_docnames: Iterable[str],
method: Literal['all', 'specific', 'update'] = 'update',
)
| 703 | |
| 704 | @final |
| 705 | def write( |
| 706 | self, |
| 707 | build_docnames: Iterable[str] | None, |
| 708 | updated_docnames: Iterable[str], |
| 709 | method: Literal['all', 'specific', 'update'] = 'update', |
| 710 | ) -> None: |
| 711 | """Write builder specific output files.""" |
| 712 | env = self.env |
| 713 | |
| 714 | # Allow any extensions to perform setup for writing |
| 715 | self.events.emit('write-started', self) |
| 716 | |
| 717 | if build_docnames is None or build_docnames == ['__all__']: |
| 718 | # build_all |
| 719 | build_docnames = env.found_docs |
| 720 | if method == 'update': |
| 721 | # build updated ones as well |
| 722 | docnames = set(build_docnames) | set(updated_docnames) |
| 723 | else: |
| 724 | docnames = set(build_docnames) |
| 725 | if docnames: |
| 726 | logger.debug(__('docnames to write: %s'), ', '.join(sorted(docnames))) |
| 727 | else: |
| 728 | logger.debug(__('no docnames to write!')) |
| 729 | |
| 730 | # add all toctree-containing files that may have changed |
| 731 | docnames |= { |
| 732 | toc_docname |
| 733 | for docname in docnames |
| 734 | for toc_docname in env.files_to_rebuild.get(docname, ()) |
| 735 | if toc_docname in env.found_docs |
| 736 | } |
| 737 | |
| 738 | # sort to ensure deterministic toctree generation |
| 739 | env.toctree_includes = dict(sorted(env.toctree_includes.items())) |
| 740 | |
| 741 | with progress_message(__('preparing documents')): |
| 742 | self.prepare_writing(docnames) |
| 743 | |
| 744 | with progress_message(__('copying assets'), nonl=False): |
| 745 | self.copy_assets() |
| 746 | |
| 747 | if docnames: |
| 748 | self.write_documents(docnames) |
| 749 | |
| 750 | def write_documents(self, docnames: Set[str]) -> None: |
| 751 | """Write all documents in *docnames*. |
no test coverage detected