chore: import upstream snapshot with attribution
CodeQL / Analyze (python) (push) Has been cancelled
Update Platform Components Table / update (push) Has been cancelled
Docker image release / Build base image (push) Has been cancelled
Sync docs with Docusaurus / sync (push) Has been cancelled
Tests / Check if changed (push) Has been cancelled
Tests / format (push) Has been cancelled
Tests / check-imports (push) Has been cancelled
Tests / Unit / macos-latest (push) Has been cancelled
Tests / Unit / ubuntu-latest (push) Has been cancelled
Tests / Unit / windows-latest (push) Has been cancelled
Tests / mypy (push) Has been cancelled
Tests / Integration / ubuntu-latest (push) Has been cancelled
Tests / Integration / macos-latest (push) Has been cancelled
Tests / Integration / windows-latest (push) Has been cancelled
Tests / notify-slack-on-failure (push) Has been cancelled
Tests / Mark tests as completed (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Update Platform Components Table / update (push) Has been cancelled
Docker image release / Build base image (push) Has been cancelled
Sync docs with Docusaurus / sync (push) Has been cancelled
Tests / Check if changed (push) Has been cancelled
Tests / format (push) Has been cancelled
Tests / check-imports (push) Has been cancelled
Tests / Unit / macos-latest (push) Has been cancelled
Tests / Unit / ubuntu-latest (push) Has been cancelled
Tests / Unit / windows-latest (push) Has been cancelled
Tests / mypy (push) Has been cancelled
Tests / Integration / ubuntu-latest (push) Has been cancelled
Tests / Integration / macos-latest (push) Has been cancelled
Tests / Integration / windows-latest (push) Has been cancelled
Tests / notify-slack-on-failure (push) Has been cancelled
Tests / Mark tests as completed (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import argparse
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import toml
|
||||
|
||||
matcher = re.compile(r"farm-haystack\[(.+)\]")
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="pyproject_to_requirements.py", description="Convert pyproject.toml to requirements.txt"
|
||||
)
|
||||
parser.add_argument("pyproject_path")
|
||||
parser.add_argument("--extra", default="")
|
||||
|
||||
|
||||
def resolve(target: str, extras: dict, results: set) -> None:
|
||||
"""
|
||||
Resolve the dependencies for a given target.
|
||||
"""
|
||||
if target not in extras:
|
||||
results.add(target)
|
||||
return
|
||||
|
||||
for t in extras[target]:
|
||||
m = matcher.match(t)
|
||||
if m:
|
||||
for i in m.group(1).split(","):
|
||||
resolve(i, extras, results)
|
||||
else:
|
||||
resolve(t, extras, results)
|
||||
|
||||
|
||||
def main(pyproject_path: Path, extra: str = "") -> None:
|
||||
"""
|
||||
Convert a pyproject.toml file to a requirements.txt file.
|
||||
"""
|
||||
content = toml.load(pyproject_path)
|
||||
# basic set of dependencies
|
||||
deps = set(content["project"]["dependencies"])
|
||||
|
||||
if extra:
|
||||
extras = content["project"]["optional-dependencies"]
|
||||
resolve(extra, extras, deps)
|
||||
|
||||
sys.stdout.write("\n".join(sorted(deps)))
|
||||
sys.stdout.write("\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
args = parser.parse_args()
|
||||
pyproject_path = Path(args.pyproject_path).absolute()
|
||||
|
||||
main(pyproject_path, args.extra)
|
||||
Reference in New Issue
Block a user