diff --git a/freqtrade/rpc/api_server.py b/freqtrade/rpc/api_server.py
index 8927584fe..3a8391b98 100644
--- a/freqtrade/rpc/api_server.py
+++ b/freqtrade/rpc/api_server.py
@@ -27,22 +27,36 @@ class ApiServerSuperWrap(RPC):
self._config = freqtrade.config
+ # Register application handling
+ self.register_rest_other()
+ self.register_rest_rpc_urls()
+
thread = threading.Thread(target=self.run, daemon=True)
thread.start()
- def run(self):
- """ Method that runs forever """
+ def register_rest_other(self):
+ """
+ Registers flask app URLs that are not calls to functionality in rpc.rpc.
+ :return:
+ """
+ app.register_error_handler(404, self.page_not_found)
+ app.add_url_rule('/', 'hello', view_func=self.hello, methods=['GET'])
+
+ def register_rest_rpc_urls(self):
+ """
+ Registers flask app URLs that are calls to functonality in rpc.rpc.
- # defines the url rules available on the api server
- '''
First two arguments passed are /URL and 'Label'
Label can be used as a shortcut when refactoring
- '''
- app.add_url_rule('/', 'hello', view_func=self.hello, methods=['GET'])
+ :return:
+ """
app.add_url_rule('/stop', 'stop', view_func=self.stop, methods=['GET'])
app.add_url_rule('/start', 'start', view_func=self.start, methods=['GET'])
app.add_url_rule('/daily', 'daily', view_func=self.daily, methods=['GET'])
+ def run(self):
+ """ Method that runs flask app in its own thread forever """
+
"""
Section to handle configuration and running of the Rest server
also to check and warn if not bound to a loopback, warn on security risk.
@@ -81,12 +95,20 @@ class ApiServerSuperWrap(RPC):
each Telegram command should have a like local substitute
"""
- def hello(self):
- # For simple rest server testing via browser
- # cmds = 'Try uri:/daily?timescale=7 /profit /balance /status
- # /status /table /performance /count,
- # /start /stop /help'
+ def page_not_found(self, error):
+ # Return "404 not found", 404.
+ return jsonify({'status': 'error',
+ 'reason': '''There's no API call for %s''' % request.base_url,
+ 'code': 404}), 404
+ def hello(self):
+ """
+ None critical but helpful default index page.
+
+ That lists URLs added to the flask server.
+ This may be deprecated at any time.
+ :return: index.html
+ """
rest_cmds = 'Commands implemented:
' \
'/daily?timescale=7' \
'
' \
@@ -96,6 +118,11 @@ class ApiServerSuperWrap(RPC):
return rest_cmds
def daily(self):
+ """
+ Returns the last X days trading stats summary.
+
+ :return: stats
+ """
try:
timescale = request.args.get('timescale')
logger.info("LocalRPC - Daily Command Called")
@@ -114,7 +141,8 @@ class ApiServerSuperWrap(RPC):
def start(self):
"""
Handler for /start.
- Starts TradeThread
+
+ Starts TradeThread in bot if stopped.
"""
msg = self._rpc_start()
return jsonify(msg)
@@ -122,7 +150,8 @@ class ApiServerSuperWrap(RPC):
def stop(self):
"""
Handler for /stop.
- Stops TradeThread
+
+ Stops TradeThread in bot if running
"""
msg = self._rpc_stop()
return jsonify(msg)