From e28e75b90ef4608f178d482bc803416cda461827 Mon Sep 17 00:00:00 2001 From: Qifan Deng Date: Thu, 4 Feb 2021 16:48:42 +0800 Subject: [PATCH 1/2] json.loads removed arg encoding since python 3.9, see 'https://docs.python.org/3.9/library/json.html#json.loads' --- huobi/connection/impl/restapi_invoker.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/huobi/connection/impl/restapi_invoker.py b/huobi/connection/impl/restapi_invoker.py index 4466abfd..731b9316 100644 --- a/huobi/connection/impl/restapi_invoker.py +++ b/huobi/connection/impl/restapi_invoker.py @@ -1,3 +1,4 @@ +import sys import requests from huobi.exception.huobi_api_exception import HuobiApiException from huobi.utils.etf_result import etf_result_check @@ -8,6 +9,17 @@ session = requests.Session() +is_below_py39 = False +if sys.version_info.major < 3 and sys.version_info.minor < 9: + is_below_py39 = True + + +def json_loads(text, encoding=None): + if is_below_py39 and encoding: + return json.loads(text, encoding=encoding) + return json.loads(text) + + def check_response(dict_data): status = dict_data.get("status", None) code = dict_data.get("code", None) @@ -53,30 +65,31 @@ def call_sync(request, is_checked=False): response = session.get(request.host + request.url, headers=request.header) if is_checked is True: return response.text - dict_data = json.loads(response.text, encoding="utf-8") + dict_data = json_loads(response.text, encoding="utf-8") # print("call_sync === recv data : ", dict_data) check_response(dict_data) return request.json_parser(dict_data) elif request.method == "POST": response = session.post(request.host + request.url, data=json.dumps(request.post_body), headers=request.header) - dict_data = json.loads(response.text, encoding="utf-8") + dict_data = json_loads(response.text, encoding="utf-8") # print("call_sync === recv data : ", dict_data) check_response(dict_data) return request.json_parser(dict_data) + def call_sync_perforence_test(request, is_checked=False): if request.method == "GET": inner_start_time = time.time() # print("call_sync_perforence_test url : ", request.host + request.url) response = session.get(request.host + request.url, headers=request.header) - #print("call_sync_perforence_test data :", response.text) + # print("call_sync_perforence_test data :", response.text) inner_end_time = time.time() cost_manual = round(inner_end_time - inner_start_time, 6) req_cost = response.elapsed.total_seconds() if is_checked is True: return response.text - dict_data = json.loads(response.text, encoding="utf-8") + dict_data = json_loads(response.text, encoding="utf-8") # print("call_sync === recv data : ", dict_data) check_response(dict_data) return request.json_parser(dict_data), req_cost, cost_manual @@ -87,7 +100,7 @@ def call_sync_perforence_test(request, is_checked=False): inner_end_time = time.time() cost_manual = round(inner_end_time - inner_start_time, 6) req_cost = response.elapsed.total_seconds() - dict_data = json.loads(response.text, encoding="utf-8") + dict_data = json_loads(response.text, encoding="utf-8") # print("call_sync === recv data : ", dict_data) check_response(dict_data) return request.json_parser(dict_data), req_cost, cost_manual From 4e7f3afad01ea364e2ed412015378d295f002740 Mon Sep 17 00:00:00 2001 From: Qifan Deng Date: Wed, 14 Apr 2021 20:03:26 +0800 Subject: [PATCH 2/2] For safety and pretty, see advice from @Qumeric at https://github.com/HuobiRDCenter/huobi_Python/pull/85#issuecomment-818755738 --- huobi/connection/impl/restapi_invoker.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/huobi/connection/impl/restapi_invoker.py b/huobi/connection/impl/restapi_invoker.py index 731b9316..838e6dfb 100644 --- a/huobi/connection/impl/restapi_invoker.py +++ b/huobi/connection/impl/restapi_invoker.py @@ -1,4 +1,3 @@ -import sys import requests from huobi.exception.huobi_api_exception import HuobiApiException from huobi.utils.etf_result import etf_result_check @@ -9,15 +8,14 @@ session = requests.Session() -is_below_py39 = False -if sys.version_info.major < 3 and sys.version_info.minor < 9: - is_below_py39 = True - -def json_loads(text, encoding=None): - if is_below_py39 and encoding: - return json.loads(text, encoding=encoding) - return json.loads(text) +def json_loads(text, encoding='utf-8'): + from sys import version_info + if version_info.major > 3: + return json.loads(text) + if version_info.minor > 7: + return json.loads(text) + return json.loads(text, encoding=encoding) def check_response(dict_data): @@ -65,14 +63,14 @@ def call_sync(request, is_checked=False): response = session.get(request.host + request.url, headers=request.header) if is_checked is True: return response.text - dict_data = json_loads(response.text, encoding="utf-8") + dict_data = json_loads(response.text) # print("call_sync === recv data : ", dict_data) check_response(dict_data) return request.json_parser(dict_data) elif request.method == "POST": response = session.post(request.host + request.url, data=json.dumps(request.post_body), headers=request.header) - dict_data = json_loads(response.text, encoding="utf-8") + dict_data = json_loads(response.text) # print("call_sync === recv data : ", dict_data) check_response(dict_data) return request.json_parser(dict_data) @@ -89,7 +87,7 @@ def call_sync_perforence_test(request, is_checked=False): req_cost = response.elapsed.total_seconds() if is_checked is True: return response.text - dict_data = json_loads(response.text, encoding="utf-8") + dict_data = json_loads(response.text) # print("call_sync === recv data : ", dict_data) check_response(dict_data) return request.json_parser(dict_data), req_cost, cost_manual @@ -100,7 +98,7 @@ def call_sync_perforence_test(request, is_checked=False): inner_end_time = time.time() cost_manual = round(inner_end_time - inner_start_time, 6) req_cost = response.elapsed.total_seconds() - dict_data = json_loads(response.text, encoding="utf-8") + dict_data = json_loads(response.text) # print("call_sync === recv data : ", dict_data) check_response(dict_data) return request.json_parser(dict_data), req_cost, cost_manual