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