from __future__ import annotations
from typing import Any, Dict, List
from cvttpy_tools.app import App
from cvttpy_tools.base import NamedObject
from cvttpy_tools.config import CvttAppConfig
class HtmlRenderer(NamedObject):
def __init__(self) -> None:
pass
@staticmethod
def render_data_quality(quality: List[Dict[str, Any]]) -> str:
rows = "".join(
f"
"
f"| {q.get('instrument','')} | "
f"{q.get('record_count','')} | "
f"{q.get('latest_tstamp','')} | "
f"{q.get('status','')} | "
f"{q.get('reason','')} | "
f"
"
for q in sorted(quality, key=lambda x: str(x.get("instrument", "")))
)
return f"""
Data Quality
Data Quality
| Instrument | Records | Latest | Status | Reason |
{rows}
"""
@staticmethod
def render_pairs(pairs: Dict[str, Dict[str, Any]]) -> str:
if not pairs:
body = "No pairs available. Check data quality and try again.
"
else:
body_rows = []
for pair_name, p in pairs.items():
body_rows.append(
""
f"| {pair_name} | "
f"{p.get('rank_eg','')} | "
f"{p.get('rank_adf','')} | "
f"{p.get('rank_j','')} | "
f"{p.get('pvalue_eg','')} | "
f"{p.get('pvalue_adf','')} | "
f"{p.get('pvalue_j','')} | "
"
"
)
body = "\n".join(body_rows)
return f"""
Pair Selection
Pair Selection
| Pair |
Rank-EG |
Rank-ADF |
Rank-J |
EG p-value |
ADF p-value |
Johansen pseudo p |
{body}
"""