32 lines
862 B
Python
32 lines
862 B
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
import yaml
|
|
|
|
|
|
def extract_challenge_report(text: str) -> dict[str, Any] | None:
|
|
marker = "```yaml"
|
|
start = text.lower().rfind(marker)
|
|
if start == -1:
|
|
return None
|
|
body_start = text.find("\n", start)
|
|
if body_start == -1:
|
|
return None
|
|
end = text.find("```", body_start + 1)
|
|
if end == -1:
|
|
return None
|
|
raw_yaml = text[body_start + 1 : end]
|
|
loaded = yaml.safe_load(raw_yaml)
|
|
if not isinstance(loaded, dict):
|
|
return None
|
|
report = loaded.get("challenge_report")
|
|
return report if isinstance(report, dict) else None
|
|
|
|
|
|
def _contains_bool_marker(text: str, marker: str, value: str) -> bool:
|
|
marker_index = text.find(marker)
|
|
if marker_index == -1:
|
|
return False
|
|
return value in text[marker_index : marker_index + 80]
|