eric7/Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py

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

eric ide

mercurial