Handle Spiget api errors

so plugins with special characters such as "InvSee++" don't crash pluGET
due to unexpected Spiget api data structure response:
{'error': '', 'msg': ''}

Root cause may be special chracters not being URL-escaped by Spiget
This commit is contained in:
Shiraz 2022-07-09 19:59:44 +01:00
parent 8227c12bf1
commit 18ca3104a5

View File

@ -520,49 +520,56 @@ def search_plugin_spiget(plugin_file: str, plugin_file_name: str, plugin_file_ve
""" """
url = f"https://api.spiget.org/v2/search/resources/{plugin_file_name}?field=name&sort=-downloads" url = f"https://api.spiget.org/v2/search/resources/{plugin_file_name}?field=name&sort=-downloads"
plugin_list = api_do_request(url) plugin_list = api_do_request(url)
plugin_file_version2 = plugin_file_version
for i in range(4): # Handle failed api request
if i == 1: """{'error': 'Unexpected Exception', 'msg': 'Unexpected Exception. Please report this to https://github.com/SpiGetOrg/api.spiget.org/issues'}"""
plugin_file_version2 = re.sub(r'(\-\w*)', '', plugin_file_version) if "error" in plugin_list:
if i == 2: print(f"Spiget error occurred whilst searching for plugin '{plugin_file}': {plugin_list['msg']}")
plugin_name_in_yml, plugin_version_in_yml = egg_cracking_jar(plugin_file) return plugin_list['msg']
url = f"https://api.spiget.org/v2/search/resources/{plugin_name_in_yml}?field=name&sort=-downloads" else:
try: plugin_file_version2 = plugin_file_version
plugin_list = api_do_request(url) for i in range(4):
except ValueError: if i == 1:
continue plugin_file_version2 = re.sub(r'(\-\w*)', '', plugin_file_version)
# if no plugin name was found with egg_cracking_jar() skip this round if i == 2:
if plugin_list is None: plugin_name_in_yml, plugin_version_in_yml = egg_cracking_jar(plugin_file)
continue 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:
continue
# if no plugin name was found with egg_cracking_jar() skip this round
if plugin_list is None:
continue
# search with version which is in plugin.yml for the plugin # search with version which is in plugin.yml for the plugin
if i == 3: if i == 3:
plugin_file_version2 = plugin_version_in_yml plugin_file_version2 = plugin_version_in_yml
for plugin in plugin_list: for plugin in plugin_list:
plugin_id = plugin["id"] plugin_id = plugin["id"]
url2 = f"https://api.spiget.org/v2/resources/{plugin_id}/versions?size=100&sort=-name" url2 = f"https://api.spiget.org/v2/resources/{plugin_id}/versions?size=100&sort=-name"
try: try:
plugin_versions = api_do_request(url2) plugin_versions = api_do_request(url2)
except ValueError: except ValueError:
continue continue
if plugin_versions is None: if plugin_versions is None:
continue continue
for updates in plugin_versions: for updates in plugin_versions:
update_version_name = updates["name"] update_version_name = updates["name"]
if plugin_file_version2 in update_version_name: if plugin_file_version2 in update_version_name:
#spigot_update_id = updates["id"] #spigot_update_id = updates["id"]
plugin_latest_version = get_latest_plugin_version_spiget(plugin_id) plugin_latest_version = get_latest_plugin_version_spiget(plugin_id)
plugin_is_outdated = compare_plugin_version(plugin_latest_version, update_version_name) plugin_is_outdated = compare_plugin_version(plugin_latest_version, update_version_name)
Plugin.add_to_plugin_list( Plugin.add_to_plugin_list(
plugin_file, plugin_file,
plugin_file_name, plugin_file_name,
plugin_file_version, plugin_file_version,
plugin_latest_version, plugin_latest_version,
plugin_is_outdated, plugin_is_outdated,
"spigot", "spigot",
[plugin_id] [plugin_id]
) )
return plugin_id return plugin_id
return None return None