Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
 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