From 2a5bee4c7600fd1f54dd8207ff007939328fd83f Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Sun, 11 Apr 2021 11:31:59 -0400 Subject: [PATCH] another timeout update --- modules/builder.py | 25 +++++-------------------- modules/config.py | 33 ++++++++++++++++++++++++--------- modules/util.py | 13 ++++++++++--- plex_meta_manager.py | 2 +- 4 files changed, 40 insertions(+), 33 deletions(-) diff --git a/modules/builder.py b/modules/builder.py index 03ce43e2..15b9c01b 100644 --- a/modules/builder.py +++ b/modules/builder.py @@ -453,24 +453,15 @@ class CollectionBuilder: elif method_name == "label": self.details[method_name] = util.get_list(method_data) elif method_name in boolean_details: - if isinstance(method_data, bool): self.details[method_name] = method_data - elif str(method_data).lower() in ["t", "true"]: self.details[method_name] = True - elif str(method_data).lower() in ["f", "false"]: self.details[method_name] = False - else: raise Failed(f"Collection Error: {method_name} attribute must be either true or false") + self.details[method_name] = util.get_bool(method_name, method_data) elif method_name in all_details: self.details[method_name] = method_data elif method_name == "radarr_add": - if isinstance(method_data, bool): self.add_to_radarr = method_data - elif str(method_data).lower() in ["t", "true"]: self.add_to_radarr = True - elif str(method_data).lower() in ["f", "false"]: self.add_to_radarr = False - else: raise Failed(f"Collection Error: {method_name} attribute must be either true or false") + self.add_to_radarr = util.get_bool(method_name, method_data) elif method_name == "radarr_folder": self.radarr_options["folder"] = method_data elif method_name in ["radarr_monitor", "radarr_search"]: - if isinstance(method_data, bool): self.radarr_options[method_name[7:]] = method_data - elif str(method_data).lower() in ["t", "true"]: self.radarr_options[method_name[7:]] = True - elif str(method_data).lower() in ["f", "false"]: self.radarr_options[method_name[7:]] = False - else: raise Failed(f"Collection Error: {method_name} attribute must be either true or false") + self.radarr_options[method_name[7:]] = util.get_bool(method_name, method_data) elif method_name == "radarr_availability": if str(method_data).lower() in radarr.availability_translation: self.radarr_options["availability"] = str(method_data).lower() @@ -482,10 +473,7 @@ class CollectionBuilder: elif method_name == "radarr_tag": self.radarr_options["tag"] = util.get_list(method_data) elif method_name == "sonarr_add": - if isinstance(method_data, bool): self.add_to_sonarr = method_data - elif str(method_data).lower() in ["t", "true"]: self.add_to_sonarr = True - elif str(method_data).lower() in ["f", "false"]: self.add_to_sonarr = False - else: raise Failed(f"Collection Error: {method_name} attribute must be either true or false") + self.add_to_sonarr = util.get_bool(method_name, method_data) elif method_name == "sonarr_folder": self.sonarr_options["folder"] = method_data elif method_name == "sonarr_monitor": @@ -505,10 +493,7 @@ class CollectionBuilder: else: raise Failed(f"Collection Error: {method_name} attribute must be either standard, daily, or anime") elif method_name in ["sonarr_season", "sonarr_search", "sonarr_cutoff_search"]: - if isinstance(method_data, bool): self.sonarr_options[method_name[7:]] = method_data - elif str(method_data).lower() in ["t", "true"]: self.sonarr_options[method_name[7:]] = True - elif str(method_data).lower() in ["f", "false"]: self.sonarr_options[method_name[7:]] = False - else: raise Failed(f"Collection Error: {method_name} attribute must be either true or false") + self.sonarr_options[method_name[7:]] = util.get_bool(method_name, method_data) elif method_name == "sonarr_tag": self.sonarr_options["tag"] = util.get_list(method_data) elif method_name in ["title", "title.and", "title.not", "title.begins", "title.ends"]: diff --git a/modules/config.py b/modules/config.py index ae845082..a0c80367 100644 --- a/modules/config.py +++ b/modules/config.py @@ -18,6 +18,7 @@ from modules.trakttv import TraktAPI from modules.tvdb import TVDbAPI from modules.util import Failed from plexapi.exceptions import BadRequest +from retrying import retry from ruamel import yaml logger = logging.getLogger("Plex Meta Manager") @@ -727,6 +728,10 @@ class Config: util.print_end(length, f"Processed {len(items)} {'Movies' if library.is_movie else 'Shows'}") return movie_map, show_map + @retry(stop_max_attempt_number=6, wait_fixed=10000) + def get_guids(self, item): + return item.guids + def get_id(self, item, library, length): expired = None tmdb_id = None @@ -747,16 +752,26 @@ class Config: check_id = guid.netloc if item_type == "plex" and check_id == "movie": - for guid_tag in item.guids: - url_parsed = requests.utils.urlparse(guid_tag.id) - if url_parsed.scheme == "tmdb": tmdb_id = int(url_parsed.netloc) - elif url_parsed.scheme == "imdb": imdb_id = url_parsed.netloc + try: + for guid_tag in self.get_guids(item): + url_parsed = requests.utils.urlparse(guid_tag.id) + if url_parsed.scheme == "tmdb": tmdb_id = int(url_parsed.netloc) + elif url_parsed.scheme == "imdb": imdb_id = url_parsed.netloc + except requests.exceptions.ConnectionError: + util.print_stacktrace() + logger.error(f"{'Cache | ! |' if self.Cache else 'Mapping Error:'} {item.guid:<46} | No External GUIDs found for {item.title}") + return None, None elif item_type == "plex" and check_id == "show": - for guid_tag in item.guids: - url_parsed = requests.utils.urlparse(guid_tag.id) - if url_parsed.scheme == "tvdb": tvdb_id = int(url_parsed.netloc) - elif url_parsed.scheme == "imdb": imdb_id = url_parsed.netloc - elif url_parsed.scheme == "tmdb": tmdb_id = int(url_parsed.netloc) + try: + for guid_tag in self.get_guids(item): + url_parsed = requests.utils.urlparse(guid_tag.id) + if url_parsed.scheme == "tvdb": tvdb_id = int(url_parsed.netloc) + elif url_parsed.scheme == "imdb": imdb_id = url_parsed.netloc + elif url_parsed.scheme == "tmdb": tmdb_id = int(url_parsed.netloc) + except requests.exceptions.ConnectionError: + util.print_stacktrace() + logger.error(f"{'Cache | ! |' if self.Cache else 'Mapping Error:'} {item.guid:<46} | No External GUIDs found for {item.title}") + return None, None elif item_type == "imdb": imdb_id = check_id elif item_type == "thetvdb": tvdb_id = int(check_id) elif item_type == "themoviedb": tmdb_id = int(check_id) diff --git a/modules/util.py b/modules/util.py index 34bd631d..46552a67 100644 --- a/modules/util.py +++ b/modules/util.py @@ -197,6 +197,16 @@ def choose_from_list(datalist, description, data=None, list_type="title", exact= else: return None +def get_bool(method_name, method_data): + if isinstance(method_data, bool): + return method_data + elif str(method_data).lower() in ["t", "true"]: + return True + elif str(method_data).lower() in ["f", "false"]: + return False + else: + raise Failed(f"Collection Error: {method_name} attribute: {method_data} invalid must be either true or false") + def get_list(data, lower=False, split=True): if isinstance(data, list): return data elif isinstance(data, dict): return [data] @@ -327,9 +337,6 @@ def regex_first_int(data, id_type, default=None): else: raise Failed(f"Regex Error: Failed to parse {id_type} from {data}") -def remove_not(method): - return method[:-4] if method.endswith(".not") else method - def centered(text, do_print=True): if len(text) > screen_width - 2: raise Failed("text must be shorter then screen_width") diff --git a/plex_meta_manager.py b/plex_meta_manager.py index d4b5e3f6..7d13a640 100644 --- a/plex_meta_manager.py +++ b/plex_meta_manager.py @@ -89,7 +89,7 @@ util.centered("| |_) | |/ _ \\ \\/ / | |\\/| |/ _ \\ __/ _` | | |\\/| |/ _` | '_ util.centered("| __/| | __/> < | | | | __/ || (_| | | | | | (_| | | | | (_| | (_| | __/ | ") util.centered("|_| |_|\\___/_/\\_\\ |_| |_|\\___|\\__\\__,_| |_| |_|\\__,_|_| |_|\\__,_|\\__, |\\___|_| ") util.centered(" |___/ ") -util.centered(" Version: 1.7.2 ") +util.centered(" Version: 1.7.2-Beta1 ") util.separator() if my_tests: