From d7efb295f1070bcf3e64e709fc2bff62825fb293 Mon Sep 17 00:00:00 2001 From: Matthias Geier Date: Wed, 24 Apr 2024 20:34:37 +0200 Subject: [PATCH] ext.duration: Fix ``merge_domaindata()`` (#12251) Co-authored-by: Adam Turner <9087854+aa-turner@users.noreply.github.com> --- CHANGES.rst | 2 ++ sphinx/ext/duration.py | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 02cc27ef0..c23091b4c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -27,6 +27,8 @@ Bugs fixed Patch by Donald Hunter. * #12320: Fix removal of anchors from search summaries (regression in 7.3.0). Patch by Will Lachance. +* #12251: Fix ``merge_domaindata()`` in ``sphinx.ext.duration``. + Patch by Matthias Geier. Testing ------- diff --git a/sphinx/ext/duration.py b/sphinx/ext/duration.py index 224357978..1053856e0 100644 --- a/sphinx/ext/duration.py +++ b/sphinx/ext/duration.py @@ -13,10 +13,15 @@ from sphinx.locale import __ from sphinx.util import logging if TYPE_CHECKING: + from typing import TypedDict + from docutils import nodes from sphinx.application import Sphinx + class _DurationDomainData(TypedDict): + reading_durations: dict[str, float] + logger = logging.getLogger(__name__) @@ -38,9 +43,11 @@ class DurationDomain(Domain): def clear_doc(self, docname: str) -> None: self.reading_durations.pop(docname, None) - def merge_domaindata(self, docnames: list[str], otherdata: dict[str, float]) -> None: - for docname, duration in otherdata.items(): - if docname in docnames: + def merge_domaindata(self, docnames: list[str], otherdata: _DurationDomainData) -> None: # type: ignore[override] + other_reading_durations = otherdata.get('reading_durations', {}) + docnames_set = frozenset(docnames) + for docname, duration in other_reading_durations.items(): + if docname in docnames_set: self.reading_durations[docname] = duration