
2 changed files with 63 additions and 0 deletions
@ -0,0 +1,51 @@
@@ -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