forked from LBRYCommunity/lbry-sdk
Merge pull request #2872 from lbryio/claim_list_include_received_tips
added `--include_received_tips` to `claim_list` and `txo_list` commands
This commit is contained in:
commit
285483b81a
3 changed files with 58 additions and 5 deletions
|
@ -2194,7 +2194,7 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
claim_list [--claim_type=<claim_type>...] [--claim_id=<claim_id>...] [--name=<name>...]
|
claim_list [--claim_type=<claim_type>...] [--claim_id=<claim_id>...] [--name=<name>...]
|
||||||
[--channel_id=<channel_id>...] [--account_id=<account_id>] [--wallet_id=<wallet_id>]
|
[--channel_id=<channel_id>...] [--account_id=<account_id>] [--wallet_id=<wallet_id>]
|
||||||
[--page=<page>] [--page_size=<page_size>]
|
[--page=<page>] [--page_size=<page_size>]
|
||||||
[--resolve] [--order_by=<order_by>] [--no_totals]
|
[--resolve] [--order_by=<order_by>] [--no_totals] [--include_received_tips]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--claim_type=<claim_type> : (str or list) claim type: channel, stream, repost, collection
|
--claim_type=<claim_type> : (str or list) claim type: channel, stream, repost, collection
|
||||||
|
@ -2209,6 +2209,7 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
--order_by=<order_by> : (str) field to order by: 'name', 'height', 'amount'
|
--order_by=<order_by> : (str) field to order by: 'name', 'height', 'amount'
|
||||||
--no_totals : (bool) do not calculate the total number of pages and items in result set
|
--no_totals : (bool) do not calculate the total number of pages and items in result set
|
||||||
(significant performance boost)
|
(significant performance boost)
|
||||||
|
--include_received_tips : (bool) calculate the amount of tips recieved for claim outputs
|
||||||
|
|
||||||
Returns: {Paginated[Output]}
|
Returns: {Paginated[Output]}
|
||||||
"""
|
"""
|
||||||
|
@ -4170,7 +4171,7 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
@requires(WALLET_COMPONENT)
|
@requires(WALLET_COMPONENT)
|
||||||
def jsonrpc_txo_list(
|
def jsonrpc_txo_list(
|
||||||
self, account_id=None, wallet_id=None, page=None, page_size=None,
|
self, account_id=None, wallet_id=None, page=None, page_size=None,
|
||||||
resolve=False, order_by=None, no_totals=False, **kwargs):
|
resolve=False, order_by=None, no_totals=False, include_received_tips=False, **kwargs):
|
||||||
"""
|
"""
|
||||||
List my transaction outputs.
|
List my transaction outputs.
|
||||||
|
|
||||||
|
@ -4180,7 +4181,7 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
[--is_my_input_or_output |
|
[--is_my_input_or_output |
|
||||||
[[--is_my_output | --is_not_my_output] [--is_my_input | --is_not_my_input]]
|
[[--is_my_output | --is_not_my_output] [--is_my_input | --is_not_my_input]]
|
||||||
]
|
]
|
||||||
[--exclude_internal_transfers]
|
[--exclude_internal_transfers] [--include_received_tips]
|
||||||
[--wallet_id=<wallet_id>] [--page=<page>] [--page_size=<page_size>]
|
[--wallet_id=<wallet_id>] [--page=<page>] [--page_size=<page_size>]
|
||||||
[--resolve] [--order_by=<order_by>][--no_totals]
|
[--resolve] [--order_by=<order_by>][--no_totals]
|
||||||
|
|
||||||
|
@ -4203,6 +4204,7 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
"--is_my_input --is_my_output --type=other"
|
"--is_my_input --is_my_output --type=other"
|
||||||
this allows to exclude "change" payments, this
|
this allows to exclude "change" payments, this
|
||||||
flag can be used in combination with any of the other flags
|
flag can be used in combination with any of the other flags
|
||||||
|
--include_received_tips : (bool) calculate the amount of tips recieved for claim outputs
|
||||||
--account_id=<account_id> : (str) id of the account to query
|
--account_id=<account_id> : (str) id of the account to query
|
||||||
--wallet_id=<wallet_id> : (str) restrict results to specific wallet
|
--wallet_id=<wallet_id> : (str) restrict results to specific wallet
|
||||||
--page=<page> : (int) page to return during paginating
|
--page=<page> : (int) page to return during paginating
|
||||||
|
@ -4227,6 +4229,7 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
'include_is_spent': True,
|
'include_is_spent': True,
|
||||||
'include_is_my_input': True,
|
'include_is_my_input': True,
|
||||||
'include_is_my_output': True,
|
'include_is_my_output': True,
|
||||||
|
'include_received_tips': include_received_tips
|
||||||
}
|
}
|
||||||
if order_by is not None:
|
if order_by is not None:
|
||||||
if order_by == 'name':
|
if order_by == 'name':
|
||||||
|
|
|
@ -750,6 +750,7 @@ class Database(SQLiteMixin):
|
||||||
include_is_spent = constraints.get('include_is_spent', False)
|
include_is_spent = constraints.get('include_is_spent', False)
|
||||||
include_is_my_input = constraints.get('include_is_my_input', False)
|
include_is_my_input = constraints.get('include_is_my_input', False)
|
||||||
include_is_my_output = constraints.pop('include_is_my_output', False)
|
include_is_my_output = constraints.pop('include_is_my_output', False)
|
||||||
|
include_received_tips = constraints.pop('include_received_tips', False)
|
||||||
|
|
||||||
select_columns = [
|
select_columns = [
|
||||||
"tx.txid, raw, tx.height, tx.position as tx_position, tx.is_verified, "
|
"tx.txid, raw, tx.height, tx.position as tx_position, tx.is_verified, "
|
||||||
|
@ -777,12 +778,20 @@ class Database(SQLiteMixin):
|
||||||
select_columns.append(f"""(
|
select_columns.append(f"""(
|
||||||
txi.address IS NOT NULL AND
|
txi.address IS NOT NULL AND
|
||||||
txi.address IN (SELECT address FROM account_address WHERE {my_accounts_sql})
|
txi.address IN (SELECT address FROM account_address WHERE {my_accounts_sql})
|
||||||
) AS is_my_input
|
) AS is_my_input""")
|
||||||
""")
|
|
||||||
|
|
||||||
if include_is_spent:
|
if include_is_spent:
|
||||||
select_columns.append("spent.txoid IS NOT NULL AS is_spent")
|
select_columns.append("spent.txoid IS NOT NULL AS is_spent")
|
||||||
|
|
||||||
|
if include_received_tips:
|
||||||
|
select_columns.append(f"""(
|
||||||
|
SELECT COALESCE(SUM(support.amount), 0) FROM txo AS support WHERE
|
||||||
|
support.claim_id = txo.claim_id AND
|
||||||
|
support.txo_type = {TXO_TYPES['support']} AND
|
||||||
|
support.address IN (SELECT address FROM account_address WHERE {my_accounts_sql}) AND
|
||||||
|
support.txoid NOT IN (SELECT txoid FROM txi)
|
||||||
|
) AS received_tips""")
|
||||||
|
|
||||||
if 'order_by' not in constraints or constraints['order_by'] == 'height':
|
if 'order_by' not in constraints or constraints['order_by'] == 'height':
|
||||||
constraints['order_by'] = [
|
constraints['order_by'] = [
|
||||||
"tx.height=0 DESC", "tx.height DESC", "tx.position DESC", "txo.position"
|
"tx.height=0 DESC", "tx.height DESC", "tx.position DESC", "txo.position"
|
||||||
|
@ -820,6 +829,8 @@ class Database(SQLiteMixin):
|
||||||
txo.is_internal_transfer = True
|
txo.is_internal_transfer = True
|
||||||
else:
|
else:
|
||||||
txo.is_internal_transfer = False
|
txo.is_internal_transfer = False
|
||||||
|
if include_received_tips:
|
||||||
|
txo.received_tips = row['received_tips']
|
||||||
txos.append(txo)
|
txos.append(txo)
|
||||||
|
|
||||||
channel_ids = set()
|
channel_ids = set()
|
||||||
|
@ -854,6 +865,7 @@ class Database(SQLiteMixin):
|
||||||
def _clean_txo_constraints_for_aggregation(self, unspent, constraints):
|
def _clean_txo_constraints_for_aggregation(self, unspent, constraints):
|
||||||
constraints.pop('include_is_my_input', None)
|
constraints.pop('include_is_my_input', None)
|
||||||
constraints.pop('include_is_my_output', None)
|
constraints.pop('include_is_my_output', None)
|
||||||
|
constraints.pop('include_received_tips', None)
|
||||||
constraints.pop('wallet', None)
|
constraints.pop('wallet', None)
|
||||||
constraints.pop('resolve', None)
|
constraints.pop('resolve', None)
|
||||||
constraints.pop('offset', None)
|
constraints.pop('offset', None)
|
||||||
|
|
|
@ -690,6 +690,44 @@ class ClaimCommands(ClaimTestCase):
|
||||||
await self.assertClaimList([stream1_id, stream3_id, stream2_id], claim_type='stream', order_by='amount')
|
await self.assertClaimList([stream1_id, stream3_id, stream2_id], claim_type='stream', order_by='amount')
|
||||||
await self.assertClaimList([stream3_id, stream2_id, stream1_id], claim_type='stream', order_by='height')
|
await self.assertClaimList([stream3_id, stream2_id, stream1_id], claim_type='stream', order_by='height')
|
||||||
|
|
||||||
|
async def test_claim_list_with_tips(self):
|
||||||
|
wallet2 = await self.daemon.jsonrpc_wallet_create('wallet2', create_account=True)
|
||||||
|
address2 = await self.daemon.jsonrpc_address_unused(wallet_id=wallet2.id)
|
||||||
|
|
||||||
|
await self.wallet_send('5.0', address2)
|
||||||
|
|
||||||
|
stream1_id = self.get_claim_id(await self.stream_create('one'))
|
||||||
|
stream2_id = self.get_claim_id(await self.stream_create('two'))
|
||||||
|
|
||||||
|
claims = await self.claim_list()
|
||||||
|
self.assertNotIn('received_tips', claims[0])
|
||||||
|
self.assertNotIn('received_tips', claims[1])
|
||||||
|
|
||||||
|
claims = await self.claim_list(include_received_tips=True)
|
||||||
|
self.assertEqual('0.0', claims[0]['received_tips'])
|
||||||
|
self.assertEqual('0.0', claims[1]['received_tips'])
|
||||||
|
|
||||||
|
await self.support_create(stream1_id, '0.7', tip=True)
|
||||||
|
await self.support_create(stream1_id, '0.3', tip=True, wallet_id=wallet2.id)
|
||||||
|
await self.support_create(stream1_id, '0.2', tip=True, wallet_id=wallet2.id)
|
||||||
|
await self.support_create(stream2_id, '0.4', tip=True, wallet_id=wallet2.id)
|
||||||
|
await self.support_create(stream2_id, '0.5', tip=True, wallet_id=wallet2.id)
|
||||||
|
await self.support_create(stream2_id, '0.1', tip=True, wallet_id=wallet2.id)
|
||||||
|
|
||||||
|
claims = await self.claim_list(include_received_tips=True)
|
||||||
|
self.assertEqual('1.0', claims[0]['received_tips'])
|
||||||
|
self.assertEqual('1.2', claims[1]['received_tips'])
|
||||||
|
|
||||||
|
await self.support_abandon(stream1_id)
|
||||||
|
claims = await self.claim_list(include_received_tips=True)
|
||||||
|
self.assertEqual('1.0', claims[0]['received_tips'])
|
||||||
|
self.assertEqual('0.0', claims[1]['received_tips'])
|
||||||
|
|
||||||
|
await self.support_abandon(stream2_id)
|
||||||
|
claims = await self.claim_list(include_received_tips=True)
|
||||||
|
self.assertEqual('0.0', claims[0]['received_tips'])
|
||||||
|
self.assertEqual('0.0', claims[1]['received_tips'])
|
||||||
|
|
||||||
|
|
||||||
class ChannelCommands(CommandTestCase):
|
class ChannelCommands(CommandTestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue