rest-client more methods
This commit is contained in:
parent
3efdd55fb8
commit
0163edc868
@ -11,6 +11,7 @@ import argparse
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import inspect
|
import inspect
|
||||||
|
from typing import List
|
||||||
from urllib.parse import urlencode, urlparse, urlunparse
|
from urllib.parse import urlencode, urlparse, urlunparse
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
@ -24,32 +25,18 @@ logging.basicConfig(
|
|||||||
logger = logging.getLogger("ft_rest_client")
|
logger = logging.getLogger("ft_rest_client")
|
||||||
|
|
||||||
|
|
||||||
COMMANDS_NO_ARGS = ["start",
|
|
||||||
"stop",
|
|
||||||
"stopbuy",
|
|
||||||
"reload_conf",
|
|
||||||
]
|
|
||||||
INFO_COMMANDS = {"version": [],
|
|
||||||
"count": [],
|
|
||||||
"daily": ["timescale"],
|
|
||||||
"profit": [],
|
|
||||||
"status": [],
|
|
||||||
"balance": []
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class FtRestClient():
|
class FtRestClient():
|
||||||
|
|
||||||
def __init__(self, serverurl):
|
def __init__(self, serverurl):
|
||||||
|
|
||||||
self.serverurl = serverurl
|
self._serverurl = serverurl
|
||||||
self.session = requests.Session()
|
self._session = requests.Session()
|
||||||
|
|
||||||
def _call(self, method, apipath, params: dict = None, data=None, files=None):
|
def _call(self, method, apipath, params: dict = None, data=None, files=None):
|
||||||
|
|
||||||
if str(method).upper() not in ('GET', 'POST', 'PUT', 'DELETE'):
|
if str(method).upper() not in ('GET', 'POST', 'PUT', 'DELETE'):
|
||||||
raise ValueError('invalid method <{0}>'.format(method))
|
raise ValueError('invalid method <{0}>'.format(method))
|
||||||
basepath = f"{self.serverurl}/{apipath}"
|
basepath = f"{self._serverurl}/{apipath}"
|
||||||
|
|
||||||
hd = {"Accept": "application/json",
|
hd = {"Accept": "application/json",
|
||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
@ -58,14 +45,14 @@ class FtRestClient():
|
|||||||
# Split url
|
# Split url
|
||||||
schema, netloc, path, par, query, fragment = urlparse(basepath)
|
schema, netloc, path, par, query, fragment = urlparse(basepath)
|
||||||
# URLEncode query string
|
# URLEncode query string
|
||||||
query = urlencode(params)
|
query = urlencode(params) if params else None
|
||||||
# recombine url
|
# recombine url
|
||||||
url = urlunparse((schema, netloc, path, par, query, fragment))
|
url = urlunparse((schema, netloc, path, par, query, fragment))
|
||||||
print(url)
|
|
||||||
try:
|
try:
|
||||||
resp = self.session.request(method, url, headers=hd, data=data,
|
resp = self._session.request(method, url, headers=hd, data=json.dumps(data),
|
||||||
# auth=self.session.auth
|
# auth=self.session.auth
|
||||||
)
|
)
|
||||||
# return resp.text
|
# return resp.text
|
||||||
return resp.json()
|
return resp.json()
|
||||||
except ConnectionError:
|
except ConnectionError:
|
||||||
@ -77,33 +64,12 @@ class FtRestClient():
|
|||||||
def _post(self, apipath, params: dict = None, data: dict = None):
|
def _post(self, apipath, params: dict = None, data: dict = None):
|
||||||
return self._call("POST", apipath, params=params, data=data)
|
return self._call("POST", apipath, params=params, data=data)
|
||||||
|
|
||||||
def _call_command_noargs(self, command):
|
def balance(self):
|
||||||
logger.info(f"Running command `{command}` at {self.serverurl}")
|
|
||||||
r = self._call("POST", command)
|
|
||||||
logger.info(r)
|
|
||||||
|
|
||||||
def _call_info(self, command, command_args):
|
|
||||||
logger.info(
|
|
||||||
f"Running command `{command}` with parameters `{command_args}` at {self.serverurl}")
|
|
||||||
args = INFO_COMMANDS[command]
|
|
||||||
if len(args) < len(command_args):
|
|
||||||
logger.error(f"Command {command} does only support {len(args)} arguments.")
|
|
||||||
return
|
|
||||||
params = {}
|
|
||||||
for idx, arg in enumerate(command_args):
|
|
||||||
params[args[idx]] = arg
|
|
||||||
|
|
||||||
logger.debug(params)
|
|
||||||
r = self._call("GET", command, params)
|
|
||||||
|
|
||||||
logger.info(r)
|
|
||||||
|
|
||||||
def version(self):
|
|
||||||
"""
|
"""
|
||||||
Returns the version of the bot
|
get the account balance
|
||||||
:returns: json object containing the version
|
:returns: json object
|
||||||
"""
|
"""
|
||||||
return self._get("version")
|
return self._get("balance")
|
||||||
|
|
||||||
def count(self):
|
def count(self):
|
||||||
"""
|
"""
|
||||||
@ -119,12 +85,58 @@ class FtRestClient():
|
|||||||
"""
|
"""
|
||||||
return self._get("daily", params={"timescale": days} if days else None)
|
return self._get("daily", params={"timescale": days} if days else None)
|
||||||
|
|
||||||
|
def profit(self):
|
||||||
|
"""
|
||||||
|
Returns the profit summary
|
||||||
|
:returns: json object
|
||||||
|
"""
|
||||||
|
return self._get("profit")
|
||||||
|
|
||||||
|
def status(self):
|
||||||
|
"""
|
||||||
|
Get the status of open trades
|
||||||
|
:returns: json object
|
||||||
|
"""
|
||||||
|
return self._get("status")
|
||||||
|
|
||||||
|
def whitelist(self):
|
||||||
|
"""
|
||||||
|
Show the current whitelist
|
||||||
|
:returns: json object
|
||||||
|
"""
|
||||||
|
return self._get("whitelist")
|
||||||
|
|
||||||
|
def blacklist(self, *args):
|
||||||
|
"""
|
||||||
|
Show the current blacklist
|
||||||
|
:param add: List of coins to add (example: "BNB/BTC")
|
||||||
|
:returns: json object
|
||||||
|
"""
|
||||||
|
if not args:
|
||||||
|
return self._get("blacklist")
|
||||||
|
else:
|
||||||
|
return self._post("blacklist", data={"blacklist": args})
|
||||||
|
|
||||||
|
def version(self):
|
||||||
|
"""
|
||||||
|
Returns the version of the bot
|
||||||
|
:returns: json object containing the version
|
||||||
|
"""
|
||||||
|
return self._get("version")
|
||||||
|
|
||||||
|
|
||||||
def add_arguments():
|
def add_arguments():
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("command",
|
parser.add_argument("command",
|
||||||
help="Positional argument defining the command to execute.")
|
help="Positional argument defining the command to execute.")
|
||||||
|
|
||||||
|
parser.add_argument('--show',
|
||||||
|
help='Show possible methods with this client',
|
||||||
|
dest='show',
|
||||||
|
action='store_true',
|
||||||
|
default=False
|
||||||
|
)
|
||||||
|
|
||||||
parser.add_argument('-c', '--config',
|
parser.add_argument('-c', '--config',
|
||||||
help='Specify configuration file (default: %(default)s). ',
|
help='Specify configuration file (default: %(default)s). ',
|
||||||
dest='config',
|
dest='config',
|
||||||
@ -160,6 +172,16 @@ def load_config(configfile):
|
|||||||
|
|
||||||
def main(args):
|
def main(args):
|
||||||
|
|
||||||
|
if args.get("show"):
|
||||||
|
# Print dynamic help for the different commands
|
||||||
|
client = FtRestClient(None)
|
||||||
|
print("Possible commands:")
|
||||||
|
for x, y in inspect.getmembers(client):
|
||||||
|
if not x.startswith('_'):
|
||||||
|
print(f"{x} {getattr(client, x).__doc__}")
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
config = load_config(args["config"])
|
config = load_config(args["config"])
|
||||||
url = config.get("api_server", {}).get("server_url", "127.0.0.1")
|
url = config.get("api_server", {}).get("server_url", "127.0.0.1")
|
||||||
port = config.get("api_server", {}).get("listen_port", "8080")
|
port = config.get("api_server", {}).get("listen_port", "8080")
|
||||||
@ -174,13 +196,6 @@ def main(args):
|
|||||||
|
|
||||||
print(getattr(client, command)(*args["command_arguments"]))
|
print(getattr(client, command)(*args["command_arguments"]))
|
||||||
|
|
||||||
# Call commands without arguments
|
|
||||||
# if args["command"] in COMMANDS_NO_ARGS:
|
|
||||||
# client._call_command_noargs(args["command"])
|
|
||||||
|
|
||||||
# if args["command"] in INFO_COMMANDS:
|
|
||||||
# client._call_info(args["command"], args["command_arguments"])
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
args = add_arguments()
|
args = add_arguments()
|
||||||
|
Loading…
Reference in New Issue
Block a user