(cls, package_data, resource, codebase, package_adder)
| 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 | |
| 934 | class UvPyprojectTomlHandler(BaseUvPythonLayout): |
no test coverage detected