Skip to content

Commit de842a8

Browse files
committed
feat: use botocore.config.Config for parameter providers
1 parent e6416c0 commit de842a8

File tree

4 files changed

+52
-50
lines changed

4 files changed

+52
-50
lines changed

aws_lambda_powertools/utilities/parameters/dynamodb.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import boto3
99
from boto3.dynamodb.conditions import Key
10+
from botocore.config import Config
1011

1112
from .base import BaseProvider
1213

@@ -21,16 +22,14 @@ class DynamoDBProvider(BaseProvider):
2122
value_attr = None
2223

2324
def __init__(
24-
self, table_name: str, key_attr: str = "id", value_attr: str = "value", region: Optional[str] = None,
25+
self, table_name: str, key_attr: str = "id", value_attr: str = "value", config: Optional[Config] = None,
2526
):
2627
"""
2728
Initialize the DynamoDB client
2829
"""
2930

30-
client_kwargs = {}
31-
if region:
32-
client_kwargs["region_name"] = region
33-
self.table = boto3.resource("dynamodb", **client_kwargs).Table(table_name)
31+
config = config or Config()
32+
self.table = boto3.resource("dynamodb", config=config).Table(table_name)
3433

3534
self.key_attr = key_attr
3635
self.value_attr = value_attr

aws_lambda_powertools/utilities/parameters/secrets.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from typing import Dict, Optional, Union
77

88
import boto3
9+
from botocore.config import Config
910

1011
from .base import DEFAULT_PROVIDERS, BaseProvider
1112

@@ -17,16 +18,14 @@ class SecretsProvider(BaseProvider):
1718

1819
client = None
1920

20-
def __init__(self, region: Optional[str] = None):
21+
def __init__(self, config: Optional[Config] = None):
2122
"""
2223
Initialize the Secrets Manager client
2324
"""
2425

25-
client_kwargs = {}
26-
if region:
27-
client_kwargs["region_name"] = region
26+
config = config or Config()
2827

29-
self.client = boto3.client("secretsmanager", **client_kwargs)
28+
self.client = boto3.client("secretsmanager", config=config)
3029

3130
super().__init__()
3231

aws_lambda_powertools/utilities/parameters/ssm.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from typing import Dict, Optional, Union
77

88
import boto3
9+
from botocore.config import Config
910

1011
from .base import DEFAULT_PROVIDERS, BaseProvider
1112

@@ -18,17 +19,14 @@ class SSMProvider(BaseProvider):
1819
client = None
1920

2021
def __init__(
21-
self, region: Optional[str] = None,
22+
self, config: Optional[Config] = None,
2223
):
2324
"""
2425
Initialize the SSM Parameter Store client
2526
"""
2627

27-
client_kwargs = {}
28-
if region:
29-
client_kwargs["region_name"] = region
30-
31-
self.client = boto3.client("ssm", **client_kwargs)
28+
config = config or Config()
29+
self.client = boto3.client("ssm", config=config)
3230

3331
super().__init__()
3432

tests/functional/test_utilities_parameters.py

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import pytest
99
from boto3.dynamodb.conditions import Key
1010
from botocore import stub
11+
from botocore.config import Config
1112

1213
from aws_lambda_powertools.utilities import parameters
1314
from aws_lambda_powertools.utilities.parameters.base import BaseProvider, ExpirableValue
@@ -30,15 +31,20 @@ def mock_version():
3031
return random.randrange(1, 1000)
3132

3233

33-
def test_dynamodb_provider_get(mock_name, mock_value):
34+
@pytest.fixture(scope="module")
35+
def config():
36+
return Config(region_name="us-east-1")
37+
38+
39+
def test_dynamodb_provider_get(mock_name, mock_value, config):
3440
"""
3541
Test DynamoDBProvider.get() with a non-cached value
3642
"""
3743

3844
table_name = "TEST_TABLE"
3945

4046
# Create a new provider
41-
provider = parameters.DynamoDBProvider(table_name, region="us-east-1")
47+
provider = parameters.DynamoDBProvider(table_name, config=config)
4248

