From b9804a136559b291edb4803ab7581aa196057af0 Mon Sep 17 00:00:00 2001 From: Romeo Kienzler <5694071+romeokienzler@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:21:35 +0000 Subject: [PATCH] add pin_requirements.py for release --- pin_requirements.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 pin_requirements.py diff --git a/pin_requirements.py b/pin_requirements.py new file mode 100644 index 00000000..cbfc1328 --- /dev/null +++ b/pin_requirements.py @@ -0,0 +1,38 @@ +import re +import subprocess +import toml + +pyproject_file = "pyproject.toml" + +pip_output = subprocess.run(["pip", "list", "--format=freeze"], capture_output=True, text=True).stdout + +pip_versions = {} +for line in pip_output.splitlines(): + parts = line.split("==") + if len(parts) == 2: + package, version = parts + pip_versions[package.lower()] = version + +with open(pyproject_file, "r") as f: + pyproject_raw = f.read() + +match = re.search(r"dependencies\s*=\s*\[(.*?)\]", pyproject_raw, re.DOTALL) +if match: + deps_raw = match.group(1) + deps = [d.strip().strip('"') for d in deps_raw.split(",")] + + updated_deps = [] + for dep in deps: + match = re.match(r"([a-zA-Z0-9_-]+)([<>=!].*)?", dep) + if match: + pkg_name = match.group(1).lower() + if pkg_name in pip_versions: + updated_deps.append(f'"{pkg_name}=={pip_versions[pkg_name]}"') + else: + updated_deps.append(f'"{dep}"') # Keep as is if not found in pip list + + updated_deps_str = ",\n ".join(updated_deps) + pyproject_raw = re.sub(r"dependencies\s*=\s*\[.*?\]", f"dependencies = [\n {updated_deps_str}\n]", pyproject_raw, flags=re.DOTALL) + +with open(pyproject_file, "w") as f: + f.write(pyproject_raw)