eric6/Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py

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

eric ide

mercurial