4349
# Stub the boto3 client
4450
stubber = stub.Stubber(provider.table.meta.client)
@@ -56,9 +62,9 @@ def test_dynamodb_provider_get(mock_name, mock_value):
5662
stubber.deactivate()
5763

5864

59-
def test_dynamodb_provider_get_default_region(monkeypatch, mock_name, mock_value):
65+
def test_dynamodb_provider_get_default_config(monkeypatch, mock_name, mock_value):
6066
"""
61-
Test DynamoDBProvider.get() without setting a region
67+
Test DynamoDBProvider.get() without setting a config
6268
"""
6369

6470
monkeypatch.setenv("AWS_DEFAULT_REGION", "us-east-1")
@@ -84,15 +90,15 @@ def test_dynamodb_provider_get_default_region(monkeypatch, mock_name, mock_value
8490
stubber.deactivate()
8591

8692

87-
def test_dynamodb_provider_get_cached(mock_name, mock_value):
93+
def test_dynamodb_provider_get_cached(mock_name, mock_value, config):
8894
"""
8995
Test DynamoDBProvider.get() with a cached value
9096
"""
9197

9298
table_name = "TEST_TABLE"
9399

94100
# Create a new provider
95-
provider = parameters.DynamoDBProvider(table_name, region="us-east-1")
101+
provider = parameters.DynamoDBProvider(table_name, config=config)
96102

97103
# Inject value in the internal store
98104
provider.store[(mock_name, None)] = ExpirableValue(mock_value, datetime.now() + timedelta(seconds=60))
@@ -110,15 +116,15 @@ def test_dynamodb_provider_get_cached(mock_name, mock_value):
110116
stubber.deactivate()
111117

112118

113-
def test_dynamodb_provider_get_expired(mock_name, mock_value):
119+
def test_dynamodb_provider_get_expired(mock_name, mock_value, config):
114120
"""
115121
Test DynamoDBProvider.get() with a cached but expired value
116122
"""
117123

118124
table_name = "TEST_TABLE"
119125

120126
# Create a new provider
121-
provider = parameters.DynamoDBProvider(table_name, region="us-east-1")
127+
provider = parameters.DynamoDBProvider(table_name, config=config)
122128

123129
# Inject value in the internal store
124130
provider.store[(mock_name, None)] = ExpirableValue(mock_value, datetime.now() - timedelta(seconds=60))
@@ -139,7 +145,7 @@ def test_dynamodb_provider_get_expired(mock_name, mock_value):
139145
stubber.deactivate()
140146

141147

142-
def test_dynamodb_provider_get_multiple(mock_name, mock_value):
148+
def test_dynamodb_provider_get_multiple(mock_name, mock_value, config):
143149
"""
144150
Test DynamoDBProvider.get_multiple() with a non-cached path
145151
"""
@@ -148,7 +154,7 @@ def test_dynamodb_provider_get_multiple(mock_name, mock_value):
148154
table_name = "TEST_TABLE"
149155

150156
# Create a new provider
151-
provider = parameters.DynamoDBProvider(table_name, region="us-east-1")
157+
provider = parameters.DynamoDBProvider(table_name, config=config)
152158

153159
# Stub the boto3 client
154160
stubber = stub.Stubber(provider.table.meta.client)
@@ -175,7 +181,7 @@ def test_dynamodb_provider_get_multiple(mock_name, mock_value):
175181
stubber.deactivate()
176182

177183

178-
def test_dynamodb_provider_get_multiple_next_token(mock_name, mock_value):
184+
def test_dynamodb_provider_get_multiple_next_token(mock_name, mock_value, config):
179185
"""
180186
Test DynamoDBProvider.get_multiple() with a non-cached path
181187
"""
@@ -184,7 +190,7 @@ def test_dynamodb_provider_get_multiple_next_token(mock_name, mock_value):
184190
table_name = "TEST_TABLE"
185191

186192
# Create a new provider
187-
provider = parameters.DynamoDBProvider(table_name, region="us-east-1")
193+
provider = parameters.DynamoDBProvider(table_name, config=config)
188194

189195
# Stub the boto3 client
190196
stubber = stub.Stubber(provider.table.meta.client)
@@ -228,13 +234,13 @@ def test_dynamodb_provider_get_multiple_next_token(mock_name, mock_value):
228234
stubber.deactivate()
229235

230236

231-
def test_ssm_provider_get(mock_name, mock_value, mock_version):
237+
def test_ssm_provider_get(mock_name, mock_value, mock_version, config):
232238
"""
233239
Test SSMProvider.get() with a non-cached value
234240
"""
235241

236242
# Create a new provider
237-
provider = parameters.SSMProvider(region="us-east-1")
243+
provider = parameters.SSMProvider(config=config)
238244

239245
# Stub the boto3 client
240246
stubber = stub.Stubber(provider.client)
@@ -263,9 +269,9 @@ def test_ssm_provider_get(mock_name, mock_value, mock_version):
263269
stubber.deactivate()
264270

265271

266-
def test_ssm_provider_get_default_region(monkeypatch, mock_name, mock_value, mock_version):
272+
def test_ssm_provider_get_default_config(monkeypatch, mock_name, mock_value, mock_version):
267273
"""
268-
Test SSMProvider.get() without specifying the region
274+
Test SSMProvider.get() without specifying the config
269275
"""
270276

271277
monkeypatch.setenv("AWS_DEFAULT_REGION", "us-east-1")
@@ -300,13 +306,13 @@ def test_ssm_provider_get_default_region(monkeypatch, mock_name, mock_value, moc
300306
stubber.deactivate()
301307

302308

303-
def test_ssm_provider_get_cached(mock_name, mock_value):
309+
def test_ssm_provider_get_cached(mock_name, mock_value, config):
304310
"""
305311
Test SSMProvider.get() with a cached value
306312
"""
307313

308314
# Create a new provider
309-
provider = parameters.SSMProvider(region="us-east-1")
315+
provider = parameters.SSMProvider(config=config)
310316

311317
# Inject value in the internal store
312318
provider.store[(mock_name, None)] = ExpirableValue(mock_value, datetime.now() + timedelta(seconds=60))
@@ -324,13 +330,13 @@ def test_ssm_provider_get_cached(mock_name, mock_value):
324330
stubber.deactivate()
325331

326332

327-
def test_ssm_provider_get_expired(mock_name, mock_value, mock_version):
333+
def test_ssm_provider_get_expired(mock_name, mock_value, mock_version, config):
328334
"""
329335
Test SSMProvider.get() with a cached but expired value
330336
"""
331337

332338
# Create a new provider
333-
provider = parameters.SSMProvider(region="us-east-1")
339+
provider = parameters.SSMProvider(config=config)
334340

335341
# Inject value in the internal store
336342
provider.store[(mock_name, None)] = ExpirableValue(mock_value, datetime.now() - timedelta(seconds=60))
@@ -362,15 +368,15 @@ def test_ssm_provider_get_expired(mock_name, mock_value, mock_version):
362368
stubber.deactivate()
363369

364370

365-
def test_ssm_provider_get_multiple(mock_name, mock_value, mock_version):
371+
def test_ssm_provider_get_multiple(mock_name, mock_value, mock_version, config):
366372
"""
367373
Test SSMProvider.get_multiple() with a non-cached path
368374
"""
369375

370376
mock_param_names = ["A", "B", "C"]
371377

372378
# Create a new provider
373-
provider = parameters.SSMProvider(region="us-east-1")
379+
provider = parameters.SSMProvider(config=config)
374380

375381
# Stub the boto3 client
376382
stubber = stub.Stubber(provider.client)
@@ -406,15 +412,15 @@ def test_ssm_provider_get_multiple(mock_name, mock_value, mock_version):
406412
stubber.deactivate()
407413

408414

409-
def test_ssm_provider_get_multiple_different_path(mock_name, mock_value, mock_version):
415+
def test_ssm_provider_get_multiple_different_path(mock_name, mock_value, mock_version, config):
410416
"""
411417
Test SSMProvider.get_multiple() with a non-cached path and names that don't start with the path
412418
"""
413419

414420
mock_param_names = ["A", "B", "C"]
415421

416422
# Create a new provider
417-
provider = parameters.SSMProvider(region="us-east-1")
423+
provider = parameters.SSMProvider(config=config)
418424

419425
# Stub the boto3 client
420426
stubber = stub.Stubber(provider.client)
@@ -450,15 +456,15 @@ def test_ssm_provider_get_multiple_different_path(mock_name, mock_value, mock_ve
450456
stubber.deactivate()
451457

452458

453-
def test_ssm_provider_get_multiple_next_token(mock_name, mock_value, mock_version):
459+
def test_ssm_provider_get_multiple_next_token(mock_name, mock_value, mock_version, config):
454460
"""
455461
Test SSMProvider.get_multiple() with a non-cached path with multiple calls
456462
"""
457463

458464
mock_param_names = ["A", "B", "C"]
459465

460466
# Create a new provider
461-
provider = parameters.SSMProvider(region="us-east-1")
467+
provider = parameters.SSMProvider(config=config)
462468

463469
# Stub the boto3 client
464470
stubber = stub.Stubber(provider.client)
@@ -516,13 +522,13 @@ def test_ssm_provider_get_multiple_next_token(mock_name, mock_value, mock_versio
516522
stubber.deactivate()
517523

518524

519-
def test_secrets_provider_get(mock_name, mock_value):
525+
def test_secrets_provider_get(mock_name, mock_value, config):
520526
"""
521527
Test SecretsProvider.get() with a non-cached value
522528
"""
523529

524530
# Create a new provider
525-
provider = parameters.SecretsProvider(region="us-east-1")
531+
provider = parameters.SecretsProvider(config=config)
526532

527533
# Stub the boto3 client
528534
stubber = stub.Stubber(provider.client)
@@ -546,9 +552,9 @@ def test_secrets_provider_get(mock_name, mock_value):
546552
stubber.deactivate()
547553

548554

549-
def test_secrets_provider_get_default_region(monkeypatch, mock_name, mock_value):
555+
def test_secrets_provider_get_default_config(monkeypatch, mock_name, mock_value):
550556
"""
551-
Test SecretsProvider.get() without specifying a region
557+
Test SecretsProvider.get() without specifying a config
552558
"""
553559

554560
monkeypatch.setenv("AWS_DEFAULT_REGION", "us-east-1")
@@ -578,13 +584,13 @@ def test_secrets_provider_get_default_region(monkeypatch, mock_name, mock_value)
578584
stubber.deactivate()
579585

580586

581-
def test_secrets_provider_get_cached(mock_name, mock_value):
587+
def test_secrets_provider_get_cached(mock_name, mock_value, config):
582588
"""
583589
Test SecretsProvider.get() with a cached value
584590
"""
585591

586592
# Create a new provider
587-
provider = parameters.SecretsProvider(region="us-east-1")
593+
provider = parameters.SecretsProvider(config=config)
588594

589595
# Inject value in the internal store
590596
provider.store[(mock_name, None)] = ExpirableValue(mock_value, datetime.now() + timedelta(seconds=60))
@@ -602,13 +608,13 @@ def test_secrets_provider_get_cached(mock_name, mock_value):
602608
stubber.deactivate()
603609

604610

605-
def test_secrets_provider_get_expired(mock_name, mock_value):
611+
def test_secrets_provider_get_expired(mock_name, mock_value, config):
606612
"""
607613
Test SecretsProvider.get() with a cached but expired value
608614
"""
609615

610616
# Create a new provider
611-
provider = parameters.SecretsProvider(region="us-east-1")
617+
provider = parameters.SecretsProvider(config=config)
612618

613619
# Inject value in the internal store
614620
provider.store[(mock_name, None)] = ExpirableValue(mock_value, datetime.now() - timedelta(seconds=60))

0 commit comments

Comments
 (0)