@@ -842,62 +842,28 @@ def parse(cls, location, package_only=False):
842842def 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
897859class 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