diff --git a/main.py b/main.py index 4db6157..738296d 100644 --- a/main.py +++ b/main.py @@ -49,6 +49,7 @@ def shutdown_handler(signum, _): signal.signal(signal.SIGINT, shutdown_handler) signal.signal(signal.SIGTERM, shutdown_handler) + def seconds_to_time(total_seconds: float) -> str: ''' Takes an int or float as an input and it returns a D:HH:MM:SS formatted string. @@ -473,21 +474,23 @@ def return_global_status(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_global_status() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_global_status() + @base_api.route("/paused_traders", methods=['GET']) def return_paused_status(): - ''' - GET request - - Parameters: - None - ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_paused_traders() - return jsonify({'Error': 'API key invalid'}), 401 + ''' + GET request + + Parameters: + None + ''' + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_paused_traders() + @base_api.route("/worker_status", methods=['GET']) def return_worker_status(): @@ -499,15 +502,16 @@ def return_worker_status(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - base = request.args.get("base") - quote = request.args.get("quote") - return unwrapped_return_worker_status(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + base = request.args.get("base") + quote = request.args.get("quote") + return unwrapped_return_worker_status(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/view_old_long", methods=["GET"]) def return_old_long(): @@ -520,16 +524,17 @@ def return_old_long(): from_file: bool ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - base = request.args.get("base") - quote = request.args.get("quote") - from_file = request.args.get("from_file") - return unwrapped_view_old_long(base,quote,from_file) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + base = request.args.get("base") + quote = request.args.get("quote") + from_file = request.args.get("from_file") + return unwrapped_view_old_long(base,quote,from_file) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/switch_to_long_price", methods=["GET"]) def return_switch_price(): @@ -541,15 +546,16 @@ def return_switch_price(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - base = request.args.get("base") - quote = request.args.get("quote") - return unwrapped_switch_to_long_price(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + base = request.args.get("base") + quote = request.args.get("quote") + return unwrapped_switch_to_long_price(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/base_add_so_calculation", methods=["GET"]) @@ -562,15 +568,15 @@ def return_base_add_so_calculation(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - base = request.args.get("base") - quote = request.args.get("quote") - return unwrapped_base_add_so_calculation(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + base = request.args.get("base") + quote = request.args.get("quote") + return unwrapped_base_add_so_calculation(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @base_api.route("/get_all_worker_status", methods=['GET']) @@ -582,9 +588,10 @@ def return_all_worker_status(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_return_all_worker_status() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_return_all_worker_status() + @base_api.route("/add_pair", methods=['POST']) def add_pair(): @@ -596,18 +603,19 @@ def add_pair(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_add_pair(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_add_pair(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/remove_pair", methods=['POST']) def remove_pair(): @@ -619,18 +627,19 @@ def remove_pair(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_remove_pair(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_remove_pair(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/restart_pair", methods=['POST']) def restart_pair(): @@ -642,18 +651,19 @@ def restart_pair(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_restart_pair(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_restart_pair(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/import_pair", methods=['POST']) def import_pair(): @@ -667,20 +677,21 @@ def import_pair(): forced_so_id: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - forced_tp_id = data["forced_tp_id"] if "forced_tp_id" in data else None - forced_so_id = data["forced_so_id"] if "forced_so_id" in data else None - return unwrapped_import_pair(base,quote,forced_tp_id,forced_so_id) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + forced_tp_id = data["forced_tp_id"] if "forced_tp_id" in data else None + forced_so_id = data["forced_so_id"] if "forced_so_id" in data else None + return unwrapped_import_pair(base,quote,forced_tp_id,forced_so_id) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/switch_to_long", methods=['POST']) def switch_to_long(): @@ -693,19 +704,20 @@ def switch_to_long(): calculate_profits: int ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - calculate_profits = data["calculate_profits"] - return unwrapped_switch_to_long(base,quote,calculate_profits) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + calculate_profits = data["calculate_profits"] + return unwrapped_switch_to_long(base,quote,calculate_profits) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/switch_to_short", methods=['POST']) def switch_to_short(): @@ -717,18 +729,19 @@ def switch_to_short(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_switch_to_short(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_switch_to_short(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/load_old_long", methods=['POST']) def load_old_long(): @@ -740,18 +753,19 @@ def load_old_long(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_load_old_long(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_load_old_long(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/add_so", methods=['POST']) def add_so(): @@ -764,19 +778,19 @@ def add_so(): amount: int ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - amount = data["amount"] - return unwrapped_add_safety_orders(base,quote,amount) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + amount = data["amount"] + return unwrapped_add_safety_orders(base,quote,amount) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @base_api.route("/mod_tp_level", methods=['POST']) @@ -790,19 +804,19 @@ def mod_tp_level(): amount: float ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - amount = data["amount"] - return unwrapped_mod_tp_level(base,quote,amount) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + amount = data["amount"] + return unwrapped_mod_tp_level(base,quote,amount) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @base_api.route("/mod_order_size", methods=['POST']) @@ -816,19 +830,19 @@ def mod_order_size(): amount: float ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - amount = data["amount"] - return unwrapped_mod_order_size(base,quote,amount) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + amount = data["amount"] + return unwrapped_mod_order_size(base,quote,amount) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @base_api.route("/mod_default_order_size", methods=['POST']) @@ -840,17 +854,17 @@ def mod_default_order_size(): amount: float ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - amount = data["amount"] - return unwrapped_mod_default_order_size(amount) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + amount = data["amount"] + return unwrapped_mod_default_order_size(amount) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @base_api.route("/mod_global_tp_level", methods=['POST']) @@ -862,17 +876,18 @@ def mod_global_tp_level(): amount: float ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - amount = data["amount"] - return unwrapped_mod_global_tp_level(amount) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + amount = data["amount"] + return unwrapped_mod_global_tp_level(amount) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/last_call", methods=['POST']) def last_call(): @@ -884,18 +899,19 @@ def last_call(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_last_call(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_last_call(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/deferred_last_call", methods=['POST']) def deferred_last_call(): @@ -908,19 +924,20 @@ def deferred_last_call(): yyyymmdd: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - yyyymmdd = data["yyyymmdd"] - return unwrapped_deferred_last_call(base,quote,yyyymmdd) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + yyyymmdd = data["yyyymmdd"] + return unwrapped_deferred_last_call(base,quote,yyyymmdd) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/toggle_pause", methods=['POST']) def toggle_pause(): @@ -932,18 +949,19 @@ def toggle_pause(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_toggle_pause(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_toggle_pause(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/global_last_call", methods=['POST']) def global_last_call(): @@ -954,9 +972,10 @@ def global_last_call(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_global_last_call() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_global_last_call() + @base_api.route("/cancel_global_last_call", methods=['POST']) def cancel_global_last_call(): @@ -967,9 +986,10 @@ def cancel_global_last_call(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_cancel_global_last_call() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_cancel_global_last_call() + @base_api.route("/add_quote", methods=['POST']) def add_quote(): @@ -982,19 +1002,20 @@ def add_quote(): amount: float ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - amount = data["amount"] - return unwrapped_add_quote(base,quote,amount) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + amount = data["amount"] + return unwrapped_add_quote(base,quote,amount) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/missing_pairs", methods=['GET']) def missing_pairs(): @@ -1005,9 +1026,10 @@ def missing_pairs(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_missing_pairs() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_missing_pairs() + @base_api.route("/toggle_cleanup", methods=['POST']) def toggle_cleanup(): @@ -1019,18 +1041,19 @@ def toggle_cleanup(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_toggle_cleanup(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_toggle_cleanup(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/toggle_autoswitch", methods=['POST']) #type:ignore def toggle_autoswitch(): @@ -1042,18 +1065,19 @@ def toggle_autoswitch(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_toggle_autoswitch(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_toggle_autoswitch(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/toggle_liquidate_after_switch", methods=['POST']) #type:ignore def toggle_liquidate_after_switch(): #type:ignore @@ -1065,18 +1089,19 @@ def toggle_liquidate_after_switch(): #type:ignore quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_toggle_liquidate_after_switch(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_toggle_liquidate_after_switch(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/toggle_check_old_long_price", methods=['POST'])#type:ignore def toggle_check_old_long_price(): @@ -1088,18 +1113,19 @@ def toggle_check_old_long_price(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_toggle_check_old_long_price(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_toggle_check_old_long_price(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/switch_quote_currency", methods=['POST']) def switch_quote_currency(): @@ -1112,19 +1138,20 @@ def switch_quote_currency(): new_quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - new_quote = data["new_quote"] - return unwrapped_switch_quote_currency(base,quote,new_quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + new_quote = data["new_quote"] + return unwrapped_switch_quote_currency(base,quote,new_quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) + @base_api.route("/toggle_restart", methods=['POST']) def toggle_restart(): @@ -1135,9 +1162,10 @@ def toggle_restart(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_toggle_restart() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_toggle_restart() + @base_api.route("/toggle_telegram", methods=['POST']) def toggle_telegram(): @@ -1148,9 +1176,9 @@ def toggle_telegram(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_toggle_telegram() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_toggle_telegram() @base_api.route("/server_time", methods=['GET']) @@ -1162,9 +1190,9 @@ def server_time(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_server_time() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_server_time() @base_api.route("/get_log_list", methods=['GET']) @@ -1176,9 +1204,9 @@ def get_log_list(): coin: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_get_log_list() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_get_log_list() @base_api.route("/get_balance", methods=['GET']) @@ -1190,10 +1218,10 @@ def get_balance(): coin: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - coin = request.args.get("coin") - return unwrapped_get_balance(coin) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + coin = request.args.get("coin") + return unwrapped_get_balance(coin) @base_api.route("/get_deals_cache", methods=['GET']) @@ -1205,9 +1233,9 @@ def get_deals_cache(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_get_deals_cache() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_get_deals_cache() @base_api.route("/trader_time", methods=['GET']) @@ -1219,9 +1247,10 @@ def trader_time(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_trader_time() - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_trader_time() + @base_api.route("/edit_loop_wait_time", methods=['POST']) def loop_wait_time(): @@ -1232,18 +1261,17 @@ def loop_wait_time(): wait_time: float ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - wait_time = data["wait_time"] - return unwrapped_loop_wait_time(wait_time) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 - + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + wait_time = data["wait_time"] + return unwrapped_loop_wait_time(wait_time) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @base_api.route("/edit_call_wait_time", methods=['POST']) @@ -1255,17 +1283,17 @@ def call_wait_time(): wait_time: float ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - wait_time = data["wait_time"] - return unwrapped_call_wait_time(wait_time) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + wait_time = data["wait_time"] + return unwrapped_call_wait_time(wait_time) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @base_api.route("/edit_cooldown_multiplier", methods=['POST']) @@ -1277,17 +1305,17 @@ def edit_cooldown_multiplier(): cooldown_multiplier: float ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - multiplier = data["cooldown_multiplier"] - return unwrapped_edit_cooldown_multiplier(multiplier) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + multiplier = data["cooldown_multiplier"] + return unwrapped_edit_cooldown_multiplier(multiplier) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @base_api.route("/reload_markets", methods=['POST']) @@ -1300,10 +1328,10 @@ def reload_markets(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - return unwrapped_reload_markets() - - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + return unwrapped_reload_markets() + @base_api.route("/reload_safety_order", methods=['POST']) def reload_safety_order(): @@ -1314,18 +1342,18 @@ def reload_safety_order(): None ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_reload_safety_order(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_reload_safety_order(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @base_api.route("/reload_trader_config", methods=['POST'])#type:ignore @@ -1338,18 +1366,18 @@ def reload_trader_config(): quote: str ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in valid_keys: - try: - if request.json is None: - return jsonify({'Error': 'request.json is None'}) - data = request.json - base = data["base"] - quote = data["quote"] - return unwrapped_reload_trader_config(base,quote) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in valid_keys: + return jsonify({'Error': 'API key invalid'}), 401 + try: + if request.json is None: + return jsonify({'Error': 'request.json is None'}) + data = request.json + base = data["base"] + quote = data["quote"] + return unwrapped_reload_trader_config(base,quote) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) def run_API(): @@ -1367,7 +1395,6 @@ def unwrapped_global_status(): ''' return jsonify(global_status) - def unwrapped_paused_traders(): ''' Returns the paused_traders field from the global status dictionary of the instance. @@ -1375,7 +1402,6 @@ def unwrapped_paused_traders(): return jsonify(global_status["paused_traders"]) - def unwrapped_return_worker_status(base,quote): ''' Returns the individual status dictionary of the trader. diff --git a/utils/statistics_server_v3.py b/utils/statistics_server_v3.py index 1fd19c1..d09b490 100644 --- a/utils/statistics_server_v3.py +++ b/utils/statistics_server_v3.py @@ -5,9 +5,10 @@ import calendar import logging import threading import os -import functools +from collections import deque +from typing import Iterable, List, Tuple from contextlib import contextmanager -from flask import Flask, jsonify, request +from flask import Flask, jsonify, request, Response from waitress import serve @@ -225,15 +226,6 @@ def daily_and_monthly_totals() -> tuple[float, float]: row = cur.fetchone() daily_total = float(row["daily_total"]) monthly_total = float(row["monthly_total"]) - # query = """SELECT * FROM profits_table - # WHERE timestamp >= ? - # ORDER BY timestamp DESC;""" - # with db_cursor() as cursor: - # cursor.execute(query, (start_of_month_unix,)) - # query_result = cursor.fetchall() - - # monthly_total = sum([item[2] for item in query_result]) - # daily_total = sum([item[2] for item in query_result if item[0]>=start_of_day_unix]) return (daily_total, monthly_total) @@ -378,13 +370,14 @@ def fetch_profit_report(): Returns: JSON object with profit report data ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - try: - return jsonify(profit_report()) - except Exception as e: - print(e) - return jsonify({"Error": f"{e}"}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + try: + return jsonify(profit_report()) + except Exception as e: + print(e) + return jsonify({"Error": f"{e}"}) + @stats_api.route("/fetch_last_n_deals") @@ -393,15 +386,15 @@ def fetch_last_n_deals(): GET request Parameter: 'amount_of_deals' -> int ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - try: - parameter = request.args.get("amount_of_deals") - response_value = last_n_deals(parameter) - return jsonify({"last_deals": response_value}) - except Exception as e: - print(e) - return jsonify({"last_deals":""}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + try: + parameter = request.args.get("amount_of_deals") + response_value = last_n_deals(parameter) + return jsonify({"last_deals": response_value}) + except Exception as e: + print(e) + return jsonify({"last_deals":""}) @stats_api.route("/fetch_last_n_deals_without_history") @@ -410,16 +403,16 @@ def fetch_last_n_deals_without_history(): GET request Parameter: 'amount_of_deals' -> int ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - try: - parameter = request.args.get("amount_of_deals") - #return jsonify({"last_deals": last_n_deals_without_history(parameter)}) - response_value = last_n_deals_without_history(parameter) - return jsonify({"last_deals": response_value}) - except Exception as e: - print(e) - return jsonify({"last_deals":""}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + try: + parameter = request.args.get("amount_of_deals") + #return jsonify({"last_deals": last_n_deals_without_history(parameter)}) + response_value = last_n_deals_without_history(parameter) + return jsonify({"last_deals": response_value}) + except Exception as e: + print(e) + return jsonify({"last_deals":""}) @stats_api.route("/fetch_full_log") @@ -430,17 +423,16 @@ def fetch_full_log(): It trims the full log to 200 lines, to avoid sending too much data to the client. ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - try: - exchange_name = request.args.get("exchange_name") - width = 0 - #last_lines,amount_of_lines = last_n_lines(f"../logs/{exchange_name}.log",width,0,full_log=True) - last_lines, amount_of_lines = tail_log(f"../logs/{exchange_name}.log", 200) - return jsonify({"line": last_lines[-200:], "amount_of_lines": amount_of_lines}) - except Exception as e: - print(e) - return {"line": [""]*width,"amount_of_lines": 0} - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + try: + exchange_name = request.args.get("exchange_name") + width = 0 + last_lines, amount_of_lines = tail_log(f"../logs/{exchange_name}.log", 200) + return jsonify({"line": last_lines[-200:], "amount_of_lines": amount_of_lines}) + except Exception as e: + print(e) + return {"line": [""]*width,"amount_of_lines": 0} @stats_api.route("/fetch_log") @@ -451,33 +443,33 @@ def fetch_log(): 'width' -> int 'amount' -> int ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - try: - exchange_name = request.args.get("exchange_name") - width = int(request.args.get("width")) # type: ignore - amount = int(request.args.get("amount")) # type: ignore - last_lines,total_amount_of_lines = last_n_lines(f"../logs/{exchange_name}.log",width,amount) - return jsonify({"line": last_lines, "amount_of_lines": total_amount_of_lines}) - except Exception as e: - print(e) - return {"line": [""]*10,"amount_of_lines": 0} - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + try: + exchange_name = request.args.get("exchange_name") + width = int(request.args.get("width")) # type: ignore + amount = int(request.args.get("amount")) # type: ignore + last_lines,total_amount_of_lines = last_n_lines(f"../logs/{exchange_name}.log",width,amount) + return jsonify({"line": last_lines, "amount_of_lines": total_amount_of_lines}) + except Exception as e: + print(e) + return {"line": [""]*10,"amount_of_lines": 0} @stats_api.route("/combined_totals") def combined_totals(): - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - daily_totals = daily_and_monthly_totals() - return jsonify({"combined": daily_totals}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + daily_totals = daily_and_monthly_totals() + return jsonify({"combined": daily_totals}) @stats_api.route("/daily_totals") def get_daily_totals(): - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - daily_totals = query_daily_totals() - return jsonify(daily_totals) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + daily_totals = query_daily_totals() + return jsonify(daily_totals) @stats_api.route("/daily_totals_by_pair") @@ -487,24 +479,24 @@ def get_daily_totals_by_pair(): Parameters: 'base' -> string 'quote' -> string ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - try: - base = request.args.get("base") - quote = request.args.get("quote") - daily_totals = query_daily_totals(f"{base}{quote}") - return jsonify(daily_totals) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + try: + base = request.args.get("base") + quote = request.args.get("quote") + daily_totals = query_daily_totals(f"{base}{quote}") + return jsonify(daily_totals) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @stats_api.route("/monthly_totals") def get_monthly_totals(): - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - monthly_totals = query_monthly_totals() - return jsonify(monthly_totals) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + monthly_totals = query_monthly_totals() + return jsonify(monthly_totals) @stats_api.route("/monthly_totals_by_pair") @@ -514,55 +506,47 @@ def get_monthly_totals_by_pair(): Parameters: 'base' -> string 'quote' -> string ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - try: - base = request.args.get("base") - quote = request.args.get("quote") - monthly_totals = query_monthly_totals(f"{base}{quote}") - return jsonify(monthly_totals) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + try: + base = request.args.get("base") + quote = request.args.get("quote") + monthly_totals = query_monthly_totals(f"{base}{quote}") + return jsonify(monthly_totals) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @stats_api.route("/get_averages") def get_averages(): - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - try: - daily_totals = query_daily_totals() - - val_30 = 0 - val_7 = 0 - #acc_30 = [] - #acc_7 = [] - #for x in sorted(daily_totals): - # acc_30.append(daily_totals[x]) - # acc_7.append(daily_totals[x]) - - recent_days = sorted(daily_totals.keys(), reverse=True)[:30] - acc_30 = [daily_totals[date] for date in recent_days[:30]] - acc_7 = [daily_totals[date] for date in recent_days[:7]] - - length_30 = min(30,len(acc_30)) #Last 30 days - length_7 = min(7,len(acc_7)) #Last 7 days - for _ in range(length_30): - val_30 += acc_30.pop() - for _ in range(length_7): - val_7 += acc_7.pop() - return jsonify({"30_day": val_30/length_30, "7_day": val_7/length_7}) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + try: + daily_totals = query_daily_totals() + val_30 = 0 + val_7 = 0 + recent_days = sorted(daily_totals.keys(), reverse=True)[:30] + acc_30 = [daily_totals[date] for date in recent_days[:30]] + acc_7 = [daily_totals[date] for date in recent_days[:7]] + length_30 = min(30,len(acc_30)) #Last 30 days + length_7 = min(7,len(acc_7)) #Last 7 days + for _ in range(length_30): + val_30 += acc_30.pop() + for _ in range(length_7): + val_7 += acc_7.pop() + return jsonify({"30_day": val_30/length_30, "7_day": val_7/length_7}) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) @stats_api.route("/total_profit") def total_profit(): - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - total = query_total_profit() - return jsonify({"Total profit": total}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + total = query_total_profit() + return jsonify({"Total profit": total}) @stats_api.route("/total_profit_by_pair") @@ -572,22 +556,20 @@ def total_profit_by_pair(): Parameters: 'base' -> string 'quote' -> string ''' - if "X-API-KEY" in request.headers and request.headers.get("X-API-KEY") in get_valid_keys(): - try: - base = request.args.get("base") - quote = request.args.get("quote") - total = query_total_profit(f"{base}{quote}") - return jsonify({"Total profit": total}) - except Exception as e: - print(e) - return jsonify({'Error': 'Halp'}) - return jsonify({'Error': 'API key invalid'}), 401 + if not "X-API-KEY" in request.headers or not request.headers.get("X-API-KEY") in get_valid_keys(): + return jsonify({'Error': 'API key invalid'}), 401 + try: + base = request.args.get("base") + quote = request.args.get("quote") + total = query_total_profit(f"{base}{quote}") + return jsonify({"Total profit": total}) + except Exception as e: + print(e) + return jsonify({'Error': 'Halp'}) if __name__=="__main__": - # Load valid keys from database - #valid_keys = load_keys_from_db("api_credentials.db") #Waitress logger = logging.getLogger('waitress')