xref: /aosp_15_r20/external/cronet/android/tools/license/metadata_dictionary.py (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Workerclass MetadataDictionary(dict):
2*6777b538SAndroid Build Coastguard Worker  """
3*6777b538SAndroid Build Coastguard Worker  This is a very simple class that prints out a textproto using a dictionary.
4*6777b538SAndroid Build Coastguard Worker  Realistically, we should not be re-inventing the wheel as we are doing here
5*6777b538SAndroid Build Coastguard Worker  and we should be using protobuf instead.
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker  TODO(b/360322121): Use protobuf generated classes instead of this.
8*6777b538SAndroid Build Coastguard Worker  """
9*6777b538SAndroid Build Coastguard Worker
10*6777b538SAndroid Build Coastguard Worker  def __init__(self, field_name):
11*6777b538SAndroid Build Coastguard Worker    super().__init__()
12*6777b538SAndroid Build Coastguard Worker    self.field_name = field_name
13*6777b538SAndroid Build Coastguard Worker
14*6777b538SAndroid Build Coastguard Worker  def _as_string(self, dict_items, width=2, depth=1):
15*6777b538SAndroid Build Coastguard Worker    str = self.field_name + " {\n"
16*6777b538SAndroid Build Coastguard Worker    for (key, value) in dict_items:
17*6777b538SAndroid Build Coastguard Worker      if not isinstance(value, MetadataDictionary):
18*6777b538SAndroid Build Coastguard Worker        str += (" " * width * depth) + f"{key}: {value}\n"
19*6777b538SAndroid Build Coastguard Worker      else:
20*6777b538SAndroid Build Coastguard Worker        str += (" " * width * depth) + value._as_string(value.items(), width,
21*6777b538SAndroid Build Coastguard Worker                                                        depth + 1)
22*6777b538SAndroid Build Coastguard Worker    str += (" " * width * (depth - 1)) + "}\n"
23*6777b538SAndroid Build Coastguard Worker    return str
24*6777b538SAndroid Build Coastguard Worker
25*6777b538SAndroid Build Coastguard Worker  def __repr__(self):
26*6777b538SAndroid Build Coastguard Worker    return self._as_string(self.items())
27