Skip to content

Commit aa1a435

Browse files
abhu85claude
authored andcommitted
docs: fix map operation examples to return JSON-serializable dict
Fix issue aws#301: Map operation examples were returning BatchResult directly, which is not JSON serializable and causes Lambda to fail. Changes: - Update all handler return types from BatchResult[T] to dict - Add .to_dict() calls to convert BatchResult before returning - Add explanatory comments about JSON serialization requirement - Update "Getting started" description to reflect dict return type - Keep one example showing how to extract and filter results Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent a3e4821 commit aa1a435

File tree

1 file changed

+22
-20
lines changed

1 file changed

+22
-20
lines changed

docs/core/map.md

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -74,19 +74,20 @@ def square(context: DurableContext, item: int, index: int, items: list[int]) ->
7474
return item * item
7575

7676
@durable_execution
77-
def handler(event: dict, context: DurableContext) -> BatchResult[int]:
77+
def handler(event: dict, context: DurableContext) -> dict:
7878
"""Process a list of items using map operations."""
7979
items = [1, 2, 3, 4, 5]
80-
80+
8181
result = context.map(items, square)
82-
return result
82+
# Convert to dict for JSON serialization (BatchResult is not JSON serializable)
83+
return result.to_dict()
8384
```
8485

8586
When this function runs:
8687
1. Each item is processed in parallel
8788
2. The `square` function is called for each item
8889
3. Each result is checkpointed independently
89-
4. The function returns a `BatchResult` with results `[1, 4, 9, 16, 25]`
90+
4. The function returns a dict with results `[1, 4, 9, 16, 25]`
9091

9192
If the function is interrupted after processing items 0-2, it resumes at item 3 without reprocessing the first three items.
9293

@@ -162,10 +163,10 @@ def validate_email(
162163
}
163164

164165
@durable_execution
165-
def handler(event: dict, context: DurableContext) -> BatchResult[dict]:
166+
def handler(event: dict, context: DurableContext) -> dict:
166167
emails = ["jane_doe@example.com", "john_doe@example.org", "invalid"]
167168
result = context.map(emails, validate_email)
168-
return result
169+
return result.to_dict()
169170
```
170171

171172
[↑ Back to top](#table-of-contents)
@@ -190,7 +191,7 @@ def process_item(context: DurableContext, item: int, index: int, items: list[int
190191
return {"item": item, "squared": item * item}
191192

192193
@durable_execution
193-
def handler(event: dict, context: DurableContext) -> BatchResult[dict]:
194+
def handler(event: dict, context: DurableContext) -> dict:
194195
items = list(range(100))
195196

196197
# Configure map operation
@@ -200,7 +201,7 @@ def handler(event: dict, context: DurableContext) -> BatchResult[dict]:
200201
)
201202

202203
result = context.map(items, process_item, name="process_numbers", config=config)
203-
return result
204+
return result.to_dict()
204205
```
205206

206207
### MapConfig parameters
@@ -237,15 +238,14 @@ def fetch_data(context: DurableContext, url: str, index: int, urls: list[str]) -
237238
return {"url": url, "data": "..."}
238239

239240
@durable_execution
240-
def handler(event: dict, context: DurableContext) -> BatchResult[dict]:
241+
def handler(event: dict, context: DurableContext) -> dict:
241242
urls = [f"https://example.com/api/{i}" for i in range(100)]
242-
243+
243244
# Process only 5 URLs at a time
244245
config = MapConfig(max_concurrency=5)
245-
246+
246247
result = context.map(urls, fetch_data, config=config)
247-
return result
248-
```
248+
return result.to_dict()```
249249

250250
### Custom completion criteria
251251

@@ -262,19 +262,19 @@ def process_item(context: DurableContext, item: int, index: int, items: list[int
262262
return {"item": item, "processed": True}
263263

264264
@durable_execution
265-
def handler(event: dict, context: DurableContext) -> BatchResult[dict]:
265+
def handler(event: dict, context: DurableContext) -> dict:
266266
items = list(range(20))
267-
267+
268268
# Succeed if at least 15 items succeed, fail after 5 failures
269269
config = MapConfig(
270270
completion_config=CompletionConfig(
271271
min_successful=15,
272272
tolerated_failure_count=5,
273273
)
274274
)
275-
275+
276276
result = context.map(items, process_item, config=config)
277-
return result
277+
return result.to_dict()
278278
```
279279

280280
### Using context operations in map functions
@@ -307,11 +307,13 @@ def process_user(
307307
return {"user_id": user_id, "notification_sent": notification["sent"]}
308308

309309
@durable_execution
310-
def handler(event: dict, context: DurableContext) -> BatchResult[dict]:
310+
def handler(event: dict, context: DurableContext) -> dict:
311+
"""Process multiple users using context operations within map functions."""
311312
user_ids = ["user_1", "user_2", "user_3"]
312-
313+
313314
result = context.map(user_ids, process_user)
314-
return result
315+
# Convert to dict for JSON serialization (BatchResult is not JSON serializable)
316+
return result.to_dict()
315317
```
316318

317319
### Filtering and transforming results

0 commit comments

Comments
 (0)