Refactor delete backups call to use HttpRequestManager

This commit is contained in:
Nino van Hooff 2020-02-28 17:08:31 +01:00
parent 4f2827e1bf
commit 19c3f765f5
2 changed files with 31 additions and 24 deletions

View File

@ -10,7 +10,6 @@ from typing import Any, Optional, List, Dict, Callable
import requests import requests
from UM.Logger import Logger from UM.Logger import Logger
from UM.Message import Message
from UM.Signal import Signal, signalemitter from UM.Signal import Signal, signalemitter
from UM.TaskManagement.HttpRequestManager import HttpRequestManager from UM.TaskManagement.HttpRequestManager import HttpRequestManager
from UM.TaskManagement.HttpRequestScope import JsonDecoratorScope from UM.TaskManagement.HttpRequestScope import JsonDecoratorScope
@ -40,10 +39,10 @@ class DriveApiService:
def __init__(self) -> None: def __init__(self) -> None:
self._cura_api = CuraApplication.getInstance().getCuraAPI() self._cura_api = CuraApplication.getInstance().getCuraAPI()
self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance())) self._jsonCloudScope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance()))
self._in_progress_backup = None self._in_progress_backup = None
def getBackups(self, changed: Callable): def getBackups(self, changed: Callable[[List], None]):
def callback(reply: QNetworkReply, error: Optional["QNetworkReply.NetworkError"] = None): def callback(reply: QNetworkReply, error: Optional["QNetworkReply.NetworkError"] = None):
if error is not None: if error is not None:
Logger.log("w", "Could not get backups: " + str(error)) Logger.log("w", "Could not get backups: " + str(error))
@ -59,8 +58,9 @@ class DriveApiService:
HttpRequestManager.getInstance().get( HttpRequestManager.getInstance().get(
self.BACKUP_URL, self.BACKUP_URL,
callback=callback, callback= callback,
scope=self._scope error_callback = callback,
scope=self._jsonCloudScope
) )
@ -110,7 +110,7 @@ class DriveApiService:
) )
def _onRestoreRequestCompleted(self, reply: QNetworkReply, error: Optional["QNetworkReply.NetworkError"] = None, backup = None): def _onRestoreRequestCompleted(self, reply: QNetworkReply, error: Optional["QNetworkReply.NetworkError"] = None, backup = None):
if error is not None or reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: if not DriveApiService._replyIndicatesSuccess(reply, error):
Logger.log("w", Logger.log("w",
"Requesting backup failed, response code %s while trying to connect to %s", "Requesting backup failed, response code %s while trying to connect to %s",
reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url()) reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url())
@ -153,24 +153,28 @@ class DriveApiService:
local_md5_hash = base64.b64encode(hashlib.md5(read_backup.read()).digest(), altchars = b"_-").decode("utf-8") local_md5_hash = base64.b64encode(hashlib.md5(read_backup.read()).digest(), altchars = b"_-").decode("utf-8")
return known_hash == local_md5_hash return known_hash == local_md5_hash
def deleteBackup(self, backup_id: str) -> bool: @staticmethod
access_token = self._cura_api.account.accessToken def _replyIndicatesSuccess(reply: QNetworkReply, error: Optional["QNetworkReply.NetworkError"] = None):
if not access_token: """Returns whether reply status code indicates success and error is None"""
Logger.log("w", "Could not get access token.") return error is None and 200 <= reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) < 300
return False
try: def deleteBackup(self, backup_id: str, callable: Callable[[bool], None]):
delete_backup = requests.delete("{}/{}".format(self.BACKUP_URL, backup_id), headers = {
"Authorization": "Bearer {}".format(access_token)
})
except requests.exceptions.ConnectionError:
Logger.logException("e", "Unable to connect with the server")
return False
if delete_backup.status_code >= 300: def finishedCallback(reply: QNetworkReply, ca=callable) -> None:
Logger.log("w", "Could not delete backup: %s", delete_backup.text) self._onDeleteRequestCompleted(reply, None, ca)
return False
return True def errorCallback(reply: QNetworkReply, error: QNetworkReply.NetworkError, ca=callable) -> None:
self._onDeleteRequestCompleted(reply, error, ca)
HttpRequestManager.getInstance().delete(
url = "{}/{}".format(self.BACKUP_URL, backup_id),
callback = finishedCallback,
error_callback = errorCallback,
scope= self._jsonCloudScope
)
def _onDeleteRequestCompleted(self, reply: QNetworkReply, error: Optional["QNetworkReply.NetworkError"] = None, callable = None):
callable(DriveApiService._replyIndicatesSuccess(reply, error))
# Request a backup upload slot from the API. # Request a backup upload slot from the API.
# \param backup_metadata: A dict containing some meta data about the backup. # \param backup_metadata: A dict containing some meta data about the backup.

View File

@ -161,5 +161,8 @@ class DrivePluginExtension(QObject, Extension):
@pyqtSlot(str, name = "deleteBackup") @pyqtSlot(str, name = "deleteBackup")
def deleteBackup(self, backup_id: str) -> None: def deleteBackup(self, backup_id: str) -> None:
self._drive_api_service.deleteBackup(backup_id) self._drive_api_service.deleteBackup(backup_id, self._backupDeletedCallback)
def _backupDeletedCallback(self, success: bool):
if success:
self.refreshBackups() self.refreshBackups()