Storing multiple ongoing_requests

A bit of defensive programming

Contributes to: CURA-8587
This commit is contained in:
Jelle Spijker 2021-12-07 15:56:35 +01:00
parent dae92c354c
commit 013e0b51e9
No known key found for this signature in database
GPG Key ID: 6662DC033BE6B99A
3 changed files with 11 additions and 8 deletions

View File

@ -38,6 +38,7 @@ class LocalPackageList(PackageList):
def __init__(self, parent: Optional["QObject"] = None) -> None: def __init__(self, parent: Optional["QObject"] = None) -> None:
super().__init__(parent) super().__init__(parent)
self._has_footer = False self._has_footer = False
self._ongoing_requests["check_updates"] = None
@pyqtSlot() @pyqtSlot()
def updatePackages(self) -> None: def updatePackages(self) -> None:
@ -74,7 +75,7 @@ class LocalPackageList(PackageList):
installed_packages = "installed_packages=".join([f"{package['package_id']}:{package['package_version']}&" for package in packages]) installed_packages = "installed_packages=".join([f"{package['package_id']}:{package['package_version']}&" for package in packages])
request_url = f"{PACKAGE_UPDATES_URL}?installed_packages={installed_packages[:-1]}" request_url = f"{PACKAGE_UPDATES_URL}?installed_packages={installed_packages[:-1]}"
self._ongoing_request = HttpRequestManager.getInstance().get( self._ongoing_requests["check_updates"] = HttpRequestManager.getInstance().get(
request_url, request_url,
scope = self._scope, scope = self._scope,
callback = self._parseResponse callback = self._parseResponse
@ -100,3 +101,4 @@ class LocalPackageList(PackageList):
package.can_update = True package.can_update = True
self.sort(attrgetter("sectionTitle", "can_update", "displayName"), key = "package", reverse = True) self.sort(attrgetter("sectionTitle", "can_update", "displayName"), key = "package", reverse = True)
self._ongoing_requests["check_updates"] = None

View File

@ -5,7 +5,7 @@ import json
import os.path import os.path
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, Qt from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, Qt
from typing import cast, Dict, Optional, Set, TYPE_CHECKING from typing import cast, Dict, List, Optional, Set, TYPE_CHECKING
from UM.i18n import i18nCatalog from UM.i18n import i18nCatalog
from UM.Qt.ListModel import ListModel from UM.Qt.ListModel import ListModel
@ -49,7 +49,7 @@ class PackageList(ListModel):
self.canInstallChanged.connect(self._requestInstall) self.canInstallChanged.connect(self._requestInstall)
self._local_packages: Set[str] = {p["package_id"] for p in self._manager.local_packages} self._local_packages: Set[str] = {p["package_id"] for p in self._manager.local_packages}
self._ongoing_request: Optional[HttpRequestData] = None self._ongoing_requests: Dict[str, Optional[HttpRequestData]] = {"download_package": None}
self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance())) self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance()))
self._license_dialogs: Dict[str, QObject] = {} self._license_dialogs: Dict[str, QObject] = {}
@ -197,7 +197,7 @@ class PackageList(ListModel):
def downloadError(reply: "QNetworkReply", error: "QNetworkReply.NetworkError") -> None: def downloadError(reply: "QNetworkReply", error: "QNetworkReply.NetworkError") -> None:
self._downloadError(package_id, update, reply, error) self._downloadError(package_id, update, reply, error)
HttpRequestManager.getInstance().get( self._ongoing_requests["download_package"] = HttpRequestManager.getInstance().get(
url, url,
scope = self._scope, scope = self._scope,
callback = downloadFinished, callback = downloadFinished,
@ -211,8 +211,8 @@ class PackageList(ListModel):
while bytes_read: while bytes_read:
temp_file.write(bytes_read) temp_file.write(bytes_read)
bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE) bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE)
Logger.debug(f"Finished downloading {package_id} and stored it as {temp_file.name}")
self._to_install[package_id] = temp_file.name self._to_install[package_id] = temp_file.name
self._ongoing_requests["download_package"] = None
self.canInstallChanged.emit(package_id, update) self.canInstallChanged.emit(package_id, update)
except IOError as e: except IOError as e:
Logger.error(f"Failed to write downloaded package to temp file {e}") Logger.error(f"Failed to write downloaded package to temp file {e}")

View File

@ -29,6 +29,7 @@ class RemotePackageList(PackageList):
self._requested_search_string = "" self._requested_search_string = ""
self._current_search_string = "" self._current_search_string = ""
self._request_url = self._initialRequestUrl() self._request_url = self._initialRequestUrl()
self._ongoing_requests["get_packages"] = None
self.isLoadingChanged.connect(self._onLoadingChanged) self.isLoadingChanged.connect(self._onLoadingChanged)
self.isLoadingChanged.emit() self.isLoadingChanged.emit()
@ -49,7 +50,7 @@ class RemotePackageList(PackageList):
self.setErrorMessage("") # Clear any previous errors. self.setErrorMessage("") # Clear any previous errors.
self.setIsLoading(True) self.setIsLoading(True)
self._ongoing_request = HttpRequestManager.getInstance().get( self._ongoing_requests["get_packages"] = HttpRequestManager.getInstance().get(
self._request_url, self._request_url,
scope = self._scope, scope = self._scope,
callback = self._parseResponse, callback = self._parseResponse,
@ -58,8 +59,8 @@ class RemotePackageList(PackageList):
@pyqtSlot() @pyqtSlot()
def abortUpdating(self) -> None: def abortUpdating(self) -> None:
HttpRequestManager.getInstance().abortRequest(self._ongoing_request) HttpRequestManager.getInstance().abortRequest(self._ongoing_requests["get_packages"])
self._ongoing_request = None self._ongoing_requests["get_packages"] = None
def reset(self) -> None: def reset(self) -> None:
self.clear() self.clear()