Helpviewer/OpenSearch/OpenSearchEngine.py

branch
Py2 comp.
changeset 3057
10516539f238
parent 2525
8b507a9a2d40
parent 3002
6ffc581f00f1
child 3060
5883ce99ee12
equal deleted inserted replaced
3056:9986ec0e559a 3057:10516539f238
10 from __future__ import unicode_literals # __IGNORE_WARNING__ 10 from __future__ import unicode_literals # __IGNORE_WARNING__
11 11
12 import re 12 import re
13 import json 13 import json
14 14
15 from PyQt4.QtCore import pyqtSignal, pyqtSlot, QLocale, QUrl, QByteArray, QBuffer, \ 15 from PyQt4.QtCore import pyqtSignal, pyqtSlot, QLocale, QUrl, QByteArray, \
16 QIODevice, QObject 16 QBuffer, QIODevice, QObject
17 from PyQt4.QtGui import QImage 17 from PyQt4.QtGui import QImage
18 from PyQt4.QtNetwork import QNetworkRequest, QNetworkAccessManager 18 from PyQt4.QtNetwork import QNetworkRequest, QNetworkAccessManager
19 19
20 from UI.Info import Program 20 from UI.Info import Program
21 21
81 result = result.replace("{startPage}", "0") 81 result = result.replace("{startPage}", "0")
82 result = result.replace("{language}", language) 82 result = result.replace("{language}", language)
83 result = result.replace("{country}", country) 83 result = result.replace("{country}", country)
84 result = result.replace("{inputEncoding}", "UTF-8") 84 result = result.replace("{inputEncoding}", "UTF-8")
85 result = result.replace("{outputEncoding}", "UTF-8") 85 result = result.replace("{outputEncoding}", "UTF-8")
86 result = result.replace("{searchTerms}", 86 result = result.replace(
87 bytes(QUrl.toPercentEncoding(searchTerm)).decode()) 87 "{searchTerms}",
88 bytes(QUrl.toPercentEncoding(searchTerm)).decode())
88 result = re.sub(r"""\{([^\}]*:|)source\??\}""", Program, result) 89 result = re.sub(r"""\{([^\}]*:|)source\??\}""", Program, result)
89 90
90 return result 91 return result
91 92
92 @pyqtSlot(result=str) 93 @pyqtSlot(result=str)
146 @return URL (QUrl) 147 @return URL (QUrl)
147 """ 148 """
148 if not self._searchUrlTemplate: 149 if not self._searchUrlTemplate:
149 return QUrl() 150 return QUrl()
150 151
151 ret = QUrl.fromEncoded(self.parseTemplate(searchTerm, self._searchUrlTemplate)) 152 ret = QUrl.fromEncoded(
153 self.parseTemplate(searchTerm, self._searchUrlTemplate))
152 154
153 if self.__searchMethod != "post": 155 if self.__searchMethod != "post":
154 for parameter in self._searchParameters: 156 for parameter in self._searchParameters:
155 ret.addQueryItem(parameter[0], 157 ret.addQueryItem(parameter[0],
156 self.parseTemplate(searchTerm, parameter[1])) 158 self.parseTemplate(searchTerm, parameter[1]))
212 214
213 def setSearchParameters(self, searchParameters): 215 def setSearchParameters(self, searchParameters):
214 """ 216 """
215 Public method to set the engine search parameters. 217 Public method to set the engine search parameters.
216 218
217 @param searchParameters search parameters of the engine (list of two tuples) 219 @param searchParameters search parameters of the engine
220 (list of two tuples)
218 """ 221 """
219 self._searchParameters = searchParameters[:] 222 self._searchParameters = searchParameters[:]
220 223
221 def suggestionsParameters(self): 224 def suggestionsParameters(self):
222 """ 225 """
235 """ 238 """
236 self._suggestionsParameters = suggestionsParameters[:] 239 self._suggestionsParameters = suggestionsParameters[:]
237 240
238 def searchMethod(self): 241 def searchMethod(self):
239 """ 242 """
240 Public method to get the HTTP request method used to perform search requests. 243 Public method to get the HTTP request method used to perform search
244 requests.
241 245
242 @return HTTP request method (string) 246 @return HTTP request method (string)
243 """ 247 """
244 return self.__searchMethod 248 return self.__searchMethod
245 249
246 def setSearchMethod(self, method): 250 def setSearchMethod(self, method):
247 """ 251 """
248 Public method to set the HTTP request method used to perform search requests. 252 Public method to set the HTTP request method used to perform search
253 requests.
249 254
250 @param method HTTP request method (string) 255 @param method HTTP request method (string)
251 """ 256 """
252 requestMethod = method.lower() 257 requestMethod = method.lower()
253 if requestMethod not in self.__requestMethods: 258 if requestMethod not in self.__requestMethods:
255 260
256 self.__searchMethod = requestMethod 261 self.__searchMethod = requestMethod
257 262
258 def suggestionsMethod(self): 263 def suggestionsMethod(self):
259 """ 264 """
260 Public method to get the HTTP request method used to perform suggestions requests. 265 Public method to get the HTTP request method used to perform
266 suggestions requests.
261 267
262 @return HTTP request method (string) 268 @return HTTP request method (string)
263 """ 269 """
264 return self.__suggestionsMethod 270 return self.__suggestionsMethod
265 271
266 def setSuggestionsMethod(self, method): 272 def setSuggestionsMethod(self, method):
267 """ 273 """
268 Public method to set the HTTP request method used to perform suggestions requests. 274 Public method to set the HTTP request method used to perform
275 suggestions requests.
269 276
270 @param method HTTP request method (string) 277 @param method HTTP request method (string)
271 """ 278 """
272 requestMethod = method.lower() 279 requestMethod = method.lower()
273 if requestMethod not in self.__requestMethods: 280 if requestMethod not in self.__requestMethods:
285 292
286 def setImageUrl(self, imageUrl): 293 def setImageUrl(self, imageUrl):
287 """ 294 """
288 Public method to set the engine image URL. 295 Public method to set the engine image URL.
289 296
290 @param description image URL of the engine (string) 297 @param imageUrl image URL of the engine (string)
291 """ 298 """
292 self._imageUrl = imageUrl 299 self._imageUrl = imageUrl
293 300
294 def setImageUrlAndLoad(self, imageUrl): 301 def setImageUrlAndLoad(self, imageUrl):
295 """ 302 """
296 Public method to set the engine image URL. 303 Public method to set the engine image URL.
297 304
298 @param description image URL of the engine (string) 305 @param imageUrl image URL of the engine (string)
299 """ 306 """
300 self.setImageUrl(imageUrl) 307 self.setImageUrl(imageUrl)
301 self.__iconMoved = False 308 self.__iconMoved = False
302 self.loadImage() 309 self.loadImage()
303 310
357 """ 364 """
358 if not self._imageUrl: 365 if not self._imageUrl:
359 imageBuffer = QBuffer() 366 imageBuffer = QBuffer()
360 imageBuffer.open(QIODevice.ReadWrite) 367 imageBuffer.open(QIODevice.ReadWrite)
361 if image.save(imageBuffer, "PNG"): 368 if image.save(imageBuffer, "PNG"):
362 self._imageUrl = "data:image/png;base64,{0}"\ 369 self._imageUrl = "data:image/png;base64,{0}".format(
363 .format(bytes(imageBuffer.buffer().toBase64()).decode()) 370 bytes(imageBuffer.buffer().toBase64()).decode())
364 371
365 self.__image = QImage(image) 372 self.__image = QImage(image)
366 self.imageChanged.emit() 373 self.imageChanged.emit()
367 374
368 def isValid(self): 375 def isValid(self):
414 421
415 if self.__networkAccessManager is None: 422 if self.__networkAccessManager is None:
416 return 423 return
417 424
418 if self.__suggestionsReply is not None: 425 if self.__suggestionsReply is not None:
419 ## self.__suggestionsReply.finished[()].disconnect(self.__suggestionsObtained)
420 self.__suggestionsReply.abort() 426 self.__suggestionsReply.abort()
421 self.__suggestionsReply.deleteLater() 427 self.__suggestionsReply.deleteLater()
422 self.__suggestionsReply = None 428 self.__suggestionsReply = None
423 429
424 if self.__suggestionsMethod not in self.__requestMethods: 430 if self.__suggestionsMethod not in self.__requestMethods:
433 for parameter in self._suggestionsParameters: 439 for parameter in self._suggestionsParameters:
434 parameters.append(parameter[0] + "=" + parameter[1]) 440 parameters.append(parameter[0] + "=" + parameter[1])
435 data = "&".join(parameters) 441 data = "&".join(parameters)
436 self.__suggestionsReply = self.networkAccessManager().post( 442 self.__suggestionsReply = self.networkAccessManager().post(
437 QNetworkRequest(self.suggestionsUrl(searchTerm)), data) 443 QNetworkRequest(self.suggestionsUrl(searchTerm)), data)
438 self.__suggestionsReply.finished[()].connect(self.__suggestionsObtained) 444 self.__suggestionsReply.finished[()].connect(
445 self.__suggestionsObtained)
439 446
440 def __suggestionsObtained(self): 447 def __suggestionsObtained(self):
441 """ 448 """
442 Private slot to receive the suggestions. 449 Private slot to receive the suggestions.
443 """ 450 """
465 472
466 def networkAccessManager(self): 473 def networkAccessManager(self):
467 """ 474 """
468 Public method to get a reference to the network access manager object. 475 Public method to get a reference to the network access manager object.
469 476
470 @return reference to the network access manager object (QNetworkAccessManager) 477 @return reference to the network access manager object
478 (QNetworkAccessManager)
471 """ 479 """
472 return self.__networkAccessManager 480 return self.__networkAccessManager
473 481
474 def setNetworkAccessManager(self, networkAccessManager): 482 def setNetworkAccessManager(self, networkAccessManager):
475 """ 483 """

eric ide

mercurial