(cls, location, package_only=False)
| 657 | |
| 658 | @classmethod |
| 659 | def parse(cls, location, package_only=False): |
| 660 | with open(location, "rb") as fp: |
| 661 | toml_data = tomllib.load(fp) |
| 662 | |
| 663 | tool_data = toml_data.get('tool') |
| 664 | if not tool_data: |
| 665 | return |
| 666 | |
| 667 | poetry_data = tool_data.get('poetry') |
| 668 | if not poetry_data: |
| 669 | return |
| 670 | |
| 671 | name = poetry_data.get('name') |
| 672 | version = poetry_data.get('version') |
| 673 | description = poetry_data.get('description') or '' |
| 674 | description = description.strip() |
| 675 | |
| 676 | urls, extra_data = get_urls(metainfo=poetry_data, name=name, version=version, poetry=True) |
| 677 | |
| 678 | extracted_license_statement, license_file = get_declared_license(poetry_data) |
| 679 | if license_file: |
| 680 | extra_data['license_file'] = license_file |
| 681 | |
| 682 | dependencies = [] |
| 683 | parsed_deps = cls.parse_non_group_dependencies( |
| 684 | dependencies=poetry_data.get("dependencies", {}), |
| 685 | scope="dependencies", |
| 686 | ) |
| 687 | dependencies.extend(parsed_deps) |
| 688 | parsed_deps = cls.parse_non_group_dependencies( |
| 689 | dependencies=poetry_data.get("dev-dependencies", {}), |
| 690 | scope="dev-dependencies", |
| 691 | is_runtime=False, |
| 692 | ) |
| 693 | dependencies.extend(parsed_deps) |
| 694 | |
| 695 | for group_name, group_deps in poetry_data.get("group", {}).items(): |
| 696 | for name, requirement in group_deps.get("dependencies", {}).items(): |
| 697 | purl = PackageURL( |
| 698 | type=cls.default_package_type, |
| 699 | name=name, |
| 700 | ) |
| 701 | dependency = models.DependentPackage( |
| 702 | purl=purl.to_string(), |
| 703 | extracted_requirement=requirement, |
| 704 | scope=group_name, |
| 705 | is_runtime=False, |
| 706 | is_optional=False, |
| 707 | is_direct=True, |
| 708 | is_pinned=False, |
| 709 | ) |
| 710 | dependencies.append(dependency.to_dict()) |
| 711 | |
| 712 | package_data = dict( |
| 713 | datasource_id=cls.datasource_id, |
| 714 | type=cls.default_package_type, |
| 715 | primary_language='Python', |
| 716 | name=name, |
nothing calls this directly
no test coverage detected