@@ -494,6 +494,7 @@ def parse(cls, location, package_only=False):
494494 parsed_dependencies = get_requires_dependencies (
495495 requires = deps ,
496496 default_scope = dep_type ,
497+ is_optional = True ,
497498 )
498499 dependencies .extend (parsed_dependencies )
499500
@@ -608,35 +609,38 @@ def is_datafile(cls, location, filetypes=tuple()):
608609 )
609610
610611 @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+ ):
612619 dependency_mappings = []
613620 for dep_name , requirement in dependencies .items ():
614- if not dev and dep_name == "python" :
621+ if is_runtime and dep_name == "python" :
615622 continue
616623
617624 purl = PackageURL (
618625 type = cls .default_package_type ,
619626 name = dep_name ,
620627 )
621- is_optional = False
622- if dev :
623- is_optional = True
624628
625629 extra_data = {}
626630 if isinstance (requirement , str ):
627631 extracted_requirement = requirement
628632 elif isinstance (requirement , dict ):
629633 extracted_requirement = requirement .get ("version" )
630- is_optional = requirement .get ("optional" , is_optional )
634+ is_optional = requirement .get ("optional" , False )
631635 python_version = requirement .get ("python" )
632636 if python_version :
633637 extra_data ["python_version" ] = python_version
634638
635639 dependency = models .DependentPackage (
636640 purl = purl .to_string (),
637641 extracted_requirement = extracted_requirement ,
638- scope = "install" ,
639- is_runtime = True ,
642+ scope = scope ,
643+ is_runtime = is_runtime ,
640644 is_optional = is_optional ,
641645 is_direct = True ,
642646 is_resolved = False ,
@@ -672,11 +676,13 @@ def parse(cls, location, package_only=False):
672676 dependencies = []
673677 parsed_deps = cls .parse_non_group_dependencies (
674678 dependencies = poetry_data .get ("dependencies" , {}),
679+ scope = "dependencies" ,
675680 )
676681 dependencies .extend (parsed_deps )
677682 parsed_deps = cls .parse_non_group_dependencies (
678683 dependencies = poetry_data .get ("dev-dependencies" , {}),
679- dev = True ,
684+ scope = "dev-dependencies" ,
685+ is_runtime = False ,
680686 )
681687 dependencies .extend (parsed_deps )
682688
@@ -690,7 +696,7 @@ def parse(cls, location, package_only=False):
690696 purl = purl .to_string (),
691697 extracted_requirement = requirement ,
692698 scope = group_name ,
693- is_runtime = True ,
699+ is_runtime = False ,
694700 is_optional = False ,
695701 is_direct = True ,
696702 is_resolved = False ,
@@ -745,7 +751,7 @@ def parse(cls, location, package_only=False):
745751 dependency = models .DependentPackage (
746752 purl = purl .to_string (),
747753 extracted_requirement = requirement ,
748- scope = "install " ,
754+ scope = "dependencies " ,
749755 is_runtime = True ,
750756 is_optional = False ,
751757 is_direct = True ,
@@ -770,8 +776,8 @@ def parse(cls, location, package_only=False):
770776 purl = purl .to_string (),
771777 extracted_requirement = requirement ,
772778 scope = group_name ,
773- is_runtime = True ,
774- is_optional = True ,
779+ is_runtime = False ,
780+ is_optional = False ,
775781 is_direct = True ,
776782 is_resolved = False ,
777783 )
@@ -1871,7 +1877,13 @@ def get_dist_dependencies(dist):
18711877 return get_requires_dependencies (requires = dist .requires )
18721878
18731879
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+ ):
18751887 """
18761888 Return a list of DependentPackage found in a ``requires`` list of
18771889 requirement strings or an empty list.
@@ -1918,12 +1930,16 @@ def get_requires_dependencies(requires, default_scope='install', is_direct=True)
19181930 extracted_requirement = None
19191931 if requirement :
19201932 extracted_requirement = requirement
1933+
1934+ if is_optional or bool (extra ):
1935+ is_optional = True
1936+
19211937 dependent_packages .append (
19221938 models .DependentPackage (
19231939 purl = purl .to_string (),
19241940 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 ,
19271943 is_resolved = is_resolved ,
19281944 is_direct = is_direct ,
19291945 extracted_requirement = extracted_requirement ,
0 commit comments