8 """ |
8 """ |
9 |
9 |
10 |
10 |
11 import xmlrpc.client as xmlrpc |
11 import xmlrpc.client as xmlrpc |
12 |
12 |
13 from PyQt5.QtCore import QObject, QUrl, QByteArray |
13 from PyQt5.QtCore import Qt, QObject, QUrl, QByteArray, QEventLoop |
|
14 from PyQt5.QtGui import QGuiApplication, QCursor |
14 from PyQt5.QtNetwork import ( |
15 from PyQt5.QtNetwork import ( |
15 QNetworkAccessManager, QNetworkRequest, QNetworkReply |
16 QNetworkAccessManager, QNetworkRequest, QNetworkReply |
16 ) |
17 ) |
17 |
18 |
18 from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired |
19 from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired |
75 type |
76 type |
76 """ |
77 """ |
77 if not isinstance(args, tuple): |
78 if not isinstance(args, tuple): |
78 raise TypeError("argument 'args' must be tuple") |
79 raise TypeError("argument 'args' must be tuple") |
79 |
80 |
|
81 QGuiApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) |
|
82 QGuiApplication.processEvents(QEventLoop.ExcludeUserInputEvents) |
|
83 |
80 data = xmlrpc.dumps(args, method).encode("utf-8") |
84 data = xmlrpc.dumps(args, method).encode("utf-8") |
81 reply = self.__networkManager.post( |
85 reply = self.__networkManager.post( |
82 self.__request, QByteArray(data)) |
86 self.__request, QByteArray(data)) |
83 self.__callmap[reply] = (responseCallback, errorCallback) |
87 self.__callmap[reply] = (responseCallback, errorCallback) |
84 |
88 |
95 Private slot to handle SSL errors. |
99 Private slot to handle SSL errors. |
96 |
100 |
97 @param reply reference to the reply object (QNetworkReply) |
101 @param reply reference to the reply object (QNetworkReply) |
98 @param errors list of SSL errors (list of QSslError) |
102 @param errors list of SSL errors (list of QSslError) |
99 """ |
103 """ |
|
104 QGuiApplication.restoreOverrideCursor() |
|
105 QGuiApplication.processEvents(QEventLoop.ExcludeUserInputEvents) |
|
106 |
100 ignored = self.__sslErrorHandler.sslErrorsReply(reply, errors)[0] |
107 ignored = self.__sslErrorHandler.sslErrorsReply(reply, errors)[0] |
101 if ignored == E5SslErrorHandler.NotIgnored and reply in self.__callmap: |
108 if ignored == E5SslErrorHandler.NotIgnored and reply in self.__callmap: |
102 self.__callmap[reply][1](xmlrpc.TRANSPORT_ERROR, self.tr( |
109 self.__callmap[reply][1](xmlrpc.TRANSPORT_ERROR, self.tr( |
103 "SSL Error")) |
110 "SSL Error")) |
104 |
111 |
109 @param reply reference to the finished reply (QNetworkReply) |
116 @param reply reference to the finished reply (QNetworkReply) |
110 """ |
117 """ |
111 if reply not in self.__callmap: |
118 if reply not in self.__callmap: |
112 return |
119 return |
113 |
120 |
|
121 QGuiApplication.restoreOverrideCursor() |
|
122 QGuiApplication.processEvents(QEventLoop.ExcludeUserInputEvents) |
|
123 |
114 if reply.error() != QNetworkReply.NoError: |
124 if reply.error() != QNetworkReply.NoError: |
115 self.__callmap[reply][1](xmlrpc.TRANSPORT_ERROR, |
125 self.__callmap[reply][1](xmlrpc.TRANSPORT_ERROR, |
116 reply.errorString()) |
126 reply.errorString()) |
117 else: |
127 else: |
118 data = bytes(reply.readAll()).decode("utf-8") |
128 data = bytes(reply.readAll()).decode("utf-8") |