From 2dc36a747ea082cee9ed7a3a00af7a1c29dfda3a Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Wed, 7 Sep 2022 15:32:52 -0400 Subject: [PATCH] [14] update trace --- VERSION | 2 +- modules/anidb.py | 3 +-- modules/anilist.py | 8 +++----- modules/flixpatrol.py | 3 +-- modules/icheckmovies.py | 3 +-- modules/imdb.py | 5 ++--- modules/letterboxd.py | 9 +++------ modules/logs.py | 27 ++++++++++++++++++++------- modules/mal.py | 6 ++---- modules/mdblist.py | 5 ++--- modules/notifiarr.py | 3 +-- modules/omdb.py | 3 +-- modules/operations.py | 14 +++++++------- modules/overlays.py | 3 +-- modules/plex.py | 3 +-- modules/radarr.py | 8 +++----- modules/sonarr.py | 8 +++----- modules/tautulli.py | 3 +-- modules/tmdb.py | 3 +-- modules/trakt.py | 19 ++++++++----------- modules/tvdb.py | 6 ++---- modules/webhooks.py | 13 +++++-------- plex_meta_manager.py | 2 +- 23 files changed, 71 insertions(+), 88 deletions(-) diff --git a/VERSION b/VERSION index ba7a3a12..940aa710 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.17.3-develop13 +1.17.3-develop14 diff --git a/modules/anidb.py b/modules/anidb.py index 075f822e..f62e88df 100644 --- a/modules/anidb.py +++ b/modules/anidb.py @@ -73,8 +73,7 @@ class AniDB: raise Failed("AniDB Error: Login failed") def _request(self, url, data=None): - if self.config.trace_mode: - logger.debug(f"URL: {url}") + logger.trace(f"URL: {url}") if data: return self.config.post_html(url, data=data, headers=util.header(self.language)) else: diff --git a/modules/anilist.py b/modules/anilist.py index aad9a0ea..878f9472 100644 --- a/modules/anilist.py +++ b/modules/anilist.py @@ -77,13 +77,11 @@ class AniList: return self._options def _request(self, query, variables, level=1): - if self.config.trace_mode: - logger.debug(f"Query: {query}") - logger.debug(f"Variables: {variables}") + logger.trace(f"Query: {query}") + logger.trace(f"Variables: {variables}") response = self.config.post(base_url, json={"query": query, "variables": variables}) json_obj = response.json() - if self.config.trace_mode: - logger.debug(f"Response: {json_obj}") + logger.trace(f"Response: {json_obj}") if "errors" in json_obj: if json_obj['errors'][0]['message'] == "Too Many Requests.": wait_time = int(response.headers["Retry-After"]) if "Retry-After" in response.headers else 0 diff --git a/modules/flixpatrol.py b/modules/flixpatrol.py index ed3eae80..b9b0c2e0 100644 --- a/modules/flixpatrol.py +++ b/modules/flixpatrol.py @@ -40,8 +40,7 @@ class FlixPatrol: self.config = config def _request(self, url, language, xpath): - if self.config.trace_mode: - logger.debug(f"URL: {url}") + logger.trace(f"URL: {url}") return self.config.get_html(url, headers=util.header(language)).xpath(xpath) def _tmdb(self, flixpatrol_url, language): diff --git a/modules/icheckmovies.py b/modules/icheckmovies.py index 4d627bce..1c573d32 100644 --- a/modules/icheckmovies.py +++ b/modules/icheckmovies.py @@ -11,8 +11,7 @@ class ICheckMovies: self.config = config def _request(self, url, language, xpath): - if self.config.trace_mode: - logger.debug(f"URL: {url}") + logger.trace(f"URL: {url}") return self.config.get_html(url, headers=util.header(language)).xpath(xpath) def _parse_list(self, list_url, language): diff --git a/modules/imdb.py b/modules/imdb.py index bf28a43d..93415ac2 100644 --- a/modules/imdb.py +++ b/modules/imdb.py @@ -124,9 +124,8 @@ class IMDb: params.pop("start", None) # noqa params.pop("count", None) # noqa params.pop("page", None) # noqa - if self.config.trace_mode: - logger.debug(f"URL: {imdb_base}") - logger.debug(f"Params: {params}") + logger.trace(f"URL: {imdb_base}") + logger.trace(f"Params: {params}") search_url = imdb_base.startswith(urls["searches"]) if limit < 1 or total < limit: limit = total diff --git a/modules/letterboxd.py b/modules/letterboxd.py index a2a075c8..aac905c4 100644 --- a/modules/letterboxd.py +++ b/modules/letterboxd.py @@ -32,8 +32,7 @@ class Letterboxd: return items, next_url def _parse_list(self, list_url, limit, language): - if self.config.trace_mode: - logger.debug(f"URL: {list_url}") + logger.trace(f"URL: {list_url}") items, next_url = self._parse_page(list_url, language) while len(next_url) > 0: time.sleep(2) @@ -44,8 +43,7 @@ class Letterboxd: return items def _tmdb(self, letterboxd_url, language): - if self.config.trace_mode: - logger.debug(f"URL: {letterboxd_url}") + logger.trace(f"URL: {letterboxd_url}") response = self.config.get_html(letterboxd_url, headers=util.header(language)) ids = response.xpath("//a[@data-track-action='TMDb']/@href") if len(ids) > 0 and ids[0]: @@ -55,8 +53,7 @@ class Letterboxd: raise Failed(f"Letterboxd Error: TMDb Movie ID not found at {letterboxd_url}") def get_list_description(self, list_url, language): - if self.config.trace_mode: - logger.debug(f"URL: {list_url}") + logger.trace(f"URL: {list_url}") response = self.config.get_html(list_url, headers=util.header(language)) descriptions = response.xpath("//meta[@property='og:description']/@content") return descriptions[0] if len(descriptions) > 0 and len(descriptions[0]) > 0 else None diff --git a/modules/logs.py b/modules/logs.py index b936c604..d0045179 100644 --- a/modules/logs.py +++ b/modules/logs.py @@ -28,12 +28,13 @@ _srcfile = os.path.normcase(fmt_filter.__code__.co_filename) class MyLogger: - def __init__(self, logger_name, default_dir, screen_width, separating_character, ignore_ghost, is_debug): + def __init__(self, logger_name, default_dir, screen_width, separating_character, ignore_ghost, is_debug, is_trace): self.logger_name = logger_name self.default_dir = default_dir self.screen_width = screen_width self.separating_character = separating_character self.is_debug = is_debug + self.is_trace = is_trace self.ignore_ghost = ignore_ghost self.log_dir = os.path.join(default_dir, LOG_DIR) self.playlists_dir = os.path.join(self.log_dir, PLAYLIST_DIR) @@ -136,7 +137,9 @@ class MyLogger: final_text = f"{text}{sep * side}{sep * side}" if left else f"{sep * side}{text}{sep * side}" return final_text - def separator(self, text=None, space=True, border=True, debug=False, side_space=True, left=False): + def separator(self, text=None, space=True, border=True, debug=False, trace=False, side_space=True, left=False): + if trace and not self.is_trace: + return None sep = " " if space else self.separating_character for handler in self._logger.handlers: self._formatter(handler, border=False) @@ -148,10 +151,13 @@ class MyLogger: if text: text_list = text.split("\n") for t in text_list: - if debug: - self.debug(f"|{sep}{self._centered(t, sep=sep, side_space=side_space, left=left)}{sep}|") + msg = f"|{sep}{self._centered(t, sep=sep, side_space=side_space, left=left)}{sep}|" + if trace: + self.trace(msg) + elif debug: + self.debug(msg) else: - self.info(f"|{sep}{self._centered(t, sep=sep, side_space=side_space, left=left)}{sep}|") + self.info(msg) if border and debug: self.debug(border_text) elif border: @@ -174,6 +180,10 @@ class MyLogger: if self._logger.isEnabledFor(WARNING): self._log(WARNING, str(msg), args, **kwargs) + def trace(self, msg, *args, **kwargs): + if self.is_trace: + self._log(DEBUG, str(msg), args, **kwargs) + def error(self, msg, *args, **kwargs): if self.save_errors: self.saved_errors.append(msg) @@ -186,8 +196,11 @@ class MyLogger: if self._logger.isEnabledFor(CRITICAL): self._log(CRITICAL, str(msg), args, **kwargs) - def stacktrace(self): - self.debug(traceback.format_exc()) + def stacktrace(self, trace=False): + if trace: + self.trace(traceback.format_exc()) + else: + self.debug(traceback.format_exc()) def _space(self, display_title): display_title = str(display_title) diff --git a/modules/mal.py b/modules/mal.py index 6b2332bc..e9fa3adf 100644 --- a/modules/mal.py +++ b/modules/mal.py @@ -162,12 +162,10 @@ class MyAnimeList: def _request(self, url, authorization=None): token = authorization["access_token"] if authorization else self.authorization["access_token"] - if self.config.trace_mode: - logger.debug(f"URL: {url}") + logger.trace(f"URL: {url}") try: response = self.config.get_json(url, headers={"Authorization": f"Bearer {token}"}) - if self.config.trace_mode: - logger.debug(f"Response: {response}") + logger.trace(f"Response: {response}") if "error" in response: raise Failed(f"MyAnimeList Error: {response['error']}") else: return response except JSONDecodeError: diff --git a/modules/mdblist.py b/modules/mdblist.py index 93d5c577..4670d7b9 100644 --- a/modules/mdblist.py +++ b/modules/mdblist.py @@ -101,9 +101,8 @@ class Mdblist: mdb_dict, expired = self.config.Cache.query_mdb(key, self.expiration) if mdb_dict and expired is False: return MDbObj(mdb_dict) - if self.config.trace_mode: - logger.debug(f"ID: {key}") - logger.debug(f"Params: {params}") + logger.trace(f"ID: {key}") + logger.trace(f"Params: {params}") try: response = self.config.get_json(api_url, params=params) except JSONDecodeError: diff --git a/modules/notifiarr.py b/modules/notifiarr.py index 15704d3c..502fb40c 100644 --- a/modules/notifiarr.py +++ b/modules/notifiarr.py @@ -31,7 +31,6 @@ class Notifiarr: def get_url(self, path): url = f"{dev_url if self.develop else base_url}{'notification/test' if self.test else f'{path}{self.apikey}'}" - if self.config.trace_mode: - logger.debug(url) + logger.trace(url) params = {"event": "pmm"} if self.test else None return url, params diff --git a/modules/omdb.py b/modules/omdb.py index 7d7a0ca7..f5f5d245 100644 --- a/modules/omdb.py +++ b/modules/omdb.py @@ -56,8 +56,7 @@ class OMDb: omdb_dict, expired = self.config.Cache.query_omdb(imdb_id, self.expiration) if omdb_dict and expired is False: return OMDbObj(imdb_id, omdb_dict) - if self.config.trace_mode: - logger.debug(f"IMDb ID: {imdb_id}") + logger.trace(f"IMDb ID: {imdb_id}") response = self.config.get(base_url, params={"i": imdb_id, "apikey": self.apikey}) if response.status_code < 400: omdb = OMDbObj(imdb_id, response.json()) diff --git a/modules/operations.py b/modules/operations.py index c342b404..e37ad12f 100644 --- a/modules/operations.py +++ b/modules/operations.py @@ -178,28 +178,28 @@ class Operations: try: mdb_item = self.config.Mdblist.get_series(tvdb_id) except Failed as e: - logger.error(str(e)) + logger.trace(str(e)) except Exception: - logger.error(f"TVDb ID: {tvdb_id}") + logger.trace(f"TVDb ID: {tvdb_id}") raise if tmdb_id and mdb_item is None: try: mdb_item = self.config.Mdblist.get_movie(tmdb_id) except Failed as e: - logger.error(str(e)) + logger.trace(str(e)) except Exception: - logger.error(f"TMDb ID: {tmdb_id}") + logger.trace(f"TMDb ID: {tmdb_id}") raise if imdb_id and mdb_item is None: try: mdb_item = self.config.Mdblist.get_imdb(imdb_id) except Failed as e: - logger.error(str(e)) + logger.trace(str(e)) except Exception: - logger.error(f"IMDb ID: {imdb_id}") + logger.trace(f"IMDb ID: {imdb_id}") raise if mdb_item is None: - logger.info(f"No TMDb ID, TVDb ID, or IMDb ID for Guid: {item.guid}") + logger.warning(f"No TMDb ID, TVDb ID, or IMDb ID for Guid: {item.guid}") def get_rating(attribute): if tmdb_item and attribute == "tmdb": diff --git a/modules/overlays.py b/modules/overlays.py index c6d48b24..edfd6c81 100644 --- a/modules/overlays.py +++ b/modules/overlays.py @@ -224,8 +224,7 @@ class Overlays: else: actual_attr = format_var if not hasattr(item, actual_attr) or getattr(item, actual_attr) is None: - logger.warning(f"Overlay Warning: No {full_text} found") - continue + raise Failed(f"Overlay Warning: No {full_text} found") actual_value = getattr(item, actual_attr) if self.config.Cache: cache_store = actual_value.strftime("%Y-%m-%d") if format_var in overlay.date_vars else actual_value diff --git a/modules/plex.py b/modules/plex.py index 4de5b19b..b21180ba 100644 --- a/modules/plex.py +++ b/modules/plex.py @@ -817,8 +817,7 @@ class Plex(Library): logger.warning(f"Plex Warning: {item.title} has no Season 1 Episode 1 ") elif method == "plex_search": logger.info(f"Processing {data[1]}") - if self.config.trace_mode: - logger.debug(data[2]) + logger.trace(data[2]) items = self.get_filter_items(data[2]) elif method == "plex_collectionless": good_collections = [] diff --git a/modules/radarr.py b/modules/radarr.py index 2689ddd2..ca0df41b 100644 --- a/modules/radarr.py +++ b/modules/radarr.py @@ -65,9 +65,8 @@ class Radarr: if movie.path: arr_paths[movie.path[:-1].lower() if movie.path.endswith(("/", "\\")) else movie.path.lower()] = movie.tmdbId arr_ids[movie.tmdbId] = movie - if self.config.trace_mode: - logger.debug(arr_paths) - logger.debug(arr_ids) + logger.trace(arr_paths) + logger.trace(arr_ids) added = [] exists = [] @@ -110,8 +109,7 @@ class Radarr: invalid_root.append(item) continue movie = self.api.get_movie(tmdb_id=tmdb_id) - if self.config.trace_mode: - logger.debug(f"Folder to Check: {folder}/{movie.folder}") + logger.trace(f"Folder to Check: {folder}/{movie.folder}") if f"{folder}/{movie.folder}".lower() in arr_paths: path_in_use[f"{folder}/{movie.folder}"] = tmdb_id continue diff --git a/modules/sonarr.py b/modules/sonarr.py index 3e53f194..27bcd83e 100644 --- a/modules/sonarr.py +++ b/modules/sonarr.py @@ -91,9 +91,8 @@ class Sonarr: if series.path: arr_paths[series.path[:-1].lower() if series.path.endswith(("/", "\\")) else series.path.lower()] = series.tvdbId arr_ids[series.tvdbId] = series - if self.config.trace_mode: - logger.debug(arr_paths) - logger.debug(arr_ids) + logger.trace(arr_paths) + logger.trace(arr_ids) added = [] exists = [] @@ -136,8 +135,7 @@ class Sonarr: invalid_root.append(item) continue show = self.api.get_series(tvdb_id=tvdb_id) - if self.config.trace_mode: - logger.debug(f"Folder to Check: {folder}/{show.folder}") + logger.trace(f"Folder to Check: {folder}/{show.folder}") if f"{folder}/{show.folder}".lower() in arr_paths: path_in_use[f"{folder}/{show.folder}"] = tvdb_id continue diff --git a/modules/tautulli.py b/modules/tautulli.py index 37c9a2ed..ec904b64 100644 --- a/modules/tautulli.py +++ b/modules/tautulli.py @@ -60,6 +60,5 @@ class Tautulli: return rating_keys def _request(self, url): - if self.config.trace_mode: - logger.debug(f"Tautulli URL: {url}") + logger.trace(f"Tautulli URL: {url}") return self.config.get_json(url) diff --git a/modules/tmdb.py b/modules/tmdb.py index cded87d5..ab30bae3 100644 --- a/modules/tmdb.py +++ b/modules/tmdb.py @@ -331,8 +331,7 @@ class TMDb: for date_attr in date_methods: if date_attr in attrs: attrs[date_attr] = util.validate_date(attrs[date_attr], f"tmdb_discover attribute {date_attr}", return_as="%Y-%m-%d") - if self.config.trace_mode: - logger.debug(f"Params: {attrs}") + logger.trace(f"Params: {attrs}") results = self.TMDb.discover_movies(**attrs) if is_movie else self.TMDb.discover_tv_shows(**attrs) amount = results.total_results if limit == 0 or results.total_results < limit else limit ids = [(i.id, result_type) for i in results.get_results(amount)] diff --git a/modules/trakt.py b/modules/trakt.py index 90917267..3809e1d1 100644 --- a/modules/trakt.py +++ b/modules/trakt.py @@ -141,8 +141,7 @@ class Trakt: raise Failed(f"Trakt Error: ({response.status_code}) {response.reason}") #raise Failed("Trakt Error: Invalid trakt pin. If you're sure you typed it in correctly your client_id or client_secret may be invalid") response_json = response.json() - if self.config.trace_mode: - logger.debug(response_json) + logger.trace(response_json) if not self._save(response_json): raise Failed("Trakt Error: New Authorization Failed") @@ -210,12 +209,11 @@ class Trakt: params = {} pages = 1 current = 1 - if self.config.trace_mode: - logger.debug(f"URL: {base_url}{url}") - if params: - logger.debug(f"Params: {params}") - if json: - logger.debug(f"JSON: {json}") + logger.trace(f"URL: {base_url}{url}") + if params: + logger.trace(f"Params: {params}") + if json: + logger.trace(f"JSON: {json}") while current <= pages: if pages > 1: params["page"] = current @@ -228,9 +226,8 @@ class Trakt: if response.status_code >= 400: raise Failed(f"({response.status_code}) {response.reason}") json_data = response.json() - if self.config.trace_mode: - logger.debug(f"Headers: {response.headers}") - logger.debug(f"Response: {json_data}") + logger.trace(f"Headers: {response.headers}") + logger.trace(f"Response: {json_data}") if isinstance(json_data, dict): return json_data else: diff --git a/modules/tvdb.py b/modules/tvdb.py index 0379a2dc..a5452b97 100644 --- a/modules/tvdb.py +++ b/modules/tvdb.py @@ -136,8 +136,7 @@ class TVDb: tvdb_id, expired = self.config.Cache.query_tvdb_map(tvdb_url, self.expiration) if tvdb_id and not expired and not is_movie: return tvdb_id, None, None - if self.config.trace_mode: - logger.debug(f"URL: {tvdb_url}") + logger.trace(f"URL: {tvdb_url}") try: response = self.get_request(tvdb_url) except ParserError: @@ -176,8 +175,7 @@ class TVDb: def _ids_from_url(self, tvdb_url): ids = [] tvdb_url = tvdb_url.strip() - if self.config.trace_mode: - logger.debug(f"URL: {tvdb_url}") + logger.trace(f"URL: {tvdb_url}") if tvdb_url.startswith((urls["list"], urls["alt_list"])): try: response = self.config.get_html(tvdb_url, headers=util.header(self.language)) diff --git a/modules/webhooks.py b/modules/webhooks.py index 8a65139f..baeb41fc 100644 --- a/modules/webhooks.py +++ b/modules/webhooks.py @@ -15,14 +15,12 @@ class Webhooks: self.notifiarr = notifiarr def _request(self, webhooks, json): - if self.config.trace_mode: - logger.separator("Webhooks", space=False, border=False, debug=True) - logger.debug("") - logger.debug(f"JSON: {json}") + logger.separator("Webhooks", space=False, border=False, trace=True) + logger.trace("") + logger.trace(f"JSON: {json}") for webhook in list(set(webhooks)): response = None - if self.config.trace_mode: - logger.debug(f"Webhook: {webhook}") + logger.trace(f"Webhook: {webhook}") if webhook == "notifiarr": if self.notifiarr: url, params = self.notifiarr.get_url("notification/pmm/") @@ -39,8 +37,7 @@ class Webhooks: if response: try: response_json = response.json() - if self.config.trace_mode: - logger.debug(f"Response: {response_json}") + logger.trace(f"Response: {response_json}") if webhook == "notifiarr" and self.notifiarr and response.status_code == 400: def remove_from_config(text, hook_cat): if response_json["details"]["response"] == text: diff --git a/plex_meta_manager.py b/plex_meta_manager.py index 564b9b83..22da8097 100644 --- a/plex_meta_manager.py +++ b/plex_meta_manager.py @@ -111,7 +111,7 @@ elif not os.path.exists(os.path.join(default_dir, "config.yml")): print(f"Config Error: config not found at {os.path.abspath(default_dir)}") sys.exit(0) -logger = MyLogger("Plex Meta Manager", default_dir, screen_width, divider[0], ignore_ghost, test or debug or trace) +logger = MyLogger("Plex Meta Manager", default_dir, screen_width, divider[0], ignore_ghost, test or debug, trace) from modules import util util.logger = logger