diff --git a/CHANGES b/CHANGES index 42ac09da0ed..3ef0bb53eaf 100644 --- a/CHANGES +++ b/CHANGES @@ -68,6 +68,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: diff --git a/tests/test_util_inspect.py b/tests/test_util_inspect.py index 95e36ba14b6..dd9bd14a3dd 100644 --- a/tests/test_util_inspect.py +++ b/tests/test_util_inspect.py @@ -214,7 +214,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)