X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=apt_dht%2FHTTPDownloader.py;h=c906c0e87d133a52310dd91800449af90c95a2e4;hb=831e4f2adebf21b0427edde718668356a8df4837;hp=7e5a06cb6880a10bcb8ce0a20c43ef56e1862ab9;hpb=dd75e47b4d4ee40dae492753a226d5a42ac73c1c;p=quix0rs-apt-p2p.git diff --git a/apt_dht/HTTPDownloader.py b/apt_dht/HTTPDownloader.py index 7e5a06c..c906c0e 100644 --- a/apt_dht/HTTPDownloader.py +++ b/apt_dht/HTTPDownloader.py @@ -2,6 +2,7 @@ from twisted.internet import reactor, defer, protocol from twisted.internet.protocol import ClientFactory from twisted import version as twisted_version +from twisted.python import log from twisted.web2.client.interfaces import IHTTPClientManager from twisted.web2.client.http import ProtocolError, ClientRequest, HTTPClientProtocol from twisted.web2 import stream as stream_mod, http_headers @@ -35,7 +36,7 @@ class HTTPClientManager(ClientFactory): self.connector = None def connect(self): - assert(self.closed and not self.connecting) + assert self.closed and not self.connecting self.connecting = True d = protocol.ClientCreator(reactor, HTTPClientProtocol, self).connectTCP(self.host, self.port) d.addCallback(self.connected) @@ -75,15 +76,16 @@ class HTTPClientManager(ClientFactory): req = self.request_queue.pop(0) self.response_queue.append(req) req.deferResponse = self.proto.submitRequest(req, False) - req.deferResponse.addCallback(self.requestComplete) - req.deferResponse.addErrback(self.requestError) + req.deferResponse.addCallbacks(self.requestComplete, self.requestError) def requestComplete(self, resp): req = self.response_queue.pop(0) + log.msg('%s of %s completed with code %d' % (req.method, req.uri, resp.code)) req.deferRequest.callback(resp) def requestError(self, error): req = self.response_queue.pop(0) + log.msg('Download of %s generated error %r' % (req.uri, error)) req.deferRequest.errback(error) def clientBusy(self, proto): @@ -116,8 +118,10 @@ class HTTPClientManager(ClientFactory): (version.short(), twisted_version.short(), web2_version.short())) return headers - def get(self, path, method="GET"): + def get(self, path, method="GET", modtime=None): headers = self.setCommonHeaders() + if modtime: + headers.setHeader('If-Modified-Since', modtime) return self.submitRequest(ClientRequest(method, path, headers, None)) def getRange(self, path, rangeStart, rangeEnd, method="GET"): @@ -169,18 +173,18 @@ class TestClientManager(unittest.TestCase): d = self.client.get(path) d.addCallback(self.gotResp, num, expect) if last: - d.addCallback(lastDefer.callback) + d.addBoth(lastDefer.callback) newRequest("/", 1, 3433) - newRequest("/blog/", 2, 37121) + newRequest("/blog/", 2, 39152) newRequest("/camrdale.html", 3, 2234) self.pending_calls.append(reactor.callLater(1, newRequest, '/robots.txt', 4, 309)) self.pending_calls.append(reactor.callLater(10, newRequest, '/wikilink.html', 5, 3084)) - self.pending_calls.append(reactor.callLater(30, newRequest, '/sitemap.html', 6, 4750)) + self.pending_calls.append(reactor.callLater(30, newRequest, '/sitemap.html', 6, 4756)) self.pending_calls.append(reactor.callLater(31, newRequest, '/PlanetLab.html', 7, 2783)) self.pending_calls.append(reactor.callLater(32, newRequest, '/openid.html', 8, 2525)) self.pending_calls.append(reactor.callLater(32, newRequest, '/subpage.html', 9, 2381)) - self.pending_calls.append(reactor.callLater(62, newRequest, '/sitemap2.rss', 0, 302362, True)) + self.pending_calls.append(reactor.callLater(62, newRequest, '/sitemap2.rss', 0, 313470, True)) return lastDefer def test_multiple_quick_downloads(self): @@ -193,18 +197,18 @@ class TestClientManager(unittest.TestCase): d = self.client.get(path) d.addCallback(self.gotResp, num, expect) if last: - d.addCallback(lastDefer.callback) + d.addBoth(lastDefer.callback) newRequest("/", 1, 3433) - newRequest("/blog/", 2, 37121) + newRequest("/blog/", 2, 39152) newRequest("/camrdale.html", 3, 2234) self.pending_calls.append(reactor.callLater(0, newRequest, '/robots.txt', 4, 309)) self.pending_calls.append(reactor.callLater(0, newRequest, '/wikilink.html', 5, 3084)) - self.pending_calls.append(reactor.callLater(0, newRequest, '/sitemap.html', 6, 4750)) + self.pending_calls.append(reactor.callLater(0, newRequest, '/sitemap.html', 6, 4756)) self.pending_calls.append(reactor.callLater(0, newRequest, '/PlanetLab.html', 7, 2783)) self.pending_calls.append(reactor.callLater(0, newRequest, '/openid.html', 8, 2525)) self.pending_calls.append(reactor.callLater(0, newRequest, '/subpage.html', 9, 2381)) - self.pending_calls.append(reactor.callLater(0, newRequest, '/sitemap2.rss', 0, 302362, True)) + self.pending_calls.append(reactor.callLater(0, newRequest, '/sitemap2.rss', 0, 313470, True)) return lastDefer def test_range(self):