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