"""Script for parsing Dynamo DB formatted records from MR_ACTIVE table.""" from functools import partial import json import sys # Some shortcuts for dynamo types j = json.loads def get_dynamo_item(item, dynamo_type, default_value): """Shortcut - get DynamoDB value. Args: item (dict): DynamoDB json item dynamo_type (str): DynamoDB type default_value (type): default value to use Returns: parsed value """ return item.get(dynamo_type, default_value) s = partial(get_dynamo_item, dynamo_type='s', default_value='') m = partial(get_dynamo_item, dynamo_type='m', default_value={}) l = partial(get_dynamo_item, dynamo_type='l', default_value=[]) n = partial(get_dynamo_item, dynamo_type='n', default_value='') def dynamo_active_record_to_json(item): """Parse DynamoDB formatted json. Args: item (dict): DynamoDB json Returns: str: parsed JSON, converted to string """ parsed = {} for k, v in item.items(): parsed[k] = json.loads(v) data = { 'isrc': s(parsed.get('isrc')), 'territories': {}, 'locked_territories': {} } for terr, tuid_map in m(parsed.get('territories')).items(): if 'm' in tuid_map: tuid_map = {'l': [tuid_map]} tuids_list = [m(t).get('tuid', {}).get('n', '') for t in l(tuid_map)] data['territories'][terr] = tuids_list if parsed.get('locked_territories'): for terr, tuid_map in m(parsed.get('locked_territories')).items(): reason = m(tuid_map).get('reason', {}) data['locked_territories'][terr] = s(reason) return json.dumps(data) if __name__ == '__main__': while True: line = sys.stdin.readline() if not line: break try: obj = json.loads(line) print(dynamo_active_record_to_json(obj)) except: continue