
2 changed files with 63 additions and 0 deletions
@ -0,0 +1,51 @@ |
|||||||
|
import re |
||||||
|
import subprocess |
||||||
|
import sys |
||||||
|
import toml |
||||||
|
|
||||||
|
|
||||||
|
REGEX_PKG = re.compile("^([\w\.\[\],_-]+)") |
||||||
|
REGEX_SINGLE = re.compile("([\w\._-]+)") |
||||||
|
|
||||||
|
|
||||||
|
def get_pip_freeze_list(): |
||||||
|
freeze_text = subprocess.check_output( |
||||||
|
[sys.executable, '-m', 'pip', 'list', '-l', '--format=freeze'] |
||||||
|
) |
||||||
|
freeze_text = freeze_text.decode("utf-8") |
||||||
|
return freeze_text.strip().splitlines() |
||||||
|
|
||||||
|
def get_raw_packages_from_pyproject_file(filename="pyproject.toml"): |
||||||
|
pyproject = toml.load(filename) |
||||||
|
_flit = pyproject["tool"]["flit"]["metadata"] |
||||||
|
pyproject_pkgs = _flit["requires"] |
||||||
|
pyproject_pkgs += _flit["requires-extra"]["test"] |
||||||
|
pyproject_pkgs += _flit["requires-extra"]["dev"] |
||||||
|
return pyproject_pkgs |
||||||
|
|
||||||
|
|
||||||
|
def _parse_package_names(toml_pkgs): |
||||||
|
for pkg in toml_pkgs: |
||||||
|
group = REGEX_PKG.match(pkg)[0] |
||||||
|
yield from REGEX_SINGLE.finditer(group) |
||||||
|
|
||||||
|
def get_package_names(filename="pyproject.toml"): |
||||||
|
toml_pkgs = get_raw_packages_from_pyproject_file(filename) |
||||||
|
as_string = (m.group() for m in _parse_package_names(toml_pkgs)) |
||||||
|
lowercased = (item.lower() for item in as_string) |
||||||
|
return {item.replace("_", "-") for item in lowercased} |
||||||
|
|
||||||
|
def filter_toml_pkgs_from_freeze_list(freeze_list, toml_pkgs): |
||||||
|
for line in freeze_list: |
||||||
|
freeze_pkg, _ = line.split("=", 1) |
||||||
|
if freeze_pkg.lower() in toml_pkgs: |
||||||
|
yield line |
||||||
|
|
||||||
|
def main(toml_file="pyproject.toml"): |
||||||
|
freeze_list = get_pip_freeze_list() |
||||||
|
toml_pkgs = get_package_names(toml_file) |
||||||
|
return filter_toml_pkgs_from_freeze_list(freeze_list, toml_pkgs) |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
print("\n".join(sorted(main(), key=lambda x: x.lower()))) |
Loading…
Reference in new issue