diff --git a/layercake/layercake/batch.py b/layercake/layercake/batch.py index 9ef90a0..bf644b6 100644 --- a/layercake/layercake/batch.py +++ b/layercake/layercake/batch.py @@ -2,8 +2,9 @@ import inspect import logging import os from contextlib import AbstractContextManager +from dataclasses import dataclass from enum import Enum -from typing import Any, Callable, NamedTuple, Self, Sequence +from typing import Any, Callable, Self, Sequence LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO').upper() @@ -18,7 +19,8 @@ class Status(Enum): FAIL = 'fail' -class Result(NamedTuple): +@dataclass(frozen=True) +class Result: status: Status input_record: Any output: Any | None = None @@ -129,5 +131,8 @@ class BatchProcessor(AbstractContextManager): return Result( status=Status.FAIL, input_record=record, - cause=exc, + cause={ + 'type': type(exc).__name__, + 'message': str(exc), + }, ) diff --git a/layercake/pyproject.toml b/layercake/pyproject.toml index c593209..af95cce 100644 --- a/layercake/pyproject.toml +++ b/layercake/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "layercake" -version = "0.6.3" +version = "0.6.4" description = "Packages shared dependencies to optimize deployment and ensure consistency across functions." readme = "README.md" authors = [ diff --git a/layercake/tests/test_batch.py b/layercake/tests/test_batch.py index 318d3ad..3f0a676 100644 --- a/layercake/tests/test_batch.py +++ b/layercake/tests/test_batch.py @@ -18,11 +18,18 @@ def test_batch(): with processor(records=records, handler=record_handler) as p: processed_messages = p.process() - assert len(processed_messages) == 3 + assert processed_messages == ( + Result(status=Status.SUCCESS, input_record=True, output=True, cause=None), + Result(status=Status.SUCCESS, input_record=True, output=True, cause=None), + Result( + status=Status.FAIL, + input_record=False, + output=None, + cause={'type': 'ValueError', 'message': 'Invalid record'}, + ), + ) - fail_record = processed_messages[2] - assert isinstance(fail_record.cause, ValueError) - assert str(fail_record.cause) == 'Invalid record' + assert len(processed_messages) == 3 assert processor.successes == [True, True] assert processor.failures == [False] @@ -48,7 +55,7 @@ def test_batch_context(): processed_messages = processor.process() assert processed_messages == ( - Result(Status.SUCCESS, output=4, input_record=2), - Result(Status.SUCCESS, output=6, input_record=3), - Result(Status.SUCCESS, output=8, input_record=4), + Result(status=Status.SUCCESS, input_record=2, output=4, cause=None), + Result(status=Status.SUCCESS, input_record=3, output=6, cause=None), + Result(status=Status.SUCCESS, input_record=4, output=8, cause=None), ) diff --git a/layercake/uv.lock b/layercake/uv.lock index 880922c..cd6a0a3 100644 --- a/layercake/uv.lock +++ b/layercake/uv.lock @@ -589,7 +589,7 @@ wheels = [ [[package]] name = "layercake" -version = "0.6.2" +version = "0.6.4" source = { editable = "." } dependencies = [ { name = "arnparse" },