#!/bin/env python import boto3 import json import os import uuid from boto3.dynamodb.conditions import Attr, Key from botocore.exceptions import ClientError # example usage: # - add a new source key pair: # {"action": "add", "name": "", "maintainer": "", "psk": ""} # will be randomly generated if not specified # - query for an existing key pair: # {"action": "query", "name": ""} # - delete one source from db: # {"action": "del", "name": ""} def respond(err=None, res=None): resp = { "status": "ok", "result": res } if err: resp['status'] = "error" resp['msg'] = str(err) return resp def init_db(): _db = boto3.resource('dynamodb') source_table_name = os.getenv('ACTIVITYHUB_SOURCE_TABLE_NAME') try: src_table = _db.Table(source_table_name) #src_table = _db.Table('activity-hub-messages') src_table.load() except ClientError as e: print(f"error connecting dynamodb: {e}") raise return src_table def lambda_handler(event, context): print("Received event: " + json.dumps(event)) table = None try: table = init_db() except Exception as e: return respond(e, "error connecting to database") if event['action'] == 'add': _item = { 'name': event['name'].lower(), 'maintainer': event['maintainer'], } try: _item['psk'] = event['psk'] except KeyError: _item['psk'] = uuid.uuid4().hex try: table.put_item( Item=_item, ConditionExpression='attribute_not_exists(psk)') return respond(res=_item) except Exception as e: return respond(e, "error adding item to database") elif event['action'] == 'query': try: result = table.get_item(Key={'name': event['name']}) return respond(res=result['Item']) except Exception as e: return respond(e, "error querying item from database") elif event['action'] == 'del': try: result = table.delete_item(Key={'name': event['name']}) #result = table.delete_item(Key=event['key']) return respond(res=result) except Exception as e: return respond(e, "error deleting item from database") return respond(res="nothing happend") if __name__ == '__main__': print('test')