Spaces:
Sleeping
Sleeping
File size: 1,669 Bytes
199bfa3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | """
Cached query wrappers for Streamlit performance.
Uses @st.cache_data to avoid re-fetching identical data on every rerun.
Tag names must be passed as tuples (not lists) for hashability.
"""
import streamlit as st
from typing import Optional
from datetime import datetime
from core.db_connector import get_db_connector
@st.cache_data(ttl=600)
def cached_get_pivot_data(
tag_names: tuple,
start_time: datetime,
end_time: datetime,
table_override: Optional[str] = None,
_cache_ver: int = 2,
):
"""Cached pivot data query (10-minute TTL). Supports table_override for resolution control."""
db = get_db_connector()
if table_override:
# Fetch via get_sensor_data with override, then pivot manually
df = db.get_sensor_data(list(tag_names), start_time, end_time, table_override=table_override)
if df.empty:
return df
pivot_df = df.pivot_table(index='timestamp', columns='tag_name', values='value').reset_index()
pivot_df.columns.name = None
return pivot_df
return db.get_pivot_data(list(tag_names), start_time, end_time)
@st.cache_data(ttl=600)
def cached_get_sensor_data(
tag_names: tuple,
start_time: datetime,
end_time: datetime,
table_override: Optional[str] = None,
_cache_ver: int = 2,
):
"""Cached sensor data query (10-minute TTL)"""
db = get_db_connector()
return db.get_sensor_data(list(tag_names), start_time, end_time, table_override=table_override)
@st.cache_data(ttl=3600)
def cached_get_available_months():
"""Cached available months query (1-hour TTL)"""
db = get_db_connector()
return db.get_available_months()
|