| import os | |
| import sqlite3 | |
| from datetime import datetime, timedelta | |
| def load_sql_query(filename: str) -> str: | |
| """Load SQL query from file""" | |
| with open(filename, 'r') as f: | |
| return f.read() | |
| SQL_SELECT_METADATA = "sql/select_metadata.sql" | |
| SQL_UPDATE_METADATA = "sql/update_metadata.sql" | |
| SQL_CREATE_METADATA = "sql/create_metadata.sql" | |
| def create_metadata_table(db_path: str): | |
| """Create metadata table if it doesn't exist""" | |
| query = load_sql_query(SQL_CREATE_METADATA) | |
| with sqlite3.connect(db_path) as conn: | |
| cursor = conn.cursor() | |
| cursor.execute(query) | |
| conn.commit() | |
| def update_db_timestamp(db_path: str): | |
| """Update last database fetch timestamp""" | |
| query = load_sql_query(SQL_UPDATE_METADATA) | |
| with sqlite3.connect(db_path) as conn: | |
| cursor = conn.cursor() | |
| cursor.execute(query, ("last_update", datetime.now().isoformat())) | |
| conn.commit() | |
| def is_database_outdated(db_path: str, age_threshold_hours: int = 24) -> bool: | |
| """ | |
| Check if database needs update | |
| Returns True if: | |
| - Database file doesn't exist | |
| - No last_update metadata | |
| - Last update was more than age_threshold_hours ago | |
| """ | |
| if not os.path.exists(db_path): | |
| return True | |
| query = load_sql_query(SQL_SELECT_METADATA) | |
| try: | |
| with sqlite3.connect(db_path) as conn: | |
| cursor = conn.cursor() | |
| cursor.execute(query, ("last_update",)) | |
| result = cursor.fetchone() | |
| if not result: | |
| return True | |
| last_update = datetime.fromisoformat(result[0]) | |
| age_threshold = timedelta(hours=age_threshold_hours) | |
| return datetime.now() - last_update > age_threshold | |
| except (sqlite3.Error, ValueError) as e: | |
| print(f"Error checking database age: {e}") | |
| return True |