Added timeout and limit to script entries
This commit is contained in:
@@ -54,15 +54,15 @@ class ResponseParser:
|
||||
try:
|
||||
root = ET.fromstring(xml.strip())
|
||||
except ET.ParseError as e:
|
||||
return ParseErrorEntry(xml, f"Invalid XML: {str(e)}", entry_id, timestamp)
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, f"Invalid XML: {str(e)}")
|
||||
|
||||
try:
|
||||
if root.tag == 'delete':
|
||||
target_id = root.get('id')
|
||||
if not target_id:
|
||||
return ParseErrorEntry(xml, "Delete command missing required 'id' attribute", entry_id, timestamp)
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, "Delete command missing required 'id' attribute")
|
||||
if len(root.attrib) > 1:
|
||||
return ParseErrorEntry(xml, "Delete command should only have 'id' attribute", entry_id, timestamp)
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, "Delete command should only have 'id' attribute")
|
||||
return DeleteCommand(target_id)
|
||||
|
||||
elif root.tag == 'stop':
|
||||
@@ -70,34 +70,46 @@ class ResponseParser:
|
||||
|
||||
elif root.tag == 'background':
|
||||
if len(root) != 0 or root.attrib or root.text is None or root.text.strip() == '':
|
||||
return ParseErrorEntry(xml, "Background entry requires (only) script content", entry_id, timestamp)
|
||||
return BackgroundEntry(root.text, entry_id, timestamp)
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, "Background entry requires (only) script content")
|
||||
return BackgroundEntry(entry_id, timestamp, root.text)
|
||||
|
||||
elif root.tag == 'repeat':
|
||||
if len(root) != 0 or root.attrib or root.text is None or root.text.strip() == '':
|
||||
return ParseErrorEntry(xml, "Repeat entry requires (only) script content", entry_id, timestamp)
|
||||
return RepeatEntry(root.text, entry_id, timestamp)
|
||||
if len(root) != 0 or root.text is None or root.text.strip() == '':
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, "Repeat entry requires (only) script content")
|
||||
if len(root.attrib) > 2 or any(k not in ('timeout', 'limit') for k in root.attrib):
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, "Repeat entry only accepts 'timeout' and 'limit' attributes")
|
||||
timeout = root.get('timeout')
|
||||
limit = root.get('limit')
|
||||
timeout = float(timeout) if timeout is not None else None
|
||||
limit = int(limit) if limit is not None else None
|
||||
return RepeatEntry(entry_id, timestamp, root.text, timeout, limit)
|
||||
|
||||
elif root.tag == 'single':
|
||||
if len(root) != 0 or root.attrib or root.text is None or root.text.strip() == '':
|
||||
return ParseErrorEntry(xml, "Single entry requires (only) script content", entry_id, timestamp)
|
||||
return SingleEntry(root.text, entry_id, timestamp)
|
||||
|
||||
if len(root) != 0 or root.text is None or root.text.strip() == '':
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, "Single entry requires (only) script content")
|
||||
if len(root.attrib) > 2 or any(k not in ('timeout', 'limit') for k in root.attrib):
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, "Single entry only accepts 'timeout' and 'limit' attributes")
|
||||
timeout = root.get('timeout')
|
||||
limit = root.get('limit')
|
||||
timeout = float(timeout) if timeout is not None else None
|
||||
limit = int(limit) if limit is not None else None
|
||||
return SingleEntry(entry_id, timestamp, root.text, timeout, limit)
|
||||
|
||||
elif root.tag == 'reasoning':
|
||||
if len(root) != 0 or root.attrib or root.text is None or root.text.strip() == '':
|
||||
return ParseErrorEntry(xml, "Reasoning entry requires (only) text content", entry_id, timestamp)
|
||||
return ReasoningEntry(root.text, entry_id, timestamp)
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, "Reasoning entry requires (only) text content")
|
||||
return ReasoningEntry(entry_id, timestamp, root.text)
|
||||
|
||||
elif root.tag == 'read_stdin':
|
||||
return ReadEntry(self.io_buffer, entry_id, timestamp)
|
||||
return ReadEntry(entry_id, timestamp, self.io_buffer)
|
||||
|
||||
elif root.tag == 'write_stdout':
|
||||
if len(root) != 0 or root.attrib or root.text is None or root.text.strip() == '':
|
||||
return ParseErrorEntry(xml, "Write stdout entry requires (only) text content", entry_id, timestamp)
|
||||
return WriteEntry(root.text, self.io_buffer, entry_id, timestamp)
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, "Write stdout entry requires (only) text content")
|
||||
return WriteEntry(entry_id, timestamp, root.text, self.io_buffer)
|
||||
|
||||
else:
|
||||
return ParseErrorEntry(xml, f"Unknown root element: {root.tag}", entry_id, timestamp)
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, f"Unknown root element: {root.tag}")
|
||||
|
||||
except Exception as e:
|
||||
return ParseErrorEntry(xml, f"Error parsing response: {str(e)}", entry_id, timestamp)
|
||||
return ParseErrorEntry(entry_id, timestamp, xml, f"Error parsing response: {str(e)}")
|
||||
Reference in New Issue
Block a user