(cls, location, package_only=False)
| 186 | |
| 187 | @classmethod |
| 188 | def parse(cls, location, package_only=False): |
| 189 | with open(location, "rb") as fp: |
| 190 | package_data_toml = tomllib.load(fp) |
| 191 | workspace = package_data_toml.get('workspace', {}) |
| 192 | core_package_data = package_data_toml.get('package', {}) |
| 193 | extra_data = {} |
| 194 | if workspace: |
| 195 | extra_data['workspace'] = workspace |
| 196 | |
| 197 | package_data = core_package_data.copy() |
| 198 | for key, value in package_data.items(): |
| 199 | if isinstance(value, dict) and 'workspace' in value: |
| 200 | core_package_data.pop(key) |
| 201 | extra_data[key] = 'workspace' |
| 202 | |
| 203 | name = core_package_data.get('name') |
| 204 | version = core_package_data.get('version') |
| 205 | |
| 206 | description = core_package_data.get('description') or '' |
| 207 | description = description.strip() |
| 208 | |
| 209 | authors = core_package_data.get('authors') or [] |
| 210 | parties = list(get_parties(person_names=authors, party_role='author')) |
| 211 | |
| 212 | extracted_license_statement = core_package_data.get('license') |
| 213 | # TODO: load as a notice_text |
| 214 | license_file = core_package_data.get('license-file') |
| 215 | |
| 216 | keywords = core_package_data.get('keywords') or [] |
| 217 | categories = core_package_data.get('categories') or [] |
| 218 | keywords.extend(categories) |
| 219 | |
| 220 | # cargo dependencies are complex and can be overriden at multiple levels |
| 221 | dependencies = [] |
| 222 | for key, value in package_data_toml.items(): |
| 223 | if key.endswith('dependencies'): |
| 224 | dependencies.extend(dependency_mapper(dependencies=value, scope=key)) |
| 225 | |
| 226 | # TODO: add file refs: |
| 227 | # - readme, include and exclude |
| 228 | |
| 229 | vcs_url = core_package_data.get('repository') |
| 230 | homepage_url = core_package_data.get('homepage') |
| 231 | repository_homepage_url = name and f'https://crates.io/crates/{name}' |
| 232 | repository_download_url = name and version and f'https://crates.io/api/v1/crates/{name}/{version}/download' |
| 233 | api_data_url = name and f'https://crates.io/api/v1/crates/{name}' |
| 234 | |
| 235 | extra_data_mappings = { |
| 236 | "documentation": "documentation_url", |
| 237 | "rust-version": "rust_version", |
| 238 | "edition": "rust_edition", |
| 239 | } |
| 240 | for cargo_attribute, extra_attribute in extra_data_mappings.items(): |
| 241 | value = core_package_data.get(cargo_attribute) |
| 242 | if value: |
| 243 | extra_data[extra_attribute] = value |
| 244 | |
| 245 | package_data = dict( |
nothing calls this directly
no test coverage detected