changhe batch

This commit is contained in:
2025-05-30 18:00:48 -03:00
parent b048febbd5
commit f8c40473e4
4 changed files with 24 additions and 12 deletions

View File

@@ -2,8 +2,9 @@ import inspect
import logging import logging
import os import os
from contextlib import AbstractContextManager from contextlib import AbstractContextManager
from dataclasses import dataclass
from enum import Enum 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() LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO').upper()
@@ -18,7 +19,8 @@ class Status(Enum):
FAIL = 'fail' FAIL = 'fail'
class Result(NamedTuple): @dataclass(frozen=True)
class Result:
status: Status status: Status
input_record: Any input_record: Any
output: Any | None = None output: Any | None = None
@@ -129,5 +131,8 @@ class BatchProcessor(AbstractContextManager):
return Result( return Result(
status=Status.FAIL, status=Status.FAIL,
input_record=record, input_record=record,
cause=exc, cause={
'type': type(exc).__name__,
'message': str(exc),
},
) )

View File

@@ -1,6 +1,6 @@
[project] [project]
name = "layercake" name = "layercake"
version = "0.6.3" version = "0.6.4"
description = "Packages shared dependencies to optimize deployment and ensure consistency across functions." description = "Packages shared dependencies to optimize deployment and ensure consistency across functions."
readme = "README.md" readme = "README.md"
authors = [ authors = [

View File

@@ -18,11 +18,18 @@ def test_batch():
with processor(records=records, handler=record_handler) as p: with processor(records=records, handler=record_handler) as p:
processed_messages = p.process() 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 len(processed_messages) == 3
assert isinstance(fail_record.cause, ValueError)
assert str(fail_record.cause) == 'Invalid record'
assert processor.successes == [True, True] assert processor.successes == [True, True]
assert processor.failures == [False] assert processor.failures == [False]
@@ -48,7 +55,7 @@ def test_batch_context():
processed_messages = processor.process() processed_messages = processor.process()
assert processed_messages == ( assert processed_messages == (
Result(Status.SUCCESS, output=4, input_record=2), Result(status=Status.SUCCESS, input_record=2, output=4, cause=None),
Result(Status.SUCCESS, output=6, input_record=3), Result(status=Status.SUCCESS, input_record=3, output=6, cause=None),
Result(Status.SUCCESS, output=8, input_record=4), Result(status=Status.SUCCESS, input_record=4, output=8, cause=None),
) )

2
layercake/uv.lock generated
View File

@@ -589,7 +589,7 @@ wheels = [
[[package]] [[package]]
name = "layercake" name = "layercake"
version = "0.6.2" version = "0.6.4"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "arnparse" }, { name = "arnparse" },