From 98d3a4cb46cd03f928f2bdaf068084bd4046380c Mon Sep 17 00:00:00 2001 From: Kay Kurokawa Date: Tue, 7 Mar 2017 12:30:16 -0500 Subject: [PATCH 1/3] fix api consistency issues from lbryum --- lbrynet/core/Wallet.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lbrynet/core/Wallet.py b/lbrynet/core/Wallet.py index ed160fb30..bc123ad22 100644 --- a/lbrynet/core/Wallet.py +++ b/lbrynet/core/Wallet.py @@ -476,7 +476,7 @@ class Wallet(object): def _get_stream_info_from_value(self, result, name): def _check_result_fields(r): - for k in ['value', 'txid', 'n', 'height', 'amount']: + for k in ['value', 'txid', 'nout', 'height', 'amount']: assert k in r, "getvalueforname response missing field %s" % k def _log_success(claim_id): @@ -492,9 +492,9 @@ class Wallet(object): except (TypeError, ValueError, ValidationError): return Failure(InvalidStreamInfoError(name, result['value'])) sd_hash = metadata['sources']['lbry_sd_hash'] - claim_outpoint = ClaimOutpoint(result['txid'], result['n']) + claim_outpoint = ClaimOutpoint(result['txid'], result['nout']) d = self._save_name_metadata(name, claim_outpoint, sd_hash) - d.addCallback(lambda _: self.get_claimid(name, result['txid'], result['n'])) + d.addCallback(lambda _: self.get_claimid(name, result['txid'], result['nout'])) d.addCallback(lambda cid: _log_success(cid)) d.addCallback(lambda _: metadata) return d @@ -503,7 +503,7 @@ class Wallet(object): d = self.get_claims_for_name(name) d.addCallback( lambda claims: next( - claim for claim in claims['claims'] if claim['claimId'] == claim_id)) + claim for claim in claims['claims'] if claim['claim_id'] == claim_id)) return d def get_claimid(self, name, txid, nout): @@ -515,10 +515,10 @@ class Wallet(object): d.addCallback( lambda claims: next( c for c in claims if c['name'] == name and - c['nOut'] == claim_outpoint['nout'])) + c['nout'] == claim_outpoint['nout'])) d.addCallback( lambda claim: self._update_claimid( - claim['claimId'], name, ClaimOutpoint(txid, claim['nOut']))) + claim['claim_id'], name, ClaimOutpoint(txid, claim['nout']))) return d claim_outpoint = ClaimOutpoint(txid, nout) @@ -537,7 +537,7 @@ class Wallet(object): for claim in claims: is_unspent = ( claim['name'] == name and - not claim['is spent'] and + not claim['is_spent'] and not claim.get('supported_claimid', False) ) if is_unspent: @@ -552,7 +552,7 @@ class Wallet(object): def get_claim_info(self, name, txid=None, nout=None): if txid is None or nout is None: d = self._get_value_for_name(name) - d.addCallback(lambda r: self._get_claim_info(name, ClaimOutpoint(r['txid'], r['n']))) + d.addCallback(lambda r: self._get_claim_info(name, ClaimOutpoint(r['txid'], r['nout']))) else: d = self._get_claim_info(name, ClaimOutpoint(txid, nout)) d.addErrback(lambda _: False) @@ -560,15 +560,15 @@ class Wallet(object): def _format_claim_for_return(self, name, claim, metadata=None, meta_version=None): result = {} - result['claim_id'] = claim['claimId'] - result['amount'] = claim['nEffectiveAmount'] - result['height'] = claim['nHeight'] + result['claim_id'] = claim['claim_id'] + result['amount'] = claim['effective_amount'] + result['height'] = claim['height'] result['name'] = name result['txid'] = claim['txid'] - result['nout'] = claim['n'] + result['nout'] = claim['nout'] result['value'] = metadata if metadata else json.loads(claim['value']) result['supports'] = [ - {'txid': support['txid'], 'n': support['n']} for support in claim['supports']] + {'txid': support['txid'], 'nout': support['nout']} for support in claim['supports']] result['meta_version'] = ( meta_version if meta_version else result['value'].get('ver', '0.0.1')) return result @@ -591,7 +591,7 @@ class Wallet(object): meta_version=meta_ver)) log.info( "get claim info lbry://%s metadata: %s, claimid: %s", - name, meta_ver, claim['claimId']) + name, meta_ver, claim['claim_id']) return d d = self.get_claimid(name, claim_outpoint['txid'], claim_outpoint['nout']) @@ -638,7 +638,7 @@ class Wallet(object): if self.get_balance() < bid - my_claim['amount']: raise InsufficientFundsError() new_metadata = yield self.update_metadata(_metadata, my_claim['value']) - old_claim_outpoint = ClaimOutpoint(my_claim['txid'], my_claim['nOut']) + old_claim_outpoint = ClaimOutpoint(my_claim['txid'], my_claim['nout']) claim = yield self._send_name_claim_update(name, my_claim['claim_id'], old_claim_outpoint, new_metadata, bid) claim['claim_id'] = my_claim['claim_id'] From 371591f96ee34dc7a9add592ba9474859237b322 Mon Sep 17 00:00:00 2001 From: Kay Kurokawa Date: Wed, 8 Mar 2017 09:20:52 -0500 Subject: [PATCH 2/3] add changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5bdf6fcb..f472c4e63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,10 @@ at anytime. * ### Fixed + * Added string comparison to ClaimOutpoint (needed to look things up by outpoint) + * Remove unused API commands from daemon + * Fix file filter `outpoint` + * Made dictionary key names in API commmand outputs to be more consistent * * * From 8c611853872d1a468a79bfdaa9795ffbc9a5083e Mon Sep 17 00:00:00 2001 From: Kay Kurokawa Date: Thu, 9 Mar 2017 11:12:49 -0500 Subject: [PATCH 3/3] handle decimal encoded string output from lbryum --- lbrynet/core/Wallet.py | 2 +- lbrynet/lbrynet_daemon/Daemon.py | 39 ++++++++++++++++++-------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/lbrynet/core/Wallet.py b/lbrynet/core/Wallet.py index bc123ad22..f61c213c8 100644 --- a/lbrynet/core/Wallet.py +++ b/lbrynet/core/Wallet.py @@ -635,7 +635,7 @@ class Wallet(object): if my_claim: log.info("Updating claim") - if self.get_balance() < bid - my_claim['amount']: + if self.get_balance() < bid - Decimal(my_claim['amount']): raise InsufficientFundsError() new_metadata = yield self.update_metadata(_metadata, my_claim['value']) old_claim_outpoint = ClaimOutpoint(my_claim['txid'], my_claim['nout']) diff --git a/lbrynet/lbrynet_daemon/Daemon.py b/lbrynet/lbrynet_daemon/Daemon.py index 7e2460294..e62004650 100644 --- a/lbrynet/lbrynet_daemon/Daemon.py +++ b/lbrynet/lbrynet_daemon/Daemon.py @@ -8,7 +8,6 @@ import requests import urllib import simplejson as json from requests import exceptions as requests_exceptions -from decimal import Decimal import random from twisted.web import server @@ -1492,15 +1491,8 @@ class Daemon(AuthJSONRPCServer): txid, amount, value, n, height """ - def _convert_amount_to_float(r): - if not r: - return False - else: - r['amount'] = float(r['amount']) / 10 ** 8 - return r - d = self.session.wallet.get_claim_info(name, txid, nout) - d.addCallback(_convert_amount_to_float) + d.addCallback(format_json_out_amount_as_float) d.addCallback(lambda r: self._render_response(r)) return d @@ -1826,15 +1818,8 @@ class Daemon(AuthJSONRPCServer): list of name claims """ - def _clean(claims): - for c in claims: - for k in c.keys(): - if isinstance(c[k], Decimal): - c[k] = float(c[k]) - return defer.succeed(claims) - d = self.session.wallet.get_name_claims() - d.addCallback(_clean) + d.addCallback(format_json_out_amount_as_float) d.addCallback(lambda claims: self._render_response(claims)) return d @@ -1861,6 +1846,7 @@ class Daemon(AuthJSONRPCServer): """ d = self.session.wallet.get_claims_for_name(name) + d.addCallback(format_json_out_amount_as_float) d.addCallback(lambda r: self._render_response(r)) return d @@ -2562,3 +2548,22 @@ def get_version_from_tag(tag): return match.group(1) else: raise Exception('Failed to parse version from tag {}'.format(tag)) + + +# lbryum returns json loadeable object with amounts as decimal encoded string, +# convert them into floats for the daemon +# TODO: daemon should also use decimal encoded string +def format_json_out_amount_as_float(obj): + if isinstance(obj, dict): + for k, v in obj.iteritems(): + if k == 'amount' or k == 'effective_amount': + obj[k] = float(obj[k]) + if isinstance(v, dict) or isinstance(v, list): + obj[k] = format_json_out_amount_as_float(v) + + elif isinstance(obj, list): + obj = [format_json_out_amount_as_float(o) for o in obj] + return obj + + +