1.0.0.8 logging updates
This commit is contained in:
@@ -3,9 +3,10 @@ Configuration manager - handles settings persistence
|
||||
"""
|
||||
import json
|
||||
import logging
|
||||
from logging_utils import get_logger
|
||||
from pathlib import Path
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class ConfigManager:
|
||||
@@ -35,18 +36,18 @@ class ConfigManager:
|
||||
try:
|
||||
with open(self.file_path, "r") as f:
|
||||
self.settings.update(json.load(f))
|
||||
logging.info("Settings loaded successfully")
|
||||
logger.info("Settings loaded successfully")
|
||||
except Exception as e:
|
||||
logging.error(f"Error loading settings: {e}")
|
||||
logger.error(f"Error loading settings: {e}")
|
||||
|
||||
def save_settings(self):
|
||||
"""Save settings to disk"""
|
||||
try:
|
||||
with open(self.file_path, "w") as f:
|
||||
json.dump(self.settings, f, indent=2)
|
||||
logging.info("Settings saved successfully")
|
||||
logger.info("Settings saved successfully")
|
||||
except Exception as e:
|
||||
logging.error(f"Error saving settings: {e}")
|
||||
logger.error(f"Error saving settings: {e}")
|
||||
|
||||
def get(self, key, default=None):
|
||||
"""Get a setting value"""
|
||||
@@ -55,7 +56,7 @@ class ConfigManager:
|
||||
def set(self, key, value):
|
||||
"""Set a setting value"""
|
||||
self.settings[key] = value
|
||||
logging.info(f"Setting updated: {key}")
|
||||
logger.info(f"Setting updated: {key}")
|
||||
|
||||
def get_all(self):
|
||||
"""Get all settings"""
|
||||
@@ -64,4 +65,4 @@ class ConfigManager:
|
||||
def update_multiple(self, updates):
|
||||
"""Update multiple settings at once"""
|
||||
self.settings.update(updates)
|
||||
logging.info(f"Updated {len(updates)} settings")
|
||||
logger.info(f"Updated {len(updates)} settings")
|
||||
|
||||
@@ -9,8 +9,9 @@ from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.orm import sessionmaker, relationship, scoped_session
|
||||
import json
|
||||
import logging
|
||||
from logging_utils import get_logger
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logger = get_logger(__name__)
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
@@ -504,11 +505,13 @@ class DatabaseManager:
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
def get_latest_scan_files(self):
|
||||
"""Get latest scan entry per file path"""
|
||||
def get_latest_scan_files(self, limit=500, offset=0):
|
||||
"""Get latest scan entry per file path, paged by scan_files.created_at"""
|
||||
session = self.get_session()
|
||||
try:
|
||||
files = session.query(ScanFile).order_by(ScanFile.created_at.desc()).all()
|
||||
files = session.query(ScanFile).order_by(
|
||||
ScanFile.created_at.desc()
|
||||
).offset(offset).limit(limit).all()
|
||||
latest = {}
|
||||
for file_entry in files:
|
||||
if file_entry.file_path in latest:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import logging
|
||||
from logging_utils import get_logger
|
||||
import os
|
||||
import re
|
||||
from pathlib import Path
|
||||
@@ -8,15 +9,7 @@ from typing import Generator, List, Dict
|
||||
# Logging configuration
|
||||
# ------------------------------------------------------------
|
||||
|
||||
logger = logging.getLogger("FileScanner")
|
||||
logger.setLevel(logging.INFO) # Change to DEBUG for deep tracing
|
||||
|
||||
handler = logging.StreamHandler()
|
||||
formatter = logging.Formatter(
|
||||
"%(asctime)s | %(levelname)-8s | %(name)s | %(message)s"
|
||||
)
|
||||
handler.setFormatter(formatter)
|
||||
logger.addHandler(handler)
|
||||
logger = get_logger("FileScanner")
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Import subtitle parser
|
||||
|
||||
@@ -7,9 +7,10 @@ from __future__ import annotations
|
||||
|
||||
import re
|
||||
import logging
|
||||
from logging_utils import get_logger
|
||||
from typing import Optional, List
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class KeywordStripper:
|
||||
|
||||
@@ -12,11 +12,11 @@ from __future__ import annotations
|
||||
import asyncio
|
||||
import aiohttp
|
||||
import logging
|
||||
from logging_utils import get_logger
|
||||
import time
|
||||
from typing import Dict, Optional
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class RateLimiter:
|
||||
|
||||
@@ -2,6 +2,7 @@ from __future__ import annotations
|
||||
|
||||
import re
|
||||
import logging
|
||||
from logging_utils import get_logger
|
||||
import textwrap
|
||||
import time
|
||||
import os
|
||||
@@ -25,8 +26,7 @@ except ImportError:
|
||||
except ImportError:
|
||||
_HAS_MSVCRT = False
|
||||
|
||||
logger = logging.getLogger("SubtitleProcessor")
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
|
||||
logger = get_logger("SubtitleProcessor")
|
||||
|
||||
# ============================================================
|
||||
# Sentinel tag for deterministic detection
|
||||
|
||||
+16
-16
@@ -3,10 +3,10 @@ TMDb API client - async movie and TV series metadata fetching
|
||||
"""
|
||||
import asyncio
|
||||
import aiohttp
|
||||
import logging
|
||||
from logging_utils import get_logger
|
||||
import time
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class TMDbClient:
|
||||
@@ -47,7 +47,7 @@ class TMDbClient:
|
||||
response_time_ms = int((time.time() - start_time) * 1000)
|
||||
|
||||
if response.status != 200:
|
||||
logging.error(f"TMDb HTTP error {response.status} for movie '{title}'")
|
||||
logger.error(f"TMDb HTTP error {response.status} for movie '{title}'")
|
||||
# Track failed API call
|
||||
if self.db_manager:
|
||||
self.db_manager.track_api_call(
|
||||
@@ -71,7 +71,7 @@ class TMDbClient:
|
||||
)
|
||||
return data["results"][0] # Return first match
|
||||
|
||||
logging.warning(f"No TMDb results for movie '{title}'")
|
||||
logger.warning(f"No TMDb results for movie '{title}'")
|
||||
# Track failed API call (no results)
|
||||
if self.db_manager:
|
||||
self.db_manager.track_api_call(
|
||||
@@ -83,7 +83,7 @@ class TMDbClient:
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error searching TMDb for movie '{title}': {e}")
|
||||
logger.error(f"Error searching TMDb for movie '{title}': {e}")
|
||||
return None
|
||||
|
||||
async def search_tv(self, title, year=None, language=None):
|
||||
@@ -115,7 +115,7 @@ class TMDbClient:
|
||||
response_time_ms = int((time.time() - start_time) * 1000)
|
||||
|
||||
if response.status != 200:
|
||||
logging.error(f"TMDb HTTP error {response.status} for TV '{title}'")
|
||||
logger.error(f"TMDb HTTP error {response.status} for TV '{title}'")
|
||||
# Track failed API call
|
||||
if self.db_manager:
|
||||
self.db_manager.track_api_call(
|
||||
@@ -139,7 +139,7 @@ class TMDbClient:
|
||||
)
|
||||
return data["results"][0] # Return first match
|
||||
|
||||
logging.warning(f"No TMDb results for TV series '{title}'")
|
||||
logger.warning(f"No TMDb results for TV series '{title}'")
|
||||
# Track failed API call (no results)
|
||||
if self.db_manager:
|
||||
self.db_manager.track_api_call(
|
||||
@@ -151,7 +151,7 @@ class TMDbClient:
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error searching TMDb for TV '{title}': {e}")
|
||||
logger.error(f"Error searching TMDb for TV '{title}': {e}")
|
||||
return None
|
||||
|
||||
async def get_movie_details(self, movie_id, language=None):
|
||||
@@ -174,13 +174,13 @@ class TMDbClient:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url, params=params) as response:
|
||||
if response.status != 200:
|
||||
logging.error(f"TMDb HTTP error {response.status} for movie ID {movie_id}")
|
||||
logger.error(f"TMDb HTTP error {response.status} for movie ID {movie_id}")
|
||||
return None
|
||||
|
||||
return await response.json()
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error getting TMDb movie details for ID {movie_id}: {e}")
|
||||
logger.error(f"Error getting TMDb movie details for ID {movie_id}: {e}")
|
||||
return None
|
||||
|
||||
async def get_tv_details(self, tv_id, language=None):
|
||||
@@ -203,13 +203,13 @@ class TMDbClient:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url, params=params) as response:
|
||||
if response.status != 200:
|
||||
logging.error(f"TMDb HTTP error {response.status} for TV ID {tv_id}")
|
||||
logger.error(f"TMDb HTTP error {response.status} for TV ID {tv_id}")
|
||||
return None
|
||||
|
||||
return await response.json()
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error getting TMDb TV details for ID {tv_id}: {e}")
|
||||
logger.error(f"Error getting TMDb TV details for ID {tv_id}: {e}")
|
||||
return None
|
||||
|
||||
async def get_tv_season(self, tv_id, season_number, language=None):
|
||||
@@ -233,13 +233,13 @@ class TMDbClient:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url, params=params) as response:
|
||||
if response.status != 200:
|
||||
logging.error(f"TMDb HTTP error {response.status} for TV {tv_id} season {season_number}")
|
||||
logger.error(f"TMDb HTTP error {response.status} for TV {tv_id} season {season_number}")
|
||||
return None
|
||||
|
||||
return await response.json()
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error getting TMDb season data: {e}")
|
||||
logger.error(f"Error getting TMDb season data: {e}")
|
||||
return None
|
||||
|
||||
async def fetch_summary(self, title, media_type="movie", year=None, season=None, episode=None, language=None):
|
||||
@@ -256,7 +256,7 @@ class TMDbClient:
|
||||
Returns:
|
||||
dict: {plot, title, year, media_type, rating} or None if not found
|
||||
"""
|
||||
logging.info(f"Fetching TMDb summary for: {title} (type: {media_type})")
|
||||
logger.info(f"Fetching TMDb summary for: {title} (type: {media_type})")
|
||||
|
||||
try:
|
||||
if media_type == "tv":
|
||||
@@ -327,5 +327,5 @@ class TMDbClient:
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching TMDb summary for '{title}': {e}")
|
||||
logger.error(f"Error fetching TMDb summary for '{title}': {e}")
|
||||
return None
|
||||
|
||||
@@ -3,10 +3,11 @@ TVmaze API client - async TV metadata fetching
|
||||
"""
|
||||
import aiohttp
|
||||
import logging
|
||||
from logging_utils import get_logger
|
||||
import re
|
||||
import time
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class TVMazeClient:
|
||||
|
||||
Reference in New Issue
Block a user