| 322 | |
| 323 | @classmethod |
| 324 | def parse(cls, location, package_only=False): |
| 325 | with io.open(location, encoding='utf-8') as loc: |
| 326 | conda_metadata = json.load(loc) |
| 327 | |
| 328 | name = conda_metadata.get('name') |
| 329 | version = conda_metadata.get('version') |
| 330 | extracted_license_statement = conda_metadata.get('license') |
| 331 | download_url = conda_metadata.get('url') |
| 332 | |
| 333 | extra_data_fields = ['requested_spec', 'channel'] |
| 334 | package_file_fields = ['extracted_package_dir', 'files', 'package_tarball_full_path'] |
| 335 | other_package_fields = ['size', 'md5', 'sha256'] |
| 336 | |
| 337 | extra_data = {} |
| 338 | for metadata_field in extra_data_fields + package_file_fields: |
| 339 | extra_data[metadata_field] = conda_metadata.get(metadata_field) |
| 340 | |
| 341 | package_data = dict( |
| 342 | datasource_id=cls.datasource_id, |
| 343 | type=cls.default_package_type, |
| 344 | name=name, |
| 345 | version=version, |
| 346 | extracted_license_statement=extracted_license_statement, |
| 347 | download_url=download_url, |
| 348 | extra_data=extra_data, |
| 349 | ) |
| 350 | for package_field in other_package_fields: |
| 351 | package_data[package_field] = conda_metadata.get(package_field) |
| 352 | yield models.PackageData.from_data(package_data, package_only) |
| 353 | |
| 354 | |
| 355 | class CondaYamlHandler(BaseDependencyFileHandler): |