77from pathlib import Path
88from traceback import print_exc
99
10+ from sphinx import version_info as sphinx_version
1011from sphinx .ext .intersphinx import InventoryAdapter
1112from sphinx .util import import_object
1213
@@ -177,7 +178,9 @@ def make_inventory(app):
177178 }
178179 inter_inv = InventoryAdapter (app .env ).main_inventory
179180 transposed = transpose_inventory (inter_inv , relative_to = app .outdir )
180- transposed .update (transpose_inventory (inventory , relative_to = app .outdir ))
181+ transposed .update (
182+ transpose_inventory (inventory , relative_to = app .outdir , use_tuple = True )
183+ )
181184 return transposed
182185
183186 @print_exceptions ()
@@ -296,7 +299,9 @@ def apply_links(self, app, exception) -> None:
296299 self .cache .write ()
297300
298301
299- def transpose_inventory (inv : dict , relative_to : str ) -> dict [str , str ]:
302+ def transpose_inventory (
303+ inv : dict , relative_to : str , * , use_tuple : bool = False
304+ ) -> dict [str , str ]:
300305 """
301306 Transpose Sphinx inventory from {type: {name: (..., location)}} to {name: location}.
302307
@@ -308,13 +313,18 @@ def transpose_inventory(inv: dict, relative_to: str) -> dict[str, str]:
308313 Sphinx inventory
309314 relative_to
310315 if a local file is found, transform it to be relative to this dir
316+ use_tuple
317+ force using Sphinx inventory tuple interface,
318+ TODO: move to class interface if it becomes public (#173)
311319 """
312320 transposed = {}
313321 for type_ , items in inv .items ():
314322 if not type_ .startswith ("py:" ):
315323 continue
316324 for item , info in items .items ():
317- location = info [2 ]
325+ location = (
326+ info .uri if not use_tuple and sphinx_version >= (8 , 2 ) else info [2 ]
327+ )
318328 if not location .startswith ("http" ):
319329 location = str (Path (location ).relative_to (relative_to ))
320330 transposed [item ] = location
0 commit comments