Fix intersphinx dictionary ordering confusion differently, as proposed by Jon.

This commit is contained in:
Georg Brandl 2012-11-01 17:58:47 +01:00
parent 00b3433b0d
commit 1f905f121a

View File

@ -188,13 +188,22 @@ def load_mappings(app):
if update:
env.intersphinx_inventory = {}
env.intersphinx_named_inventory = {}
for name, _, invdata in cache.itervalues():
# Duplicate values in different inventories will shadow each
# other; which one will override which can vary between builds
# since they are specified using an unordered dict. To make
# it more consistent, we sort the named inventories and then
# add the unnamed inventories last. This means that the
# unnamed inventories will shadow the named ones but the named
# ones can still be accessed when the name is specified.
cached_vals = list(cache.itervalues())
named_vals = sorted(v for v in cached_vals if v[0])
unnamed_vals = [v for v in cached_vals if not v[0]]
for name, _, invdata in named_vals + unnamed_vals:
if name:
env.intersphinx_named_inventory[name] = invdata
else:
for type, objects in invdata.iteritems():
env.intersphinx_inventory.setdefault(
type, {}).update(objects)
for type, objects in invdata.iteritems():
env.intersphinx_inventory.setdefault(
type, {}).update(objects)
def missing_reference(app, env, node, contnode):