|
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 |