Skip to content

Commit e2e9019

Browse files
Update scope and runtime/optional attributes
Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com>
1 parent bc22ee9 commit e2e9019

10 files changed

+453
-437
lines changed

src/packagedcode/pypi.py

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)