""" database.py Initializes and manages a lightweight SQLite database for the Aawaaz authentication framework to maintain a persistent processing history. """ import sqlite3 import os from datetime import datetime from typing import List, Dict, Any DB_PATH = "voiceguard.db" def init_db() -> None: """ Initializes the SQLite database. Creates the 'analysis_history' table if it does not already exist. """ conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS analysis_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, filename TEXT NOT NULL, timestamp TEXT NOT NULL, deepfake_label TEXT NOT NULL, deepfake_confidence REAL NOT NULL, watermark_confidence REAL NOT NULL, risk_score REAL NOT NULL, final_verdict TEXT NOT NULL, risk_level TEXT NOT NULL ) ''') conn.commit() conn.close() def save_analysis( filename: str, deepfake_label: str, deepfake_confidence: float, watermark_confidence: float, risk_score: float, final_verdict: str, risk_level: str ) -> None: """ Saves an analysis record into the database. Args: filename (str): The name of the analyzed file. deepfake_label (str): The predicted deepfake class ('real' or 'fake'). deepfake_confidence (float): Confidence score of the deepfake prediction. watermark_confidence (float): Confidence score of the watermark detection. risk_score (float): The final computed risk percentage. final_verdict (str): The human-readable string summarizing the assessment. risk_level (str): The categorical risk level ('Low', 'Medium', 'High'). """ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() cursor.execute(''' INSERT INTO analysis_history ( filename, timestamp, deepfake_label, deepfake_confidence, watermark_confidence, risk_score, final_verdict, risk_level ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ''', ( filename, timestamp, deepfake_label, deepfake_confidence, watermark_confidence, risk_score, final_verdict, risk_level )) conn.commit() conn.close() def fetch_all_history() -> List[Dict[str, Any]]: """ Retrieves all processing history from the database, sorted newest first. Returns: List[Dict[str, Any]]: A list of dictionaries representing past analysis records. """ # Ensure DB is initialized before fetching if not os.path.exists(DB_PATH): init_db() conn = sqlite3.connect(DB_PATH) conn.row_factory = sqlite3.Row # Enables column access by name cursor = conn.cursor() cursor.execute('SELECT * FROM analysis_history ORDER BY id DESC') rows = cursor.fetchall() conn.close() return [dict(row) for row in rows] def clear_history() -> None: """ Deletes all temporary analysis records from the 'analysis_history' table. The table structure is kept intact. """ if not os.path.exists(DB_PATH): return try: conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() # Delete all rows without dropping the table cursor.execute('DELETE FROM analysis_history') # Reset the auto-increment counter cursor.execute('DELETE FROM sqlite_sequence WHERE name="analysis_history"') conn.commit() except sqlite3.Error as e: print(f"Database error during clear_history: {e}") finally: if conn: conn.close()