From cc7dfe713c66cba7995f019dc7376c5fcf921e32 Mon Sep 17 00:00:00 2001 From: drew2a Date: Tue, 29 Nov 2022 11:34:56 +0100 Subject: [PATCH] Linter --- src/tribler/gui/network/request/request.py | 16 +++---- .../gui/network/request/tests/__init__.py | 0 .../gui/network/request/tests/test_request.py | 44 +++++++++++++++++++ src/tribler/gui/network/request_manager.py | 27 ++++++------ .../gui/network/tests/test_request_manager.py | 44 +++++++++++++++++++ src/tribler/gui/tribler_window.py | 2 +- 6 files changed, 108 insertions(+), 25 deletions(-) create mode 100644 src/tribler/gui/network/request/tests/__init__.py create mode 100644 src/tribler/gui/network/request/tests/test_request.py create mode 100644 src/tribler/gui/network/tests/test_request_manager.py diff --git a/src/tribler/gui/network/request/request.py b/src/tribler/gui/network/request/request.py index af000853564..2043ec4a07a 100644 --- a/src/tribler/gui/network/request/request.py +++ b/src/tribler/gui/network/request/request.py @@ -39,7 +39,6 @@ def __init__( capture_errors: bool = True, priority=QNetworkRequest.NormalPriority, raw_response: bool = False, - manager: Optional[RequestManager] = None, ): super().__init__() self.logger = logging.getLogger(self.__class__.__name__) @@ -51,20 +50,18 @@ def __init__( self.method = method self.capture_errors = capture_errors self.raw_response = raw_response - self.raw_data = None - if data: - raw_data = json.dumps(data) - if raw_data: - self.raw_data = raw_data if issubclass(type(raw_data), bytes) else raw_data.encode('utf8') + self.raw_data = raw_data + if data and not self.raw_data: + self.raw_data = json.dumps(data).encode('utf8') connect(self.on_finished_signal, on_finish) connect(self.on_cancel_signal, on_cancel) self.reply: Optional[QNetworkReply] = None # to hold the associated QNetworkReply object + self.manager: Optional[RequestManager] = None # Pass the newly created object to the manager singleton, so the object can be dispatched immediately self.time = time() - self.manager = manager def _on_finished(self): if not self.reply or not self.manager: @@ -82,14 +79,13 @@ def _on_finished(self): data = bytes(self.reply.readAll()) if self.raw_response: - self.logger.debug(f'Create a raw response') - + self.logger.debug('Create a raw response') header = self.reply.header(QNetworkRequest.ContentTypeHeader) self.on_finished_signal.emit((data, header)) return try: - self.logger.debug(f'Create a json response') + self.logger.debug('Create a json response') result = json.loads(data) except ValueError as e: self.logger.exception(e) diff --git a/src/tribler/gui/network/request/tests/__init__.py b/src/tribler/gui/network/request/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/tribler/gui/network/request/tests/test_request.py b/src/tribler/gui/network/request/tests/test_request.py new file mode 100644 index 00000000000..771f36e176f --- /dev/null +++ b/src/tribler/gui/network/request/tests/test_request.py @@ -0,0 +1,44 @@ +from tribler.gui.network.request.request import Request + + +def test_default_constructor(): + request = Request( + endpoint='endpoint' + ) + assert request + + +def test_data_constructor(): + """ Test that data becomes raw_data as an encoded json + """ + request = Request( + endpoint='endpoint', + data={ + 'key': 'value' + } + ) + assert request.raw_data == b'{"key": "value"}' + + +def test_raw_data_constructor(): + """ Test that raw_data remains the same + """ + request = Request( + endpoint='endpoint', + raw_data=b'raw_data' + ) + assert request.raw_data == b'raw_data' + + +def test_raw_data_and_data_constructor(): + """ Test that in the case raw_data and data have been passed into the constructor, + the raw_data would be chosen. + """ + request = Request( + endpoint='endpoint', + data={ + 'key': 'value' + }, + raw_data=b'raw_data' + ) + assert request.raw_data == b'raw_data' diff --git a/src/tribler/gui/network/request_manager.py b/src/tribler/gui/network/request_manager.py index 5c0433f831f..fadf9f9dc4a 100644 --- a/src/tribler/gui/network/request_manager.py +++ b/src/tribler/gui/network/request_manager.py @@ -69,7 +69,7 @@ def add(self, request: Request): request.reply = self.sendCustomRequest(qt_request, request.method.encode("utf8"), buf) buf.setParent(request.reply) - connect(request.reply.finished, request._on_finished) + connect(request.reply.finished, request._on_finished) # pylint: disable=protected-access def remove(self, request: Request): self.active_requests.pop(request, None) @@ -84,7 +84,7 @@ def update(self, request: Request, status: int): performed_requests[request] = status def show_error(self, request: Request, data: Dict): - text = self._get_message_from_error(data) + text = self.get_message_from_error(data) if self.window.core_manager.shutting_down: return @@ -99,20 +99,19 @@ def on_close(_): connect(error_dialog.button_clicked, on_close) error_dialog.show() - def _get_base_url(self): - return "%s://%s:%d/" % (self.protocol, self.host, self.port) + def _get_base_url(self) -> str: + return f'{self.protocol}://{self.host}:{self.port}/' @staticmethod - def _get_message_from_error(error: Dict): - return_error = None - if isinstance(error['error'], str): - return_error = error['error'] - elif 'message' in error['error']: - return_error = error['error']['message'] - - if not return_error: - return json.dumps(error) # Just print the json object - return return_error + def get_message_from_error(d: Dict) -> str: + error = d.get('error', {}) + if isinstance(error, str): + return error + + if message := error.get('message'): + return message + + return json.dumps(d) def clear(self): for req in list(self.active_requests.values()): diff --git a/src/tribler/gui/network/tests/test_request_manager.py b/src/tribler/gui/network/tests/test_request_manager.py new file mode 100644 index 00000000000..f503abafac2 --- /dev/null +++ b/src/tribler/gui/network/tests/test_request_manager.py @@ -0,0 +1,44 @@ +import pytest + +from tribler.gui.network.request_manager import RequestManager + + +# pylint: disable=protected-access, redefined-outer-name + + +@pytest.fixture +def request_manager(): + return RequestManager() + + +def test_get_base_string(request_manager: RequestManager): + assert request_manager._get_base_url() == 'http://localhost:20100/' + + +def test_get_message_from_error_string(request_manager: RequestManager): + message = request_manager.get_message_from_error( + { + 'error': 'message' + } + ) + assert message == 'message' + + +def test_get_message_from_error_dict_string(request_manager: RequestManager): + message = request_manager.get_message_from_error( + { + 'error': { + 'message': 'error message' + } + } + ) + assert message == 'error message' + + +def test_get_message_from_error_any_dict(request_manager: RequestManager): + message = request_manager.get_message_from_error( + { + 'key': 'value' + } + ) + assert message == '{"key": "value"}' diff --git a/src/tribler/gui/tribler_window.py b/src/tribler/gui/tribler_window.py index dbd420b6aa8..73a4a556b02 100644 --- a/src/tribler/gui/tribler_window.py +++ b/src/tribler/gui/tribler_window.py @@ -777,7 +777,7 @@ def received_settings(self, settings): return # If we cannot receive the settings, stop Tribler with an option to send the crash report. if 'error' in settings: - raise RuntimeError(RequestManager._get_message_from_error(settings)) + raise RuntimeError(RequestManager.get_message_from_error(settings)) # If there is any pending dialog (likely download dialog or error dialog of setting not available), # close the dialog