def test_def_param(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_loan("btcusdt", None, None, None, None) self.assertEqual("GET", request.method) self.assertTrue(request.url.find("/v1/margin/loan-orders") != -1) self.assertTrue(request.url.find("start-date") == -1) self.assertTrue(request.url.find("end-date") == -1) self.assertTrue(request.url.find("states") == -1) self.assertTrue(request.url.find("from") == -1) self.assertTrue(request.url.find("size") == -1) self.assertTrue(request.url.find("driect") == -1)
def test_request(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_deposit_history("btc", 24966984923, 1, "next") self.assertEqual("GET", request.method) self.assertTrue(request.url.find("/v1/query/deposit-withdraw") != -1) self.assertTrue(request.url.find("Signature") != -1) self.assertTrue(request.url.find("currency=btc") != -1) self.assertTrue(request.url.find("from=24966984923") != -1) self.assertTrue(request.url.find("size=1") != -1) self.assertTrue(request.url.find("type=deposit") != -1) self.assertTrue(request.url.find("direct=next") != -1)
def test_request(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_loan("btcusdt", "2019-01-02", "2019-02-03", LoanOrderState.CREATED, 23456, 123) self.assertEqual("GET", request.method) self.assertTrue(request.url.find("/v1/margin/loan-orders") != -1) self.assertTrue(request.url.find("start-date=2019-01-02") != -1) self.assertTrue(request.url.find("end-date=2019-02-03") != -1) self.assertTrue(request.url.find("states=created") != -1) self.assertTrue(request.url.find("from=23456") != -1) self.assertTrue(request.url.find("size=123") != -1) self.assertTrue(request.url.find("driect") == -1)
def test_request(self): impl = RestApiRequestImpl("12345", "67890") request = impl.withdraw("0xde709f2102306220921060314715629080e2fb77", 0.05, "eth", 1.0, "aaa") self.assertEqual("POST", request.method) self.assertTrue(request.url.find("Signature") != -1) self.assertEqual("0xde709f2102306220921060314715629080e2fb77", request.post_body["address"]) self.assertEqual("eth", request.post_body["currency"]) self.assertEqual("0.05", request.post_body["amount"]) self.assertEqual("1.0", request.post_body["fee"]) self.assertEqual("aaa", request.post_body["addr-tag"])
def test_request(self): impl = RestApiRequestImpl("12345", "67890") request = impl.create_order("btcusdt", AccountType.SPOT, OrderType.SELL_LIMIT, 1.0, 1.0) self.assertEqual("POST", request.method) self.assertTrue(request.url.find("Signature") != 1) self.assertEqual("btcusdt", request.post_body["symbol"]) self.assertEqual("12345", request.post_body["account-id"]) self.assertEqual("1.0", request.post_body["amount"]) self.assertEqual("1.0", request.post_body["price"]) self.assertEqual(OrderType.SELL_LIMIT, request.post_body["type"]) self.assertEqual("api", request.post_body["source"])
def test_request_default_param(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_match_results("btcustd") self.assertTrue(request.url.find("/v1/order/matchresults") != -1) self.assertEqual("GET", request.method) self.assertTrue(request.url.find("Signature") != -1) self.assertTrue(request.url.find("symbol=btcustd") != -1) self.assertTrue(request.url.find("types") == -1) self.assertTrue(request.url.find("start-date") == -1) self.assertTrue(request.url.find("end-date") == -1) self.assertTrue(request.url.find("from") == -1) self.assertTrue(request.url.find("size") == -1)
def test_request(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_match_results("btcustd", OrderType.SELL_LIMIT, "2019-01-03", "2019-02-03", 10, 100) self.assertTrue(request.url.find("/v1/order/matchresults") != -1) self.assertEqual("GET", request.method) self.assertTrue(request.url.find("Signature") != -1) self.assertTrue(request.url.find("symbol=btcustd") != -1) self.assertTrue(request.url.find("types=sell-limit") != -1) self.assertTrue(request.url.find("start-date=2019-01-03") != -1) self.assertTrue(request.url.find("end-date=2019-02-03") != -1) self.assertTrue(request.url.find("from=100") != -1) self.assertTrue(request.url.find("size=10") != -1)
def test_request_dep_param(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_historical_orders("btcusdt", OrderState.CANCELED) self.assertTrue(request.url.find("/v1/order/orders") != -1) self.assertEqual("GET", request.method) self.assertTrue(request.url.find("Signature") != -1) self.assertTrue(request.url.find("symbol=btcusdt") != -1) self.assertTrue(request.url.find("states=canceled") != -1) self.assertTrue(request.url.find("start-date") == -1) self.assertTrue(request.url.find("end-date") == -1) self.assertTrue(request.url.find("types") == -1) self.assertTrue(request.url.find("from") == -1) self.assertTrue(request.url.find("size") == -1)
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_withdraw_history("btc", 24966984923, 1, "prev") withdraws = request.json_parser(parse_json_from_string(data)) self.assertEqual(1, len(withdraws)) self.assertEqual(345, withdraws[0].fee) self.assertEqual(1171, withdraws[0].id) self.assertEqual(1510912472199, withdraws[0].created_timestamp) self.assertEqual(1511145876575, withdraws[0].updated_timestamp) self.assertTrue("rae93V8d2mdoUQHwBDBdM4NHCMehRJAsbm", withdraws[0].address) self.assertEqual("100040", withdraws[0].address_tag) self.assertEqual("ht", withdraws[0].currency) self.assertEqual("ed03094b84eafbe4bc16e7ef766ee959885ee5bcb265872baaa9c64e1cf86c2b", withdraws[0].tx_hash) self.assertEqual(WithdrawState.CONFIRMED, withdraws[0].withdraw_state)
def test_result(self): impl = RestApiRequestImpl("", "") request = impl.get_etf_candlestick("hb10", CandlestickInterval.YEAR1, 100) candlestick_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(1, len(candlestick_list)) self.assertEqual(convert_cst_in_millisecond_to_utc(1499184000), candlestick_list[0].timestamp) self.assertEqual(0.7694, candlestick_list[0].high) self.assertEqual(0.769, candlestick_list[0].low) self.assertEqual(0.7794, candlestick_list[0].open) self.assertEqual(0.779, candlestick_list[0].close) self.assertEqual(123.123, candlestick_list[0].amount) self.assertEqual(456.456, candlestick_list[0].volume)
def test_result(self): impl = RestApiRequestImpl("", "") request = impl.get_etf_swap_config("hb10") etf_swap_config = request.json_parser(parse_json_from_string(data)) self.assertEqual(1000, etf_swap_config.purchase_min_amount) self.assertEqual(5000000, etf_swap_config.purchase_max_amount) self.assertEqual(1001, etf_swap_config.redemption_min_amount) self.assertEqual(5000001, etf_swap_config.redemption_max_amount) self.assertEqual(0.001, etf_swap_config.purchase_fee_rate) self.assertEqual(0.002, etf_swap_config.redemption_fee_rate) self.assertEqual(EtfStatus.NORMAL, etf_swap_config.status) self.assertEqual(3, len(etf_swap_config.unit_price_list)) self.assertEqual(0.018467942983843364, etf_swap_config.unit_price_list[1].amount) self.assertEqual("eos", etf_swap_config.unit_price_list[1].currency)
def test_request(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_match_results("htbtc", 24966984923) match_result_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(2, len(match_result_list)) self.assertEqual(1550632074577, match_result_list[0].created_timestamp) self.assertEqual(4191225853, match_result_list[0].id) self.assertEqual(100047251154, match_result_list[0].match_id) self.assertEqual(24966984923, match_result_list[0].order_id) self.assertEqual(1, match_result_list[0].filled_amount) self.assertEqual(0.00000061508, match_result_list[0].filled_fees) self.assertEqual(0.00030754, match_result_list[0].price) self.assertEqual("spot-api", match_result_list[0].source) self.assertEqual("sell-market", match_result_list[0].order_type)
def __init__(self, **kwargs): """ Create the subscription client to subscribe the update from server. :param kwargs: The option of subscription connection. api_key: The public key applied from Huobi. secret_key: The private key applied from Huobi. uri: Set the URI for subscription. is_auto_connect: When the connection lost is happening on the subscription line, specify whether the client reconnect to server automatically. The connection lost means: Caused by network problem The connection close triggered by server (happened every 24 hours) No any message can be received from server within a specified time, see receive_limit_ms receive_limit_ms: Set the receive limit in millisecond. If no message is received within this limit time, the connection will be disconnected. connection_delay_failure: If auto reconnect is enabled, specify the delay time before reconnect. """ api_key = None secret_key = None if "api_key" in kwargs: api_key = kwargs["api_key"] if "secret_key" in kwargs: secret_key = kwargs["secret_key"] self.__api_key = api_key self.__secret_key = secret_key self.websocket_request_impl = WebsocketRequestImpl(self.__api_key) self.websocket_request_impl_v2 = WebsocketRequestImplV2(self.__api_key) self.connections = list() self.uri = WebSocketDefine.Uri is_auto_connect = True receive_limit_ms = 60000 connection_delay_failure = 15 if "uri" in kwargs: self.uri = kwargs["uri"] if "is_auto_connect" in kwargs: is_auto_connect = kwargs["is_auto_connect"] if "receive_limit_ms" in kwargs: receive_limit_ms = kwargs["receive_limit_ms"] if "connection_delay_failure" in kwargs: connection_delay_failure = kwargs["connection_delay_failure"] self.__watch_dog = WebSocketWatchDog(is_auto_connect, receive_limit_ms, connection_delay_failure) try: host = urllib.parse.urlparse(self.uri).hostname impl = RestApiRequestImpl(api_key, secret_key, "https://" + host) account_info_map.update_user_info(api_key, impl) except Exception: pass
def test_request(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_historical_orders("btcusdt", OrderState.CANCELED, OrderType.SELL_LIMIT, "2019-01-03", "2019-02-03", 123, 456) self.assertTrue(request.url.find("/v1/order/orders") != -1) self.assertEqual("GET", request.method) self.assertTrue(request.url.find("Signature") != -1) self.assertTrue(request.url.find("symbol=btcusdt") != -1) self.assertTrue(request.url.find("states=canceled") != -1) self.assertTrue(request.url.find("start-date=2019-01-03") != -1) self.assertTrue(request.url.find("end-date=2019-02-03") != -1) self.assertTrue(request.url.find("types=sell-limit") != -1) self.assertTrue(request.url.find("from=123") != -1) self.assertTrue(request.url.find("size=456") != -1)
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_margin_balance_detail("htbtc") margin_balance_detail_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(1, len(margin_balance_detail_list)) self.assertEqual(12, len(margin_balance_detail_list[0].sub_account_balance_list)) self.assertEqual(6725534, margin_balance_detail_list[0].id) self.assertEqual(AccountType.MARGIN, margin_balance_detail_list[0].type) self.assertEqual(AccountState.WORKING, margin_balance_detail_list[0].state) self.assertEqual("btcusdt", margin_balance_detail_list[0].symbol) self.assertEqual(0, margin_balance_detail_list[0].fl_price) self.assertEqual("safe", margin_balance_detail_list[0].fl_type) self.assertEqual(10, margin_balance_detail_list[0].risk_rate) self.assertEqual("usdt", margin_balance_detail_list[0].sub_account_balance_list[4].currency) self.assertEqual(BalanceType.TRADE, margin_balance_detail_list[0].sub_account_balance_list[4].balance_type) self.assertEqual(3, margin_balance_detail_list[0].sub_account_balance_list[4].balance)
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_match_results("btcustd", OrderType.SELL_LIMIT, "2019-01-03", "2019-02-03", 10, 100) match_result_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(2, len(match_result_list)) self.assertEqual(convert_cst_in_millisecond_to_utc(1550632074577), match_result_list[1].created_timestamp) self.assertEqual(4191225853, match_result_list[1].id) self.assertEqual(100047251154, match_result_list[1].match_id) self.assertEqual(24966984923, match_result_list[1].order_id) self.assertEqual(1.89, match_result_list[1].filled_amount) self.assertEqual(0.00000061508, match_result_list[1].filled_fees) self.assertEqual(0.00030754, match_result_list[1].price) self.assertEqual("spot-api", match_result_list[1].source) self.assertEqual("htbtc", match_result_list[1].symbol) self.assertEqual("sell-market", match_result_list[1].order_type)
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_loan("btcusdt", "2019-01-02", "2019-02-03", LoanOrderState.CREATED, 23456, 123) loan_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(2, len(loan_list)) self.assertEqual(390, loan_list[0].id) self.assertEqual(0.1, loan_list[0].loan_balance) self.assertEqual(0.0002, loan_list[0].interest_balance) self.assertEqual(0.002, loan_list[0].interest_rate) self.assertEqual(0.11, loan_list[0].loan_amount) self.assertEqual(0.0012, loan_list[0].interest_amount) self.assertEqual("ethbtc", loan_list[0].symbol) self.assertEqual(LoanOrderState.ACCRUAL, loan_list[0].state) self.assertEqual(AccountType.SPOT, loan_list[0].account_type) self.assertEqual(119910, loan_list[0].user_id) self.assertEqual(convert_cst_in_millisecond_to_utc(1511169724000), loan_list[0].accrued_timestamp) self.assertEqual(convert_cst_in_millisecond_to_utc(1511169724530), loan_list[0].created_timestamp)
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_specify_account_balance(12345) complete_sub_account_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(2, len(complete_sub_account_list)) self.assertEqual(9910049, complete_sub_account_list[0].id) self.assertEqual(AccountType.SPOT, complete_sub_account_list[0].account_type) self.assertEqual(9910050, complete_sub_account_list[1].id) self.assertEqual(AccountType.POINT, complete_sub_account_list[1].account_type) self.assertEqual("btc", complete_sub_account_list[0].balances[0].currency) self.assertEqual(BalanceType.TRADE, complete_sub_account_list[0].balances[0].type) self.assertEqual(1, complete_sub_account_list[0].balances[0].balance) self.assertEqual("eth", complete_sub_account_list[0].balances[1].currency) self.assertEqual(BalanceType.TRADE, complete_sub_account_list[0].balances[1].type) self.assertEqual(1934, complete_sub_account_list[0].balances[1].balance) self.assertEqual(0, len(complete_sub_account_list[1].balances)) self.assertEqual(2, len(complete_sub_account_list[0].balances))
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_open_orders("btcusdt", AccountType.SPOT, 10, OrderSide.BUY) order_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(2, len(order_list)) self.assertEqual("htbtc", order_list[0].symbol) self.assertEqual(1, order_list[0].amount) self.assertEqual(1.1, order_list[0].price) self.assertEqual(0.1, order_list[0].filled_amount) self.assertEqual(0.2, order_list[0].filled_cash_amount) self.assertEqual(0.3, order_list[0].filled_fees) self.assertEqual(24963751000, order_list[0].order_id) self.assertEqual(AccountType.SPOT, order_list[0].account_type) self.assertEqual(OrderState.SUBMITTED, order_list[0].state) self.assertEqual(OrderType.SELL_LIMIT, order_list[0].order_type) self.assertEqual(convert_cst_in_millisecond_to_utc(1550628731111), order_list[0].created_timestamp)
def test_result(self): impl = RestApiRequestImpl("", "") request = impl.get_symbols() symbol_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(2, len(symbol_list)) self.assertEqual("btcusdt", symbol_list[0].symbol) self.assertEqual("btc", symbol_list[0].base_currency) self.assertEqual("usdt", symbol_list[0].quote_currency) self.assertEqual(2, symbol_list[0].price_precision) self.assertEqual(4, symbol_list[0].amount_precision) self.assertEqual("main", symbol_list[0].symbol_partition) self.assertEqual("bchusdt", symbol_list[1].symbol) self.assertEqual("bch", symbol_list[1].base_currency) self.assertEqual("usdt", symbol_list[1].quote_currency) self.assertEqual(3, symbol_list[1].price_precision) self.assertEqual(5, symbol_list[1].amount_precision) self.assertEqual("main", symbol_list[1].symbol_partition)
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_order("htbtc", 24962048654) order = request.json_parser(parse_json_from_string(data)) self.assertEqual(1550626936504, order.created_timestamp) self.assertEqual(AccountType.SPOT, order.account_type) self.assertEqual(1550626936722, order.canceled_timestamp) self.assertEqual(1550626936798, order.finished_timestamp) self.assertEqual(24962048654, order.order_id) self.assertEqual(0.08888, order.filled_amount) self.assertEqual(0.204, order.filled_cash_amount) self.assertEqual(0.0345, order.filled_fees) self.assertEqual(1.00000123, order.price) self.assertEqual("htbtc", order.symbol) self.assertEqual(1, order.amount) self.assertEqual(OrderSource.API, order.source) self.assertEqual(OrderState.CANCELED, order.state) self.assertEqual(OrderType.SELL_LIMIT, order.order_type)
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_etf_swap_history("hb10", 0, 10) etf_swap_history_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(2, len(etf_swap_history_list)) self.assertEqual(1528855872323, etf_swap_history_list[0].created_timestamp) self.assertEqual("hb10", etf_swap_history_list[0].currency) self.assertEqual(11.5, etf_swap_history_list[0].amount) self.assertEqual(EtfSwapType.IN, etf_swap_history_list[0].type) self.assertEqual(2, len(etf_swap_history_list[0].used_currency_list)) self.assertEqual("btc", etf_swap_history_list[0].used_currency_list[0].currency) self.assertEqual(0.666, etf_swap_history_list[0].used_currency_list[0].amount) self.assertEqual(0.002, etf_swap_history_list[0].rate) self.assertEqual(100.11, etf_swap_history_list[0].fee) self.assertEqual(2, etf_swap_history_list[0].status) self.assertEqual(1, etf_swap_history_list[0].point_card_amount) self.assertEqual(1, len(etf_swap_history_list[0].obtain_currency_list)) self.assertEqual("hb10", etf_swap_history_list[0].obtain_currency_list[0].currency) self.assertEqual(1000, etf_swap_history_list[0].obtain_currency_list[0].amount)
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.get_historical_orders("btcusdt", OrderState.CANCELED, OrderType.SELL_LIMIT, "2019-01-03", "2019-02-03", 123, 456) order_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(2, len(order_list)) self.assertEqual(24965104183, order_list[0].order_id) self.assertEqual(AccountType.SPOT, order_list[0].account_type) self.assertEqual(convert_cst_in_millisecond_to_utc(1550630155568), order_list[0].canceled_timestamp) self.assertEqual(convert_cst_in_millisecond_to_utc(1550630155647), order_list[0].finished_timestamp) self.assertEqual(convert_cst_in_millisecond_to_utc(1550630155350), order_list[0].created_timestamp) self.assertEqual(0.0888, order_list[0].filled_amount) self.assertEqual(0.011, order_list[0].filled_cash_amount) self.assertEqual(0.03445, order_list[0].filled_fees) self.assertEqual(1.000000000000000001, order_list[0].price) self.assertEqual("htbtc", order_list[0].symbol) self.assertEqual(1, order_list[0].amount) self.assertEqual(OrderSource.API, order_list[0].source) self.assertEqual(OrderState.CANCELED, order_list[0].state) self.assertEqual(OrderType.SELL_LIMIT, order_list[0].order_type) self.assertEqual(0, order_list[1].finished_timestamp) self.assertEqual(0, order_list[1].canceled_timestamp)
def __init__(self, **kwargs): """ Create the request client instance. :param kwargs: The option of request connection. api_key: The public key applied from Huobi. secret_key: The private key applied from Huobi. server_url: The URL name like "https://api.huobi.pro". """ secret_key = None self.server_url = RestApiDefine.Url if "api_key" in kwargs: self.api_key = kwargs["api_key"] if "secret_key" in kwargs: secret_key = kwargs["secret_key"] if "url" in kwargs: self.server_url = kwargs["url"] try: self.request_impl = RestApiRequestImpl(self.api_key, secret_key, self.server_url) account_info_map.update_user_info(self.api_key, self.request_impl) except Exception: pass
def test_result(self): impl = RestApiRequestImpl("", "") request = impl.get_candlestick("btcusdt", CandlestickInterval.YEAR1, 100) candlestick_list = request.json_parser(parse_json_from_string(data)) self.assertEqual(2, len(candlestick_list)) self.assertEqual(1550160000, candlestick_list[0].id) self.assertEqual(3612.19, candlestick_list[0].high) self.assertEqual(3575, candlestick_list[0].low) self.assertEqual(3600.77, candlestick_list[0].open) self.assertEqual(3602.38, candlestick_list[0].close) self.assertEqual(4562.76674424022461572, candlestick_list[0].amount) self.assertEqual(16424799.08415395920040605355, candlestick_list[0].volume) self.assertEqual(28891, candlestick_list[0].count) self.assertEqual(1550073600, candlestick_list[1].id) self.assertEqual(3624.3, candlestick_list[1].high) self.assertEqual(3570, candlestick_list[1].low) self.assertEqual(3594.85, candlestick_list[1].open) self.assertEqual(3600.79, candlestick_list[1].close) self.assertEqual(14514.049885396099061006, candlestick_list[1].amount) self.assertEqual(52311364.00432444789296465098, candlestick_list[1].volume) self.assertEqual(99003, candlestick_list[1].count)
def test_error_account(self): with self.assertRaises(HuobiApiException): impl = RestApiRequestImpl("12345", "67890") request = impl.transfer("btcusdt", AccountType.OTC, AccountType.SPOT, "btc", 2.1)
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.transfer("btcusdt", AccountType.MARGIN, AccountType.SPOT, "btc", 2.1) self.assertEqual(1000, request.json_parser(parse_json_from_string(data)))
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.repay_loan(12345, 1.1) self.assertEqual(1000, request.json_parser(parse_json_from_string(data)))
def test_result(self): impl = RestApiRequestImpl("12345", "67890") request = impl.withdraw("0xde709f2102306220921060314715629080e2fb77", 0.05, "eth", 1.0, "aaa") id = request.json_parser(parse_json_from_string(data)) self.assertEqual(1000, id)
def test_request(self): impl = RestApiRequestImpl("", "") request = impl.get_24h_trade_statistics("btcusdt") self.assertEqual("GET", request.method) self.assertTrue(request.url.find("/market/detail") != -1) self.assertTrue(request.url.find("symbol=btcusdt") != -1)