2016-07-06 08:17:38 +02:00
|
|
|
import sys
|
2016-09-15 20:47:32 +02:00
|
|
|
import argparse
|
2016-11-11 19:40:19 +01:00
|
|
|
import json
|
2016-12-21 20:55:43 +01:00
|
|
|
from lbrynet import conf
|
2017-01-03 20:13:01 +01:00
|
|
|
import os
|
2016-09-20 22:58:30 +02:00
|
|
|
from lbrynet.lbrynet_daemon.auth.client import LBRYAPIClient
|
2017-01-03 20:13:01 +01:00
|
|
|
from lbrynet.lbrynet_daemon.Daemon import LOADING_WALLET_CODE
|
2016-11-11 19:40:19 +01:00
|
|
|
from jsonrpc.common import RPCError
|
2017-01-03 20:13:01 +01:00
|
|
|
from urllib2 import URLError
|
2016-07-06 09:02:55 +02:00
|
|
|
|
2016-07-06 08:17:38 +02:00
|
|
|
|
2016-09-15 20:47:32 +02:00
|
|
|
def guess_type(x):
|
|
|
|
if '.' in x:
|
|
|
|
try:
|
|
|
|
return float(x)
|
|
|
|
except ValueError:
|
|
|
|
# not a float
|
|
|
|
pass
|
|
|
|
try:
|
|
|
|
return int(x)
|
|
|
|
except ValueError:
|
|
|
|
return x
|
|
|
|
|
2016-09-16 04:20:00 +02:00
|
|
|
|
|
|
|
def get_params_from_kwargs(params):
|
|
|
|
params_for_return = {}
|
|
|
|
for i in params:
|
2017-01-03 20:13:01 +01:00
|
|
|
if '=' not in i:
|
|
|
|
print 'WARNING: Argument "' + i + '" is missing a parameter name. Please use name=value'
|
|
|
|
continue
|
2016-09-16 04:20:00 +02:00
|
|
|
eq_pos = i.index('=')
|
2017-01-03 20:13:01 +01:00
|
|
|
k, v = i[:eq_pos], i[eq_pos + 1:]
|
2016-09-16 04:20:00 +02:00
|
|
|
params_for_return[k] = guess_type(v)
|
|
|
|
return params_for_return
|
|
|
|
|
|
|
|
|
2016-07-06 08:17:38 +02:00
|
|
|
def main():
|
2016-12-30 22:07:24 +01:00
|
|
|
conf.initialize_settings()
|
2017-01-03 20:13:01 +01:00
|
|
|
api = LBRYAPIClient.get_client()
|
2016-07-06 08:20:18 +02:00
|
|
|
|
|
|
|
try:
|
2017-01-03 20:13:01 +01:00
|
|
|
status = api.status()
|
|
|
|
except URLError:
|
|
|
|
print "Could not connect to lbrynet-daemon. Are you sure it's running?"
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
if status['startup_status']['code'] != "started":
|
|
|
|
print "Daemon is in the process of starting. Please try again in a bit."
|
|
|
|
message = status['startup_status']['message']
|
|
|
|
if message:
|
|
|
|
if status['startup_status']['code'] == LOADING_WALLET_CODE \
|
|
|
|
and status['blocks_behind'] > 0:
|
|
|
|
message += '. Blocks left: ' + str(status['blocks_behind'])
|
|
|
|
print " Status: " + message
|
|
|
|
sys.exit(1)
|
2016-07-06 08:20:18 +02:00
|
|
|
|
2016-09-15 20:47:32 +02:00
|
|
|
parser = argparse.ArgumentParser()
|
2016-09-16 04:20:00 +02:00
|
|
|
parser.add_argument('method', nargs=1)
|
2016-09-15 21:04:42 +02:00
|
|
|
parser.add_argument('params', nargs=argparse.REMAINDER, default=None)
|
2016-09-15 20:47:32 +02:00
|
|
|
args = parser.parse_args()
|
2016-09-16 04:20:00 +02:00
|
|
|
|
2017-01-03 20:13:01 +01:00
|
|
|
method = args.method[0]
|
2016-09-15 20:47:32 +02:00
|
|
|
params = {}
|
2016-09-16 04:20:00 +02:00
|
|
|
|
2016-11-11 19:40:19 +01:00
|
|
|
if len(args.params) > 1:
|
|
|
|
params = get_params_from_kwargs(args.params)
|
|
|
|
elif len(args.params) == 1:
|
|
|
|
try:
|
|
|
|
params = json.loads(args.params[0])
|
|
|
|
except ValueError:
|
2016-09-16 04:20:00 +02:00
|
|
|
params = get_params_from_kwargs(args.params)
|
2016-07-06 09:02:55 +02:00
|
|
|
|
2017-01-03 20:13:01 +01:00
|
|
|
if method in ['--help', '-h', 'help']:
|
|
|
|
helpmsg = api.help(params).strip()
|
|
|
|
if params is not None and 'function' in params:
|
|
|
|
print "\n" + params['function'] + ": " + helpmsg + "\n"
|
|
|
|
else:
|
|
|
|
print "Usage: lbrynet-cli method [params]\n" \
|
|
|
|
+ "Examples: \n" \
|
|
|
|
+ " lbrynet-cli get_balance\n" \
|
|
|
|
+ " lbrynet-cli resolve_name name=what\n" \
|
|
|
|
+ " lbrynet-cli help function=resolve_name\n" \
|
|
|
|
+ "\nAvailable functions:\n" \
|
|
|
|
+ helpmsg + "\n"
|
|
|
|
|
|
|
|
elif method not in api.commands():
|
|
|
|
print "Error: function \"" + method + "\" does not exist.\n" + \
|
|
|
|
"See \"" + os.path.basename(sys.argv[0]) + " help\""
|
|
|
|
else:
|
2016-07-06 09:02:55 +02:00
|
|
|
try:
|
2017-01-03 20:13:01 +01:00
|
|
|
result = api.call(method, params)
|
|
|
|
print json.dumps(result, sort_keys=True, indent=2)
|
2016-11-11 19:40:19 +01:00
|
|
|
except RPCError as err:
|
2016-10-20 21:52:37 +02:00
|
|
|
# TODO: The api should return proper error codes
|
|
|
|
# and messages so that they can be passed along to the user
|
|
|
|
# instead of this generic message.
|
|
|
|
# https://app.asana.com/0/158602294500137/200173944358192
|
2017-01-03 20:13:01 +01:00
|
|
|
print "Something went wrong, here's the usage for %s:" % method
|
|
|
|
print api.help({'function': method})
|
2016-11-11 19:40:19 +01:00
|
|
|
print "Here's the traceback for the error you encountered:"
|
|
|
|
print err.msg
|
2017-01-03 20:13:01 +01:00
|
|
|
except KeyError as err:
|
|
|
|
print "Something went wrong, here's the usage for %s:" % method
|
|
|
|
print api.help({'function': method})
|
|
|
|
if hasattr(err, 'msg'):
|
|
|
|
print "Here's the traceback for the error you encountered:"
|
|
|
|
print err.msg
|
2016-07-06 08:17:38 +02:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
2016-07-14 05:44:02 +02:00
|
|
|
main()
|