summaryrefslogtreecommitdiff
path: root/pydoc.py
diff options
context:
space:
mode:
authorMartin Fischer <martin@push-f.com>2022-02-07 14:14:40 +0100
committerMartin Fischer <martin@push-f.com>2022-02-07 14:14:40 +0100
commita776f43471394edcbb889475f5108331cf8d2f2d (patch)
treeb02ded68ff06979dd2cb7d56e3b1b3ed0d144937 /pydoc.py
parentf9409b11529083fcae4177766661b905e7e9caaa (diff)
detect package_dir from setup.cfg
Diffstat (limited to 'pydoc.py')
-rwxr-xr-xpydoc.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/pydoc.py b/pydoc.py
index dd9942b..8d86531 100755
--- a/pydoc.py
+++ b/pydoc.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
+import configparser
import json
import shutil
import tarfile
@@ -22,6 +23,25 @@ def fetch_package_info(package_name: str):
def find_packages(path: Path, package_name: str) -> List[Path]:
package_name = package_name.lower()
+ # we don't want to execute setup.py, so we firstly check setup.cfg
+
+ setup_cfg = path / 'setup.cfg'
+ if setup_cfg.exists():
+ parser = configparser.ConfigParser()
+ parser.read(setup_cfg)
+ package_dir = parser.get('options', 'package_dir', fallback=None)
+ if package_dir is not None:
+ package_dir = package_dir.strip()
+ if package_dir.startswith('='):
+ package_dir = package_dir.lstrip('= ')
+ # TODO: ensure path is safe
+ if (path / package_dir / package_name / '__init__.py').exists():
+ return [path / package_dir / package_name]
+ else:
+ print("[warning] options.package_dir in setup.cfg doesn't start with =")
+
+ # we couldn't find the package via setup.cfg so we fallback to educated guesses
+
if (path / package_name / '__init__.py').exists():
return [path / package_name]