""" Update DynamoDb ==================== This Script Updates DynamoDb Table in the same way as lambda does. It takes data from arguments instead S3 event running example: python cli_dynamodb_dev.py -r all -u 10303L -p 217 -f 000000_0 """ import argparse import os import boto3 from lambda_functions import update_status_for_avro def _dynamodb_update(*args): """Dynamo Db update script, for dev env. where not configured AWS Lambda and S3 Events """ s3_bucket = os.getenv('ACCOUNTING_STATEMENT_EXPORT_BUCKET') dynamodb_table = os.getenv('ACCOUNTING_STATEMENT_EXPORT_TABLE') parser = argparse.ArgumentParser(description='Dynamo Db Dev Update Util') parser.add_argument('-b', '--bucket', default=s3_bucket, help='S3 bucket with Avro files') parser.add_argument('-t', '--tablename', default=dynamodb_table, help='DynamoDb Table with Avro records') parser.add_argument('-r', '--transactiontypes', help=' Transaction Types, e.g: all') parser.add_argument('-u', '--useridtype', help=' User Id Type, e.g: 10303L') parser.add_argument('-p', '--periodid', help=' Period Id, e.g: 199') parser.add_argument('-f', '--filename', help=' Filename, e.g: 000037_0') args = parser.parse_args(args) if args else parser.parse_args() period_ids = args.periodid trans_types = args.transactiontypes user_ids = 'all' user_id_type = args.useridtype filename = args.filename bucket = args.bucket table_name = args.tablename key = ( 'schematized_files/{}_label_{}_{}_month/' 'user_id_type={}/{}').format(period_ids, user_ids, trans_types, user_id_type, filename) user_params = update_status_for_avro.KEY_FORMAT.format( period_ids=period_ids, trans_types=trans_types) s3_path = 's3://{}/{}'.format(bucket, key).format(bucket, key) dynamodb = boto3.client('dynamodb') try: # Update dynamodb items dynamodb.put_item( TableName=table_name, Item={ 'user_id_type': { 'S': user_id_type }, 'user_params': { 'S': user_params }, 'file_type': { 'S': 'AVRO' }, 'period_ids': { 'S': period_ids }, 's3_path': { 'S': s3_path }, 'status': { 'S': 'GENERATED' } } ) except Exception as e: print( 'Error saving status for key: {} bucket: {}.'.format(key, bucket)) raise e if __name__ == '__main__': _dynamodb_update()