|
|
import re
|
|
|
import time
|
|
|
from huobi.exception.huobi_api_exception import HuobiApiException
|
|
|
from huobi.constant.definition import *
|
|
|
|
|
|
reg_ex = "[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\n|\t"
|
|
|
|
|
|
|
|
|
def check_symbol(symbol):
|
|
|
if not isinstance(symbol, str):
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR, "[Input] symbol must be string")
|
|
|
if re.match(reg_ex, symbol):
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR, "[Input] " + symbol + " is invalid symbol")
|
|
|
|
|
|
|
|
|
def check_time_in_force(time_in_force, order_type):
|
|
|
if time_in_force is None:
|
|
|
return
|
|
|
|
|
|
if order_type in [OrderType.BUY_MARKET, OrderType.SELL_MARKET] \
|
|
|
and time_in_force in [TimeInForceType.GTC, TimeInForceType.BOC, TimeInForceType.FOK]:
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR, "[Input] timeInForce not supported for market order")
|
|
|
|
|
|
|
|
|
def check_symbol_list(symbols):
|
|
|
if not isinstance(symbols, list):
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR, "[Input] symbols in subscription is not a list")
|
|
|
for symbol in symbols:
|
|
|
check_symbol(symbol)
|
|
|
|
|
|
|
|
|
def check_currency(currency):
|
|
|
if not isinstance(currency, str):
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR, "[Input] currency must be string")
|
|
|
if re.match(reg_ex, currency) is not None:
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR, "[Input] " + currency + " is invalid currency")
|
|
|
|
|
|
|
|
|
def check_range(value, min_value, max_value, name):
|
|
|
if value is None:
|
|
|
return
|
|
|
if min_value > value or value > max_value:
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR,
|
|
|
"[Input] " + name + " is out of bound. " + str(value) + " is not in [" + str(
|
|
|
min_value) + "," + str(max_value) + "]")
|
|
|
|
|
|
|
|
|
def check_should_not_none(value, name):
|
|
|
if value is None:
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR, "[Input] " + name + " should not be null")
|
|
|
|
|
|
|
|
|
def check_should_none(value, name):
|
|
|
if value is not None:
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR, "[Input] " + name + " should be null")
|
|
|
|
|
|
|
|
|
def check_in_list(value, list_configed, name):
|
|
|
if (value is not None) and (value not in list_configed):
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR,
|
|
|
"[Input] " + name + " should be one in " + (",".join(list_configed)))
|
|
|
|
|
|
|
|
|
def check_list(list_value, min_value, max_value, name):
|
|
|
if list_value is None:
|
|
|
return
|
|
|
if len(list_value) > max_value:
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR,
|
|
|
"[Input] " + name + " is out of bound, the max size is " + str(max_value))
|
|
|
if len(list_value) < min_value:
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR,
|
|
|
"[Input] " + name + " should contain " + str(min_value) + " item(s) at least")
|
|
|
|
|
|
|
|
|
def greater_or_equal(value, base, name):
|
|
|
if value is not None and value < base:
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR,
|
|
|
"[Input] " + name + " should be greater than " + base)
|
|
|
|
|
|
|
|
|
def format_date(value, name):
|
|
|
if value is None:
|
|
|
return None
|
|
|
if not isinstance(value, str):
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR, "[Input] " + name + " must be string")
|
|
|
try:
|
|
|
new_time = time.strptime(value, "%Y-%m-%d")
|
|
|
return time.strftime("%Y-%m-%d", new_time)
|
|
|
except:
|
|
|
raise HuobiApiException(HuobiApiException.INPUT_ERROR, "[Input] " + name + " is not invalid date format")
|