Function bodies 106 total
_parse_md_table function · python · L359-L370 (12 LOC)Red Flag Engine/streamlit_app.py
def _parse_md_table(text: str) -> list[dict[str, str]]:
"""Parse a Markdown pipe table into a list of row dicts."""
lines = [ln for ln in text.splitlines() if re.match(r"^\s*\|", ln)]
if len(lines) < 3:
return []
headers = _split_pipe_row(lines[0])
rows: list[dict[str, str]] = []
for line in lines[2:]:
cells = _split_pipe_row(line)
if len(cells) == len(headers):
rows.append(dict(zip(headers, cells)))
return rows_sev_style function · python · L373-L380 (8 LOC)Red Flag Engine/streamlit_app.py
def _sev_style(val: str) -> str:
return {
"Critical": "background-color: #4a0000; color: #ffaaaa",
"High": "background-color: #3a1800; color: #ffcc99",
"Medium": "background-color: #2a2000; color: #ffe680",
"Low": "background-color: #1a1a1a; color: #888888",
"Informational": "background-color: #111111; color: #555555",
}.get(val, "")_change_style function · python · L383-L388 (6 LOC)Red Flag Engine/streamlit_app.py
def _change_style(val: str) -> str:
if "WORSENED" in val: return "background-color: #4a0000; color: #ffaaaa"
if "NEW" in val: return "background-color: #001a40; color: #99bbff"
if "IMPROVED" in val: return "background-color: #001a0d; color: #66cc88"
if "UNCHANGED" in val: return "background-color: #111111; color: #555555"
return ""page_dashboard function · python · L395-L451 (57 LOC)Red Flag Engine/streamlit_app.py
def page_dashboard() -> None:
st.header("Overview")
reports = sorted(_OUTPUTS.glob("*.md"), key=lambda p: p.stat().st_mtime, reverse=True)
if not reports:
st.info("No reports found. Run a new analysis to get started.")
return
for row_start in range(0, len(reports), 3):
cols = st.columns(3)
for col, md_path in zip(cols, reports[row_start : row_start + 3]):
meta = _parse_report_meta(md_path)
with col:
with st.container(border=True):
st.markdown(
f"<div style='font-size:15px;font-weight:600;letter-spacing:0.04em;"
f"color:#ddd'>{meta['company']}</div>"
f"<div style='font-size:10px;letter-spacing:0.06em;color:#3a3a3a;"
f"text-transform:uppercase;margin-bottom:10px'>"
f"{meta['now']} vs {meta['prev']}</div>",
unsafe_allow_html=True,
page_generate function · python · L458-L549 (92 LOC)Red Flag Engine/streamlit_app.py
def page_generate() -> None:
st.header("New Analysis")
st.caption("Upload two earnings call transcripts to generate a comparative red-flag report.")
with st.form("pipeline_form"):
company = st.text_input(
"Ticker",
placeholder="BA",
max_chars=10,
)
col1, col2 = st.columns(2)
now_period = col1.text_input("Current quarter", placeholder="2025Q4")
prev_period = col2.text_input("Prior quarter", placeholder="2025Q3")
now_file = st.file_uploader(
"Current quarter transcript (.txt or .pdf)",
type=["txt", "pdf"],
)
prev_file = st.file_uploader(
"Prior quarter transcript (.txt or .pdf)",
type=["txt", "pdf"],
)
submitted = st.form_submit_button(
"Run Analysis",
use_container_width=True,
type="primary",
)
if not submitted:
return
# ── Validation ─────────────page_view function · python · L556-L886 (331 LOC)Red Flag Engine/streamlit_app.py
def page_view() -> None:
selected = st.session_state.get("selected_report")
if not selected:
st.info("Select a report from the Overview first.")
st.stop()
report_path = _OUTPUTS / selected
if not report_path.exists():
st.error(f"Report not found: {selected}")
st.stop()
content = report_path.read_text(encoding="utf-8", errors="ignore")
sections = _split_sections(content)
# ── Header metrics ───────────────────────────────────────────────────────
hdr = sections.get("header", "")
company_m = re.search(r"\| Company \| \*\*(.+?)\*\* \|", hdr)
now_m = re.search(r"\| Current quarter \| `(.+?)` \|", hdr)
prev_m = re.search(r"\| Prior quarter \| `(.+?)` \|", hdr)
ts_m = re.search(r"\| Generated \| (.+?) \|", hdr)
total_m = re.search(r"\| Total changes detected \| (\d+) \|", hdr)
high_m = re.search(r"\| High / Critical \| \*\‹ prevpage 3 / 3