def _onUploadError(self, reply: QNetworkReply, error: QNetworkReply.NetworkError) -> None: """Handles an error uploading.""" body = bytes(reply.peek(reply.bytesAvailable())).decode() Logger.log("e", "Received error while uploading: %s", body) self._on_error(self._file_name, reply, error) self.stop()
def _registerOnFinishedCallback( self, reply: QNetworkReply, onFinished: Optional[Callable[[Any, QNetworkReply], None]]) -> None: if onFinished is not None: self._onFinishedCallbacks[reply.url().toString() + str(reply.operation())] = onFinished
def process_response(self, response: QNetworkReply): print(f'done {self.__class__.__name__}') if response.error() == QNetworkReply.NoError: self.finished.emit(True) else: print(response.errorString()) self.finished.emit(False)
def _onUploadFinished(self, reply: QNetworkReply) -> None: """ Checks whether a chunk of data was uploaded successfully, starting the next chunk if needed. """ Logger.log("i", "Finished callback %s %s", reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url().toString()) status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) # type: Optional[int] if not status_code: Logger.log("e", "Reply contained no status code.") self._onUploadError(reply, None) return # check if we should retry the last chunk if self._retries < self.MAX_RETRIES and status_code in self.RETRY_HTTP_CODES: self._retries += 1 Logger.log("i", "Retrying %s/%s request %s", self._retries, self.MAX_RETRIES, reply.url().toString()) try: self._upload() except ValueError: # Asynchronously it could have completed in the meanwhile. pass return # Http codes that are not to be retried are assumed to be errors. if status_code > 308: self._onUploadError(reply, None) return Logger.log("d", "status_code: %s, Headers: %s, body: %s", status_code, [bytes(header).decode() for header in reply.rawHeaderList()], bytes(reply.readAll()).decode()) self._on_success(self._file_name) self.stop()
def on_response(self, reply: QNetworkReply): self.progress_bar.set_part(10, 1, 'Чтение ответа') error_code = reply.error() if error_code == QNetworkReply.NoError: bytes_string = reply.readAll() json_ar = json.loads(str(bytes_string, 'utf-8')) print(json_ar) if json_ar['status'] == 'OK': self.progress_bar.increment() self.read_response.emit(json_ar['data'], self.progress_bar) self.finish.emit(json_ar['data']) self.progress_bar.on_finish('Успешно синхронизированно') else: self.progress_bar.abord() self.button.setEnabled(True) self.error.emit(str(error_code)) self.progress_bar.on_finish( f'Завершено с ошибкой {json_ar["message"]}') else: print(error_code) self.progress_bar.abord() self.button.setEnabled(True) self.error.emit(error_code) self.progress_bar.on_finish(f'Завершено с ошибкой {error_code}')
def finishedCallback(reply: QNetworkReply) -> None: progress_message.hide() try: with open(os.path.join(temp_dir, file_name), "wb+") as temp_file: bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE) while bytes_read: temp_file.write(bytes_read) bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE) CuraApplication.getInstance().processEvents() temp_file_name = temp_file.name except IOError as ex: Logger.logException( "e", "Can't write Digital Library file {0}/{1} download to temp-directory {2}.", ex, project_name, file_name, temp_dir) Message( text="Failed to write to temporary file for '{}'.".format( file_name), title="File-system error", lifetime=10).show() return CuraApplication.getInstance().readLocalFile( QUrl.fromLocalFile(temp_file_name), add_to_recent_files=False)
def _load_icon_and_cache(self, http_response: QNetworkReply): icon_url = http_response.request().url().toString() icon_data = self.icon_cache.get(icon_url) icon_was_cached = True if not icon_data: icon_bytes = http_response.readAll() if not icon_bytes: return icon_was_cached = False pixmap = QPixmap() pixmap.loadFromData(icon_bytes) if not pixmap.isNull(): icon = QIcon(pixmap) icon_data = {'icon': icon, 'bytes': icon_bytes} self.icon_cache.add(icon_url, icon_data) if icon_data: for idx, app in enumerate(self.window.pkgs): if app.model.icon_url == icon_url: col_name = self.item(idx, 0) col_name.setIcon(icon_data['icon']) if app.model.supports_disk_cache( ) and app.model.get_disk_icon_path(): if not icon_was_cached or not os.path.exists( app.model.get_disk_icon_path()): self.window.manager.cache_to_disk( pkg=app.model, icon_bytes=icon_data['bytes'], only_icon=True)
def gotResponse(self, QNetworkReply): try: status = QNetworkReply.attribute( QNetworkRequest.HttpStatusCodeAttribute) except Exception as e: log('[e] http/yaml error: %s' % str(e)) self.updatesLabel.setText('Error') return if status != 200: self.updatesLabel.setText('Network error: ' + str(status)) return try: response = QNetworkReply.readAll() response = str(response, 'utf-8') ver = safe_load(response) except Exception as e: log('[e] http/yaml error: %s' % str(e)) self.updatesLabel.setText('error') return if ver is None: self.updatesLabel.setText('<network error>') return if 'version' in ver and 'date' in ver: verStr = 'Last published version is %s, build %s.' % ( ver['version'], ver['date']) self.updatesLabel.setText(verStr)
def parseReplyAsBytes(cls, reply: QNetworkReply) -> Tuple[int, bytes]: """ Parse the given API reply into a status code and bytes. :param reply: The reply from the server. :return: A tuple with a status code and the response body as bytes. """ status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) return status_code, reply.readAll().data()
def sendingFinished(self, reply: QNetworkReply): if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: Logger.log( "e", "Received error code from printer when syncing material: {code}" .format(code=reply.attribute( QNetworkRequest.HttpStatusCodeAttribute))) Logger.log("e", reply.readAll().data().decode("utf-8"))
def _parseReply(reply: QNetworkReply) -> Tuple[int, Dict[str, Any]]: status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) try: response = bytes(reply.readAll()).decode() return status_code, json.loads(response) except (UnicodeDecodeError, JSONDecodeError, ValueError) as err: Logger.logException("e", "Could not parse the cluster response: %s", err) return status_code, {"errors": [err]}
def sendingFinished(reply: QNetworkReply) -> None: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: Logger.log( "e", "Received error code from printer when syncing material: {code}, {text}" .format(code=reply.attribute( QNetworkRequest.HttpStatusCodeAttribute), text=reply.errorString()))
def log_request(self, reply: QNetworkReply) -> None: self.logger.info('request made at %s' % reply.header( QNetworkRequest.LastModifiedHeader).toString('dd-MM-yyyy hh:mm:ss') ) self.logger.info( 'response: %s (%i) type: %s' % (reply.attribute( QNetworkRequest.HttpReasonPhraseAttribute).upper(), reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.header(QNetworkRequest.ContentTypeHeader)))
def _parseReply(reply: QNetworkReply) -> Tuple[int, Dict[str, Any]]: status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) try: response = bytes(reply.readAll()).decode() return status_code, json.loads(response) except (UnicodeDecodeError, JSONDecodeError, ValueError) as err: error = CloudError(code=type(err).__name__, title=str(err), http_code=str(status_code), id=str(time()), http_status="500") Logger.logException("e", "Could not parse the stardust response: %s", error.toDict()) return status_code, {"errors": [error.toDict()]}
def _onGetPreviewImageFinished(self, reply: QNetworkReply) -> None: reply_url = reply.url().toString() uuid = reply_url[reply_url.find("print_jobs/")+len("print_jobs/"):reply_url.rfind("/preview_image")] print_job = findByKey(self._print_jobs, uuid) if print_job: image = QImage() image.loadFromData(reply.readAll()) print_job.updatePreviewImage(image)
def _onGetRemoteMaterials(self, reply: QNetworkReply) -> None: # Got an error from the HTTP request. If we did not receive a 200 something happened. if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: Logger.log("e", "Error fetching materials from printer: %s", reply.errorString()) return # Collect materials from the printer's reply and send the missing ones if needed. remote_materials_by_guid = self._parseReply(reply) if remote_materials_by_guid: self._sendMissingMaterials(remote_materials_by_guid)
def _onRequestFailed(self, reply: QNetworkReply) -> None: if reply.operation() == QNetworkAccessManager.GetOperation: if "api/settings" in reply.url().toString( ): # OctoPrint settings dump from /settings: Logger.log( "w", "Connection refused or timeout when trying to access OctoPrint at %s" % reply.url().toString()) self._instance_in_error = True self.selectedInstanceSettingsChanged.emit()
def _parse_result(self, reply: QNetworkReply) -> str: if reply.error(): print(reply.errorString()) print('parsing reply') text = 'no help available' try: text = bytes(reply.readAll()).decode('ascii', 'ignore') except Exception as e: print(e) pass return text
def base_handler(self, reply: QNetworkReply): try: response = json.loads(str(reply.readAll(), encoding='utf-8')) status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) except: self.parent.warn.add_warn("Http解析错误") return if reply.error() != QNetworkReply.NoError: self.handler_error(response, status_code) else: self.data.emit(response)
def getResult(self, reply: QNetworkReply): error = reply.error() # request was successfully made if error == QNetworkReply.NoError: data = reply.readAll() self.successCallback(str(data, 'utf-8')) else: # request was failed errorStr = reply.errorString() self.errorCallback(errorStr)
def on_received_response(self, reply: QNetworkReply): if reply.error() != QNetworkReply.NoError: error_msg = "Unable to create new print share: {}".format(reply.errorString()) logging.error(error_msg) app_settings.app_data_writer.signals.exchange_share_failed.emit(error_msg) return share_location = reply.rawHeader(QByteArray(bytes("Location", encoding="utf-8"))) app_settings.app_data_writer.signals.exchange_share_created.emit(share_location.data().decode()) reply.deleteLater() self.buffer.close()
def _sendingFinished(self, reply: QNetworkReply) -> None: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: Logger.log("w", "Error while syncing material: %s", reply.errorString()) return body = reply.readAll().data().decode('utf8') if "not added" in body: # For some reason the cluster returns a 200 sometimes even when syncing failed. return # Inform the user that materials have been synced. This message only shows itself when not already visible. # Because of the guards above it is not shown when syncing failed (which is not always an actual problem). MaterialSyncMessage(self.device).show()
def _from_reply(self, reply: QtNetwork.QNetworkReply): """Updates the Response object with the remaining data from the reply.""" # Read the reply's body if reply.isReadable(): self.raw_content.seek(0) self.raw_content.write(reply.readAll()) # Store the cookies manager: QtNetwork.QNetworkAccessManager = reply.manager() jar: QtNetwork.QNetworkCookieJar = manager.cookieJar() object.__setattr__(self, 'cookies', {c.name().data().decode(): c.value() for c in jar.allCookies()})
def done(self, reply: QNetworkReply): if reply.error() != QNetworkReply.NoError: sys.stderr.write(reply.errorString()) return try: json_data = json.loads(str(reply.readAll(), 'utf-8')) reply.deleteLater() latest = json_data.get('tag_name') current = qApp.applicationVersion() self.parent.update_available(latest, current) except json.JSONDecodeError: self.logger.exception('Error retrieving data', exc_info=True) raise
def handleNetworkData(self, networkReply: QNetworkReply): if networkReply.error() == QNetworkReply.NoError: choices = [] response = networkReply.readAll() xml = QXmlStreamReader(response) while not xml.atEnd(): xml.readNext() if xml.tokenType() == QXmlStreamReader.StartElement: if xml.name() == 'suggestion': string = xml.attributes().value('data') choices.append(string) self.showCompletion(choices) networkReply.deleteLater()
def _parseReply(reply: QNetworkReply) -> Tuple[int, Optional[Union[List[Any], Dict[str, Any]]]]: """ Parse the given JSON network reply into a status code and JSON object. :param reply: The reply from the server. :return: A tuple with a status code and a dictionary. """ status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) try: response = bytes(reply.readAll()).decode() return status_code, json.loads(response) except (UnicodeDecodeError, JSONDecodeError, ValueError) as err: Logger.logException("e", "Could not parse the API response: %s", err) return status_code, None
def parseReplyAsJson(cls, reply: QNetworkReply ) -> Tuple[int, Optional[Union[Dict[str, Any], List[Dict[str, Any]]]]]: """ Parse the given API reply into a status code and JSON object. :param reply: The reply from the server. :return: A tuple with a status code and the response body as JsonObject. """ status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) try: response = reply.readAll().data().decode() return status_code, json.loads(response) except (UnicodeDecodeError, JSONDecodeError, ValueError) as err: Logger.log("e", "Could not parse the API response: %s", err) return status_code, None
def _onNetworkFinished(self, reply: QNetworkReply): status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) url_string = reply.url().toString() if "modifier" in url_string: if status_code == 404: print("server was not found!") self._failed_update_modifier_timer.start() return data = bytes(reply.readAll()) try: self._modifiers = json.loads(data) except: print("Failed to get modifier data") self._failed_update_modifier_timer.start() return self.modifiersChanged.emit() elif "RFID" in url_string: if status_code != 404: self._serial_worker.setReadResult(True) self.setAuthenticationRequired(False) else: self._serial_worker.setReadResult(False) self.setAuthenticationRequired(True) else: # Yeah it's hackish, but it's faster than building a real system. For now we don't need more if status_code == 404: print("Server was not found!") self._failed_update_nodes_timer.start() return data = bytes(reply.readAll()) try: data = json.loads(data) for item in data: new_node = Node(item["node_id"]) new_node.updateServerUrl( self._zeroconf_worker.server_address) self._data.append(new_node) new_node.serverReachableChanged.connect( self.serverReachableChanged) self._data = sorted(self._data, key=lambda node: node.id) # sort by age self._data.reverse() self.nodesChanged.emit() except: print("Failed to get modifier data") self._failed_update_nodes_timer.start() return
def __init__(self, parent, reply): QNetworkReply.__init__(self, parent) self.reply = reply # reply to proxy self.data = '' # contains downloaded data self.buffer = '' # contains buffer of data to read self.setOpenMode(QNetworkReply.ReadOnly | QNetworkReply.Unbuffered) #print dir(reply) # connect signal from proxy reply reply.metaDataChanged.connect(self.applyMetaData) reply.readyRead.connect(self.readInternal) reply.finished.connect(self.finished) reply.uploadProgress.connect(self.uploadProgress) reply.downloadProgress.connect(self.downloadProgress)
def __init__(self, parent, url, operation, content=""): QNetworkReply.__init__(self, parent) self.content = content self.offset = 0 self.setHeader(QNetworkRequest.ContentTypeHeader, "text/html; charset=UTF-8") self.setHeader(QNetworkRequest.ContentLengthHeader, len(self.content)) try: QTimer.singleShot(0, self.readyRead) QTimer.singleShot(0, self.finished) except: QTimer.singleShot(0, self, SIGNAL("readyRead()")) QTimer.singleShot(0, self, SIGNAL("finished()")) self.open(self.ReadOnly | self.Unbuffered) self.setUrl(url)
def _parseReply(reply: QNetworkReply) -> Tuple[int, Dict[str, Any]]: """Parses the given JSON network reply into a status code and a dictionary, handling unexpected errors as well. :param reply: The reply from the server. :return: A tuple with a status code and a dictionary. """ status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) try: response = bytes(reply.readAll()).decode() return status_code, json.loads(response) except (UnicodeDecodeError, JSONDecodeError, ValueError) as err: Logger.logException("e", "Could not parse the cluster response: %s", err) return status_code, {"errors": [err]}
def checkValidGetReply(reply: QNetworkReply) -> bool: status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) if status_code != 200: Logger.log("w", "Got status code {status_code} while trying to get data".format(status_code=status_code)) return False return True
def loadJsonFromReply(reply: QNetworkReply) -> Optional[List[Dict[str, Any]]]: try: result = json.loads(bytes(reply.readAll()).decode("utf-8")) except json.decoder.JSONDecodeError: Logger.logException("w", "Unable to decode JSON from reply.") return None return result
def bytesAvailable(self): """ Public method to determined the bytes available for being read. @return bytes available (integer) """ return self.__data.length() + QNetworkReply.bytesAvailable(self)
def _onRequestFinished(self, reply: QNetworkReply) -> None: if reply.error() == QNetworkReply.TimeoutError: Logger.log("w", "Got a timeout.") self.setViewPage("errored") self.resetDownload() return if reply.error() == QNetworkReply.HostNotFoundError: Logger.log("w", "Unable to reach server.") self.setViewPage("errored") self.resetDownload() return if reply.operation() == QNetworkAccessManager.GetOperation: for response_type, url in self._request_urls.items(): if reply.url() == url: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) == 200: try: json_data = json.loads(bytes(reply.readAll()).decode("utf-8")) # Check for errors: if "errors" in json_data: for error in json_data["errors"]: Logger.log("e", "%s", error["title"]) return # Create model and apply metadata: if not self._models[response_type]: Logger.log("e", "Could not find the %s model.", response_type) break self._server_response_data[response_type] = json_data["data"] self._models[response_type].setMetadata(self._server_response_data[response_type]) if response_type is "packages": self._models[response_type].setFilter({"type": "plugin"}) self.reBuildMaterialsModels() self.reBuildPluginsModels() elif response_type is "authors": self._models[response_type].setFilter({"package_types": "material"}) self._models[response_type].setFilter({"tags": "generic"}) self.metadataChanged.emit() if self.isLoadingComplete(): self.setViewPage("overview") except json.decoder.JSONDecodeError: Logger.log("w", "Received invalid JSON for %s.", response_type) break else: Logger.log("w", "Unable to connect with the server, we got a response code %s while trying to connect to %s", reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url()) self.setViewPage("errored") self.resetDownload() elif reply.operation() == QNetworkAccessManager.PutOperation: # Ignore any operation that is not a get operation pass
def _handleOnFinished(self, reply: QNetworkReply) -> None: # Due to garbage collection, we need to cache certain bits of post operations. # As we don't want to keep them around forever, delete them if we get a reply. if reply.operation() == QNetworkAccessManager.PostOperation: self._clearCachedMultiPart(reply) if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) is None: # No status code means it never even reached remote. return self._last_response_time = time() if self._connection_state == ConnectionState.Connecting: self.setConnectionState(ConnectionState.Connected) callback_key = reply.url().toString() + str(reply.operation()) try: if callback_key in self._onFinishedCallbacks: self._onFinishedCallbacks[callback_key](reply) except Exception: Logger.logException("w", "something went wrong with callback")
def _parseReply(cls, reply: QNetworkReply) -> Dict[str, ClusterMaterial]: try: remote_materials = json.loads(reply.readAll().data().decode("utf-8")) return {material["guid"]: ClusterMaterial(**material) for material in remote_materials} except UnicodeDecodeError: Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.") except json.JSONDecodeError: Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.") except ValueError: Logger.log("e", "Request material storage on printer: Printer's answer had an incorrect value.") except TypeError: Logger.log("e", "Request material storage on printer: Printer's answer was missing a required value.")
def _registerOnFinishedCallback(self, reply: QNetworkReply, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: if on_finished is not None: self._onFinishedCallbacks[reply.url().toString() + str(reply.operation())] = on_finished
def _onAuthenticationRequired(self, reply: QNetworkReply, authenticator: QAuthenticator) -> None: Logger.log("w", "Request to {url} required authentication, which was not implemented".format(url = reply.url().toString()))
def _onRequestFinished(self, reply: QNetworkReply) -> None: http_status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) if not http_status_code: # Received no or empty reply return if reply.operation() == QNetworkAccessManager.PostOperation: if "/plugin/appkeys/request" in reply.url().toString(): # Initial AppKey request if http_status_code == 201 or http_status_code == 202: Logger.log("w", "Start polling for AppKeys decision") if not self._appkey_request: return self._appkey_request.setUrl(reply.header(QNetworkRequest.LocationHeader)) self._appkey_request.setRawHeader(b"Content-Type", b"") self._appkey_poll_timer.start() elif http_status_code == 404: Logger.log("w", "This instance of OctoPrint does not support AppKeys") self._appkey_request = None # type: Optional[QNetworkRequest] else: response = bytes(reply.readAll()).decode() Logger.log("w", "Unknown response when requesting an AppKey: %d. OctoPrint said %s" % (http_status_code, response)) self._appkey_request = None # type: Optional[QNetworkRequest] if reply.operation() == QNetworkAccessManager.GetOperation: if "/plugin/appkeys/probe" in reply.url().toString(): # Probe for AppKey support if http_status_code == 204: self._appkeys_supported = True else: self._appkeys_supported = False self.appKeysSupportedChanged.emit() if "/plugin/appkeys/request" in reply.url().toString(): # Periodic AppKey request poll if http_status_code == 202: self._appkey_poll_timer.start() elif http_status_code == 200: Logger.log("d", "AppKey granted") self._appkey_request = None # type: Optional[QNetworkRequest] try: json_data = json.loads(bytes(reply.readAll()).decode("utf-8")) except json.decoder.JSONDecodeError: Logger.log("w", "Received invalid JSON from octoprint instance.") return self._keys_cache[self._appkey_instance_id] = json_data["api_key"] self.appKeyReceived.emit() elif http_status_code == 404: Logger.log("d", "AppKey denied") self._appkey_request = None # type: Optional[QNetworkRequest] else: response = bytes(reply.readAll()).decode() Logger.log("w", "Unknown response when waiting for an AppKey: %d. OctoPrint said %s" % (http_status_code, response)) self._appkey_request = None # type: Optional[QNetworkRequest] if "api/settings" in reply.url().toString(): # OctoPrint settings dump from /settings: self._instance_in_error = False if http_status_code == 200: Logger.log("d", "API key accepted by OctoPrint.") self._instance_api_key_accepted = True try: json_data = json.loads(bytes(reply.readAll()).decode("utf-8")) except json.decoder.JSONDecodeError: Logger.log("w", "Received invalid JSON from octoprint instance.") json_data = {} if "feature" in json_data and "sdSupport" in json_data["feature"]: self._instance_supports_sd = json_data["feature"]["sdSupport"] if "webcam" in json_data and "streamUrl" in json_data["webcam"]: stream_url = json_data["webcam"]["streamUrl"] if stream_url: #not empty string or None self._instance_supports_camera = True elif http_status_code == 401: Logger.log("d", "Invalid API key for OctoPrint.") self._instance_api_key_accepted = False elif http_status_code == 502 or http_status_code == 503: Logger.log("d", "OctoPrint is not running.") self._instance_api_key_accepted = False self._instance_in_error = True self._instance_responded = True self.selectedInstanceSettingsChanged.emit()
def _onRequestFinished(self, reply: QNetworkReply) -> None: if reply.error() == QNetworkReply.TimeoutError: Logger.log("w", "Got a timeout.") self.setViewPage("errored") self.resetDownload() return if reply.error() == QNetworkReply.HostNotFoundError: Logger.log("w", "Unable to reach server.") self.setViewPage("errored") self.resetDownload() return if reply.operation() == QNetworkAccessManager.GetOperation: for type, url in self._request_urls.items(): if reply.url() == url: try: json_data = json.loads(bytes(reply.readAll()).decode("utf-8")) # Check for errors: if "errors" in json_data: for error in json_data["errors"]: Logger.log("e", "%s", error["title"]) return # Create model and apply metadata: if not self._models[type]: Logger.log("e", "Could not find the %s model.", type) break # HACK: Eventually get rid of the code from here... if type is "plugins_showcase" or type is "materials_showcase": self._metadata["plugins_showcase"] = json_data["data"]["plugin"]["packages"] self._models["plugins_showcase"].setMetadata(self._metadata["plugins_showcase"]) self._metadata["materials_showcase"] = json_data["data"]["material"]["authors"] self._models["materials_showcase"].setMetadata(self._metadata["materials_showcase"]) else: # ...until here. # This hack arises for multiple reasons but the main # one is because there are not separate API calls # for different kinds of showcases. self._metadata[type] = json_data["data"] self._models[type].setMetadata(self._metadata[type]) # Do some auto filtering # TODO: Make multiple API calls in the future to handle this if type is "packages": self._models[type].setFilter({"type": "plugin"}) if type is "authors": self._models[type].setFilter({"package_types": "material"}) self.metadataChanged.emit() if self.loadingComplete() is True: self.setViewPage("overview") return except json.decoder.JSONDecodeError: Logger.log("w", "Toolbox: Received invalid JSON for %s.", type) break else: # Ignore any operation that is not a get operation pass
def sendingFinished(reply: QNetworkReply) -> None: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: Logger.log("e", "Received error code from printer when syncing material: {code}, {text}".format( code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), text = reply.errorString() ))
def __init__(self, manager, url, handler, encoding="UTF-8"): QNetworkReply.__init__(self, manager) self.setUrl(url) self._handler = handler self._encoding = encoding