diff --git a/lbrynet/core/LBRYWallet.py b/lbrynet/core/LBRYWallet.py index da1915674..6535e6e35 100644 --- a/lbrynet/core/LBRYWallet.py +++ b/lbrynet/core/LBRYWallet.py @@ -368,6 +368,31 @@ class LBRYWallet(object): d.addCallback(_get_id_for_return) return d + def get_my_claim(self, name): + def _convert_units(claim): + amount = Decimal(claim['nEffectiveAmount'] / COIN) + claim['nEffectiveAmount'] = amount + return claim + + def _get_claim_for_return(claim): + if not claim: + return False + d = self.get_claim(name, claim['claim_id']) + d.addCallback(_convert_units) + d.addCallback(lambda clm: self._format_claim_for_return(name, clm, claim['txid'])) + return d + + def _get_my_unspent_claim(claims): + for claim in claims: + if claim['name'] == name and not claim['is spent']: + return claim + return False + + d = self.get_name_claims() + d.addCallback(_get_my_unspent_claim) + d.addCallback(_get_claim_for_return) + return d + def get_claim_info(self, name, txid=None): if not txid: d = self._get_value_for_name(name) @@ -377,9 +402,20 @@ class LBRYWallet(object): d.addErrback(lambda _: False) return d + def _format_claim_for_return(self, name, claim, txid, metadata=None, meta_version=None): + result = {} + result['claim_id'] = claim['claimId'] + result['amount'] = claim['nEffectiveAmount'] + result['height'] = claim['nHeight'] + result['name'] = name + result['txid'] = txid + result['value'] = metadata if metadata else json.loads(claim['value']) + result['supports'] = [{'txid': support['txid'], 'n': support['n']} for support in claim['supports']] + result['meta_version'] = meta_version if meta_version else result['value'].get('ver', '0.0.1') + return result + def _get_claim_info(self, name, txid): def _build_response(claim): - result = {} try: metadata = Metadata(json.loads(claim['value'])) meta_ver = metadata.version @@ -390,27 +426,12 @@ class LBRYWallet(object): meta_ver = "Non-compliant" d = defer.succeed(None) - claim_id = claim['claimId'] - result['claim_id'] = claim_id - result['amount'] = claim['nEffectiveAmount'] - result['height'] = claim['nHeight'] - result['name'] = name - result['txid'] = txid - result['value'] = metadata - result['supports'] = [{'txid': support['txid'], 'n': support['n']} for support in claim['supports']] - result['meta_version'] = meta_ver + d.addCallback(lambda _: self._format_claim_for_return(name, claim, txid, + metadata=metadata, meta_version=meta_ver)) + log.info("get claim info lbry://%s metadata: %s, claimid: %s", name, meta_ver, claim['claimId']) - log.info("get claim info lbry://%s metadata: %s, claimid: %s", name, meta_ver, claim_id) - - d.addCallback(lambda _: self.get_name_claims()) - d.addCallback(lambda r: [c['txid'] for c in r]) - d.addCallback(lambda my_claims: _add_is_mine(result, my_claims)) return d - def _add_is_mine(response, my_txs): - response['is_mine'] = response['txid'] in my_txs - return response - d = self.get_claimid(name, txid) d.addCallback(lambda claim_id: self.get_claim(name, claim_id)) d.addCallback(_build_response) diff --git a/lbrynet/lbrynet_daemon/LBRYDaemon.py b/lbrynet/lbrynet_daemon/LBRYDaemon.py index b258d914d..eb57d50c0 100644 --- a/lbrynet/lbrynet_daemon/LBRYDaemon.py +++ b/lbrynet/lbrynet_daemon/LBRYDaemon.py @@ -1748,6 +1748,21 @@ class LBRYDaemon(jsonrpc.JSONRPC): d.addCallbacks(lambda info: self._render_response(info, OK_CODE), lambda _: server.failure) return d + def jsonrpc_get_my_claim(self, p): + """ + Return existing claim for a given name + + Args: + 'name': name to look up + Returns: + claim info, False if no such claim exists + """ + + name = p['name'] + d = self.session.wallet.get_my_claim(name) + d.addCallback(lambda r: self._render_response(r, OK_CODE)) + return d + def jsonrpc_get_claim_info(self, p): """ Resolve claim info from a LBRY uri