xref: /aosp_15_r20/external/cronet/android/tools/license/metadata.py (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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