Yield PackageData from a YAML Podfile.lock.
(cls, location, package_only=False)
| 386 | |
| 387 | @classmethod |
| 388 | def parse(cls, location, package_only=False): |
| 389 | """ |
| 390 | Yield PackageData from a YAML Podfile.lock. |
| 391 | """ |
| 392 | with open(location) as pfl: |
| 393 | data = saneyaml.load(pfl) |
| 394 | |
| 395 | dependency_data = PodfileLockDataByPurl.collect_dependencies_data_by_purl( |
| 396 | data=data, |
| 397 | package_type=cls.default_package_type, |
| 398 | ) |
| 399 | |
| 400 | dependencies = [] |
| 401 | |
| 402 | pods = data.get('PODS') or [] |
| 403 | for pod in pods: |
| 404 | # dependencies with mappings have direct dependencies |
| 405 | if isinstance(pod, dict): |
| 406 | for main_pod, dep_pods in pod.items(): |
| 407 | dependencies_for_resolved = cls.get_dependencies_for_resolved_package( |
| 408 | dependency_data=dependency_data, |
| 409 | dep_pods=dep_pods, |
| 410 | ) |
| 411 | dependency = cls.get_pods_dependency_with_resolved_package( |
| 412 | dependency_data=dependency_data, |
| 413 | main_pod=main_pod, |
| 414 | dependencies_for_resolved=dependencies_for_resolved, |
| 415 | ) |
| 416 | dependencies.append(dependency) |
| 417 | |
| 418 | # These packages have no direct dependencies |
| 419 | elif isinstance(pod, str): |
| 420 | dependency = cls.get_pods_dependency_with_resolved_package( |
| 421 | dependency_data, pod, |
| 422 | ) |
| 423 | dependencies.append(dependency) |
| 424 | |
| 425 | podfile_checksum = data.get('PODFILE CHECKSUM') |
| 426 | cocoapods_version = data.get('COCOAPODS') |
| 427 | extra_data = { |
| 428 | 'cocoapods': cocoapods_version, |
| 429 | 'podfile_checksum': podfile_checksum, |
| 430 | } |
| 431 | |
| 432 | package_data = dict( |
| 433 | datasource_id=cls.datasource_id, |
| 434 | type=cls.default_package_type, |
| 435 | primary_language=cls.default_primary_language, |
| 436 | dependencies=dependencies, |
| 437 | extra_data=extra_data, |
| 438 | ) |
| 439 | yield models.PackageData.from_data(package_data, package_only) |
| 440 | |
| 441 | |
| 442 | class PodfileLockDataByPurl: |
nothing calls this directly
no test coverage detected