class NetworkReply(QNetworkReply):
def __init__(self, reply):
self.reply = reply
QNetworkReply.__init__(self)
# handle these to forward
reply.metaDataChanged.connect(self.applyMetaData)
reply.readyRead.connect(self.readInternal)
reply.error.connect(self.errorInternal)
# forward signals
reply.finished.connect(self.finished)
reply.uploadProgress.connect(self.uploadProgress)
reply.downloadProgress.connect(self.downloadProgress)
self.setOpenMode(QNetworkReply.ReadOnly)
self.data = self.buffer = ''
def operation(self):
return self.reply.operation()
def request(self):
return self.reply.request()
def url(self):
return self.reply.url()
def abort(self):
self.reply.abort()
def close(self):
self.reply.close()
def isSequential(self):
return self.reply.isSequential()
def setReadBufferSize(self, size):
QNetworkReply.setReadBufferSize(size)
self.reply.setReadBufferSize(size)
def applyMetaData(self):
for header in self.reply.rawHeaderList():
self.setRawHeader(header, self.reply.rawHeader(header))
self.setHeader(QNetworkRequest.ContentTypeHeader, self.reply.header(QNetworkRequest.ContentTypeHeader))
self.setHeader(QNetworkRequest.ContentLengthHeader, self.reply.header(QNetworkRequest.ContentLengthHeader))
self.setHeader(QNetworkRequest.LocationHeader, self.reply.header(QNetworkRequest.LocationHeader))
self.setHeader(QNetworkRequest.LastModifiedHeader, self.reply.header(QNetworkRequest.LastModifiedHeader))
self.setHeader(QNetworkRequest.SetCookieHeader, self.reply.header(QNetworkRequest.SetCookieHeader))
self.setAttribute(QNetworkRequest.HttpStatusCodeAttribute, self.reply.attribute(QNetworkRequest.HttpStatusCodeAttribute))
self.setAttribute(QNetworkRequest.HttpReasonPhraseAttribute, self.reply.attribute(QNetworkRequest.HttpReasonPhraseAttribute))
self.setAttribute(QNetworkRequest.RedirectionTargetAttribute, self.reply.attribute(QNetworkRequest.RedirectionTargetAttribute))
self.setAttribute(QNetworkRequest.ConnectionEncryptedAttribute, self.reply.attribute(QNetworkRequest.ConnectionEncryptedAttribute))
self.setAttribute(QNetworkRequest.CacheLoadControlAttribute, self.reply.attribute(QNetworkRequest.CacheLoadControlAttribute))
self.setAttribute(QNetworkRequest.CacheSaveControlAttribute, self.reply.attribute(QNetworkRequest.CacheSaveControlAttribute))
self.setAttribute(QNetworkRequest.SourceIsFromCacheAttribute, self.reply.attribute(QNetworkRequest.SourceIsFromCacheAttribute))
# attribute does not exist
#self.setAttribute(QNetworkRequest.DoNotBufferUploadDataAttribute, self.reply.attribute(QNetworkRequest.DoNotBufferUploadDataAttribute))
self.metaDataChanged.emit()
def errorInternal(self, e):
self.error.emit(e)
self.setError(e, str(e))
def readInternal(self):
# this is called
s = self.reply.readAll()
self.data += s
self.buffer += s
self.readyRead.emit()
def bytesAvailable(self):
return len(self.buffer) + self.reply.bytesAvailable()
def readAll(self):
# this is never called
return self.data
def readData(self, data, size):
# this is never called
size = min(size, len(self.buffer))
data, self.buffer = self.buffer[:size], self.buffer[size:]
return size
class NetworkReply(QNetworkReply):
def __init__(self, reply):
self.reply = reply
QNetworkReply.__init__(self)
# handle these to forward
reply.metaDataChanged.connect(self.applyMetaData)
reply.readyRead.connect(self.readInternal)
reply.error.connect(self.errorInternal)
# forward signals
reply.finished.connect(self.finished)
reply.uploadProgress.connect(self.uploadProgress)
reply.downloadProgress.connect(self.downloadProgress)
self.setOpenMode(QNetworkReply.ReadOnly)
self.data = self.buffer = ''
def operation(self):
return self.reply.operation()
def request(self):
return self.reply.request()
def url(self):
return self.reply.url()
def abort(self):
self.reply.abort()
def close(self):
self.reply.close()
def isSequential(self):
return self.reply.isSequential()
def setReadBufferSize(self, size):
QNetworkReply.setReadBufferSize(size)
self.reply.setReadBufferSize(size)
def applyMetaData(self):
for header in self.reply.rawHeaderList():
self.setRawHeader(header, self.reply.rawHeader(header))
self.setHeader(QNetworkRequest.ContentTypeHeader, self.reply.header(QNetworkRequest.ContentTypeHeader))
self.setHeader(QNetworkRequest.ContentLengthHeader, self.reply.header(QNetworkRequest.ContentLengthHeader))
self.setHeader(QNetworkRequest.LocationHeader, self.reply.header(QNetworkRequest.LocationHeader))
self.setHeader(QNetworkRequest.LastModifiedHeader, self.reply.header(QNetworkRequest.LastModifiedHeader))
self.setHeader(QNetworkRequest.SetCookieHeader, self.reply.header(QNetworkRequest.SetCookieHeader))
self.setAttribute(QNetworkRequest.HttpStatusCodeAttribute, self.reply.attribute(QNetworkRequest.HttpStatusCodeAttribute))
self.setAttribute(QNetworkRequest.HttpReasonPhraseAttribute, self.reply.attribute(QNetworkRequest.HttpReasonPhraseAttribute))
self.setAttribute(QNetworkRequest.RedirectionTargetAttribute, self.reply.attribute(QNetworkRequest.RedirectionTargetAttribute))
self.setAttribute(QNetworkRequest.ConnectionEncryptedAttribute, self.reply.attribute(QNetworkRequest.ConnectionEncryptedAttribute))
self.setAttribute(QNetworkRequest.CacheLoadControlAttribute, self.reply.attribute(QNetworkRequest.CacheLoadControlAttribute))
self.setAttribute(QNetworkRequest.CacheSaveControlAttribute, self.reply.attribute(QNetworkRequest.CacheSaveControlAttribute))
self.setAttribute(QNetworkRequest.SourceIsFromCacheAttribute, self.reply.attribute(QNetworkRequest.SourceIsFromCacheAttribute))
# attribute does not exist
#self.setAttribute(QNetworkRequest.DoNotBufferUploadDataAttribute, self.reply.attribute(QNetworkRequest.DoNotBufferUploadDataAttribute))
self.metaDataChanged.emit()
def errorInternal(self, e):
self.error.emit(e)
self.setError(e, str(e))
def readInternal(self):
# this is called
s = self.reply.readAll()
self.data += s
self.buffer += s
self.readyRead.emit()
def bytesAvailable(self):
return len(self.buffer) + self.reply.bytesAvailable()
def readAll(self):
# this is never called
return self.data
def readData(self, data, size):
# this is never called
size = min(size, len(self.buffer))
data, self.buffer = self.buffer[:size], self.buffer[size:]
return size
To copy to clipboard, switch view to plain text mode
Bookmarks