From 9a782572cc53cccf662b5c861373f3cf34bd1f61 Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Sun, 21 Feb 2021 20:55:54 -0500 Subject: [PATCH 1/3] fix for #51 --- modules/config.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/config.py b/modules/config.py index daba8e82..e38e7b0a 100644 --- a/modules/config.py +++ b/modules/config.py @@ -62,15 +62,15 @@ class Config: replace_attr(new_config["libraries"][library], "show_filtered", "plex") replace_attr(new_config["libraries"][library], "show_missing", "plex") replace_attr(new_config["libraries"][library], "save_missing", "plex") - new_config["libraries"] = new_config.pop("libraries") - new_config["settings"] = new_config.pop("settings") - new_config["plex"] = new_config.pop("plex") - new_config["tmdb"] = new_config.pop("tmdb") - new_config["tautulli"] = new_config.pop("tautulli") - new_config["radarr"] = new_config.pop("radarr") - new_config["sonarr"] = new_config.pop("sonarr") - new_config["trakt"] = new_config.pop("trakt") - new_config["mal"] = new_config.pop("mal") + if "libraries" in new_config: new_config["libraries"] = new_config.pop("libraries") + if "settings" in new_config: new_config["settings"] = new_config.pop("settings") + if "plex" in new_config: new_config["plex"] = new_config.pop("plex") + if "tmdb" in new_config: new_config["tmdb"] = new_config.pop("tmdb") + if "tautulli" in new_config: new_config["tautulli"] = new_config.pop("tautulli") + if "radarr" in new_config: new_config["radarr"] = new_config.pop("radarr") + if "sonarr" in new_config: new_config["sonarr"] = new_config.pop("sonarr") + if "trakt" in new_config: new_config["trakt"] = new_config.pop("trakt") + if "mal" in new_config: new_config["mal"] = new_config.pop("mal") yaml.round_trip_dump(new_config, open(self.config_path, "w"), indent=ind, block_seq_indent=bsi) self.data = new_config except yaml.scanner.ScannerError as e: From 69e470525ba88abda7c4c5a3e633f8486f88d06b Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Sun, 21 Feb 2021 20:56:31 -0500 Subject: [PATCH 2/3] add plex_timeout --- config/config.yml.template | 1 + modules/config.py | 5 ++++- modules/plex.py | 5 ++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/config/config.yml.template b/config/config.yml.template index ab29f74a..beea6805 100644 --- a/config/config.yml.template +++ b/config/config.yml.template @@ -19,6 +19,7 @@ settings: # Can be individually specified plex: # Can be individually specified per library as well url: http://192.168.1.12:32400 token: #################### + timeout: 60 tmdb: apikey: ################################ language: en diff --git a/modules/config.py b/modules/config.py index e38e7b0a..956ef89a 100644 --- a/modules/config.py +++ b/modules/config.py @@ -91,7 +91,7 @@ class Config: message = "{} not found".format(text) if parent and save is True: new_config, ind, bsi = yaml.util.load_yaml_guess_indent(open(self.config_path)) - endline = "\n| {} sub-attribute {} added to config".format(parent, attribute) + endline = "\n{} sub-attribute {} added to config".format(parent, attribute) if parent not in new_config: new_config = {parent: {attribute: default}} elif not new_config[parent]: new_config[parent] = {attribute: default} elif attribute not in new_config[parent]: new_config[parent][attribute] = default @@ -214,6 +214,7 @@ class Config: self.general["plex"] = {} self.general["plex"]["url"] = check_for_attribute(self.data, "url", parent="plex", default_is_none=True) self.general["plex"]["token"] = check_for_attribute(self.data, "token", parent="plex", default_is_none=True) + self.general["plex"]["timeout"] = check_for_attribute(self.data, "timeout", parent="plex", var_type="int", default=60) self.general["radarr"] = {} self.general["radarr"]["url"] = check_for_attribute(self.data, "url", parent="radarr", default_is_none=True) @@ -269,6 +270,7 @@ class Config: params["plex"] = {} params["plex"]["url"] = check_for_attribute(libs[lib], "url", parent="plex", default=self.general["plex"]["url"], req_default=True, save=False) params["plex"]["token"] = check_for_attribute(libs[lib], "token", parent="plex", default=self.general["plex"]["token"], req_default=True, save=False) + params["plex"]["timeout"] = check_for_attribute(libs[lib], "timeout", parent="plex", var_type="int", default=self.general["plex"]["timeout"], save=False) library = PlexAPI(params, self.TMDb, self.TVDb) logger.info("{} Library Connection Successful".format(params["name"])) except Failed as e: @@ -334,6 +336,7 @@ class Config: def update_libraries(self, test, requested_collections): for library in self.libraries: + os.environ["PLEXAPI_PLEXAPI_TIMEOUT"] = str(library.timeout) logger.info("") util.seperator("{} Library".format(library.name)) try: library.update_metadata(self.TMDb, test) diff --git a/modules/plex.py b/modules/plex.py index 21cab302..99792fd8 100644 --- a/modules/plex.py +++ b/modules/plex.py @@ -13,7 +13,7 @@ logger = logging.getLogger("Plex Meta Manager") class PlexAPI: def __init__(self, params, TMDb, TVDb): - try: self.PlexServer = PlexServer(params["plex"]["url"], params["plex"]["token"], timeout=600) + try: self.PlexServer = PlexServer(params["plex"]["url"], params["plex"]["token"], timeout=params["plex"]["timeout"]) except Unauthorized: raise Failed("Plex Error: Plex token is invalid") except ValueError as e: raise Failed("Plex Error: {}".format(e)) except requests.exceptions.ConnectionError as e: @@ -60,6 +60,7 @@ class PlexAPI: self.show_missing = params["show_missing"] self.save_missing = params["save_missing"] self.plex = params["plex"] + self.timeout = params["plex"]["timeout"] self.missing = {} def add_Radarr(self, Radarr): @@ -71,8 +72,6 @@ class PlexAPI: def add_Tautulli(self, Tautulli): self.Tautulli = Tautulli - - @retry(stop_max_attempt_number=6, wait_fixed=10000) def search(self, title, libtype=None, year=None): if libtype is not None and year is not None: return self.Plex.search(title=title, year=year, libtype=libtype) From 80d39edc3909a195c2bd505cd1aec7c1eeeebaea Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Sun, 21 Feb 2021 20:57:25 -0500 Subject: [PATCH 3/3] v1.2.1 --- README.md | 2 +- plex_meta_manager.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cc13ce66..1d91b55c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Plex Meta Manager -#### Version 1.2.0 +#### Version 1.2.1 The original concept for Plex Meta Manager is [Plex Auto Collections](https://github.com/mza921/Plex-Auto-Collections), but this is rewritten from the ground up to be able to include a scheduler, metadata edits, multiple libraries, and logging. Plex Meta Manager is a Python 3 script that can be continuously run using YAML configuration files to update on a schedule the metadata of the movies, shows, and collections in your libraries as well as automatically build collections based on various methods all detailed in the wiki. Some collection examples that the script can automatically build and update daily include Plex Based Searches like actor, genre, or studio collections or Collections based on TMDb, IMDb, Trakt, TVDb, AniDB, or MyAnimeList lists and various other services. diff --git a/plex_meta_manager.py b/plex_meta_manager.py index e5c9df96..346278a0 100644 --- a/plex_meta_manager.py +++ b/plex_meta_manager.py @@ -59,7 +59,7 @@ logger.info(util.get_centered_text("| |_) | |/ _ \ \/ / | |\/| |/ _ \ __/ _` | | logger.info(util.get_centered_text("| __/| | __/> < | | | | __/ || (_| | | | | | (_| | | | | (_| | (_| | __/ | ")) logger.info(util.get_centered_text("|_| |_|\___/_/\_\ |_| |_|\___|\__\__,_| |_| |_|\__,_|_| |_|\__,_|\__, |\___|_| ")) logger.info(util.get_centered_text(" |___/ ")) -logger.info(util.get_centered_text(" Version: 1.2.0 ")) +logger.info(util.get_centered_text(" Version: 1.2.1 ")) util.seperator() if args.tests: