CoolFace
Apppublic

kussssh/IPO-Analyzer

sourceHugging Faceupdated 5mo agoView on Hugging Face
0likes
reset_analysis_state.py83 linesDownload Raw Back to backend
1"""2One-time utility to wipe cached analysis artifacts while preserving catalog data.3"""4from __future__ import annotations5 6import sqlite37import shutil8from pathlib import Path9 10from backend.config import CACHE_DB_PATH, CHROMA_BASE_DIR, OUTPUT_DIR, UPLOAD_DIR11from backend.database import reset_analysis_state12 13 14def _clear_directory(path: Path) -> int:15    if not path.exists():16        return 017    removed = 018    for child in path.iterdir():19        if child.is_dir():20            shutil.rmtree(child, ignore_errors=True)21            removed += 122        else:23            child.unlink(missing_ok=True)24            removed += 125    return removed26 27 28def _reset_sqlite_direct() -> dict[str, int]:29    conn = sqlite3.connect(CACHE_DB_PATH, timeout=60, check_same_thread=False)30    try:31        analyses_deleted = conn.execute("DELETE FROM analyses").rowcount32        diffs_deleted = conn.execute("DELETE FROM diffs").rowcount33        chunks_deleted = conn.execute("DELETE FROM document_chunks").rowcount34        documents_reset = conn.execute(35            """36            UPDATE documents37            SET38                pdf_url = NULL,39                local_path = NULL,40                pdf_sha256 = NULL,41                downloaded_at = NULL,42                processed_at = NULL,43                page_count = NULL,44                status = CASE45                    WHEN detail_url IS NOT NULL AND available = 1 THEN 'cataloged'46                    WHEN detail_url IS NULL OR available = 0 THEN 'missing'47                    ELSE 'pending'48                END,49                metadata_json = '{}'50            """51        ).rowcount52        conn.commit()53        return {54            "analyses_deleted": analyses_deleted,55            "diffs_deleted": diffs_deleted,56            "chunks_deleted": chunks_deleted,57            "documents_reset": documents_reset,58        }59    finally:60        conn.close()61 62 63def main() -> None:64    try:65        db_counts = reset_analysis_state()66    except Exception:67        db_counts = _reset_sqlite_direct()68    outputs_removed = _clear_directory(OUTPUT_DIR)69    chroma_removed = _clear_directory(CHROMA_BASE_DIR)70    uploads_removed = _clear_directory(UPLOAD_DIR)71    print(72        {73            **db_counts,74            "outputs_removed": outputs_removed,75            "chroma_entries_removed": chroma_removed,76            "uploads_removed": uploads_removed,77        }78    )79 80 81if __name__ == "__main__":82    main()83