Source code for lambdas.utils.dynamodb_util
import os
import logging
from pymorri.exceptions import MoriException
from pymorri.util.aws_utils import dynamodb_get_rows
from pymorri.util.aws_utils import dynamodb_update_item
from app.lambdas.utils.constants import STOREPICK_RANGE_SPACE_HANDLER
from pymorri.util.log_utils import setup_json_formatter_handler, setup_message_format
logger = logging.getLogger(__name__)
logger.setLevel(level=logging.INFO)
setup_json_formatter_handler(
STOREPICK_RANGE_SPACE_HANDLER,
logger,
type="DYNAMODB",
event_type="range")
[docs]def last_event_id(config_details: dict, event_type: str):
"""
This function is used to get last_event_id(watermark) from dynamo_db_table to process further
:param event_type: This argument is used for reding data from dynamoDB table value is
:param config_details: config details
Returns: get last event id
"""
try:
last_event_id, time_stamp = None, None
if "space" == event_type:
items = dynamodb_get_rows(config_details.get(
'EVENTS_WATERMARKS_TABLE'), "event", 'space')
else:
items = dynamodb_get_rows(config_details.get(
'EVENTS_WATERMARKS_TABLE'), "event", 'range')
for item in items:
last_event_id = item.get('last_event_id')
break
return last_event_id
except Exception as ex:
logger.error(
setup_message_format(
message=f"Failed to fetch last event id {last_event_id} {ex}"))
raise MoriException(detail=ex)
[docs]def update_last_event(
config_details,
event_entity: str,
last_event_id: str,
updated_timestamp: str):
"""
This function is used to update the
watermark dynamodb table with last event id from range v1 API call.
:param config_details: config details
:param event_entity: 'range' or 'space' events
:param last_event_id: last event id to update in dynamoDb table
:param updated_timestamp: time stamp to update
"""
try:
if "space" == event_entity:
db_keys_dict = {"event": "space"}
else:
db_keys_dict = {"event": "range"}
expression = f"SET last_event_id=:last_event_id, update_timestamp=:update_timestamp,event_source=:event_source"
dynamodb_update_item(
config_details.get('EVENTS_WATERMARKS_TABLE'), db_keys_dict, expression, {
':last_event_id': last_event_id, ":update_timestamp": updated_timestamp,":event_source": config_details['GETRANGEANDSPACEEVENT_URL']})
except Exception as ex:
logger.error(
setup_message_format(
message=f"Failed to update last event id {last_event_id} {ex}"))
raise MoriException(detail=ex)