41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
from bs4 import BeautifulSoup
|
|
from typing import List, Dict
|
|
import xml.etree.ElementTree as ET
|
|
|
|
def generate_context(containers: List[Dict[str, any]]) -> str:
|
|
"""Generate full context XML string.
|
|
|
|
Args:
|
|
containers: List of container status dictionaries
|
|
|
|
Returns:
|
|
Formatted context XML string
|
|
"""
|
|
context_elem = ET.Element("context")
|
|
context_elem.append(format_containers_xml(containers))
|
|
return BeautifulSoup(ET.tostring(context_elem, encoding='unicode'), "xml").prettify()
|
|
|
|
def format_containers_xml(containers: List[Dict[str, any]]) -> ET.Element:
|
|
"""Format container statuses as XML string.
|
|
|
|
Args:
|
|
containers: List of dictionaries containing container information
|
|
|
|
Returns:
|
|
ElementTree.Element representing the containers
|
|
"""
|
|
containers_elem = ET.Element("containers")
|
|
|
|
for container in containers:
|
|
container_elem = ET.SubElement(containers_elem, "container")
|
|
container_elem.set("name", container['name'])
|
|
container_elem.set("status", container['status'])
|
|
container_elem.set("started_at", container['started_at'])
|
|
container_elem.set("stdout", str(container['stdout_size']))
|
|
container_elem.set("stderr", str(container['stderr_size']))
|
|
if 'exit_code' in container.keys():
|
|
container_elem.set("exit_code", str(container['exit_code']))
|
|
if 'error' in container.keys():
|
|
container_elem.set("error", container['error'])
|
|
return containers_elem
|