MCPcopy Create free account
hub / github.com/aboutcode-org/scancode-toolkit / assemble

Method assemble

src/packagedcode/pypi.py:879–931  ·  view source on GitHub ↗
(cls, package_data, resource, codebase, package_adder)

Source from the content-addressed store, hash-verified

877
878 @classmethod
879 def assemble(cls, package_data, resource, codebase, package_adder):
880 if codebase.has_single_resource:
881 yield from models.DatafileHandler.assemble(package_data, resource, codebase, package_adder)
882 return
883
884 package_resource = None
885 if resource.name == 'pyproject.toml':
886 package_resource = resource
887 elif resource.name == 'uv.lock':
888 if resource.has_parent():
889 siblings = resource.siblings(codebase)
890 pyprojects = [r for r in siblings if r.name == 'pyproject.toml']
891 if pyprojects:
892 package_resource = pyprojects[0]
893
894 if not package_resource:
895 yield from yield_dependencies_from_package_resource(resource)
896 return
897
898 assert len(package_resource.package_data) == 1, f'Invalid pyproject.toml for {package_resource.path}'
899 pkg_data = package_resource.package_data[0]
900 pkg_data = models.PackageData.from_dict(pkg_data)
901
902 package_uid = None
903 if pkg_data.purl:
904 package = models.Package.from_package_data(
905 package_data=pkg_data,
906 datafile_path=package_resource.path,
907 )
908 package_uid = package.package_uid
909 package.populate_license_fields()
910 yield package
911
912 root = package_resource.parent(codebase)
913 if root:
914 for pypi_res in cls.walk_pypi(resource=root, codebase=codebase):
915 if package_uid and package_uid not in pypi_res.for_packages:
916 package_adder(package_uid, pypi_res, codebase)
917 yield pypi_res
918
919 yield package_resource
920
921 yield from yield_dependencies_from_package_data(pkg_data, package_resource.path, package_uid)
922
923 yield package_resource
924
925 for lock_file in package_resource.siblings(codebase):
926 if lock_file.name == 'uv.lock':
927 yield from yield_dependencies_from_package_resource(lock_file, package_uid)
928
929 if package_uid and package_uid not in lock_file.for_packages:
930 package_adder(package_uid, lock_file, codebase)
931 yield lock_file
932
933
934class UvPyprojectTomlHandler(BaseUvPythonLayout):

Callers 1

assembleMethod · 0.45

Calls 9

has_parentMethod · 0.80
siblingsMethod · 0.80
from_package_dataMethod · 0.80
parentMethod · 0.80
walk_pypiMethod · 0.80
from_dictMethod · 0.45

Tested by

no test coverage detected