Db3_update / config.py
alesamodio's picture
update my uuid
ac97c26
import os
import re
import streamlit as st
def _get(name: str, required: bool = True) -> str | None:
val = os.getenv(name)
if val:
return val
# try Streamlit secrets only if Streamlit is present
try:
import streamlit as st # noqa
val = st.secrets.get(name)
except Exception:
val = None
if not val and required:
raise RuntimeError(f"Missing secret: {name}")
return val
# ── Supabase project keys ──────────────────────────────────────────────────────
SUPABASE_URL = _get("SUPABASE_URL")
SUPABASE_ANON_KEY = _get("SUPABASE_ANON_KEY")
# Only use SERVICE_KEY in trusted server-side code (not browser-exposed paths)
SUPABASE_SERVICE_KEY = os.getenv("SUPABASE_SERVICE_KEY") or st.secrets.get("SUPABASE_SERVICE_KEY")
# ── API keys ───────────────────────────────────────────────────────────────────
OPENAI_KEY = os.getenv("OPENAI_API_KEY")
HF_KEY = os.getenv("HF_TOKEN")
GNEWS_KEY = os.getenv("GNEWS_KEY")
# ── Models ─────────────────────────────────────────────────────────────────────
OPENAI_CHAT_MODEL = os.getenv("OPENAI_CHAT_MODEL", "gpt-4.1-mini")
OPENAI_CLASSIFIER_MODEL = os.getenv("OPENAI_CLASSIFIER_MODEL", "gpt-4.1-mini")
HF_EMBEDDING_MODEL = os.getenv("HF_EMBEDDING_MODEL", "intfloat/e5-large-v2")
# ── Legacy globals (kept for backward-compat) ──────────────────────────────────
MY_SUPABASE_UUID = os.getenv("MY_SUPABASE_UUID", "18b4ef7c-8f18-4fcf-98f2-eaa6d5485a54")
# ── Username = cleaned email helpers ───────────────────────────────────────────
_USERNAME_SAFE_RE = re.compile(r"[^a-z0-9_-]+")
def username_from_email(email: str | None) -> str:
"""
Build a path-safe username from an email:
- take local-part (before '@'), lowercase
- keep only [a-z0-9_-], replace others with '-'
"""
if not email:
return "user"
local = email.split("@", 1)[0].lower().strip()
safe = _USERNAME_SAFE_RE.sub("-", local).strip("-")
return safe or "user"
# ── Session β†’ globals refresh (no external deps) ───────────────────────────────
def refresh_user_context() -> None:
"""
Re-sync legacy globals from Streamlit session after login.
"""
user_id = st.session_state.get("uuid")
email = st.session_state.get("email")
username = st.session_state.get("username") or username_from_email(email)
# ── Public getters used across the app ────────────────────────────────────────
def get_uuid() -> str | None:
"""
Preferred source: st.session_state['uuid'].
"""
return st.session_state.get("uuid")
def get_username() -> str | None:
"""
Preferred: st.session_state['username'] (email-derived).
Fallbacks (in order):
- derive from st.session_state['email']
"""
return (
st.session_state.get("username")
or username_from_email(st.session_state.get("email"))
)