From 96b4411020d8d0bf604ae1acb5c0fe2a74ae50da Mon Sep 17 00:00:00 2001 From: Jan-Luca Bogdan | BEL NET GmbH Date: Tue, 21 Jun 2022 09:57:52 +0200 Subject: [PATCH] Added better error handling to download function --- pluGET.py | 2 +- src/plugin/plugin_downloader.py | 11 +++++++++-- src/plugin/plugin_updatechecker.py | 13 +++++++++---- src/utils/utilities.py | 6 +++++- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/pluGET.py b/pluGET.py index cd74836..1dbe90d 100644 --- a/pluGET.py +++ b/pluGET.py @@ -40,7 +40,7 @@ if __name__ == "__main__": handle_input(args["mode"], args["object"], args["version"], arguments_from_console=True) else: # no arguments were used so start pluGET console - #clear_console() + clear_console() print_logo() check_for_pluGET_update() handle_input() diff --git a/src/plugin/plugin_downloader.py b/src/plugin/plugin_downloader.py index 80d4c31..f8629e5 100644 --- a/src/plugin/plugin_downloader.py +++ b/src/plugin/plugin_downloader.py @@ -101,11 +101,13 @@ def download_specific_plugin_version_spiget(plugin_id, download_path, version_id rich_print_error("Sorry but specific version downloads aren't supported because of cloudflare protection. :(") rich_print_error("Reverting to latest version.") - #url = f"https://api.spiget.org/v2/resources/{plugin_id}/versions/latest/download" #throws 403 forbidden error...cloudflare :( + #throws 403 forbidden error...cloudflare :( + #url = f"https://api.spiget.org/v2/resources/{plugin_id}/versions/latest/download" + url = f"https://api.spiget.org/v2/resources/{plugin_id}/download" # use rich Progress() to create progress bar - with Progress() as progress: + with Progress(transient=True) as progress: header = {'user-agent': 'pluGET/1.0'} r = requests.get(url, headers=header, stream=True) try: @@ -175,6 +177,10 @@ def get_specific_plugin(plugin_id, plugin_version="latest") -> None: plugin_version_name = get_version_name(plugin_id, plugin_version_id) plugin_download_name = f"{plugin_name}-{plugin_version_name}.jar" download_plugin_path = Path(f"{download_path}/{plugin_download_name}") + # if api requests weren't successfull stop function + if plugin_version_id == None or plugin_version_name == None: + rich_print_error("Error: Webrequest timed out") + return None # set the plugin_version_id to None if a specific version wasn't given as parameter if plugin_version == "latest" or plugin_version is None: plugin_version_id = None @@ -193,6 +199,7 @@ def search_specific_plugin(plugin_name) -> None: url= f"https://api.spiget.org/v2/search/resources/{plugin_name}?field=name&sort=-downloads" plugin_search_results = api_do_request(url) if plugin_search_results == None: + rich_print_error("Error: Webrequest wasn't successfull!") return None print(f"Searching for {plugin_name}...") diff --git a/src/plugin/plugin_updatechecker.py b/src/plugin/plugin_updatechecker.py index 962ff25..27b257e 100644 --- a/src/plugin/plugin_updatechecker.py +++ b/src/plugin/plugin_updatechecker.py @@ -155,6 +155,11 @@ def compare_plugin_version(plugin_latest_version, plugin_file_version) -> bool: def check_installed_plugins(input_selected_object="all", input_parameter=None) -> None: """ Gets installed plugins and checks it against the apis if there are updates for the plugins available + + :param input_selected_object: Which plugin should be checked + :param input_parameter: Optional parameters + + :returns: None """ config_values = config_value() plugin.create_plugin_list() @@ -169,9 +174,9 @@ def check_installed_plugins(input_selected_object="all", input_parameter=None) - case _: plugin_folder_path = config_values.path_to_plugin_folder plugin_list = os.listdir(plugin_folder_path) - + # create simple progress bar from rich - for plugin_file in track(plugin_list, description="Checking...", transient=True, style="bright_yellow"): + for plugin_file in track(plugin_list, description="[cyan]Checking...", transient=True, style="bright_yellow"): plugin_no_attributes = False match config_values.connection: case "sftp": @@ -220,8 +225,8 @@ def search_plugin_spigot(plugin_file, plugin_file_name, plugin_file_version) -> plugin_file_version2 = re.sub(r'(\-\w*)', '', plugin_file_version) if i == 2: """ - pluginNameinYML = eggCrackingJar(plugin_file, 'name') - url = "https://api.spiget.org/v2/search/resources/" + pluginNameinYML + "?field=name&sort=-downloads" + plugin_name_in_yml = eggCrackingJar(plugin_file, 'name') + url = f"https://api.spiget.org/v2/search/resources/{plugin_name_in_yml}?field=name&sort=-downloads" try: plugin_list = api_do_request(url) except ValueError: diff --git a/src/utils/utilities.py b/src/utils/utilities.py index 81b47a6..dd91f77 100644 --- a/src/utils/utilities.py +++ b/src/utils/utilities.py @@ -50,7 +50,11 @@ def api_do_request(url) -> list: rich_print_error("Error: Couldn't create webrequest") # return None to make functions quit return None - api_json_data = response.json() + try: + api_json_data = response.json() + except: + rich_print_error("Error: Couldn't parse json of webrequest") + return None return api_json_data