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

{rows}
InstrumentRecordsLatestStatusReason
""" @staticmethod def render_pairs(pairs: List[Dict[str, Any]]) -> str: if not pairs: body = "

No pairs available. Check data quality and try again.

" else: body_rows = [] for p in pairs: body_rows.append( "" f"{p.get('instrument_a','')}" f"{p.get('instrument_b','')}" 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

{body}
Instrument A Instrument B Rank-EG Rank-ADF Rank-J EG p-value ADF p-value Johansen pseudo p
"""