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 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),
},
)

View File

@@ -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 = [

View File

@@ -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),
)

2
layercake/uv.lock generated
View File

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