From 215092312ec94f32e7a1ba17000e9accbfc171d8 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sun, 13 Jun 2021 23:11:47 +0900 Subject: [PATCH] Fix #9322: KeyError is raised on PropagateDescDomain transform PropageteDescDomain applies the domain name from the "domain" attribute of parent node (desc node) to the desc_signature node. The structure has longly generated by ObjectDescription. But it must not be a new rule. This allows to build document that contains non standard doctree. --- CHANGES | 1 + sphinx/transforms/post_transforms/__init__.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 7e865801719..09be46cd06f 100644 --- a/CHANGES +++ b/CHANGES @@ -76,6 +76,7 @@ Bugs fixed whitespace (ex. ``Dict[str, str]``) * #8945: when transforming typed fields, call the specified role instead of making an single xref. For C and C++, use the ``expr`` role for typed fields. +* #9322: KeyError is raised on PropagateDescDomain transform Testing -------- diff --git a/sphinx/transforms/post_transforms/__init__.py b/sphinx/transforms/post_transforms/__init__.py index dcb3da89f83..b398d077745 100644 --- a/sphinx/transforms/post_transforms/__init__.py +++ b/sphinx/transforms/post_transforms/__init__.py @@ -263,7 +263,8 @@ class PropagateDescDomain(SphinxPostTransform): def run(self, **kwargs: Any) -> None: for node in self.document.traverse(addnodes.desc_signature): - node['classes'].append(node.parent['domain']) + if node.parent.get('domain'): + node['classes'].append(node.parent['domain']) def setup(app: Sphinx) -> Dict[str, Any]: