@@ -59,13 +59,18 @@ def poetry(fixture_dir, locker):
59
59
return p
60
60
61
61
62
- def set_package_requires (poetry ):
62
+ def set_package_requires (poetry , skip = None ):
63
+ skip = skip or set ()
63
64
packages = poetry .locker .locked_repository (with_dev_reqs = True ).packages
64
65
poetry .package .requires = [
65
- pkg .to_dependency () for pkg in packages if pkg .category == "main"
66
+ pkg .to_dependency ()
67
+ for pkg in packages
68
+ if pkg .category == "main" and pkg .name not in skip
66
69
]
67
70
poetry .package .dev_requires = [
68
- pkg .to_dependency () for pkg in packages if pkg .category == "dev"
71
+ pkg .to_dependency ()
72
+ for pkg in packages
73
+ if pkg .category == "dev" and pkg .name not in skip
69
74
]
70
75
71
76
@@ -503,6 +508,55 @@ def test_exporter_can_export_requirements_txt_with_git_packages(tmp_dir, poetry)
503
508
assert expected == content
504
509
505
510
511
+ def test_exporter_can_export_requirements_txt_with_nested_packages (tmp_dir , poetry ):
512
+ poetry .locker .mock_lock_data (
513
+ {
514
+ "package" : [
515
+ {
516
+ "name" : "foo" ,
517
+ "version" : "1.2.3" ,
518
+ "category" : "main" ,
519
+ "optional" : False ,
520
+ "python-versions" : "*" ,
521
+ "source" : {
522
+ "type" : "git" ,
523
+ "url" : "https://github.com/foo/foo.git" ,
524
+ "reference" : "123456" ,
525
+ },
526
+ },
527
+ {
528
+ "name" : "bar" ,
529
+ "version" : "4.5.6" ,
530
+ "category" : "main" ,
531
+ "optional" : False ,
532
+ "python-versions" : "*" ,
533
+ "dependencies" : {"foo" : "rev 123456" },
534
+ },
535
+ ],
536
+ "metadata" : {
537
+ "python-versions" : "*" ,
538
+ "content-hash" : "123456789" ,
539
+ "hashes" : {"foo" : [], "bar" : []},
540
+ },
541
+ }
542
+ )
543
+ set_package_requires (poetry , skip = {"foo" })
544
+
545
+ exporter = Exporter (poetry )
546
+
547
+ exporter .export ("requirements.txt" , Path (tmp_dir ), "requirements.txt" )
548
+
549
+ with (Path (tmp_dir ) / "requirements.txt" ).open (encoding = "utf-8" ) as f :
550
+ content = f .read ()
551
+
552
+ expected = """\
553
+ bar==4.5.6
554
+ foo @ git+https://github.com/foo/foo.git@123456
555
+ """
556
+
557
+ assert expected == content
558
+
559
+
506
560
def test_exporter_can_export_requirements_txt_with_git_packages_and_markers (
507
561
tmp_dir , poetry
508
562
):
0 commit comments