← back to FashionCrawler

dev/scripts/sync_requirements.py

33 lines

from pathlib import Path

import tomlkit


def parse_packages_from_poetry(poetry_lock_file: Path):
    packages = []
    with open(poetry_lock_file, "r", encoding="utf-8") as file:
        toml_content = file.read()
        parsed_toml = tomlkit.parse(toml_content)

        for package in parsed_toml["package"]:  # type: ignore
            package_name = package["name"]
            package_version = package["version"]
            packages.append((f"{package_name}=={package_version}\n"))

    return packages


def write_to_requirements_txt(package_strings, requirements_txt_file: Path):
    with open(requirements_txt_file, "w", encoding="utf-8") as file:
        for package in package_strings:
            file.write(package)


if __name__ == "__main__":
    script_dir = Path(__file__).resolve().parent.parent
    poetry_lock_file = script_dir.parent / "poetry.lock"
    package_strings = parse_packages_from_poetry(poetry_lock_file)

    requirements_txt_file = script_dir.parent / "requirements.txt"
    write_to_requirements_txt(package_strings, requirements_txt_file)