parent
9381aac501
commit
b609f993c3
@ -23,7 +23,7 @@ import functools
|
|||||||
import urllib.request
|
import urllib.request
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSignal, QObject
|
from PyQt5.QtCore import pyqtSignal, QObject, QTimer
|
||||||
from PyQt5.QtNetwork import (QNetworkAccessManager, QNetworkRequest,
|
from PyQt5.QtNetwork import (QNetworkAccessManager, QNetworkRequest,
|
||||||
QNetworkReply)
|
QNetworkReply)
|
||||||
|
|
||||||
@ -36,6 +36,7 @@ class HTTPClient(QObject):
|
|||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
_nam: The QNetworkAccessManager used.
|
_nam: The QNetworkAccessManager used.
|
||||||
|
_timers: A {QNetworkReply: QTimer} dict.
|
||||||
|
|
||||||
Signals:
|
Signals:
|
||||||
success: Emitted when the operation succeeded.
|
success: Emitted when the operation succeeded.
|
||||||
@ -50,6 +51,7 @@ class HTTPClient(QObject):
|
|||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self._nam = QNetworkAccessManager(self)
|
self._nam = QNetworkAccessManager(self)
|
||||||
|
self._timers = {}
|
||||||
|
|
||||||
def post(self, url, data=None):
|
def post(self, url, data=None):
|
||||||
"""Create a new POST request.
|
"""Create a new POST request.
|
||||||
@ -65,11 +67,7 @@ class HTTPClient(QObject):
|
|||||||
request.setHeader(QNetworkRequest.ContentTypeHeader,
|
request.setHeader(QNetworkRequest.ContentTypeHeader,
|
||||||
'application/x-www-form-urlencoded;charset=utf-8')
|
'application/x-www-form-urlencoded;charset=utf-8')
|
||||||
reply = self._nam.post(request, encoded_data)
|
reply = self._nam.post(request, encoded_data)
|
||||||
if reply.isFinished():
|
self._handle_reply(reply)
|
||||||
self.on_reply_finished(reply)
|
|
||||||
else:
|
|
||||||
reply.finished.connect(functools.partial(
|
|
||||||
self.on_reply_finished, reply))
|
|
||||||
|
|
||||||
def get(self, url):
|
def get(self, url):
|
||||||
"""Create a new GET request.
|
"""Create a new GET request.
|
||||||
@ -81,9 +79,18 @@ class HTTPClient(QObject):
|
|||||||
"""
|
"""
|
||||||
request = QNetworkRequest(url)
|
request = QNetworkRequest(url)
|
||||||
reply = self._nam.get(request)
|
reply = self._nam.get(request)
|
||||||
|
self._handle_reply(reply)
|
||||||
|
|
||||||
|
def _handle_reply(self, reply):
|
||||||
|
"""Handle a new QNetworkReply."""
|
||||||
if reply.isFinished():
|
if reply.isFinished():
|
||||||
self.on_reply_finished(reply)
|
self.on_reply_finished(reply)
|
||||||
else:
|
else:
|
||||||
|
timer = QTimer(self)
|
||||||
|
timer.setInterval(10000)
|
||||||
|
timer.timeout.connect(reply.abort)
|
||||||
|
timer.start()
|
||||||
|
self._timers[reply] = timer
|
||||||
reply.finished.connect(functools.partial(
|
reply.finished.connect(functools.partial(
|
||||||
self.on_reply_finished, reply))
|
self.on_reply_finished, reply))
|
||||||
|
|
||||||
@ -93,6 +100,10 @@ class HTTPClient(QObject):
|
|||||||
Args:
|
Args:
|
||||||
reply: The QNetworkReply which finished.
|
reply: The QNetworkReply which finished.
|
||||||
"""
|
"""
|
||||||
|
timer = self._timers.pop(reply)
|
||||||
|
if timer is not None:
|
||||||
|
timer.stop()
|
||||||
|
timer.deleteLater()
|
||||||
if reply.error() != QNetworkReply.NoError:
|
if reply.error() != QNetworkReply.NoError:
|
||||||
self.error.emit(reply.errorString())
|
self.error.emit(reply.errorString())
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user