Merge pull request #230 from kaykurokawa/better_stream_info_error
Better error detection in Wallet for invalid streams
This commit is contained in:
commit
269dc47b69
4 changed files with 16 additions and 14 deletions
|
@ -53,11 +53,11 @@ class InvalidStreamDescriptorError(Exception):
|
|||
|
||||
|
||||
class InvalidStreamInfoError(Exception):
|
||||
def __init__(self, name):
|
||||
def __init__(self, name, stream_info):
|
||||
msg = '{} has claim with invalid stream info: {}'.format(name, stream_info)
|
||||
Exception.__init__(self, msg)
|
||||
self.name = name
|
||||
|
||||
def __str__(self):
|
||||
return repr(self.name)
|
||||
self.stream_info = stream_info
|
||||
|
||||
|
||||
class MisbehavingPeerError(Exception):
|
||||
|
|
|
@ -331,22 +331,22 @@ class Wallet(object):
|
|||
def _check_result_fields(r):
|
||||
for k in ['value', 'txid', 'n', 'height', 'amount']:
|
||||
assert k in r, "getvalueforname response missing field %s" % k
|
||||
|
||||
|
||||
def _log_success(claim_id):
|
||||
log.info("lbry://%s complies with %s, claimid: %s", name, metadata.version, claim_id)
|
||||
return defer.succeed(None)
|
||||
|
||||
|
||||
if 'error' in result:
|
||||
log.warning("Got an error looking up a name: %s", result['error'])
|
||||
return Failure(UnknownNameError(name))
|
||||
|
||||
_check_result_fields(result)
|
||||
|
||||
|
||||
try:
|
||||
metadata = Metadata(json.loads(result['value']))
|
||||
except ValidationError:
|
||||
return Failure(InvalidStreamInfoError(name))
|
||||
|
||||
metadata = Metadata(json.loads(result['value']))
|
||||
except (TypeError, ValueError, ValidationError):
|
||||
return Failure(InvalidStreamInfoError(name,result['value']))
|
||||
|
||||
txid = result['txid']
|
||||
sd_hash = metadata['sources']['lbry_sd_hash']
|
||||
d = self._save_name_metadata(name, txid, sd_hash)
|
||||
|
@ -427,7 +427,7 @@ class Wallet(object):
|
|||
meta_ver = metadata.version
|
||||
sd_hash = metadata['sources']['lbry_sd_hash']
|
||||
d = self._save_name_metadata(name, txid, sd_hash)
|
||||
except ValidationError:
|
||||
except (TypeError, ValueError, ValidationError):
|
||||
metadata = claim['value']
|
||||
meta_ver = "Non-compliant"
|
||||
d = defer.succeed(None)
|
||||
|
|
|
@ -900,7 +900,7 @@ class AddStreamFromLBRYcrdName(AddStreamFromHash):
|
|||
def _resolve_name(self, name):
|
||||
def get_name_from_info(stream_info):
|
||||
if 'stream_hash' not in stream_info:
|
||||
raise InvalidStreamInfoError(name)
|
||||
raise InvalidStreamInfoError(name, stream_info)
|
||||
self.resolved_name = stream_info.get('name', None)
|
||||
self.description = stream_info.get('description', None)
|
||||
try:
|
||||
|
|
|
@ -33,6 +33,8 @@ class Metadata(StructuredDict):
|
|||
]
|
||||
|
||||
def __init__(self, metadata, migrate=True, target_version=None):
|
||||
if not isinstance(metadata,dict):
|
||||
raise TypeError("metadata is not a dictionary")
|
||||
starting_version = metadata.get('ver', '0.0.1')
|
||||
|
||||
StructuredDict.__init__(self, metadata, starting_version, migrate, target_version)
|
||||
StructuredDict.__init__(self, metadata, starting_version, migrate, target_version)
|
||||
|
|
Loading…
Reference in a new issue