| import re | |
| import tempfile | |
| import gradio as gr | |
| def sanitize_filename(name: str, default: str): | |
| if not name or not name.strip(): | |
| return default | |
| clean = re.sub(r'[\\/*?:"<>|]', "", name).strip() | |
| return clean if clean else default | |
| def dataframe_to_csv(df, filename): | |
| if df is None: | |
| gr.Warning("❌ No table available to download.") | |
| return None | |
| base = sanitize_filename(filename, "descriptive_statistics") | |
| with tempfile.NamedTemporaryFile( | |
| delete=False, | |
| mode="w", | |
| suffix=".csv", | |
| prefix=base + "_", | |
| encoding="utf-8", | |
| ) as tmp: | |
| df.to_csv(tmp.name, index=False) | |
| return tmp.name | |
| def figure_to_png(fig, filename: str): | |
| if fig is None: | |
| return None | |
| tmp = tempfile.NamedTemporaryFile( | |
| delete=False, | |
| suffix=".png", | |
| prefix=filename + "_" | |
| ) | |
| fig.savefig(tmp.name, dpi=200, bbox_inches="tight") | |
| return tmp.name |