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
from collections import OrderedDict
from typing import Dict, Optional, List, Any
@ -95,7 +98,11 @@ class LicensePresenter(QObject):
for package_id, item in packages.items():
item["package_id"] = package_id
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:
# Implicitly accept when there is no license
item["accepted"] = True

View file

@ -682,9 +682,13 @@ class Toolbox(QObject, Extension):
if not package_info:
Logger.log("w", "Package file [%s] was not a valid CuraPackage.", file_path)
return
license_content = self._package_manager.getPackageLicense(file_path)
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:
# 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 ""