Fix batch item lookup to match by sequence_number field
get_batch_item now searches for the item whose sequence_number field matches the requested number, instead of using array position. Falls back to index-based lookup for data without sequence_number fields. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -21,11 +21,15 @@ def to_int(val: Any) -> int:
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
def get_batch_item(data: dict[str, Any], sequence_number: int) -> dict[str, Any]:
|
def get_batch_item(data: dict[str, Any], sequence_number: int) -> dict[str, Any]:
|
||||||
"""Resolve batch item by sequence_number, clamping to valid range."""
|
"""Resolve batch item by sequence_number field, falling back to array index."""
|
||||||
if KEY_BATCH_DATA in data and isinstance(data[KEY_BATCH_DATA], list) and len(data[KEY_BATCH_DATA]) > 0:
|
if KEY_BATCH_DATA in data and isinstance(data[KEY_BATCH_DATA], list) and len(data[KEY_BATCH_DATA]) > 0:
|
||||||
|
# Search by sequence_number field first
|
||||||
|
for item in data[KEY_BATCH_DATA]:
|
||||||
|
if int(item.get("sequence_number", 0)) == sequence_number:
|
||||||
|
return item
|
||||||
|
# Fallback to array index
|
||||||
idx = max(0, min(sequence_number - 1, len(data[KEY_BATCH_DATA]) - 1))
|
idx = max(0, min(sequence_number - 1, len(data[KEY_BATCH_DATA]) - 1))
|
||||||
if sequence_number - 1 != idx:
|
logger.warning(f"No item with sequence_number={sequence_number}, falling back to index {idx}")
|
||||||
logger.warning(f"Sequence {sequence_number} out of range (1-{len(data[KEY_BATCH_DATA])}), clamped to {idx + 1}")
|
|
||||||
return data[KEY_BATCH_DATA][idx]
|
return data[KEY_BATCH_DATA][idx]
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,16 @@ class TestToInt:
|
|||||||
|
|
||||||
|
|
||||||
class TestGetBatchItem:
|
class TestGetBatchItem:
|
||||||
def test_valid_index(self):
|
def test_lookup_by_sequence_number_field(self):
|
||||||
|
data = {"batch_data": [
|
||||||
|
{"sequence_number": 1, "a": "first"},
|
||||||
|
{"sequence_number": 5, "a": "fifth"},
|
||||||
|
{"sequence_number": 3, "a": "third"},
|
||||||
|
]}
|
||||||
|
assert get_batch_item(data, 5) == {"sequence_number": 5, "a": "fifth"}
|
||||||
|
assert get_batch_item(data, 3) == {"sequence_number": 3, "a": "third"}
|
||||||
|
|
||||||
|
def test_fallback_to_index(self):
|
||||||
data = {"batch_data": [{"a": 1}, {"a": 2}, {"a": 3}]}
|
data = {"batch_data": [{"a": 1}, {"a": 2}, {"a": 3}]}
|
||||||
assert get_batch_item(data, 2) == {"a": 2}
|
assert get_batch_item(data, 2) == {"a": 2}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user