(cls, package_data, resource, codebase, package_adder)
| 50 | class BaseSwiftDatafileHandler(models.DatafileHandler): |
| 51 | @classmethod |
| 52 | def assemble(cls, package_data, resource, codebase, package_adder): |
| 53 | swift_manifest_resource = None |
| 54 | swift_show_dependencies_resource = None |
| 55 | swift_resolved_package_resource = None |
| 56 | processed_package = None |
| 57 | add_datafile_paths = [] |
| 58 | add_datasource_ids = [] |
| 59 | processed_dependencies = [] |
| 60 | |
| 61 | for r in resource.siblings(codebase): |
| 62 | if r.name in ("Package.swift.json", "Package.swift.deplock"): |
| 63 | swift_manifest_resource = r |
| 64 | elif r.name in ("Package.resolved", ".package.resolved"): |
| 65 | swift_resolved_package_resource = r |
| 66 | elif r.name == "swift-show-dependencies.deplock": |
| 67 | swift_show_dependencies_resource = r |
| 68 | |
| 69 | # If only Package.resolved is available then yield all dependency as package. |
| 70 | if ( |
| 71 | not swift_manifest_resource |
| 72 | and not swift_show_dependencies_resource |
| 73 | and resource.name in ("Package.resolved", ".package.resolved") |
| 74 | ): |
| 75 | processed_package = package_data |
| 76 | processed_dependencies = package_data.dependencies |
| 77 | # If no manifest but have dependency graph from `deplock` then use it construct top-level package. |
| 78 | elif ( |
| 79 | not swift_manifest_resource |
| 80 | and resource.name == "swift-show-dependencies.deplock" |
| 81 | ): |
| 82 | processed_package = package_data |
| 83 | processed_dependencies = package_data.dependencies |
| 84 | # If manifest is available then use the manifest to construct top-level package. |
| 85 | elif swift_manifest_resource and resource.name in ( |
| 86 | "Package.swift.json", |
| 87 | "Package.swift.deplock", |
| 88 | ): |
| 89 | processed_dependencies = package_data.dependencies |
| 90 | # Dependencies from `swift-show-dependencies.deplock` supersedes dependencies from other datafiles. |
| 91 | if swift_show_dependencies_resource: |
| 92 | swift_show_dependencies_package_data = models.PackageData.from_dict( |
| 93 | swift_show_dependencies_resource.package_data[0] |
| 94 | ) |
| 95 | processed_dependencies = ( |
| 96 | swift_show_dependencies_package_data.dependencies |
| 97 | ) |
| 98 | # Use dependencies from `Package.resolved` when `swift-show-dependencies.deplock` is not present. |
| 99 | elif swift_resolved_package_resource: |
| 100 | swift_resolved_package_data = ( |
| 101 | swift_resolved_package_resource.package_data |
| 102 | ) |
| 103 | |
| 104 | resolved_dependencies = [] |
| 105 | for package in swift_resolved_package_data: |
| 106 | version = package.get("version") |
| 107 | name = package.get("name") |
| 108 | |
| 109 | purl = PackageURL( |
nothing calls this directly
no test coverage detected