Improve rest-client interface

This commit is contained in:
Matthias 2019-04-04 21:07:44 +02:00
parent 96a260b027
commit c6c2893e2c
1 changed files with 65 additions and 31 deletions

View File

@ -2,46 +2,80 @@
"""
Simple command line client into RPC commands
Can be used as an alternate to Telegram
Should not import anything from freqtrade,
so it can be used as a standalone script.
"""
import argparse
import logging
import time
from requests import get
from sys import argv
# TODO - use argparse to clean this up
import click
from requests import get
from requests.exceptions import ConnectionError
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
)
logger = logging.getLogger("ft_rest_client")
# TODO - use IP and Port from config.json not hardcode
if len(argv) == 1:
print('\nThis script accepts the following arguments')
print('- daily (int) - Where int is the number of days to report back. daily 3')
print('- start - this will start the trading thread')
print('- stop - this will start the trading thread')
print('- there will be more....\n')
COMMANDS_NO_ARGS = ["start",
"stop",
]
COMMANDS_ARGS = ["daily",
]
if len(argv) == 3 and argv[1] == "daily":
if str.isnumeric(argv[2]):
get_url = 'http://localhost:5002/daily?timescale=' + argv[2]
d = get(get_url).json()
print(d)
else:
print("\nThe second argument to daily must be an integer, 1,2,3 etc")
SERVER_URL = "http://localhost:5002"
if len(argv) == 2 and argv[1] == "start":
get_url = 'http://localhost:5002/start'
d = get(get_url).text
print(d)
if "already" not in d:
time.sleep(2)
d = get(get_url).text
print(d)
def add_arguments():
parser = argparse.ArgumentParser()
parser.add_argument("command",
help="Positional argument defining the command to execute.")
args = parser.parse_args()
# if len(argv) == 1:
# print('\nThis script accepts the following arguments')
# print('- daily (int) - Where int is the number of days to report back. daily 3')
# print('- start - this will start the trading thread')
# print('- stop - this will start the trading thread')
# print('- there will be more....\n')
return vars(args)
if len(argv) == 2 and argv[1] == "stop":
get_url = 'http://localhost:5002/stop'
d = get(get_url).text
print(d)
if "already" not in d:
time.sleep(2)
d = get(get_url).text
print(d)
def call_authorized(url):
try:
return get(url).json()
except ConnectionError:
logger.warning("Connection error")
def call_command_noargs(command):
logger.info(f"Running command `{command}` at {SERVER_URL}")
r = call_authorized(f"{SERVER_URL}/{command}")
logger.info(r)
def main(args):
# Call commands without arguments
if args["command"] in COMMANDS_NO_ARGS:
call_command_noargs(args["command"])
if args["command"] == "daily":
if str.isnumeric(argv[2]):
get_url = SERVER_URL + '/daily?timescale=' + argv[2]
d = get(get_url).json()
print(d)
else:
print("\nThe second argument to daily must be an integer, 1,2,3 etc")
if __name__ == "__main__":
args = add_arguments()
main(args)