diff options
author | Martin Fischer <martin@push-f.com> | 2022-02-07 14:14:40 +0100 |
---|---|---|
committer | Martin Fischer <martin@push-f.com> | 2022-02-07 14:14:40 +0100 |
commit | a776f43471394edcbb889475f5108331cf8d2f2d (patch) | |
tree | b02ded68ff06979dd2cb7d56e3b1b3ed0d144937 /pydoc.py | |
parent | f9409b11529083fcae4177766661b905e7e9caaa (diff) |
detect package_dir from setup.cfg
Diffstat (limited to 'pydoc.py')
-rwxr-xr-x | pydoc.py | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -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] |