refactor: apply consistent formatting and improve code readability across backend modules
This commit is contained in:
@@ -1,11 +1,24 @@
|
||||
import json
|
||||
import sqlite3
|
||||
import time
|
||||
from contextlib import contextmanager
|
||||
from pathlib import Path
|
||||
import sqlite3
|
||||
from typing import Iterator
|
||||
|
||||
from backend.app.config import logger, DB_PATH, update_constants_from_db, OLLAMA_HOST, CRON_HOURS, MIN_CRON_HOURS, \
|
||||
SYNC_COOLDOWN_MINUTES, LLM_MODEL, LLM_TIMEOUT_SECONDS, OLLAMA_API_TIMEOUT_SECONDS, ARTICLE_FETCH_TIMEOUT, \
|
||||
MAX_ARTICLE_LENGTH
|
||||
from backend.app.config import (
|
||||
ARTICLE_FETCH_TIMEOUT,
|
||||
CRON_HOURS,
|
||||
DB_PATH,
|
||||
LLM_MODEL,
|
||||
LLM_TIMEOUT_SECONDS,
|
||||
MAX_ARTICLE_LENGTH,
|
||||
MIN_CRON_HOURS,
|
||||
OLLAMA_API_TIMEOUT_SECONDS,
|
||||
OLLAMA_HOST,
|
||||
SYNC_COOLDOWN_MINUTES,
|
||||
logger,
|
||||
update_constants_from_db,
|
||||
)
|
||||
|
||||
|
||||
class DatabaseManager:
|
||||
@@ -41,7 +54,8 @@ class DatabaseManager:
|
||||
schema_sql = f.read()
|
||||
|
||||
with self.get_cursor() as cursor:
|
||||
statements = [stmt.strip() for stmt in schema_sql.split(';') if stmt.strip()]
|
||||
statements = [stmt.strip()
|
||||
for stmt in schema_sql.split(';') if stmt.strip()]
|
||||
for statement in statements:
|
||||
cursor.execute(statement)
|
||||
|
||||
@@ -85,14 +99,12 @@ class DatabaseManager:
|
||||
"""
|
||||
Seed initial feeds from seed_feeds.json file.
|
||||
"""
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
try:
|
||||
seed_file = Path(__file__).parent / "seed_feeds.json"
|
||||
|
||||
if not seed_file.exists():
|
||||
logger.warning("⚠️ seed_feeds.json not found, skipping feed seeding")
|
||||
logger.warning(
|
||||
"⚠️ seed_feeds.json not found, skipping feed seeding")
|
||||
return
|
||||
|
||||
with open(seed_file, 'r', encoding='utf-8') as f:
|
||||
@@ -101,10 +113,7 @@ class DatabaseManager:
|
||||
for country, urls in feeds_data.items():
|
||||
for url in urls:
|
||||
cursor.execute(
|
||||
"INSERT OR IGNORE INTO feeds (country, url) VALUES (?, ?)",
|
||||
(country, url)
|
||||
)
|
||||
|
||||
"INSERT OR IGNORE INTO feeds (country, url) VALUES (?, ?)", (country, url))
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to seed feeds: {e}")
|
||||
@@ -182,8 +191,7 @@ class DatabaseManager:
|
||||
conn.rollback()
|
||||
if "database is locked" in str(e).lower():
|
||||
logger.warning(
|
||||
f"⚠️ Database temporarily locked, operation may need retry: {e}"
|
||||
)
|
||||
f"⚠️ Database temporarily locked, operation may need retry: {e}")
|
||||
raise e
|
||||
except Exception as e:
|
||||
if conn:
|
||||
@@ -194,7 +202,9 @@ class DatabaseManager:
|
||||
conn.close()
|
||||
|
||||
@contextmanager
|
||||
def get_cursor_with_retry(self, readonly: bool = False, max_retries: int = 3) -> Iterator[sqlite3.Cursor]:
|
||||
def get_cursor_with_retry(self,
|
||||
readonly: bool = False,
|
||||
max_retries: int = 3) -> Iterator[sqlite3.Cursor]:
|
||||
"""
|
||||
Context manager with retry logic for database operations.
|
||||
|
||||
@@ -211,13 +221,13 @@ class DatabaseManager:
|
||||
yield cursor
|
||||
return
|
||||
except sqlite3.OperationalError as e:
|
||||
if "database is locked" in str(e).lower() and attempt < max_retries:
|
||||
if "database is locked" in str(
|
||||
e).lower() and attempt < max_retries:
|
||||
wait_time = (attempt + 1) * 0.1
|
||||
logger.warning(
|
||||
f"⚠️ Database locked, retrying in {wait_time}s "
|
||||
f"(attempt {attempt + 1}/{max_retries + 1})"
|
||||
)
|
||||
import time
|
||||
time.sleep(wait_time)
|
||||
continue
|
||||
raise e
|
||||
|
Reference in New Issue
Block a user