diff options
author | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2018-02-03 02:14:06 +0900 |
---|---|---|
committer | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2018-02-03 02:14:06 +0900 |
commit | 39d45842486c7a4ab365818901db29907ebcfd2f (patch) | |
tree | f328de2aceb7ec10fded847a38aba498d1375864 /sphinx/ext/intersphinx.py | |
parent | 35f05bdc7e1000a56bf945ae44d3c6da27bd315b (diff) | |
parent | a19c3006530e97f1397dedbc8f4d630dbec8db62 (diff) | |
download | sphinx-git-39d45842486c7a4ab365818901db29907ebcfd2f.tar.gz |
Merge branch 'stable' into 1.7-release
Diffstat (limited to 'sphinx/ext/intersphinx.py')
-rw-r--r-- | sphinx/ext/intersphinx.py | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py index 7ec89ab7f..5d373c689 100644 --- a/sphinx/ext/intersphinx.py +++ b/sphinx/ext/intersphinx.py @@ -178,9 +178,9 @@ def fetch_inventory(app, uri, inv): else: f = open(path.join(app.srcdir, inv), 'rb') except Exception as err: - logger.warning('intersphinx inventory %r not fetchable due to %s: %s', - inv, err.__class__, err) - return + err.args = ('intersphinx inventory %r not fetchable due to %s: %s', + inv, err.__class__, err) + raise try: if hasattr(f, 'url'): newinv = f.url # type: ignore @@ -196,8 +196,9 @@ def fetch_inventory(app, uri, inv): except ValueError as exc: raise ValueError('unknown or unsupported inventory version: %r' % exc) except Exception as err: - logger.warning('intersphinx inventory %r not readable due to %s: %s', - inv, err.__class__.__name__, err) + err.args = ('intersphinx inventory %r not readable due to %s: %s', + inv, err.__class__.__name__, err) + raise else: return invdata @@ -231,6 +232,7 @@ def load_mappings(app): else: invs = inv # type: ignore + failures = [] for inv in invs: if not inv: inv = posixpath.join(uri, INVENTORY_FILENAME) @@ -240,12 +242,30 @@ def load_mappings(app): or inventories.cache[uri][1] < cache_time: safe_inv_url = _get_safe_url(inv) # type: ignore logger.info('loading intersphinx inventory from %s...', safe_inv_url) - invdata = fetch_inventory(app, uri, inv) + try: + invdata = fetch_inventory(app, uri, inv) + except Exception as err: + failures.append(err.args) + continue + if invdata: inventories.cache[uri] = (name, now, invdata) update = True break + if failures == []: + pass + elif len(failures) < len(invs): + logger.info("encountered some issues with some of the inventories," + " but they had working alternatives:") + for fail in failures: + logger.info(*fail) + else: + logger.warning("failed to reach any of the inventories " + "with the following issues:") + for fail in failures: + logger.warning(*fail) + if update: inventories.clear() |