@@ -832,6 +832,44 @@ def parse(cls, location, package_only=False):
832832 yield models .PackageData .from_data (package_data , package_only )
833833
834834
835+ class PylockTomlHandler (models .DatafileHandler ):
836+ datasource_id = 'pypi_pylock_toml'
837+ path_patterns = ('*pylock.toml' ,)
838+ default_package_type = 'pypi'
839+ default_primary_language = 'Python'
840+ description = 'Python pylock.toml'
841+ documentation_url = 'https://github.com/nexB/scancode-toolkit'
842+
843+ @classmethod
844+ def parse (cls , location , package_only = False ):
845+ pylock_data = parse_pylock (location )
846+ if not pylock_data :
847+ return
848+
849+ dependencies = []
850+ for package_name , package_info in pylock_data .get ('package' , {}).items ():
851+ version = package_info .get ('version' )
852+ purl = PackageURL (type = 'pypi' , name = package_name , version = version )
853+ dependency = models .DependentPackage (
854+ purl = purl .to_string (),
855+ extracted_requirement = f'{ package_name } =={ version } ' if version else package_name ,
856+ scope = 'install' ,
857+ is_runtime = True ,
858+ is_optional = False ,
859+ is_direct = True ,
860+ is_pinned = bool (version ),
861+ )
862+ dependencies .append (dependency .to_dict ())
863+
864+ package_data = dict (
865+ datasource_id = cls .datasource_id ,
866+ type = cls .default_package_type ,
867+ primary_language = 'Python' ,
868+ dependencies = dependencies ,
869+ extra_data = pylock_data ,
870+ )
871+ yield models .PackageData .from_data (package_data , package_only )
872+
835873class PipInspectDeplockHandler (models .DatafileHandler ):
836874 datasource_id = 'pypi_inspect_deplock'
837875 path_patterns = ('*pip-inspect.deplock' ,)
0 commit comments