From 5f696ed119fc77e5c57649d67984e691e59fc8ed Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Tue, 11 May 2021 23:25:21 +0900 Subject: [PATCH 1/2] Fix #9210: viewcode: crashed if non importable modules found on parallel build --- CHANGES | 2 ++ sphinx/ext/viewcode.py | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 8cb39f2672f..45a959e3923 100644 --- a/CHANGES +++ b/CHANGES @@ -16,6 +16,8 @@ Features added Bugs fixed ---------- +* #9210: viewcode: crashed if non importable modules found on parallel build + Testing -------- diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py index f2a42f33f82..5728f607761 100644 --- a/sphinx/ext/viewcode.py +++ b/sphinx/ext/viewcode.py @@ -150,10 +150,11 @@ def env_merge_info(app: Sphinx, env: BuildEnvironment, docnames: Iterable[str], if modname not in env._viewcode_modules: # type: ignore env._viewcode_modules[modname] = entry # type: ignore else: - used = env._viewcode_modules[modname][2] # type: ignore - for fullname, docname in entry[2].items(): - if fullname not in used: - used[fullname] = docname + if env._viewcode_modules[modname]: # type: ignore + used = env._viewcode_modules[modname][2] # type: ignore + for fullname, docname in entry[2].items(): + if fullname not in used: + used[fullname] = docname def env_purge_doc(app: Sphinx, env: BuildEnvironment, docname: str) -> None: From d18840b38d3627880b6af71d8d23552a9daf7e10 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Thu, 13 May 2021 01:40:45 +0900 Subject: [PATCH 2/2] Fix test: the result of stringify_signature() has been changed randomly in py36 --- tests/test_util_inspect.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/test_util_inspect.py b/tests/test_util_inspect.py index 7b86c6ade36..5e35df762e9 100644 --- a/tests/test_util_inspect.py +++ b/tests/test_util_inspect.py @@ -198,7 +198,11 @@ def test_signature_annotations(): # optional union sig = inspect.signature(f20) - assert stringify_signature(sig) == '() -> Optional[Union[int, str]]' + if sys.version_info < (3, 7): + assert stringify_signature(sig) in ('() -> Optional[Union[int, str]]', + '() -> Optional[Union[str, int]]') + else: + assert stringify_signature(sig) == '() -> Optional[Union[int, str]]' # Any sig = inspect.signature(f14)