#!/bin/env python import boto3 import json import logging import os import model from botocore.exceptions import ClientError # example usage: # - delete Activities from db: # {"action": "del", "activities": [{"target1": "id-1"}, {"target2": "id-2"}]} def respond(logger, err=None, res=None): resp = { "status": "ok", "result": res } if err: resp['status'] = "error" resp['msg'] = str(err) logger.info(json.dumps(resp, cls=model.DecimalEncoder)) return resp def init_db(logger): _db = boto3.resource('dynamodb') activity_table_name = os.getenv('ACTIVITYHUB_MESSAGE_TABLE_NAME') try: msg_table = _db.Table(activity_table_name) msg_table.load() except ClientError as e: logger.error(f"error connecting dynamodb: {e}") raise return msg_table def lambda_handler(event, context): logger = logging.getLogger() logger.setLevel(logging.INFO) logger.info("Received event: " + json.dumps(event)) table = None try: table = init_db(logger) except Exception as e: return respond(logger, e, "error connecting to database") if event['action'] == 'del': result = {} for msg in event['activities']: for _target, _id in msg.items(): _key = f"{_target}-{_id}" try: _resp = table.delete_item( Key={'target_id': _target, 'activity_id': _id}) result[_key] = _resp except Exception as e: result[_key] = {"error": str(e)} return respond(logger, res=result) return respond(logger, res="nothing happend") if __name__ == '__main__': print('test')