Skip to content

Commit 851ecf4

Browse files
committed
Clean up PR: remove old files, add new test data, update pypi.py and test_pypi.py
1 parent 9d1a12f commit 851ecf4

10 files changed

Lines changed: 423 additions & 740 deletions

File tree

.gitignore

Lines changed: 0 additions & 119 deletions
This file was deleted.

src/packagedcode/pypi.py

Lines changed: 26 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -842,62 +842,28 @@ def parse(cls, location, package_only=False):
842842
def parse_dependency_requirement(requirement, scope='dependencies', is_runtime=True):
843843
"""
844844
Parse a dependency requirement string and return a DependentPackage or None.
845-
846-
Args:
847-
requirement: A requirement string (e.g., "requests>=2.0.0")
848-
scope: The dependency scope (e.g., 'dependencies', 'dev-dependencies')
849-
is_runtime: Whether this is a runtime dependency
850-
851-
Returns:
852-
models.DependentPackage or None
845+
This now delegates to get_requires_dependencies for consistency and to avoid code duplication.
853846
"""
854847
if not requirement:
855848
return None
856-
857-
try:
858-
req = Requirement(requirement)
859-
name = canonicalize_name(req.name)
860-
is_pinned = False
861-
purl = PackageURL(type='pypi', name=name)
862-
863-
specifiers_set = req.specifier
864-
specifiers = specifiers_set._specs
865-
extracted_requirement = None
866-
867-
if specifiers:
868-
extracted_requirement = str(specifiers_set)
869-
if len(specifiers) == 1:
870-
specifier = list(specifiers)[0]
871-
if specifier.operator in ('==', '==='):
872-
is_pinned = True
873-
purl = purl._replace(version=specifier.version)
874-
875-
extra_data = {}
876-
if req.marker:
877-
platform = get_python_version_os(req.marker)
878-
if platform:
879-
extra_data = platform
880-
881-
is_optional = bool(get_extra(req.marker) if req.marker else False)
882-
883-
return models.DependentPackage(
884-
purl=purl.to_string(),
885-
scope=scope,
886-
is_runtime=is_runtime,
887-
is_optional=is_optional,
888-
is_pinned=is_pinned,
889-
is_direct=True,
890-
extracted_requirement=extracted_requirement,
891-
extra_data=extra_data if extra_data else None,
892-
)
893-
except Exception:
894-
return None
849+
# get_requires_dependencies expects a list of requirements
850+
deps = get_requires_dependencies(
851+
requires=[requirement],
852+
default_scope=scope,
853+
is_runtime=is_runtime,
854+
)
855+
# Return the first DependentPackage if any, else None
856+
return deps[0] if deps else None
895857

896858

897859
class BaseUvPythonLayout(BaseExtractedPythonLayout):
898860

899861
@classmethod
900862
def assemble(cls, package_data, resource, codebase, package_adder):
863+
if codebase.has_single_resource:
864+
yield from models.DatafileHandler.assemble(package_data, resource, codebase, package_adder)
865+
return
866+
901867
package_resource = None
902868
if resource.name == 'pyproject.toml':
903869
package_resource = resource
@@ -907,16 +873,11 @@ def assemble(cls, package_data, resource, codebase, package_adder):
907873
package_resource = [r for r in siblings if r.name == 'pyproject.toml']
908874
if package_resource:
909875
package_resource = package_resource[0]
910-
876+
911877
if not package_resource:
912-
# we do not have a pyproject.toml
913878
yield from yield_dependencies_from_package_resource(resource)
914879
return
915-
916-
if codebase.has_single_resource:
917-
yield from models.DatafileHandler.assemble(package_data, resource, codebase, package_adder)
918-
return
919-
880+
920881
assert len(package_resource.package_data) == 1, f'Invalid pyproject.toml for {package_resource.path}'
921882
pkg_data = package_resource.package_data[0]
922883
pkg_data = models.PackageData.from_dict(pkg_data)
@@ -1063,7 +1024,7 @@ def parse(cls, location, package_only=False):
10631024
if not packages:
10641025
return
10651026

1066-
version = toml_data.get('version')
1027+
lock_version = toml_data.get('version')
10671028
requires_python = toml_data.get('requires-python')
10681029

10691030
dependencies = []
@@ -1103,14 +1064,22 @@ def parse(cls, location, package_only=False):
11031064

11041065
name = package.get('name')
11051066
version = package.get('version')
1067+
description = package.get('description')
1068+
homepage_url = package.get('homepage_url')
1069+
keywords = package.get('keywords')
1070+
parties = package.get('parties')
11061071
urls = get_pypi_urls(name, version)
1107-
1072+
11081073
package_data = dict(
11091074
datasource_id=cls.datasource_id,
11101075
type=cls.default_package_type,
11111076
primary_language='Python',
11121077
name=name,
11131078
version=version,
1079+
description=description,
1080+
homepage_url=homepage_url,
1081+
keywords=keywords,
1082+
parties=parties,
11141083
is_virtual=True,
11151084
dependencies=dependencies_for_resolved,
11161085
**urls,
@@ -1131,7 +1100,7 @@ def parse(cls, location, package_only=False):
11311100

11321101
extra_data = {}
11331102
extra_data['python_version'] = requires_python
1134-
extra_data['lock_version'] = version
1103+
extra_data['lock_version'] = lock_version
11351104

11361105
package_data = dict(
11371106
datasource_id=cls.datasource_id,

0 commit comments

Comments
 (0)