add TODOs for errors raised that aren't defined in lbry.error

This commit is contained in:
Jack Robison 2021-08-17 12:31:03 -04:00
parent 25d54accf8
commit eccedada40
No known key found for this signature in database
GPG key ID: DF25C68FE0239BB2

View file

@ -1110,6 +1110,7 @@ class Daemon(metaclass=JSONRPCServerType):
if not stream: if not stream:
raise DownloadSDTimeoutError(uri) raise DownloadSDTimeoutError(uri)
except Exception as e: except Exception as e:
# TODO: use error from lbry.error
log.warning("Error downloading %s: %s", uri, str(e)) log.warning("Error downloading %s: %s", uri, str(e))
return {"error": str(e)} return {"error": str(e)}
return stream return stream
@ -1498,7 +1499,7 @@ class Daemon(metaclass=JSONRPCServerType):
) )
) )
else: else:
raise ValueError(f"Unsupported address: '{address}'") raise ValueError(f"Unsupported address: '{address}'") # TODO: use error from lbry.error
tx = await Transaction.create( tx = await Transaction.create(
[], outputs, accounts, account [], outputs, accounts, account
@ -1776,8 +1777,10 @@ class Daemon(metaclass=JSONRPCServerType):
from_account = wallet.get_account_or_default(from_account) from_account = wallet.get_account_or_default(from_account)
amount = self.get_dewies_or_error('amount', amount) if amount else None amount = self.get_dewies_or_error('amount', amount) if amount else None
if not isinstance(outputs, int): if not isinstance(outputs, int):
# TODO: use error from lbry.error
raise ValueError("--outputs must be an integer.") raise ValueError("--outputs must be an integer.")
if everything and outputs > 1: if everything and outputs > 1:
# TODO: use error from lbry.error
raise ValueError("Using --everything along with --outputs is not supported.") raise ValueError("Using --everything along with --outputs is not supported.")
return from_account.fund( return from_account.fund(
to_account=to_account, amount=amount, everything=everything, to_account=to_account, amount=amount, everything=everything,
@ -2048,10 +2051,12 @@ class Daemon(metaclass=JSONRPCServerType):
""" """
if status not in ['start', 'stop']: if status not in ['start', 'stop']:
# TODO: use error from lbry.error
raise Exception('Status must be "start" or "stop".') raise Exception('Status must be "start" or "stop".')
streams = self.file_manager.get_filtered(**kwargs) streams = self.file_manager.get_filtered(**kwargs)
if not streams: if not streams:
# TODO: use error from lbry.error
raise Exception(f'Unable to find a file for {kwargs}') raise Exception(f'Unable to find a file for {kwargs}')
stream = streams[0] stream = streams[0]
if status == 'start' and not stream.running: if status == 'start' and not stream.running:
@ -2234,20 +2239,25 @@ class Daemon(metaclass=JSONRPCServerType):
if claim_id: if claim_id:
txo = await self.ledger.get_claim_by_claim_id(accounts, claim_id, include_purchase_receipt=True) txo = await self.ledger.get_claim_by_claim_id(accounts, claim_id, include_purchase_receipt=True)
if not isinstance(txo, Output) or not txo.is_claim: if not isinstance(txo, Output) or not txo.is_claim:
# TODO: use error from lbry.error
raise Exception(f"Could not find claim with claim_id '{claim_id}'. ") raise Exception(f"Could not find claim with claim_id '{claim_id}'. ")
elif url: elif url:
txo = (await self.ledger.resolve(accounts, [url], include_purchase_receipt=True))[url] txo = (await self.ledger.resolve(accounts, [url], include_purchase_receipt=True))[url]
if not isinstance(txo, Output) or not txo.is_claim: if not isinstance(txo, Output) or not txo.is_claim:
# TODO: use error from lbry.error
raise Exception(f"Could not find claim with url '{url}'. ") raise Exception(f"Could not find claim with url '{url}'. ")
else: else:
# TODO: use error from lbry.error
raise Exception(f"Missing argument claim_id or url. ") raise Exception(f"Missing argument claim_id or url. ")
if not allow_duplicate_purchase and txo.purchase_receipt: if not allow_duplicate_purchase and txo.purchase_receipt:
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"You already have a purchase for claim_id '{claim_id}'. " f"You already have a purchase for claim_id '{claim_id}'. "
f"Use --allow-duplicate-purchase flag to override." f"Use --allow-duplicate-purchase flag to override."
) )
claim = txo.claim claim = txo.claim
if not claim.is_stream or not claim.stream.has_fee: if not claim.is_stream or not claim.stream.has_fee:
# TODO: use error from lbry.error
raise Exception(f"Claim '{claim_id}' does not have a purchase price.") raise Exception(f"Claim '{claim_id}' does not have a purchase price.")
tx = await self.wallet_manager.create_purchase_transaction( tx = await self.wallet_manager.create_purchase_transaction(
accounts, txo, self.exchange_rate_manager, override_max_key_fee accounts, txo, self.exchange_rate_manager, override_max_key_fee
@ -2489,6 +2499,7 @@ class Daemon(metaclass=JSONRPCServerType):
if "claim_ids" in kwargs and not kwargs["claim_ids"]: if "claim_ids" in kwargs and not kwargs["claim_ids"]:
kwargs.pop("claim_ids") kwargs.pop("claim_ids")
if {'claim_id', 'claim_ids'}.issubset(kwargs): if {'claim_id', 'claim_ids'}.issubset(kwargs):
# TODO: use error from lbry.error
raise ValueError("Only 'claim_id' or 'claim_ids' is allowed, not both.") raise ValueError("Only 'claim_id' or 'claim_ids' is allowed, not both.")
if kwargs.pop('valid_channel_signature', False): if kwargs.pop('valid_channel_signature', False):
kwargs['signature_valid'] = 1 kwargs['signature_valid'] = 1
@ -2608,6 +2619,7 @@ class Daemon(metaclass=JSONRPCServerType):
existing_channels = await self.ledger.get_channels(accounts=wallet.accounts, claim_name=name) existing_channels = await self.ledger.get_channels(accounts=wallet.accounts, claim_name=name)
if len(existing_channels) > 0: if len(existing_channels) > 0:
if not allow_duplicate_name: if not allow_duplicate_name:
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"You already have a channel under the name '{name}'. " f"You already have a channel under the name '{name}'. "
f"Use --allow-duplicate-name flag to override." f"Use --allow-duplicate-name flag to override."
@ -2740,11 +2752,13 @@ class Daemon(metaclass=JSONRPCServerType):
) )
if len(existing_channels) != 1: if len(existing_channels) != 1:
account_ids = ', '.join(f"'{account.id}'" for account in accounts) account_ids = ', '.join(f"'{account.id}'" for account in accounts)
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"Can't find the channel '{claim_id}' in account(s) {account_ids}." f"Can't find the channel '{claim_id}' in account(s) {account_ids}."
) )
old_txo = existing_channels[0] old_txo = existing_channels[0]
if not old_txo.claim.is_channel: if not old_txo.claim.is_channel:
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"A claim with id '{claim_id}' was found but it is not a channel." f"A claim with id '{claim_id}' was found but it is not a channel."
) )
@ -2867,9 +2881,11 @@ class Daemon(metaclass=JSONRPCServerType):
wallet=wallet, accounts=accounts, claim_id=claim_id wallet=wallet, accounts=accounts, claim_id=claim_id
) )
else: else:
# TODO: use error from lbry.error
raise Exception('Must specify claim_id, or txid and nout') raise Exception('Must specify claim_id, or txid and nout')
if not claims: if not claims:
# TODO: use error from lbry.error
raise Exception('No claim found for the specified claim_id or txid:nout') raise Exception('No claim found for the specified claim_id or txid:nout')
tx = await Transaction.create( tx = await Transaction.create(
@ -2938,6 +2954,7 @@ class Daemon(metaclass=JSONRPCServerType):
address = channel.get_address(self.ledger) address = channel.get_address(self.ledger)
public_key = await self.ledger.get_public_key_for_address(wallet, address) public_key = await self.ledger.get_public_key_for_address(wallet, address)
if not public_key: if not public_key:
# TODO: use error from lbry.error
raise Exception("Can't find public key for address holding the channel.") raise Exception("Can't find public key for address holding the channel.")
export = { export = {
'name': channel.claim_name, 'name': channel.claim_name,
@ -2999,6 +3016,7 @@ class Daemon(metaclass=JSONRPCServerType):
await self.ledger._update_tasks.done.wait() await self.ledger._update_tasks.done.wait()
# Case 3: the holding address has changed and we can't create or find an account for it # Case 3: the holding address has changed and we can't create or find an account for it
else: else:
# TODO: use error from lbry.error
raise Exception( raise Exception(
"Channel owning account has changed since the channel was exported and " "Channel owning account has changed since the channel was exported and "
"it is not an account to which you have access." "it is not an account to which you have access."
@ -3124,11 +3142,13 @@ class Daemon(metaclass=JSONRPCServerType):
) )
if len(claims) == 0: if len(claims) == 0:
if 'bid' not in kwargs: if 'bid' not in kwargs:
# TODO: use error from lbry.error
raise Exception("'bid' is a required argument for new publishes.") raise Exception("'bid' is a required argument for new publishes.")
return await self.jsonrpc_stream_create(name, **kwargs) return await self.jsonrpc_stream_create(name, **kwargs)
elif len(claims) == 1: elif len(claims) == 1:
assert claims[0].claim.is_stream, f"Claim at name '{name}' is not a stream claim." assert claims[0].claim.is_stream, f"Claim at name '{name}' is not a stream claim."
return await self.jsonrpc_stream_update(claims[0].claim_id, replace=True, **kwargs) return await self.jsonrpc_stream_update(claims[0].claim_id, replace=True, **kwargs)
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"There are {len(claims)} claims for '{name}', please use 'stream update' command " f"There are {len(claims)} claims for '{name}', please use 'stream update' command "
f"to update a specific stream claim." f"to update a specific stream claim."
@ -3180,11 +3200,13 @@ class Daemon(metaclass=JSONRPCServerType):
claims = await account.get_claims(claim_name=name) claims = await account.get_claims(claim_name=name)
if len(claims) > 0: if len(claims) > 0:
if not allow_duplicate_name: if not allow_duplicate_name:
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"You already have a stream claim published under the name '{name}'. " f"You already have a stream claim published under the name '{name}'. "
f"Use --allow-duplicate-name flag to override." f"Use --allow-duplicate-name flag to override."
) )
if not VALID_FULL_CLAIM_ID.fullmatch(claim_id): if not VALID_FULL_CLAIM_ID.fullmatch(claim_id):
# TODO: use error from lbry.error
raise Exception('Invalid claim id. It is expected to be a 40 characters long hexadecimal string.') raise Exception('Invalid claim id. It is expected to be a 40 characters long hexadecimal string.')
claim = Claim() claim = Claim()
@ -3328,6 +3350,7 @@ class Daemon(metaclass=JSONRPCServerType):
claims = await account.get_claims(claim_name=name) claims = await account.get_claims(claim_name=name)
if len(claims) > 0: if len(claims) > 0:
if not allow_duplicate_name: if not allow_duplicate_name:
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"You already have a stream claim published under the name '{name}'. " f"You already have a stream claim published under the name '{name}'. "
f"Use --allow-duplicate-name flag to override." f"Use --allow-duplicate-name flag to override."
@ -3511,11 +3534,13 @@ class Daemon(metaclass=JSONRPCServerType):
) )
if len(existing_claims) != 1: if len(existing_claims) != 1:
account_ids = ', '.join(f"'{account.id}'" for account in accounts) account_ids = ', '.join(f"'{account.id}'" for account in accounts)
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"Can't find the stream '{claim_id}' in account(s) {account_ids}." f"Can't find the stream '{claim_id}' in account(s) {account_ids}."
) )
old_txo = existing_claims[0] old_txo = existing_claims[0]
if not old_txo.claim.is_stream: if not old_txo.claim.is_stream:
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"A claim with id '{claim_id}' was found but it is not a stream claim." f"A claim with id '{claim_id}' was found but it is not a stream claim."
) )
@ -3643,9 +3668,11 @@ class Daemon(metaclass=JSONRPCServerType):
wallet=wallet, accounts=accounts, claim_id=claim_id wallet=wallet, accounts=accounts, claim_id=claim_id
) )
else: else:
# TODO: use error from lbry.error
raise Exception('Must specify claim_id, or txid and nout') raise Exception('Must specify claim_id, or txid and nout')
if not claims: if not claims:
# TODO: use error from lbry.error
raise Exception('No claim found for the specified claim_id or txid:nout') raise Exception('No claim found for the specified claim_id or txid:nout')
tx = await Transaction.create( tx = await Transaction.create(
@ -3807,6 +3834,7 @@ class Daemon(metaclass=JSONRPCServerType):
existing_collections = await self.ledger.get_collections(accounts=wallet.accounts, claim_name=name) existing_collections = await self.ledger.get_collections(accounts=wallet.accounts, claim_name=name)
if len(existing_collections) > 0: if len(existing_collections) > 0:
if not allow_duplicate_name: if not allow_duplicate_name:
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"You already have a collection under the name '{name}'. " f"You already have a collection under the name '{name}'. "
f"Use --allow-duplicate-name flag to override." f"Use --allow-duplicate-name flag to override."
@ -3930,11 +3958,13 @@ class Daemon(metaclass=JSONRPCServerType):
) )
if len(existing_collections) != 1: if len(existing_collections) != 1:
account_ids = ', '.join(f"'{account.id}'" for account in accounts) account_ids = ', '.join(f"'{account.id}'" for account in accounts)
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"Can't find the collection '{claim_id}' in account(s) {account_ids}." f"Can't find the collection '{claim_id}' in account(s) {account_ids}."
) )
old_txo = existing_collections[0] old_txo = existing_collections[0]
if not old_txo.claim.is_collection: if not old_txo.claim.is_collection:
# TODO: use error from lbry.error
raise Exception( raise Exception(
f"A claim with id '{claim_id}' was found but it is not a collection." f"A claim with id '{claim_id}' was found but it is not a collection."
) )
@ -4060,12 +4090,15 @@ class Daemon(metaclass=JSONRPCServerType):
if claim_id: if claim_id:
txo = await self.ledger.get_claim_by_claim_id(wallet.accounts, claim_id) txo = await self.ledger.get_claim_by_claim_id(wallet.accounts, claim_id)
if not isinstance(txo, Output) or not txo.is_claim: if not isinstance(txo, Output) or not txo.is_claim:
# TODO: use error from lbry.error
raise Exception(f"Could not find collection with claim_id '{claim_id}'. ") raise Exception(f"Could not find collection with claim_id '{claim_id}'. ")
elif url: elif url:
txo = (await self.ledger.resolve(wallet.accounts, [url]))[url] txo = (await self.ledger.resolve(wallet.accounts, [url]))[url]
if not isinstance(txo, Output) or not txo.is_claim: if not isinstance(txo, Output) or not txo.is_claim:
# TODO: use error from lbry.error
raise Exception(f"Could not find collection with url '{url}'. ") raise Exception(f"Could not find collection with url '{url}'. ")
else: else:
# TODO: use error from lbry.error
raise Exception(f"Missing argument claim_id or url. ") raise Exception(f"Missing argument claim_id or url. ")
page_num, page_size = abs(page), min(abs(page_size), 50) page_num, page_size = abs(page), min(abs(page_size), 50)
@ -4240,9 +4273,11 @@ class Daemon(metaclass=JSONRPCServerType):
wallet=wallet, accounts=accounts, claim_id=claim_id wallet=wallet, accounts=accounts, claim_id=claim_id
) )
else: else:
# TODO: use error from lbry.error
raise Exception('Must specify claim_id, or txid and nout') raise Exception('Must specify claim_id, or txid and nout')
if not supports: if not supports:
# TODO: use error from lbry.error
raise Exception('No supports found for the specified claim_id or txid:nout') raise Exception('No supports found for the specified claim_id or txid:nout')
if keep is not None: if keep is not None:
@ -4477,6 +4512,7 @@ class Daemon(metaclass=JSONRPCServerType):
elif order_by in ('height', 'amount', 'none'): elif order_by in ('height', 'amount', 'none'):
constraints['order_by'] = order_by constraints['order_by'] = order_by
else: else:
# TODO: use error from lbry.error
raise ValueError(f"'{order_by}' is not a valid --order_by value.") raise ValueError(f"'{order_by}' is not a valid --order_by value.")
self._constrain_txo_from_kwargs(constraints, **kwargs) self._constrain_txo_from_kwargs(constraints, **kwargs)
return paginate_rows(claims, None if no_totals else claim_count, page, page_size, **constraints) return paginate_rows(claims, None if no_totals else claim_count, page, page_size, **constraints)
@ -4783,10 +4819,12 @@ class Daemon(metaclass=JSONRPCServerType):
""" """
if not is_valid_blobhash(blob_hash): if not is_valid_blobhash(blob_hash):
# TODO: use error from lbry.error
raise Exception("invalid blob hash") raise Exception("invalid blob hash")
if search_bottom_out_limit is not None: if search_bottom_out_limit is not None:
search_bottom_out_limit = int(search_bottom_out_limit) search_bottom_out_limit = int(search_bottom_out_limit)
if search_bottom_out_limit <= 0: if search_bottom_out_limit <= 0:
# TODO: use error from lbry.error
raise Exception("invalid bottom out limit") raise Exception("invalid bottom out limit")
else: else:
search_bottom_out_limit = 4 search_bottom_out_limit = 4
@ -4830,12 +4868,14 @@ class Daemon(metaclass=JSONRPCServerType):
blob_hashes.append(blob_hash) blob_hashes.append(blob_hash)
elif stream_hash or sd_hash: elif stream_hash or sd_hash:
if sd_hash and stream_hash: if sd_hash and stream_hash:
# TODO: use error from lbry.error
raise Exception("either the sd hash or the stream hash should be provided, not both") raise Exception("either the sd hash or the stream hash should be provided, not both")
if sd_hash: if sd_hash:
stream_hash = await self.storage.get_stream_hash_for_sd_hash(sd_hash) stream_hash = await self.storage.get_stream_hash_for_sd_hash(sd_hash)
blobs = await self.storage.get_blobs_for_stream(stream_hash, only_completed=True) blobs = await self.storage.get_blobs_for_stream(stream_hash, only_completed=True)
blob_hashes.extend(blob.blob_hash for blob in blobs if blob.blob_hash is not None) blob_hashes.extend(blob.blob_hash for blob in blobs if blob.blob_hash is not None)
else: else:
# TODO: use error from lbry.error
raise Exception('single argument must be specified') raise Exception('single argument must be specified')
await self.storage.should_single_announce_blobs(blob_hashes, immediate=True) await self.storage.should_single_announce_blobs(blob_hashes, immediate=True)
return True return True
@ -5102,6 +5142,7 @@ class Daemon(metaclass=JSONRPCServerType):
} }
""" """
if not tracemalloc.is_tracing(): if not tracemalloc.is_tracing():
# TODO: use error from lbry.error
raise Exception("Enable tracemalloc first! See 'tracemalloc set' command.") raise Exception("Enable tracemalloc first! See 'tracemalloc set' command.")
stats = tracemalloc.take_snapshot().filter_traces(( stats = tracemalloc.take_snapshot().filter_traces((
tracemalloc.Filter(False, "<frozen importlib._bootstrap>"), tracemalloc.Filter(False, "<frozen importlib._bootstrap>"),
@ -5311,6 +5352,7 @@ class Daemon(metaclass=JSONRPCServerType):
comment_id=comment_id comment_id=comment_id
) )
if 'error' in channel: if 'error' in channel:
# TODO: use error from lbry.error
raise ValueError(channel['error']) raise ValueError(channel['error'])
wallet = self.wallet_manager.get_wallet_or_default(wallet_id) wallet = self.wallet_manager.get_wallet_or_default(wallet_id)
@ -5567,51 +5609,64 @@ class Daemon(metaclass=JSONRPCServerType):
allow_script_address and self.ledger.is_script_address(address) allow_script_address and self.ledger.is_script_address(address)
) )
except: except:
# TODO: use error from lbry.error
raise Exception(f"'{address}' is not a valid address") raise Exception(f"'{address}' is not a valid address")
@staticmethod @staticmethod
def valid_stream_name_or_error(name: str): def valid_stream_name_or_error(name: str):
try: try:
if not name: if not name:
# TODO: use error from lbry.error
raise Exception('Stream name cannot be blank.') raise Exception('Stream name cannot be blank.')
parsed = URL.parse(name) parsed = URL.parse(name)
if parsed.has_channel: if parsed.has_channel:
# TODO: use error from lbry.error
raise Exception( raise Exception(
"Stream names cannot start with '@' symbol. This is reserved for channels claims." "Stream names cannot start with '@' symbol. This is reserved for channels claims."
) )
if not parsed.has_stream or parsed.stream.name != name: if not parsed.has_stream or parsed.stream.name != name:
# TODO: use error from lbry.error
raise Exception('Stream name has invalid characters.') raise Exception('Stream name has invalid characters.')
except (TypeError, ValueError): except (TypeError, ValueError):
# TODO: use error from lbry.error
raise Exception("Invalid stream name.") raise Exception("Invalid stream name.")
@staticmethod @staticmethod
def valid_collection_name_or_error(name: str): def valid_collection_name_or_error(name: str):
try: try:
if not name: if not name:
# TODO: use error from lbry.error
raise Exception('Collection name cannot be blank.') raise Exception('Collection name cannot be blank.')
parsed = URL.parse(name) parsed = URL.parse(name)
if parsed.has_channel: if parsed.has_channel:
# TODO: use error from lbry.error
raise Exception( raise Exception(
"Collection names cannot start with '@' symbol. This is reserved for channels claims." "Collection names cannot start with '@' symbol. This is reserved for channels claims."
) )
if not parsed.has_stream or parsed.stream.name != name: if not parsed.has_stream or parsed.stream.name != name:
# TODO: use error from lbry.error
raise Exception('Collection name has invalid characters.') raise Exception('Collection name has invalid characters.')
except (TypeError, ValueError): except (TypeError, ValueError):
# TODO: use error from lbry.error
raise Exception("Invalid collection name.") raise Exception("Invalid collection name.")
@staticmethod @staticmethod
def valid_channel_name_or_error(name: str): def valid_channel_name_or_error(name: str):
try: try:
if not name: if not name:
# TODO: use error from lbry.error
raise Exception( raise Exception(
"Channel name cannot be blank." "Channel name cannot be blank."
) )
parsed = URL.parse(name) parsed = URL.parse(name)
if not parsed.has_channel: if not parsed.has_channel:
# TODO: use error from lbry.error
raise Exception("Channel names must start with '@' symbol.") raise Exception("Channel names must start with '@' symbol.")
if parsed.channel.name != name: if parsed.channel.name != name:
# TODO: use error from lbry.error
raise Exception("Channel name has invalid character") raise Exception("Channel name has invalid character")
except (TypeError, ValueError): except (TypeError, ValueError):
# TODO: use error from lbry.error
raise Exception("Invalid channel name.") raise Exception("Invalid channel name.")
def get_fee_address(self, kwargs: dict, claim_address: str) -> str: def get_fee_address(self, kwargs: dict, claim_address: str) -> str:
@ -5643,6 +5698,7 @@ class Daemon(metaclass=JSONRPCServerType):
elif channel_name: elif channel_name:
key, value = 'name', channel_name key, value = 'name', channel_name
else: else:
# TODO: use error from lbry.error
raise ValueError("Couldn't find channel because a channel_id or channel_name was not provided.") raise ValueError("Couldn't find channel because a channel_id or channel_name was not provided.")
channels = await self.ledger.get_channels( channels = await self.ledger.get_channels(
wallet=wallet, accounts=wallet.get_accounts_or_all(account_ids), wallet=wallet, accounts=wallet.get_accounts_or_all(account_ids),
@ -5650,13 +5706,16 @@ class Daemon(metaclass=JSONRPCServerType):
) )
if len(channels) == 1: if len(channels) == 1:
if for_signing and not channels[0].has_private_key: if for_signing and not channels[0].has_private_key:
# TODO: use error from lbry.error
raise Exception(f"Couldn't find private key for {key} '{value}'. ") raise Exception(f"Couldn't find private key for {key} '{value}'. ")
return channels[0] return channels[0]
elif len(channels) > 1: elif len(channels) > 1:
# TODO: use error from lbry.error
raise ValueError( raise ValueError(
f"Multiple channels found with channel_{key} '{value}', " f"Multiple channels found with channel_{key} '{value}', "
f"pass a channel_id to narrow it down." f"pass a channel_id to narrow it down."
) )
# TODO: use error from lbry.error
raise ValueError(f"Couldn't find channel with channel_{key} '{value}'.") raise ValueError(f"Couldn't find channel with channel_{key} '{value}'.")
@staticmethod @staticmethod
@ -5664,9 +5723,11 @@ class Daemon(metaclass=JSONRPCServerType):
try: try:
dewies = lbc_to_dewies(lbc) dewies = lbc_to_dewies(lbc)
if positive_value and dewies <= 0: if positive_value and dewies <= 0:
# TODO: use error from lbry.error
raise ValueError(f"'{argument}' value must be greater than 0.0") raise ValueError(f"'{argument}' value must be greater than 0.0")
return dewies return dewies
except ValueError as e: except ValueError as e:
# TODO: use error from lbry.error
raise ValueError(f"Invalid value for '{argument}': {e.args[0]}") raise ValueError(f"Invalid value for '{argument}': {e.args[0]}")
async def resolve(self, accounts, urls, **kwargs): async def resolve(self, accounts, urls, **kwargs):