Source code for ecstask.osp_eventhandler_v2.utilities.dynamodb_util

import datetime
import json
import logging
from decimal import Decimal

import time
from http import HTTPStatus

from pymorri.exceptions import MoriException

from .aws_client_util import AWSClientFactory
from pymorri.util.aws_utils import dynamodb_insert_row
from .sqs_util import write_messages_to_sqs

logger = logging.getLogger('ecstask.osp_eventhandler_v2')


[docs]def convert_float_to_decimal(payload): return json.loads(json.dumps(payload), parse_float=Decimal)
[docs]def convert_decimal_to_float(payload): return json.loads(json.dumps(payload))
[docs]def insert_payload_into_table(queue_name, table_name, payload, ttl=366): """ This method is used to insert payload into dynamodb table :param queue_name: (str) Standard SQS Queue where error detail needs to be pushed :param table_name: (str) table name for inserting payload :param payload:(dict) payload to inserted in DynamoDB :param ttl: (int) tim eto live """ try: payload['ttlattribute'] = ttl * 24 * 60 * 60 + int(time.time()) payload['lastUpdatedDateTime'] = f'{datetime.datetime.now()}' payload = convert_float_to_decimal(payload) logger.debug(f"Data to persist {payload}") AWSClientFactory.get_dynamodb_resource(table_name).put_item(Item=payload) logger.info(f"Data inserted into DynamoDB for PickTask: {payload['pickTaskId']}") except Exception as ex: logger.error(f"Exception while adding record into DynamoDB, error is {ex}") payload['errorDetail'] = f'Exception while adding record into DynamoDB, error is {ex}' payload = convert_decimal_to_float(payload) write_messages_to_sqs(queue_name, payload) raise MoriException(http_status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=f"DynamoDB failure while saving data to the table {table_name}. " f"Exception: {ex}")
[docs]def insert_error_into_table(table_name, payload, ttl=366): """ This method is used to insert payload into dynamodb table :param table_name: (str) table name for inserting payload :param payload:(dict) payload to inserted in DynamoDB :param ttl: (int) tim eto live """ if payload['orderId']: payload['ttlattribute'] = ttl * 24 * 60 * 60 + int(time.time()) payload['lastUpdatedDateTime'] = f'{datetime.datetime.now()}' dynamodb_insert_row(table_name, payload) logger.error(f"error data inserted into {table_name} for order id: {payload['orderId']}") else: raise MoriException(http_status_code=HTTPStatus.BAD_REQUEST, detail=f"error not inserted in {table_name} as no orderId.")