From ddaafa22ca7b73bc62994da33f23bb0560488c3b Mon Sep 17 00:00:00 2001 From: g0ldyy <153996346+g0ldyy@users.noreply.github.com> Date: Tue, 6 Jan 2026 18:59:27 +0100 Subject: [PATCH] feat: add `RTN_FILTER_DEBUG` setting to enable verbose logging for torrent filtering rejections --- .env-sample | 1 + comet/core/logger.py | 1 + comet/core/models.py | 1 + comet/scrapers/comet.py | 2 +- comet/services/filtering.py | 23 ++++++++++++++++++++++- 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/.env-sample b/.env-sample index 4eb804f..8b91abb 100644 --- a/.env-sample +++ b/.env-sample @@ -244,6 +244,7 @@ TORRENT_DISABLED_STREAM_URL=https://comet.looks.legal # Optional URL included in # Content Filtering # # ============================== # REMOVE_ADULT_CONTENT=False +RTN_FILTER_DEBUG=False # Set to True to log why torrents are excluded by RTN (debug only, verbose!) DIGITAL_RELEASE_FILTER=False # Filter unreleased content TMDB_READ_ACCESS_TOKEN= # Optional: Provide your own TMDB Read Access Token to avoid using the shared default key diff --git a/comet/core/logger.py b/comet/core/logger.py index 5aa55e0..6a47c00 100644 --- a/comet/core/logger.py +++ b/comet/core/logger.py @@ -403,6 +403,7 @@ def log_startup_info(settings): ) logger.log("COMET", f"Remove Adult Content: {bool(settings.REMOVE_ADULT_CONTENT)}") + logger.log("COMET", f"RTN Filter Debug: {bool(settings.RTN_FILTER_DEBUG)}") logger.log( "COMET", f"Digital Release Filter: {bool(settings.DIGITAL_RELEASE_FILTER)}" ) diff --git a/comet/core/models.py b/comet/core/models.py index 7f73493..a5f870f 100644 --- a/comet/core/models.py +++ b/comet/core/models.py @@ -133,6 +133,7 @@ class AppSettings(BaseSettings): PROXY_ETHOS: Optional[str] = "always" RATELIMIT_MAX_RETRIES: Optional[int] = 3 RATELIMIT_RETRY_BASE_DELAY: Optional[float] = 1.0 + RTN_FILTER_DEBUG: Optional[bool] = False @field_validator("INDEXER_MANAGER_TYPE") def set_indexer_manager_type(cls, v, values): diff --git a/comet/scrapers/comet.py b/comet/scrapers/comet.py index cd1cd7d..e615f04 100644 --- a/comet/scrapers/comet.py +++ b/comet/scrapers/comet.py @@ -22,7 +22,7 @@ class CometScraper(BaseScraper): try: title = title_full.split("\n")[0].split("📄 ")[1] - except: + except Exception: continue seeders = ( int(title_full.split("👤 ")[1].split(" ")[0]) diff --git a/comet/services/filtering.py b/comet/services/filtering.py index d0027a3..7e172f2 100644 --- a/comet/services/filtering.py +++ b/comet/services/filtering.py @@ -1,30 +1,51 @@ from RTN import parse, title_match +from comet.core.logger import logger +from comet.core.models import settings + def filter_worker(torrents, title, year, year_end, aliases, remove_adult_content): - # todo: log reason for each filtered torrent results = [] for torrent in torrents: torrent_title = torrent["title"] if "sample" in torrent_title.lower() or torrent_title == "": + if settings.RTN_FILTER_DEBUG: + logger.log("FILTER", f"🚫 Rejected (Sample/Empty) | {torrent_title}") continue parsed = parse(torrent_title) if remove_adult_content and parsed.adult: + if settings.RTN_FILTER_DEBUG: + logger.log("FILTER", f"🔞 Rejected (Adult) | {torrent_title}") continue if not parsed.parsed_title or not title_match( title, parsed.parsed_title, aliases=aliases ): + if settings.RTN_FILTER_DEBUG: + logger.log( + "FILTER", + f"❌ Rejected (Title Mismatch) | {torrent_title} | Parsed: {parsed.parsed_title} | Expected: {title}", + ) continue if year and parsed.year: if year_end is not None: if not (year <= parsed.year <= year_end): + if settings.RTN_FILTER_DEBUG: + logger.log( + "FILTER", + f"📅 Rejected (Year Mismatch) | {torrent_title} | Year: {parsed.year} | Expected: {year}-{year_end}", + ) continue else: if year < (parsed.year - 1) or year > (parsed.year + 1): + if settings.RTN_FILTER_DEBUG: + logger.log( + "FILTER", + f"📅 Rejected (Year Mismatch) | {torrent_title} | Year: {parsed.year} | Expected: ~{year}", + ) continue torrent["parsed"] = parsed