lbry-sdk/scripts/name.py
2017-01-11 12:05:34 -06:00

60 lines
1.8 KiB
Python

import logging
import random
from twisted.internet import defer
from twisted.internet import reactor
from lbrynet.core import Error
from lbrynet.core import StreamDescriptor
from lbrynet.metadata import Metadata
log = logging.getLogger(__name__)
class Name(object):
def __init__(self, name):
self.name = name
self.sd_hash = None
self.sd_blob = None
@defer.inlineCallbacks
def setSdHash(self, wallet):
try:
stream = yield wallet.get_stream_info_for_name(self.name)
metadata = Metadata.Metadata(stream)
self.sd_hash = _getSdHash(metadata)
except (Error.InvalidStreamInfoError, AssertionError):
pass
except Exception:
log.exception('What happened')
@defer.inlineCallbacks
def download_sd_blob(self, session):
print('Trying to get sd_blob for {} using {}'.format(self.name, self.sd_hash))
try:
blob = yield download_sd_blob_with_timeout(
session, self.sd_hash, session.payment_rate_manager)
self.sd_blob = blob
yield self._after_download(blob)
print('Downloaded sd_blob for {} using {}'.format(self.name, self.sd_hash))
except defer.TimeoutError:
print('Downloading sd_blob for {} timed-out'.format(self.name))
# swallow errors from the timeout
pass
except Exception:
log.exception('Failed to download {}'.format(self.name))
def _after_download(self, blob):
pass
def _getSdHash(metadata):
return metadata['sources']['lbry_sd_hash']
def download_sd_blob_with_timeout(session, sd_hash, payment_rate_manager):
d = StreamDescriptor.download_sd_blob(session, sd_hash, payment_rate_manager)
d.addTimeout(random.randint(10, 30), reactor)
return d