From d461e52483902558e72aab64ecbb6430c098ca1c Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Tue, 8 Feb 2022 08:41:59 +0100 Subject: refactor: introduce system_for_sphinx_inventory helper function --- pydoc.py | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'pydoc.py') diff --git a/pydoc.py b/pydoc.py index 9311e0a..0b124f7 100755 --- a/pydoc.py +++ b/pydoc.py @@ -124,6 +124,29 @@ class SphinxAwareSystem(model.System): return super().privacyClass(ob) +def system_for_sphinx_inventory(inventory_url: str): + inventory_url = packages[package_name]['sphinx_inventory_url'] + url_base = inventory_url.rsplit('/', maxsplit=1)[0] + inventory_path = inventories / (package_name + '.inv') + try: + with inventory_path.open('rb') as f: + inventory = InventoryFile.load(f, url_base, posixpath.join) + except FileNotFoundError: + inventory_bytes = requests.get(inventory_url, stream=True).content + inventory = InventoryFile.load( + io.BytesIO(inventory_bytes), url_base, posixpath.join + ) + with inventory_path.open('wb') as f: + f.write(inventory_bytes) + + if 'py:module' not in inventory: + print(f"[warning] sphinx inventory for {package_name} does not contain py:module, we're ignoring the inventory") + # TODO: display warning in HTML + return None + + system = SphinxAwareSystem(inventory) + system.options.docformat = docformat + return system if __name__ == '__main__': sources = Path('sources') @@ -245,26 +268,7 @@ if __name__ == '__main__': system = None if 'sphinx_inventory_url' in packages[package_name]: - inventory_url = packages[package_name]['sphinx_inventory_url'] - url_base = inventory_url.rsplit('/', maxsplit=1)[0] - inventory_path = inventories / (package_name + '.inv') - try: - with inventory_path.open('rb') as f: - inventory = InventoryFile.load(f, url_base, posixpath.join) - except FileNotFoundError: - inventory_bytes = requests.get(inventory_url, stream=True).content - inventory = InventoryFile.load( - io.BytesIO(inventory_bytes), url_base, posixpath.join - ) - with inventory_path.open('wb') as f: - f.write(inventory_bytes) - - if 'py:module' in inventory: - system = SphinxAwareSystem(inventory) - system.options.docformat = docformat - else: - print(f"[warning] sphinx inventory for {package_name} does not contain py:module, we're ignoring the inventory") - # TODO: display warning in HTML + system = system_for_sphinx_inventory(packages[package_name]['sphinx_inventory_url']) pydoctor.driver.main( -- cgit v1.2.3