Catch environment errors when reading license file from package

The package may be inaccessible for whatever reason, which would crash Cura.

New attempt to fix CURA-2RP (without breaking the unit test saying that this error should be raised by Uranium then).
This commit is contained in:
Ghostkeeper 2021-10-04 14:31:25 +02:00
parent f749bbef46
commit 9e1dc98cd1
No known key found for this signature in database
GPG key ID: D2A8871EE34EC59A
2 changed files with 14 additions and 3 deletions

View file

@ -1,3 +1,6 @@
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import os import os
from collections import OrderedDict from collections import OrderedDict
from typing import Dict, Optional, List, Any from typing import Dict, Optional, List, Any
@ -95,7 +98,11 @@ class LicensePresenter(QObject):
for package_id, item in packages.items(): for package_id, item in packages.items():
item["package_id"] = package_id item["package_id"] = package_id
item["licence_content"] = self._package_manager.getPackageLicense(item["package_path"]) try:
item["licence_content"] = self._package_manager.getPackageLicense(item["package_path"])
except EnvironmentError as e:
Logger.error(f"Could not open downloaded package {package_id} to read license file! {type(e)} - {e}")
continue # Skip this package.
if item["licence_content"] is None: if item["licence_content"] is None:
# Implicitly accept when there is no license # Implicitly accept when there is no license
item["accepted"] = True item["accepted"] = True

View file

@ -682,9 +682,13 @@ class Toolbox(QObject, Extension):
if not package_info: if not package_info:
Logger.log("w", "Package file [%s] was not a valid CuraPackage.", file_path) Logger.log("w", "Package file [%s] was not a valid CuraPackage.", file_path)
return return
license_content = self._package_manager.getPackageLicense(file_path)
package_id = package_info["package_id"] package_id = package_info["package_id"]
try:
license_content = self._package_manager.getPackageLicense(file_path)
except EnvironmentError as e:
Logger.error(f"Could not open downloaded package {package_id} to read license file! {type(e)} - {e}")
return
if license_content is not None: if license_content is not None:
# get the icon url for package_id, make sure the result is a string, never None # get the icon url for package_id, make sure the result is a string, never None
icon_url = next((x["icon_url"] for x in self.packagesModel.items if x["id"] == package_id), None) or "" icon_url = next((x["icon_url"] for x in self.packagesModel.items if x["id"] == package_id), None) or ""