Source code for bi_etl.boto3_helper.dynamodb

"""
Created on March 28, 2022

@author: 
"""
from typing import *

from bi_etl.boto3_helper.session import Boto3_Base


[docs] class DynamoDB(Boto3_Base): SERVICE = 'dynamodb'
[docs] def get_dynamo_table( self, dynamo_table_name, region_name: str = None ): if region_name is not None: self.region_name = region_name dynamodb = self.resource return dynamodb.Table(dynamo_table_name)
[docs] @staticmethod def query_dynamo_table(dynamo_table, scan_args_list: Iterable[dict]) -> Iterable[dict]: data = [] for scan_args in scan_args_list: tbl_data = dynamo_table.query(**scan_args) data.extend(tbl_data['Items']) while 'LastEvaluatedKey' in tbl_data: tbl_data = dynamo_table.query(ExclusiveStartKey=tbl_data['LastEvaluatedKey'], **scan_args) data.extend(tbl_data['Items']) return data
[docs] def query_dynamo_table_by_name( self, dynamo_table_name, region_name, scan_args_list: Iterable[dict] ) -> Iterable[dict]: dynamo_table = self.get_dynamo_table(dynamo_table_name, region_name=region_name) return self.query_dynamo_table(dynamo_table, scan_args_list)
[docs] def scan_dynamo_table_by_name(self, dynamo_table_name, region_name): dynamo_table = self.get_dynamo_table(dynamo_table_name, region_name=region_name) return self.scan_dynamo_table(dynamo_table)
[docs] def scan_dynamo_table(self, dynamo_table): data = [] tbl_data = dynamo_table.scan() data.extend(tbl_data['Items']) return data