From 301605c30c68c454d3691e5466f92c9e9276938a Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 11 Sep 2018 13:20:42 +0200 Subject: [PATCH] Added missing typing to toolbox --- plugins/Toolbox/src/Toolbox.py | 91 ++++++++++++++++------------------ 1 file changed, 43 insertions(+), 48 deletions(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 00864c6b4e..a4dcc47c2b 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -6,7 +6,7 @@ import json import os import tempfile import platform -from typing import cast, List +from typing import cast, List, TYPE_CHECKING, Tuple, Optional from PyQt5.QtCore import QUrl, QObject, pyqtProperty, pyqtSignal, pyqtSlot from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply @@ -20,9 +20,13 @@ from UM.Version import Version import cura from cura.CuraApplication import CuraApplication + from .AuthorsModel import AuthorsModel from .PackagesModel import PackagesModel +if TYPE_CHECKING: + from cura.Settings.GlobalStack import GlobalStack + i18n_catalog = i18nCatalog("cura") @@ -34,19 +38,19 @@ class Toolbox(QObject, Extension): def __init__(self, application: CuraApplication) -> None: super().__init__() - self._application = application #type: CuraApplication + self._application = application # type: CuraApplication - self._sdk_version = None # type: Optional[int] - self._cloud_api_version = None # type: Optional[int] - self._cloud_api_root = None # type: Optional[str] - self._api_url = None # type: Optional[str] + self._sdk_version = None # type: Optional[int] + self._cloud_api_version = None # type: Optional[int] + self._cloud_api_root = None # type: Optional[str] + self._api_url = None # type: Optional[str] # Network: - self._download_request = None #type: Optional[QNetworkRequest] - self._download_reply = None #type: Optional[QNetworkReply] - self._download_progress = 0 #type: float - self._is_downloading = False #type: bool - self._network_manager = None #type: Optional[QNetworkAccessManager] + self._download_request = None # type: Optional[QNetworkRequest] + self._download_reply = None # type: Optional[QNetworkReply] + self._download_progress = 0 # type: float + self._is_downloading = False # type: bool + self._network_manager = None # type: Optional[QNetworkAccessManager] self._request_header = [ b"User-Agent", str.encode( @@ -58,9 +62,9 @@ class Toolbox(QObject, Extension): ) ) ] - self._request_urls = {} # type: Dict[str, QUrl] + self._request_urls = {} # type: Dict[str, QUrl] self._to_update = [] # type: List[str] # Package_ids that are waiting to be updated - self._old_plugin_ids = [] # type: List[str] + self._old_plugin_ids = [] # type: List[str] # Data: self._metadata = { @@ -73,7 +77,7 @@ class Toolbox(QObject, Extension): "materials_available": [], "materials_installed": [], "materials_generic": [] - } # type: Dict[str, List[Any]] + } # type: Dict[str, List[Any]] # Models: self._models = { @@ -86,39 +90,37 @@ class Toolbox(QObject, Extension): "materials_available": AuthorsModel(self), "materials_installed": PackagesModel(self), "materials_generic": PackagesModel(self) - } # type: Dict[str, ListModel] + } # type: Dict[str, ListModel] # These properties are for keeping track of the UI state: # ---------------------------------------------------------------------- # View category defines which filter to use, and therefore effectively # which category is currently being displayed. For example, possible # values include "plugin" or "material", but also "installed". - self._view_category = "plugin" #type: str + self._view_category = "plugin" # type: str # View page defines which type of page layout to use. For example, # possible values include "overview", "detail" or "author". - self._view_page = "loading" #type: str + self._view_page = "loading" # type: str # Active package refers to which package is currently being downloaded, # installed, or otherwise modified. - self._active_package = None # type: Optional[Dict[str, Any]] + self._active_package = None # type: Optional[Dict[str, Any]] - self._dialog = None #type: Optional[QObject] - self._confirm_reset_dialog = None #type: Optional[QObject] + self._dialog = None # type: Optional[QObject] + self._confirm_reset_dialog = None # type: Optional[QObject] self._resetUninstallVariables() - self._restart_required = False #type: bool + self._restart_required = False # type: bool # variables for the license agreement dialog - self._license_dialog_plugin_name = "" #type: str - self._license_dialog_license_content = "" #type: str - self._license_dialog_plugin_file_location = "" #type: str - self._restart_dialog_message = "" #type: str + self._license_dialog_plugin_name = "" # type: str + self._license_dialog_license_content = "" # type: str + self._license_dialog_plugin_file_location = "" # type: str + self._restart_dialog_message = "" # type: str self._application.initializationFinished.connect(self._onAppInitialized) - - # Signals: # -------------------------------------------------------------------------- # Downloading changes @@ -137,11 +139,11 @@ class Toolbox(QObject, Extension): showLicenseDialog = pyqtSignal() uninstallVariablesChanged = pyqtSignal() - def _resetUninstallVariables(self): - self._package_id_to_uninstall = None + def _resetUninstallVariables(self) -> None: + self._package_id_to_uninstall = None # type: Optional[str] self._package_name_to_uninstall = "" - self._package_used_materials = [] - self._package_used_qualities = [] + self._package_used_materials = [] # type: List[Tuple[GlobalStack, str, str]] + self._package_used_qualities = [] # type: List[Tuple[GlobalStack, str, str]] @pyqtSlot(result = str) def getLicenseDialogPluginName(self) -> str: @@ -344,26 +346,26 @@ class Toolbox(QObject, Extension): self.uninstall(package_id) @pyqtProperty(str, notify = uninstallVariablesChanged) - def pluginToUninstall(self): + def pluginToUninstall(self) -> str: return self._package_name_to_uninstall @pyqtProperty(str, notify = uninstallVariablesChanged) - def uninstallUsedMaterials(self): + def uninstallUsedMaterials(self) -> str: return "\n".join(["%s (%s)" % (str(global_stack.getName()), material) for global_stack, extruder_nr, material in self._package_used_materials]) @pyqtProperty(str, notify = uninstallVariablesChanged) - def uninstallUsedQualities(self): + def uninstallUsedQualities(self) -> str: return "\n".join(["%s (%s)" % (str(global_stack.getName()), quality) for global_stack, extruder_nr, quality in self._package_used_qualities]) @pyqtSlot() - def closeConfirmResetDialog(self): + def closeConfirmResetDialog(self) -> None: if self._confirm_reset_dialog is not None: self._confirm_reset_dialog.close() ## Uses "uninstall variables" to reset qualities and materials, then uninstall # It's used as an action on Confirm reset on Uninstall @pyqtSlot() - def resetMaterialsQualitiesAndUninstall(self): + def resetMaterialsQualitiesAndUninstall(self) -> None: application = CuraApplication.getInstance() material_manager = application.getMaterialManager() quality_manager = application.getQualityManager() @@ -376,9 +378,9 @@ class Toolbox(QObject, Extension): default_quality_group = quality_manager.getDefaultQualityType(global_stack) machine_manager.setQualityGroup(default_quality_group, global_stack = global_stack) - self._markPackageMaterialsAsToBeUninstalled(self._package_id_to_uninstall) - - self.uninstall(self._package_id_to_uninstall) + if self._package_id_to_uninstall is not None: + self._markPackageMaterialsAsToBeUninstalled(self._package_id_to_uninstall) + self.uninstall(self._package_id_to_uninstall) self._resetUninstallVariables() self.closeConfirmResetDialog() @@ -686,7 +688,7 @@ class Toolbox(QObject, Extension): self._temp_plugin_file.close() self._onDownloadComplete(file_path) - def _onDownloadComplete(self, file_path: str): + def _onDownloadComplete(self, file_path: str) -> None: Logger.log("i", "Toolbox: Download complete.") package_info = self._package_manager.getPackageInfo(file_path) if not package_info: @@ -745,9 +747,7 @@ class Toolbox(QObject, Extension): def viewPage(self) -> str: return self._view_page - - - # Expose Models: + # Exposed Models: # -------------------------------------------------------------------------- @pyqtProperty(QObject, notify = metadataChanged) def authorsModel(self) -> AuthorsModel: @@ -785,8 +785,6 @@ class Toolbox(QObject, Extension): def materialsGenericModel(self) -> PackagesModel: return cast(PackagesModel, self._models["materials_generic"]) - - # Filter Models: # -------------------------------------------------------------------------- @pyqtSlot(str, str, str) @@ -813,11 +811,9 @@ class Toolbox(QObject, Extension): self._models[model_type].setFilter({}) self.filterChanged.emit() - # HACK(S): # -------------------------------------------------------------------------- def buildMaterialsModels(self) -> None: - self._metadata["materials_showcase"] = [] self._metadata["materials_available"] = [] @@ -841,7 +837,6 @@ class Toolbox(QObject, Extension): self._models["materials_available"].setMetadata(self._metadata["materials_available"]) def buildPluginsModels(self) -> None: - self._metadata["plugins_showcase"] = [] self._metadata["plugins_available"] = []