lbry-sdk/scripts/name.py

60 lines
1.8 KiB
Python
Raw Normal View History

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