aboutsummaryrefslogtreecommitdiff
path: root/components/news.py
diff options
context:
space:
mode:
authorTyler <tyler@tylerhoang.xyz>2026-05-16 00:51:08 -0700
committerTyler <tyler@tylerhoang.xyz>2026-05-16 00:51:08 -0700
commit775762d75bf2b6b49893f84db1f4910ef1aa1e4b (patch)
tree8fd13acd03214605f7d879f42f282d89674f3222 /components/news.py
parent49368331324f201307fd260d288e5c5f65ea3fcc (diff)
Harden script embedding, timezone parsing, and layout buffers
- overview: use json_for_script for inline payload/meta to prevent </script> break-out from yfinance-sourced strings; raise iframe height to cover responsive single-column collapse under 1100px - news: treat naive ISO/strptime datetimes as UTC before converting to local-naive, matching the int-timestamp branch from 75dbe29 - news: bump per-row iframe height to fit summary + metadata under scrolling=False - top_movers: drop name column in compact (sidebar) mode and tighten grid so symbol/price/change fit a default-width Streamlit sidebar Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Diffstat (limited to 'components/news.py')
-rw-r--r--components/news.py10
1 files changed, 6 insertions, 4 deletions
diff --git a/components/news.py b/components/news.py
index 2a22b25..c2263c9 100644
--- a/components/news.py
+++ b/components/news.py
@@ -64,7 +64,7 @@ def _normalize_dt(raw):
dt = _dt.fromisoformat(norm)
if dt.tzinfo is not None:
return dt.astimezone().replace(tzinfo=None)
- return dt
+ return dt.replace(tzinfo=_tz.utc).astimezone().replace(tzinfo=None)
except Exception:
pass
@@ -77,13 +77,15 @@ def _normalize_dt(raw):
"%m/%d/%Y",
):
try:
- return _dt.strptime(text[: len(fmt)], fmt)
+ naive = _dt.strptime(text[: len(fmt)], fmt)
+ return naive.replace(tzinfo=_tz.utc).astimezone().replace(tzinfo=None)
except Exception:
pass
if len(text) >= 10:
try:
- return _dt.strptime(text[:10], "%Y-%m-%d")
+ naive = _dt.strptime(text[:10], "%Y-%m-%d")
+ return naive.replace(tzinfo=_tz.utc).astimezone().replace(tzinfo=None)
except Exception:
pass
@@ -167,7 +169,7 @@ def render_news(ticker: str):
rows_js = "const NEWS_ROWS=" + _json.dumps(rows).replace("</", "<\\/") + ";"
n_rows = max(len(rows), 18)
- height = 1240 + n_rows * 28
+ height = 1240 + n_rows * 90
_ROOT = (
"<style>*,*::before,*::after{box-sizing:border-box}"