@@ -83,18 +83,18 @@ this parameter, the entire event will be used as the key.
83
83
84
84
=== "app.py"
85
85
86
- ```python hl_lines="2 6 -9 11"
86
+ ```python hl_lines="2-4 8 -9 11"
87
87
import json
88
- from aws_lambda_powertools.utilities.idempotency import DynamoDBPersistenceLayer, idempotent
88
+ from aws_lambda_powertools.utilities.idempotency import (
89
+ IdempotencyConfig, DynamoDBPersistenceLayer, idempotent
90
+ )
89
91
90
92
# Treat everything under the "body" key in
91
93
# the event json object as our payload
92
- persistence_layer = DynamoDBPersistenceLayer(
93
- table_name="IdempotencyTable",
94
- event_key_jmespath="body",
95
- )
94
+ config = IdempotencyConfig(event_key_jmespath="body")
95
+ persistence_layer = DynamoDBPersistenceLayer(table_name="IdempotencyTable")
96
96
97
- @idempotent(persistence_store=persistence_layer)
97
+ @idempotent(config=config, persistence_store=persistence_layer)
98
98
def handler(event, context):
99
99
body = json.loads(event['body'])
100
100
payment = create_subscription_payment(
@@ -174,9 +174,8 @@ change this window with the `expires_after_seconds` parameter:
174
174
175
175
=== "app.py"
176
176
177
- ```python hl_lines="4"
178
- DynamoDBPersistenceLayer(
179
- table_name="IdempotencyTable",
177
+ ```python hl_lines="3"
178
+ IdempotencyConfig(
180
179
event_key_jmespath="body",
181
180
expires_after_seconds=5*60, # 5 minutes
182
181
)
@@ -203,9 +202,8 @@ execution environment. You can change this with the `local_cache_max_items` para
203
202
204
203
=== "app.py"
205
204
206
- ```python hl_lines="4 5"
207
- DynamoDBPersistenceLayer(
208
- table_name="IdempotencyTable",
205
+ ```python hl_lines="3 4"
206
+ IdempotencyConfig(
209
207
event_key_jmespath="body",
210
208
use_local_cache=True,
211
209
local_cache_max_items=1000
@@ -224,16 +222,18 @@ idempotent invocations.
224
222
225
223
=== "app.py"
226
224
227
- ```python hl_lines="6"
228
- from aws_lambda_powertools.utilities.idempotency import DynamoDBPersistenceLayer, idempotent
225
+ ```python hl_lines="7"
226
+ from aws_lambda_powertools.utilities.idempotency import (
227
+ IdempotencyConfig, DynamoDBPersistenceLayer, idempotent
228
+ )
229
229
230
- persistence_layer = DynamoDBPersistenceLayer(
231
- table_name="IdempotencyTable",
230
+ config = IdempotencyConfig(
232
231
event_key_jmespath="[userDetail, productId]",
233
232
payload_validation_jmespath="amount"
234
233
)
234
+ persistence_layer = DynamoDBPersistenceLayer(table_name="IdempotencyTable")
235
235
236
- @idempotent(persistence_store=persistence_layer)
236
+ @idempotent(config=config, persistence_store=persistence_layer)
237
237
def handler(event, context):
238
238
# Creating a subscription payment is a side
239
239
# effect of calling this function!
@@ -274,7 +274,7 @@ and we will raise `IdempotencyKeyError` if none was found.
274
274
=== "app.py"
275
275
276
276
```python hl_lines="4"
277
- DynamoDBPersistenceLayer (
277
+ IdempotencyConfig (
278
278
table_name="IdempotencyTable",
279
279
event_key_jmespath="body",
280
280
raise_on_no_idempotency_key=True,
@@ -298,10 +298,9 @@ This example demonstrates changing the attribute names to custom values:
298
298
299
299
=== "app.py"
300
300
301
- ```python hl_lines="4-8 "
301
+ ```python hl_lines="3-7 "
302
302
persistence_layer = DynamoDBPersistenceLayer(
303
303
table_name="IdempotencyTable",
304
- event_key_jmespath="[userDetail, productId]",
305
304
key_attr="idempotency_key",
306
305
expiry_attr="expires_at",
307
306
status_attr="current_status",
@@ -316,35 +315,39 @@ or `boto3_session` parameters when constructing the persistence store.
316
315
317
316
=== "Custom session"
318
317
319
- ```python hl_lines="1 4 8 "
318
+ ```python hl_lines="1 7 10 "
320
319
import boto3
321
- from aws_lambda_powertools.utilities.idempotency import DynamoDBPersistenceLayer, idempotent
320
+ from aws_lambda_powertools.utilities.idempotency import (
321
+ IdempotencyConfig, DynamoDBPersistenceLayer, idempotent
322
+ )
322
323
324
+ config = IdempotencyConfig(event_key_jmespath="body")
323
325
boto3_session = boto3.session.Session()
324
326
persistence_layer = DynamoDBPersistenceLayer(
325
327
table_name="IdempotencyTable",
326
- event_key_jmespath="body",
327
328
boto3_session=boto3_session
328
329
)
329
330
330
- @idempotent(persistence_store=persistence_layer)
331
+ @idempotent(config=config, persistence_store=persistence_layer)
331
332
def handler(event, context):
332
333
...
333
334
```
334
335
=== "Custom config"
335
336
336
- ```python hl_lines="1 4 8 "
337
+ ```python hl_lines="1 7 10 "
337
338
from botocore.config import Config
338
- from aws_lambda_powertools.utilities.idempotency import DynamoDBPersistenceLayer, idempotent
339
+ from aws_lambda_powertools.utilities.idempotency import (
340
+ IdempotencyConfig, DynamoDBPersistenceLayer, idempotent
341
+ )
339
342
343
+ config = IdempotencyConfig(event_key_jmespath="body")
340
344
boto_config = Config()
341
345
persistence_layer = DynamoDBPersistenceLayer(
342
346
table_name="IdempotencyTable",
343
- event_key_jmespath="body",
344
347
boto_config=boto_config
345
348
)
346
349
347
- @idempotent(persistence_store=persistence_layer)
350
+ @idempotent(config=config, persistence_store=persistence_layer)
348
351
def handler(event, context):
349
352
...
350
353
```
@@ -372,15 +375,15 @@ The idempotency utility can be used with the `validator` decorator. Ensure that
372
375
373
376
```python hl_lines="9 10"
374
377
from aws_lambda_powertools.utilities.validation import validator, envelopes
375
- from aws_lambda_powertools.utilities.idempotency.idempotency import idempotent
376
-
377
- persistence_layer = DynamoDBPersistenceLayer(
378
- table_name="IdempotencyTable",
379
- event_key_jmespath="[message, username]",
378
+ from aws_lambda_powertools.utilities.idempotency import (
379
+ IdempotencyConfig, DynamoDBPersistenceLayer, idempotent
380
380
)
381
381
382
+ config = IdempotencyConfig(event_key_jmespath="[message, username]")
383
+ persistence_layer = DynamoDBPersistenceLayer(table_name="IdempotencyTable")
384
+
382
385
@validator(envelope=envelopes.API_GATEWAY_HTTP)
383
- @idempotent(persistence_store=persistence_layer)
386
+ @idempotent(config=config, persistence_store=persistence_layer)
384
387
def lambda_handler(event, context):
385
388
cause_some_side_effects(event['username')
386
389
return {"message": event['message'], "statusCode": 200}
0 commit comments