Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py

changeset 6018
1c858879d3d0
child 6048
82ad8ec9548c
equal deleted inserted replaced
6017:dab01678626d 6018:1c858879d3d0
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a synchronous network request handler for translation
8 requests.
9 """
10
11 from __future__ import unicode_literals
12 try:
13 str = unicode
14 except NameError:
15 pass
16
17 from PyQt5.QtCore import qVersion, QObject, QEventLoop, QByteArray
18 from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, \
19 QNetworkReply
20
21 from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired
22
23
24 class TranslatorRequest(QObject):
25 """
26 Class implementing a synchronous network request handler for translation
27 requests.
28 """
29 def __init__(self, parent=None):
30 """
31 Constructor
32
33 @param parent reference to the parent object (QObject)
34 """
35 super(TranslatorRequest, self).__init__(parent)
36
37 self.__contentTypes = {
38 "form": b"application/x-www-form-urlencoded",
39 "json": b"application/json",
40 }
41
42 self.__networkManager = QNetworkAccessManager(self)
43 self.__networkManager.proxyAuthenticationRequired.connect(
44 proxyAuthenticationRequired)
45
46 self.__loop = QEventLoop()
47 self.__networkManager.finished.connect(self.__loop.quit)
48
49 def get(self, requestUrl, extraHeaders=None):
50 """
51 Public method to issue a GET request.
52
53 @param requestUrl URL of the request (QUrl)
54 @keyparam extraHeaders list of tuples of additional headers giving
55 header name (string) and header value (string)
56 @return server response (QByteArray) or error message (string)
57 """
58 request = QNetworkRequest(requestUrl)
59 request.setAttribute(QNetworkRequest.FollowRedirectsAttribute, True)
60 if extraHeaders:
61 for name, value in extraHeaders:
62 request.setRawHeader(name, value)
63 reply = self.__networkManager.get(request)
64 if not self.__loop.isRunning():
65 self.__loop.exec_()
66 if reply.error() != QNetworkReply.NoError:
67 return reply.errorString(), False
68 else:
69 return reply.readAll(), True
70
71 def post(self, requestUrl, requestData, dataType="form",
72 extraHeaders=None):
73 """
74 Public method to issue a POST request.
75
76 @param requestUrl URL of the request (QUrl)
77 @param requestData data of the request (QByteArray)
78 @keyparam dataType type of the request data (string)
79 @keyparam extraHeaders list of tuples of additional headers giving
80 header name (string) and header value (string)
81 @return tuple of server response (string) and flag indicating
82 success (boolean)
83 """
84 request = QNetworkRequest(requestUrl)
85 request.setRawHeader(b"User-Agent",
86 b"Mozilla/5.0")
87 request.setRawHeader(b"Content-Type",
88 self.__contentTypes[dataType])
89 request.setRawHeader(b"Content-Length",
90 QByteArray.number(requestData.size()))
91 if qVersion() >= "5.6.0":
92 request.setAttribute(QNetworkRequest.FollowRedirectsAttribute,
93 True)
94 if extraHeaders:
95 for name, value in extraHeaders:
96 request.setRawHeader(name, value)
97 reply = self.__networkManager.post(request, requestData)
98 if not self.__loop.isRunning():
99 self.__loop.exec_()
100 if reply.error() != QNetworkReply.NoError:
101 return reply.errorString(), False
102 else:
103 return str(reply.readAll(), "utf-8", "replace"), True

eric ide

mercurial