1*6777b538SAndroid Build Coastguard Workerfrom typing import Dict, List 2*6777b538SAndroid Build Coastguard Worker 3*6777b538SAndroid Build Coastguard Worker 4*6777b538SAndroid Build Coastguard Workerclass MapperException(Exception): 5*6777b538SAndroid Build Coastguard Worker # Raised when the Mapper expectation equality fails. 6*6777b538SAndroid Build Coastguard Worker pass 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Workerclass Mapper: 10*6777b538SAndroid Build Coastguard Worker """ 11*6777b538SAndroid Build Coastguard Worker This will overwrite the value of the metadata field whose key is |dictionary_key| 12*6777b538SAndroid Build Coastguard Worker with the value declared in |write_value|, before the overwrite happens, it 13*6777b538SAndroid Build Coastguard Worker will check if the expected_value matches the value in the metadata field. 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker Passing None to the |expected_value| will expect that the key does not exist 16*6777b538SAndroid Build Coastguard Worker at all in the metadata. 17*6777b538SAndroid Build Coastguard Worker """ 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker def __init__(self, dictionary_key: str, expected_value, write_value): 20*6777b538SAndroid Build Coastguard Worker self._key = dictionary_key 21*6777b538SAndroid Build Coastguard Worker self._expected_value = expected_value 22*6777b538SAndroid Build Coastguard Worker self._write_value = write_value 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker def write(self, 25*6777b538SAndroid Build Coastguard Worker metadata: Dict[str, str | List[str]]) -> None: 26*6777b538SAndroid Build Coastguard Worker """ 27*6777b538SAndroid Build Coastguard Worker Writes the value |write_value| which is passed in the constructor of 28*6777b538SAndroid Build Coastguard Worker the Mapper to the |metadata| provided. Before the write operation happens, 29*6777b538SAndroid Build Coastguard Worker a check will occur to make sure that the value being overwritten matches 30*6777b538SAndroid Build Coastguard Worker the |expected_value| that was passed in the constructor. 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker If |None| was passed as |expected_value| then the expectation is that 33*6777b538SAndroid Build Coastguard Worker the |key| should not exist in metadata.keys(). 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker :param metadata: A dictionary whose field with key |key| will be overwritten. 36*6777b538SAndroid Build Coastguard Worker :raises: MapperException if the expectation check has failed. 37*6777b538SAndroid Build Coastguard Worker """ 38*6777b538SAndroid Build Coastguard Worker if self._expected_value is None and self._key in metadata: 39*6777b538SAndroid Build Coastguard Worker # We expected the key not to exist but it existed. 40*6777b538SAndroid Build Coastguard Worker raise MapperException( 41*6777b538SAndroid Build Coastguard Worker f"Expected absence of key `{self._key}` but " 42*6777b538SAndroid Build Coastguard Worker f"found {metadata[self._key]}") 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker if self._key not in metadata.keys() and self._expected_value: 45*6777b538SAndroid Build Coastguard Worker # We expected a value but the key didn't exist, throw! 46*6777b538SAndroid Build Coastguard Worker raise MapperException(f"Expected presence of key {self._key} but was" 47*6777b538SAndroid Build Coastguard Worker f"not found.") 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker if self._key in metadata.keys() and metadata[ 50*6777b538SAndroid Build Coastguard Worker self._key] != self._expected_value: 51*6777b538SAndroid Build Coastguard Worker # We expected the value to match but it didn't. 52*6777b538SAndroid Build Coastguard Worker raise MapperException( 53*6777b538SAndroid Build Coastguard Worker f"Expected \"{self._expected_value}\" but found" 54*6777b538SAndroid Build Coastguard Worker f" {metadata[self._key]} in the README.chromium") 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker metadata[self._key] = self._write_value 57