def download(self): if not is_valid_blobhash(self.blob_hash): return defer.fail(Failure(InvalidBlobHashError(self.blob_hash))) def cancel_download(d): self.stop() self.finished_deferred = defer.Deferred(canceller=cancel_download) self.download_manager = DownloadManager(self.blob_manager, True) self.download_manager.blob_requester = BlobRequester(self.blob_manager, self.peer_finder, self.payment_rate_manager, self.wallet, self.download_manager) self.download_manager.blob_info_finder = SingleBlobMetadataHandler(self.blob_hash, self.download_manager) self.download_manager.progress_manager = SingleProgressManager(self._blob_downloaded, self.download_manager) self.download_manager.blob_handler = DummyBlobHandler() self.download_manager.wallet_info_exchanger = self.wallet.get_info_exchanger() self.download_manager.connection_manager = ConnectionManager( self, self.rate_limiter, [self.download_manager.blob_requester], [self.download_manager.wallet_info_exchanger] ) d = self.download_manager.start_downloading() d.addCallback(lambda _: self.finished_deferred) return d
class StandaloneBlobDownloader(object): def __init__(self, blob_hash, blob_manager, peer_finder, rate_limiter, payment_rate_manager, wallet, timeout=None): self.blob_hash = blob_hash self.blob_manager = blob_manager self.peer_finder = peer_finder self.rate_limiter = rate_limiter self.payment_rate_manager = payment_rate_manager self.wallet = wallet self.timeout = timeout self.download_manager = None self.finished_deferred = None def download(self): if not is_valid_blobhash(self.blob_hash): return defer.fail(Failure(InvalidBlobHashError(self.blob_hash))) def cancel_download(d): self.stop() self.finished_deferred = defer.Deferred(canceller=cancel_download) self.download_manager = DownloadManager(self.blob_manager) self.download_manager.blob_requester = BlobRequester(self.blob_manager, self.peer_finder, self.payment_rate_manager, self.wallet, self.download_manager) self.download_manager.blob_info_finder = SingleBlobMetadataHandler(self.blob_hash, self.download_manager) self.download_manager.progress_manager = SingleProgressManager(self.download_manager, self._blob_downloaded, self._download_timedout, self.timeout) self.download_manager.blob_handler = DummyBlobHandler() self.download_manager.wallet_info_exchanger = self.wallet.get_info_exchanger() self.download_manager.connection_manager = ConnectionManager( self, self.rate_limiter, [self.download_manager.blob_requester], [self.download_manager.wallet_info_exchanger] ) d = self.download_manager.start_downloading() d.addCallback(lambda _: self.finished_deferred) return d def stop(self): return self.download_manager.stop_downloading() def _blob_downloaded(self, blob): self.stop() if not self.finished_deferred.called: self.finished_deferred.callback(blob) def _download_timedout(self): self.stop() if not self.finished_deferred.called: self.finished_deferred.errback(DownloadTimeoutError(self.blob_hash)) def insufficient_funds(self, err): self.stop() if not self.finished_deferred.called: self.finished_deferred.errback(err)
class StandaloneBlobDownloader(object): def __init__(self, blob_hash, blob_manager, peer_finder, rate_limiter, payment_rate_manager, wallet, timeout=None): self.blob_hash = blob_hash self.blob_manager = blob_manager self.peer_finder = peer_finder self.rate_limiter = rate_limiter self.payment_rate_manager = payment_rate_manager self.wallet = wallet self.timeout = timeout self.download_manager = None self.finished_deferred = None def download(self): if not is_valid_blobhash(self.blob_hash): return defer.fail(Failure(InvalidBlobHashError(self.blob_hash))) def cancel_download(d): self.stop() self.finished_deferred = defer.Deferred(canceller=cancel_download) self.download_manager = DownloadManager(self.blob_manager) self.download_manager.blob_requester = BlobRequester(self.blob_manager, self.peer_finder, self.payment_rate_manager, self.wallet, self.download_manager) self.download_manager.blob_info_finder = SingleBlobMetadataHandler(self.blob_hash, self.download_manager) self.download_manager.progress_manager = SingleProgressManager(self.download_manager, self._blob_downloaded, self._download_timedout, self.timeout) self.download_manager.blob_handler = DummyBlobHandler() self.download_manager.wallet_info_exchanger = self.wallet.get_info_exchanger() self.download_manager.connection_manager = ConnectionManager( self, self.rate_limiter, [self.download_manager.blob_requester], [self.download_manager.wallet_info_exchanger] ) d = self.download_manager.start_downloading() d.addCallback(lambda _: self.finished_deferred) return d def stop(self): return self.download_manager.stop_downloading() def _blob_downloaded(self, blob): self.stop() if not self.finished_deferred.called: self.finished_deferred.callback(blob) def _download_timedout(self): self.stop() if not self.finished_deferred.called: self.finished_deferred.errback(DownloadSDTimeout(self.blob_hash)) def insufficient_funds(self, err): self.stop() if not self.finished_deferred.called: self.finished_deferred.errback(err)
def _get_download_manager(self): download_manager = DownloadManager(self.blob_manager, self.upload_allowed) download_manager.blob_info_finder = self._get_metadata_handler(download_manager) download_manager.blob_requester = self._get_blob_requester(download_manager) download_manager.progress_manager = self._get_progress_manager(download_manager) download_manager.blob_handler = self._get_blob_handler(download_manager) download_manager.wallet_info_exchanger = self.wallet.get_info_exchanger() download_manager.connection_manager = self._get_connection_manager(download_manager) #return DownloadManager(self.blob_manager, self.blob_requester, self.metadata_handler, # self.progress_manager, self.blob_handler, self.connection_manager) return download_manager
def _get_download_manager(self): assert self.blob_requester is None download_manager = DownloadManager(self.blob_manager) # TODO: can we get rid of these circular references. I'm not # smart enough to handle thinking about the interactions # between them and have hope that there is a simpler way # to accomplish what we want download_manager.blob_info_finder = self._get_metadata_handler(download_manager) download_manager.progress_manager = self._get_progress_manager(download_manager) download_manager.blob_handler = self._get_blob_handler(download_manager) download_manager.wallet_info_exchanger = self.wallet.get_info_exchanger() # blob_requester needs to be set before the connection manager is setup self.blob_requester = self._get_blob_requester(download_manager) download_manager.connection_manager = self._get_connection_manager(download_manager) return download_manager
def _start(self): self.download_manager = DownloadManager(self.blob_manager, True) info_finder = BlindMetadataHandler(self.info_manager, self.peers, self.peer_finder, self.approved_peers, self.payment_rate_manager, self.wallet, self.download_manager) self.download_manager.blob_info_finder = info_finder blob_requester = BlobRequester(self.blob_manager, self.peer_finder, self.payment_rate_manager, self.wallet, self.download_manager) self.download_manager.blob_requester = blob_requester self.progress_manager = BlindProgressManager(self.blob_manager, self.peers, self.max_space, [PeerScoreBasedScorer(), LengthBasedScorer()], self.download_manager) self.download_manager.progress_manager = self.progress_manager self.download_manager.blob_handler = BlindBlobHandler() wallet_info_exchanger = self.wallet.get_info_exchanger() self.download_manager.wallet_info_exchanger = wallet_info_exchanger connection_manager = ConnectionManager(self, self.rate_limiter, [info_finder, blob_requester], [wallet_info_exchanger]) self.download_manager.connection_manager = connection_manager d = defer.maybeDeferred(self.download_manager.start_downloading) d.addCallback(lambda _: self._update_status(stopped=False)) return d