未验证 提交 bf3fb38b 编写于 作者: F Frost Ming

Add a new option `pdm export --pyproject`

Close #190
上级 c2dc2cb4
Provide an option to export requirements from pyproject.toml
......@@ -32,18 +32,35 @@ class Command(BaseCommand):
"--output",
help="Write output to the given file, or print to stdout if not given",
)
parser.add_argument(
"-p",
"--pyproject",
action="store_true",
help="Read the list of packages from pyproject.toml",
)
def handle(self, project: Project, options: argparse.Namespace) -> None:
candidates = []
if options.pyproject:
options.hashes = False
if options.default:
# Don't include self candidate
temp = project.get_locked_candidates()
temp.pop(project.meta.name, None)
if options.pyproject:
temp = project.dependencies
else:
temp = project.get_locked_candidates()
temp.pop(project.meta.name, None)
candidates.extend(temp.values())
if options.dev:
candidates.extend(project.get_locked_candidates("dev").values())
if options.pyproject:
candidates.extend(project.dev_dependencies.values())
else:
candidates.extend(project.get_locked_candidates("dev").values())
for section in options.sections:
candidates.extend(project.get_locked_candidates(section).values())
if options.pyproject:
candidates.extend(project.get_dependencies(section).values())
else:
candidates.extend(project.get_locked_candidates(section).values())
content = FORMATS[options.format].export(project, candidates, options)
if options.output:
Path(options.output).write_text(content)
......
......@@ -100,7 +100,7 @@ def convert(project, filename):
def export(project, candidates, options):
lines = []
for candidate in candidates:
req = candidate.req.as_line()
req = getattr(candidate, "req", candidate).as_line()
lines.append(req)
if options.hashes and candidate.hashes:
for item in candidate.hashes.values():
......
......@@ -261,6 +261,7 @@ def test_export_to_requirements_txt(invoke, fixture_project):
project = fixture_project("demo-package")
requirements_txt = project.root / "requirements.txt"
requirements_no_hashes = project.root / "requirements_simple.txt"
requirements_pyproject = project.root / "requirements.ini"
result = invoke(["export"], obj=project)
assert result.exit_code == 0
......@@ -270,6 +271,10 @@ def test_export_to_requirements_txt(invoke, fixture_project):
assert result.exit_code == 0
assert result.output.strip() == requirements_no_hashes.read_text().strip()
result = invoke(["export", "--pyproject"], obj=project)
assert result.exit_code == 0
assert result.output.strip() == requirements_pyproject.read_text().strip()
result = invoke(
["export", "-o", str(project.root / "requirements_output.txt")], obj=project
)
......
flask
--extra-index-url https://test.pypi.org/simple
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册