Advertisement
stuppid_bot

Untitled

Jun 13th, 2015
620
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.30 KB | None | 0 0
  1. from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
  2. from PyQt5.QtCore import QUrl, QEventLoop
  3. from urllib.parse import urlencode
  4.  
  5.  
  6. class SyncRequester:
  7.     def __init__(self, networkManager=None):
  8.         self.networkManager = networkManager or QNetworkAccessManager()
  9.  
  10.     def get(self, url, params=None, headers={}):
  11.         url = QUrl(url)
  12.         if params:
  13.             qs = url.query() + ('&' if url.query() else '') + urlencode(params)
  14.             url.setQuery(qs)
  15.         request = self._getRequest(url, headers)
  16.         reply = self.networkManager.get(request)
  17.         self._waitReply(reply)
  18.         return reply
  19.  
  20.     def head(self, url, headers={}):
  21.         u = QUrl(url)
  22.         request = self._getRequest(u, headers)
  23.         reply = self.networkManager.head(request)
  24.         self._waitReply(reply)
  25.         return reply
  26.  
  27.     def post(self, url, data, headers={}):
  28.         url = QUrl(url)
  29.         if isinstance(data, (dict, list, tuple)):
  30.             data = urlencode(data).encode('ascii')
  31.         request = self._getRequest(url, headers)
  32.         reply = self.networkManager.post(request, data)
  33.         self._waitReply(reply)
  34.         return reply
  35.  
  36.     def put(self, url, data, headers={}):
  37.         url = QUrl(url)
  38.         request = self._getRequest(url, headers)
  39.         reply = self.networkManager.put(request, data)
  40.         self._waitReply(reply)
  41.         return reply
  42.  
  43.     def _getRequest(self, url, headers):
  44.         request = QNetworkRequest(url)
  45.         for header, value in headers.items():
  46.             request.setRawHeader(bytes(header, 'ascii'), bytes(value, 'ascii'))
  47.         return request
  48.  
  49.     def _waitReply(self, reply):
  50.         loop = QEventLoop()
  51.         reply.finished.connect(loop.quit)
  52.         loop.exec_()
  53.  
  54.  
  55. if __name__ == '__main__':
  56.     from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QLabel,
  57.                                  QTextEdit)
  58.     app = QApplication([])
  59.     requester = SyncRequester()
  60.     r = requester.get("http://httpbin.org/get", {"foo": "bar"})
  61.     w = QWidget()
  62.     lay = QVBoxLayout(w)
  63.     lay.addWidget(QLabel("Response:"))
  64.     lay.addWidget(QTextEdit("<pre>{}</pre>".format(str(r.readAll(), 'utf-8'))))
  65.     w.show()
  66.     app.exec_()
  67.     del app # QWaitCondition: Destroyed while threads are still waiting?!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement