Skip to content

Commit 08bd14c

Browse files
committed
DynamoDb
1 parent ca242f0 commit 08bd14c

File tree

2 files changed

+69
-3
lines changed

2 files changed

+69
-3
lines changed

lambdas/shared/src/common/clients.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import os
22
import logging
33
from boto3 import client as boto3_client
4-
# from botocore.config import Config
5-
64

75
logging.basicConfig(level="INFO")
86
logger = logging.getLogger()
@@ -19,3 +17,17 @@
1917
# boto_config = Config(region_name=REGION_NAME)
2018
# secretsmanager_client = boto3_client("secretsmanager", config=boto_config)
2119
secrets_manager_client = boto3_client("secretsmanager", region_name=REGION_NAME)
20+
dynamodb_client = boto3_client("dynamodb", region_name=REGION_NAME)
21+
22+
23+
def get_delta_table(table_name):
24+
"""
25+
Initialize the DynamoDB table resource with exception handling.
26+
"""
27+
try:
28+
logger.info("Initializing table: %s", table_name)
29+
delta_table = dynamodb_client.Table(table_name)
30+
except Exception as e:
31+
logger.exception("Error initializing Delta Table")
32+
raise e
33+
return delta_table

lambdas/shared/tests/test_common/test_clients.py

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import unittest
2-
from unittest.mock import patch
2+
from unittest.mock import patch, MagicMock
33
import common.clients as clients
4+
from common.clients import get_delta_table
45
import importlib
56

67

@@ -61,3 +62,56 @@ def test_logging_initialization(self):
6162
self.mock_logging.assert_called_once_with()
6263
self.assertTrue(hasattr(clients, 'logger'))
6364
clients.logger.setLevel.assert_any_call("INFO")
65+
66+
67+
class TestGetDeltaTable(unittest.TestCase):
68+
69+
AWS_REGION = "eu-west-2" # Add this missing constant
70+
71+
def setUp(self):
72+
self.boto3_client_patch = patch("boto3.client")
73+
self.mock_boto3_client = self.boto3_client_patch.start()
74+
75+
# Mock the specific logger instance used in the module
76+
self.logger_patch = patch("common.clients.logger")
77+
self.mock_logger = self.logger_patch.start()
78+
79+
self.getenv_patch = patch("os.getenv")
80+
self.mock_getenv = self.getenv_patch.start()
81+
self.mock_getenv.side_effect = lambda key, default=None: {
82+
"AWS_REGION": self.AWS_REGION
83+
}.get(key, default)
84+
85+
self.mock_dynamodb_client = patch("common.clients.dynamodb_client").start()
86+
87+
def tearDown(self):
88+
patch.stopall()
89+
90+
def test_get_delta_table_success(self):
91+
# Create a mock table object
92+
table_name = "abc"
93+
mock_table = MagicMock()
94+
self.mock_dynamodb_client.Table.return_value = mock_table
95+
96+
# Call the function
97+
table = get_delta_table(table_name)
98+
99+
self.mock_dynamodb_client.Table.assert_called_once_with(table_name)
100+
self.assertEqual(table, mock_table)
101+
# Verify the success logging
102+
self.mock_logger.info.assert_called_once_with("Initializing table: %s", table_name)
103+
104+
def test_get_delta_table_failure(self):
105+
# Simulate exception when accessing Table
106+
msg = "DynamoDB failure"
107+
self.mock_dynamodb_client.Table.side_effect = Exception(msg)
108+
table_name = "abc"
109+
110+
with self.assertRaises(Exception) as context:
111+
get_delta_table(table_name)
112+
113+
self.assertEqual(str(context.exception), msg)
114+
# This should now work - mocking the instance method
115+
self.mock_logger.exception.assert_called_once_with("Error initializing Delta Table")
116+
# Also verify info logging happened before the exception
117+
self.mock_logger.info.assert_called_once_with("Initializing table: %s", table_name)

0 commit comments

Comments
 (0)