@@ -494,6 +494,7 @@ def parse(cls, location, package_only=False):
494
494
parsed_dependencies = get_requires_dependencies (
495
495
requires = deps ,
496
496
default_scope = dep_type ,
497
+ is_optional = True ,
497
498
)
498
499
dependencies .extend (parsed_dependencies )
499
500
@@ -608,35 +609,38 @@ def is_datafile(cls, location, filetypes=tuple()):
608
609
)
609
610
610
611
@classmethod
611
- def parse_non_group_dependencies (cls , dependencies , dev = False ):
612
+ def parse_non_group_dependencies (
613
+ cls ,
614
+ dependencies ,
615
+ scope = "install" ,
616
+ is_optional = False ,
617
+ is_runtime = True ,
618
+ ):
612
619
dependency_mappings = []
613
620
for dep_name , requirement in dependencies .items ():
614
- if not dev and dep_name == "python" :
621
+ if is_runtime and dep_name == "python" :
615
622
continue
616
623
617
624
purl = PackageURL (
618
625
type = cls .default_package_type ,
619
626
name = dep_name ,
620
627
)
621
- is_optional = False
622
- if dev :
623
- is_optional = True
624
628
625
629
extra_data = {}
626
630
if isinstance (requirement , str ):
627
631
extracted_requirement = requirement
628
632
elif isinstance (requirement , dict ):
629
633
extracted_requirement = requirement .get ("version" )
630
- is_optional = requirement .get ("optional" , is_optional )
634
+ is_optional = requirement .get ("optional" , False )
631
635
python_version = requirement .get ("python" )
632
636
if python_version :
633
637
extra_data ["python_version" ] = python_version
634
638
635
639
dependency = models .DependentPackage (
636
640
purl = purl .to_string (),
637
641
extracted_requirement = extracted_requirement ,
638
- scope = "install" ,
639
- is_runtime = True ,
642
+ scope = scope ,
643
+ is_runtime = is_runtime ,
640
644
is_optional = is_optional ,
641
645
is_direct = True ,
642
646
is_resolved = False ,
@@ -672,11 +676,13 @@ def parse(cls, location, package_only=False):
672
676
dependencies = []
673
677
parsed_deps = cls .parse_non_group_dependencies (
674
678
dependencies = poetry_data .get ("dependencies" , {}),
679
+ scope = "dependencies" ,
675
680
)
676
681
dependencies .extend (parsed_deps )
677
682
parsed_deps = cls .parse_non_group_dependencies (
678
683
dependencies = poetry_data .get ("dev-dependencies" , {}),
679
- dev = True ,
684
+ scope = "dev-dependencies" ,
685
+ is_runtime = False ,
680
686
)
681
687
dependencies .extend (parsed_deps )
682
688
@@ -690,7 +696,7 @@ def parse(cls, location, package_only=False):
690
696
purl = purl .to_string (),
691
697
extracted_requirement = requirement ,
692
698
scope = group_name ,
693
- is_runtime = True ,
699
+ is_runtime = False ,
694
700
is_optional = False ,
695
701
is_direct = True ,
696
702
is_resolved = False ,
@@ -745,7 +751,7 @@ def parse(cls, location, package_only=False):
745
751
dependency = models .DependentPackage (
746
752
purl = purl .to_string (),
747
753
extracted_requirement = requirement ,
748
- scope = "install " ,
754
+ scope = "dependencies " ,
749
755
is_runtime = True ,
750
756
is_optional = False ,
751
757
is_direct = True ,
@@ -770,8 +776,8 @@ def parse(cls, location, package_only=False):
770
776
purl = purl .to_string (),
771
777
extracted_requirement = requirement ,
772
778
scope = group_name ,
773
- is_runtime = True ,
774
- is_optional = True ,
779
+ is_runtime = False ,
780
+ is_optional = False ,
775
781
is_direct = True ,
776
782
is_resolved = False ,
777
783
)
@@ -1871,7 +1877,13 @@ def get_dist_dependencies(dist):
1871
1877
return get_requires_dependencies (requires = dist .requires )
1872
1878
1873
1879
1874
- def get_requires_dependencies (requires , default_scope = 'install' , is_direct = True ):
1880
+ def get_requires_dependencies (
1881
+ requires ,
1882
+ default_scope = 'install' ,
1883
+ is_direct = True ,
1884
+ is_optional = False ,
1885
+ is_runtime = True ,
1886
+ ):
1875
1887
"""
1876
1888
Return a list of DependentPackage found in a ``requires`` list of
1877
1889
requirement strings or an empty list.
@@ -1918,12 +1930,16 @@ def get_requires_dependencies(requires, default_scope='install', is_direct=True)
1918
1930
extracted_requirement = None
1919
1931
if requirement :
1920
1932
extracted_requirement = requirement
1933
+
1934
+ if is_optional or bool (extra ):
1935
+ is_optional = True
1936
+
1921
1937
dependent_packages .append (
1922
1938
models .DependentPackage (
1923
1939
purl = purl .to_string (),
1924
1940
scope = scope ,
1925
- is_runtime = True ,
1926
- is_optional = True if bool ( extra ) else False ,
1941
+ is_runtime = is_runtime ,
1942
+ is_optional = is_optional ,
1927
1943
is_resolved = is_resolved ,
1928
1944
is_direct = is_direct ,
1929
1945
extracted_requirement = extracted_requirement ,
0 commit comments