MCPcopy Create free account
hub / github.com/aboutcode-org/scancode-toolkit / parse

Method parse

src/packagedcode/cargo.py:188–263  ·  view source on GitHub ↗
(cls, location, package_only=False)

Source from the content-addressed store, hash-verified

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(

Callers

nothing calls this directly

Calls 7

dependency_mapperFunction · 0.85
from_dataMethod · 0.80
get_partiesFunction · 0.70
getMethod · 0.65
loadMethod · 0.45
copyMethod · 0.45
popMethod · 0.45

Tested by

no test coverage detected