Begin #34
This commit is contained in:
@@ -19,15 +19,21 @@ class MetadataFetchError(Exception):
|
||||
"""Raised when metadata fetch permanently fails after retries."""
|
||||
|
||||
|
||||
# Suppress all logging output from this module and its children
|
||||
for name in [__name__, "utils.sr_wrapper"]:
|
||||
# Suppress noisy logging from this module and from the `streamrip` library
|
||||
# We set propagate=False so messages don't bubble up to the root logger and
|
||||
# attach a NullHandler where appropriate to avoid "No handler found" warnings.
|
||||
for name in [__name__, "utils.sr_wrapper", "streamrip", "streamrip.client"]:
|
||||
logger = logging.getLogger(name)
|
||||
logger.setLevel(logging.INFO) # Temporarily set to INFO for debugging LRC
|
||||
# Keep default level (or raise to WARNING) so non-important logs are dropped
|
||||
try:
|
||||
logger.setLevel(logging.WARNING)
|
||||
except Exception:
|
||||
pass
|
||||
logger.propagate = False
|
||||
for handler in logger.handlers:
|
||||
handler.setLevel(logging.INFO)
|
||||
# Also set the root logger to CRITICAL as a last resort (may affect global logging)
|
||||
# logging.getLogger().setLevel(logging.CRITICAL)
|
||||
# Ensure a NullHandler is present so logs don't propagate and no missing-handler
|
||||
# warnings are printed when the package emits records.
|
||||
if not any(isinstance(h, logging.NullHandler) for h in logger.handlers):
|
||||
logger.addHandler(logging.NullHandler())
|
||||
|
||||
|
||||
load_dotenv()
|
||||
@@ -684,21 +690,22 @@ class SRUtil:
|
||||
except Exception as e:
|
||||
# Exponential backoff with jitter for 429 or other errors
|
||||
delay = self.RETRY_DELAY * (2 ** (attempt - 1)) + random.uniform(0, 0.5)
|
||||
logging.warning(
|
||||
"Metadata fetch failed for track %s (attempt %d/%d): %s. Retrying in %.2fs",
|
||||
track_id,
|
||||
attempt,
|
||||
self.MAX_METADATA_RETRIES,
|
||||
str(e),
|
||||
delay,
|
||||
)
|
||||
if attempt < self.MAX_METADATA_RETRIES:
|
||||
logging.warning(
|
||||
"Retrying metadata fetch for track %s (attempt %d/%d): %s. Next retry in %.2fs",
|
||||
track_id,
|
||||
attempt,
|
||||
self.MAX_METADATA_RETRIES,
|
||||
str(e),
|
||||
delay,
|
||||
)
|
||||
await asyncio.sleep(delay)
|
||||
else:
|
||||
logging.error(
|
||||
"Metadata fetch failed permanently for track %s after %d attempts",
|
||||
"Metadata fetch failed permanently for track %s after %d attempts: %s",
|
||||
track_id,
|
||||
self.MAX_METADATA_RETRIES,
|
||||
str(e),
|
||||
)
|
||||
# Raise a specific exception so callers can react (e.g. notify)
|
||||
raise MetadataFetchError(
|
||||
|
||||
Reference in New Issue
Block a user