1from typing import Dict, List 2import license_utils 3import metadata_dictionary 4from license_type import LicenseType 5 6 7class Metadata: 8 def __init__(self, metadata_dict: Dict[str, str | List[str]]): 9 self.metadata = metadata_dict 10 11 def get_name(self) -> str: 12 return self.metadata["Name"] 13 14 def get_url(self) -> str: 15 return self.metadata["URL"] 16 17 def get_version(self): 18 if not self._get_version() or self._get_version() in ["0", "unknown", 19 "N/A"]: 20 # This is a heuristic try to avoid putting a version when the version 21 # in the README.chromium does not make any sense. 22 return self._get_revision() 23 return self._get_version() 24 25 def _get_version_control(self): 26 """Returns the VCS of the URL provided if possible, 27 otherwise None is returned.""" 28 if "git" in self.get_url() or "googlesource" in self.get_url(): 29 return "Git" 30 elif "hg" in self.get_url(): 31 return "Hg" 32 return None 33 34 def _create_identifier_block(self) -> metadata_dictionary.MetadataDictionary: 35 identifier_dictionary = metadata_dictionary.MetadataDictionary("identifier") 36 identifier_dictionary["value"] = f"\"{self.get_url()}\"" 37 identifier_dictionary["type"] = f"\"{self._get_version_control()}\"" 38 if self.get_version(): 39 identifier_dictionary["version"] = f"\"{self.get_version()}\"" 40 return identifier_dictionary 41 42 def _get_version(self) -> str: 43 return self.metadata.get("Version", None) 44 45 def _get_revision(self) -> str: 46 return self.metadata.get("Revision", None) 47 48 def get_licenses(self) -> List[str]: 49 return self.metadata["License"] 50 51 def get_license_file_path(self) -> str: 52 return self.metadata.get("License File", [None])[0] 53 54 def get_license_type(self) -> LicenseType: 55 return license_utils.get_most_restrictive_type(self.get_licenses()) 56 57 def to_android_metadata(self): 58 third_party_dict = metadata_dictionary.MetadataDictionary("third_party") 59 third_party_dict["license_type"] = self.get_license_type().name 60 if self.get_version(): 61 third_party_dict["version"] = f"\"{self.get_version()}\"" 62 63 if self._get_version_control(): 64 third_party_dict["identifier_primary"] = self._create_identifier_block() 65 else: 66 third_party_dict["homepage"] = f"\"{self.get_url()}\"" 67 68 return "\n".join( 69 [f"name: \"{self.get_name()}\"", f"{third_party_dict}"]) 70