Helpviewer/OpenSearch/OpenSearchEngine.py

changeset 3002
6ffc581f00f1
parent 2954
bf0215fe12d1
child 3035
36e9f388958b
child 3057
10516539f238
equal deleted inserted replaced
3001:3674ff5fa8f8 3002:6ffc581f00f1
8 """ 8 """
9 9
10 import re 10 import re
11 import json 11 import json
12 12
13 from PyQt4.QtCore import pyqtSignal, pyqtSlot, QLocale, QUrl, QByteArray, QBuffer, \ 13 from PyQt4.QtCore import pyqtSignal, pyqtSlot, QLocale, QUrl, QByteArray, \
14 QIODevice, QObject 14 QBuffer, QIODevice, QObject
15 from PyQt4.QtGui import QImage 15 from PyQt4.QtGui import QImage
16 from PyQt4.QtNetwork import QNetworkRequest, QNetworkAccessManager 16 from PyQt4.QtNetwork import QNetworkRequest, QNetworkAccessManager
17 17
18 from UI.Info import Program 18 from UI.Info import Program
19 19
79 result = result.replace("{startPage}", "0") 79 result = result.replace("{startPage}", "0")
80 result = result.replace("{language}", language) 80 result = result.replace("{language}", language)
81 result = result.replace("{country}", country) 81 result = result.replace("{country}", country)
82 result = result.replace("{inputEncoding}", "UTF-8") 82 result = result.replace("{inputEncoding}", "UTF-8")
83 result = result.replace("{outputEncoding}", "UTF-8") 83 result = result.replace("{outputEncoding}", "UTF-8")
84 result = result.replace("{searchTerms}", 84 result = result.replace(
85 bytes(QUrl.toPercentEncoding(searchTerm)).decode()) 85 "{searchTerms}",
86 bytes(QUrl.toPercentEncoding(searchTerm)).decode())
86 result = re.sub(r"""\{([^\}]*:|)source\??\}""", Program, result) 87 result = re.sub(r"""\{([^\}]*:|)source\??\}""", Program, result)
87 88
88 return result 89 return result
89 90
90 @pyqtSlot(result=str) 91 @pyqtSlot(result=str)
144 @return URL (QUrl) 145 @return URL (QUrl)
145 """ 146 """
146 if not self._searchUrlTemplate: 147 if not self._searchUrlTemplate:
147 return QUrl() 148 return QUrl()
148 149
149 ret = QUrl.fromEncoded(self.parseTemplate(searchTerm, self._searchUrlTemplate)) 150 ret = QUrl.fromEncoded(
151 self.parseTemplate(searchTerm, self._searchUrlTemplate))
150 152
151 if self.__searchMethod != "post": 153 if self.__searchMethod != "post":
152 for parameter in self._searchParameters: 154 for parameter in self._searchParameters:
153 ret.addQueryItem(parameter[0], 155 ret.addQueryItem(parameter[0],
154 self.parseTemplate(searchTerm, parameter[1])) 156 self.parseTemplate(searchTerm, parameter[1]))
210 212
211 def setSearchParameters(self, searchParameters): 213 def setSearchParameters(self, searchParameters):
212 """ 214 """
213 Public method to set the engine search parameters. 215 Public method to set the engine search parameters.
214 216
215 @param searchParameters search parameters of the engine (list of two tuples) 217 @param searchParameters search parameters of the engine
218 (list of two tuples)
216 """ 219 """
217 self._searchParameters = searchParameters[:] 220 self._searchParameters = searchParameters[:]
218 221
219 def suggestionsParameters(self): 222 def suggestionsParameters(self):
220 """ 223 """
233 """ 236 """
234 self._suggestionsParameters = suggestionsParameters[:] 237 self._suggestionsParameters = suggestionsParameters[:]
235 238
236 def searchMethod(self): 239 def searchMethod(self):
237 """ 240 """
238 Public method to get the HTTP request method used to perform search requests. 241 Public method to get the HTTP request method used to perform search
242 requests.
239 243
240 @return HTTP request method (string) 244 @return HTTP request method (string)
241 """ 245 """
242 return self.__searchMethod 246 return self.__searchMethod
243 247
244 def setSearchMethod(self, method): 248 def setSearchMethod(self, method):
245 """ 249 """
246 Public method to set the HTTP request method used to perform search requests. 250 Public method to set the HTTP request method used to perform search
251 requests.
247 252
248 @param method HTTP request method (string) 253 @param method HTTP request method (string)
249 """ 254 """
250 requestMethod = method.lower() 255 requestMethod = method.lower()
251 if requestMethod not in self.__requestMethods: 256 if requestMethod not in self.__requestMethods:
253 258
254 self.__searchMethod = requestMethod 259 self.__searchMethod = requestMethod
255 260
256 def suggestionsMethod(self): 261 def suggestionsMethod(self):
257 """ 262 """
258 Public method to get the HTTP request method used to perform suggestions requests. 263 Public method to get the HTTP request method used to perform
264 suggestions requests.
259 265
260 @return HTTP request method (string) 266 @return HTTP request method (string)
261 """ 267 """
262 return self.__suggestionsMethod 268 return self.__suggestionsMethod
263 269
264 def setSuggestionsMethod(self, method): 270 def setSuggestionsMethod(self, method):
265 """ 271 """
266 Public method to set the HTTP request method used to perform suggestions requests. 272 Public method to set the HTTP request method used to perform
273 suggestions requests.
267 274
268 @param method HTTP request method (string) 275 @param method HTTP request method (string)
269 """ 276 """
270 requestMethod = method.lower() 277 requestMethod = method.lower()
271 if requestMethod not in self.__requestMethods: 278 if requestMethod not in self.__requestMethods:
355 """ 362 """
356 if not self._imageUrl: 363 if not self._imageUrl:
357 imageBuffer = QBuffer() 364 imageBuffer = QBuffer()
358 imageBuffer.open(QIODevice.ReadWrite) 365 imageBuffer.open(QIODevice.ReadWrite)
359 if image.save(imageBuffer, "PNG"): 366 if image.save(imageBuffer, "PNG"):
360 self._imageUrl = "data:image/png;base64,{0}"\ 367 self._imageUrl = "data:image/png;base64,{0}".format(
361 .format(bytes(imageBuffer.buffer().toBase64()).decode()) 368 bytes(imageBuffer.buffer().toBase64()).decode())
362 369
363 self.__image = QImage(image) 370 self.__image = QImage(image)
364 self.imageChanged.emit() 371 self.imageChanged.emit()
365 372
366 def isValid(self): 373 def isValid(self):
412 419
413 if self.__networkAccessManager is None: 420 if self.__networkAccessManager is None:
414 return 421 return
415 422
416 if self.__suggestionsReply is not None: 423 if self.__suggestionsReply is not None:
417 ## self.__suggestionsReply.finished[()].disconnect(self.__suggestionsObtained)
418 self.__suggestionsReply.abort() 424 self.__suggestionsReply.abort()
419 self.__suggestionsReply.deleteLater() 425 self.__suggestionsReply.deleteLater()
420 self.__suggestionsReply = None 426 self.__suggestionsReply = None
421 427
422 if self.__suggestionsMethod not in self.__requestMethods: 428 if self.__suggestionsMethod not in self.__requestMethods:
431 for parameter in self._suggestionsParameters: 437 for parameter in self._suggestionsParameters:
432 parameters.append(parameter[0] + "=" + parameter[1]) 438 parameters.append(parameter[0] + "=" + parameter[1])
433 data = "&".join(parameters) 439 data = "&".join(parameters)
434 self.__suggestionsReply = self.networkAccessManager().post( 440 self.__suggestionsReply = self.networkAccessManager().post(
435 QNetworkRequest(self.suggestionsUrl(searchTerm)), data) 441 QNetworkRequest(self.suggestionsUrl(searchTerm)), data)
436 self.__suggestionsReply.finished[()].connect(self.__suggestionsObtained) 442 self.__suggestionsReply.finished[()].connect(
443 self.__suggestionsObtained)
437 444
438 def __suggestionsObtained(self): 445 def __suggestionsObtained(self):
439 """ 446 """
440 Private slot to receive the suggestions. 447 Private slot to receive the suggestions.
441 """ 448 """
463 470
464 def networkAccessManager(self): 471 def networkAccessManager(self):
465 """ 472 """
466 Public method to get a reference to the network access manager object. 473 Public method to get a reference to the network access manager object.
467 474
468 @return reference to the network access manager object (QNetworkAccessManager) 475 @return reference to the network access manager object
476 (QNetworkAccessManager)
469 """ 477 """
470 return self.__networkAccessManager 478 return self.__networkAccessManager
471 479
472 def setNetworkAccessManager(self, networkAccessManager): 480 def setNetworkAccessManager(self, networkAccessManager):
473 """ 481 """

eric ide

mercurial