This commit is contained in:
2024-12-04 17:19:46 +01:00
parent af390dd779
commit da8583ab28
36 changed files with 712 additions and 69 deletions

View File

@@ -1,6 +1,6 @@
from datetime import datetime
import xml.etree.ElementTree as ET
from pathlib import Path
from typing import List
import xml.etree.ElementTree as ET
from .entry import Entry
from .entry.background_entry import BackgroundEntry
@@ -15,7 +15,7 @@ class IterationParser:
"""Parses iteration XML files into entries"""
@staticmethod
def parse_iteration(content: str, io_buffer) -> tuple[str, str, List[Entry]]:
def parse_iteration(content: str, work_dir: Path, io_buffer) -> tuple[str, str, List[Entry]]:
"""
Parse iteration XML content into context, response and entries
@@ -37,7 +37,7 @@ class IterationParser:
entries = []
for elem in context:
if elem.tag == "background":
entries.append(IterationParser._parse_background(elem))
entries.append(IterationParser._parse_background(elem, work_dir))
elif elem.tag == "parse_error":
entries.append(IterationParser._parse_parse_error(elem))
elif elem.tag == "read_stdin":
@@ -45,19 +45,20 @@ class IterationParser:
elif elem.tag == "reasoning":
entries.append(IterationParser._parse_reasoning(elem))
elif elem.tag == "repeat":
entries.append(IterationParser._parse_repeat(elem))
entries.append(IterationParser._parse_repeat(elem, work_dir))
elif elem.tag == "single":
entries.append(IterationParser._parse_single(elem))
entries.append(IterationParser._parse_single(elem, work_dir))
elif elem.tag == "write_stdout":
entries.append(IterationParser._parse_write(elem, io_buffer))
return entries
@staticmethod
def _parse_background(elem: ET.Element) -> BackgroundEntry:
def _parse_background(elem: ET.Element, work_dir: Path) -> BackgroundEntry:
entry = BackgroundEntry(
id=elem.get("id"),
script=elem.text
script=elem.text,
work_dir=work_dir
)
if elem.get("exit_code"):
entry.exit_code = int(elem.get("exit_code"))
@@ -97,9 +98,10 @@ class IterationParser:
)
@staticmethod
def _parse_repeat(elem: ET.Element) -> RepeatEntry:
def _parse_repeat(elem: ET.Element, work_dir: Path) -> RepeatEntry:
entry = RepeatEntry(
id=elem.get("id"),
work_dir=work_dir,
script=elem.text,
timeout=float(elem.get("timeout")) if elem.get("timeout") else None,
limit=int(elem.get("limit")) if elem.get("limit") else None
@@ -116,9 +118,10 @@ class IterationParser:
return entry
@staticmethod
def _parse_single(elem: ET.Element) -> SingleEntry:
def _parse_single(elem: ET.Element, work_dir: Path) -> SingleEntry:
entry = SingleEntry(
id=elem.get("id"),
work_dir=work_dir,
script=elem.text,
timeout=float(elem.get("timeout")) if elem.get("timeout") else None,
limit=int(elem.get("limit")) if elem.get("limit") else None