async def fetch_order(self, id, symbol=None, params={}): await self.load_markets() await self.fetch_orders(symbol, None, None, params) if id in self.orders: return self.orders[id] raise OrderNotFound(self.id + ' order id ' + str(id) + ' is not in "open" state and not found in cache')
def handle_errors(self, httpCode, reason, url, method, headers, body, response=None): if not isinstance(body, basestring): return # fallback to default error handler if len(body) < 2: return # fallback to default error handler if (body[0] == '{') or (body[0] == '['): response = json.loads(body) if 'code' in response: # # {"code": "100005", "msg": "request sign illegal", "data": null} # code = self.safe_string(response, 'code') if code is not None: message = self.safe_string(response, 'msg') feedback = self.id + ' ' + self.json(response) if code != '0': exceptions = self.exceptions if code in exceptions: if code == '1': # # {"code":"1","msg":"系统错误","data":null} # {“code”:“1",“msg”:“Balance insufficient,余额不足“,”data”:null} # if message.find('Balance insufficient') >= 0: raise InsufficientFunds(feedback) elif code == '2': if message == 'offsetNot Null': raise ExchangeError(feedback) elif message == 'api_keyNot EXIST': raise AuthenticationError(feedback) elif message == 'price precision exceed the limit': raise InvalidOrder(feedback) elif message == 'Parameter error': raise BadRequest(feedback) raise exceptions[code](feedback) else: raise ExchangeError(self.id + ' unknown "error" value: ' + self.json(response)) else: # # Google Translate: # 订单状态不能取消,订单取消失败 = Order status cannot be canceled # 根据订单号没有查询到订单,订单取消失败 = The order was not queried according to the order number # # {"code":"0","msg":"suc","data":{"success":[],"failed":[{"err-msg":"订单状态不能取消,订单取消失败","order-id":32857051,"err-code":"8"}]}} # {"code":"0","msg":"suc","data":{"success":[],"failed":[{"err-msg":"Parameter error","order-id":32857050,"err-code":"2"},{"err-msg":"订单状态不能取消,订单取消失败","order-id":32857050,"err-code":"8"}]}} # {"code":"0","msg":"suc","data":{"success":[],"failed":[{"err-msg":"Parameter error","order-id":98549677,"err-code":"2"},{"err-msg":"根据订单号没有查询到订单,订单取消失败","order-id":98549677,"err-code":"8"}]}} # if feedback.find('订单状态不能取消,订单取消失败') >= 0: if feedback.find('Parameter error') >= 0: raise OrderNotFound(feedback) else: raise InvalidOrder(feedback) elif feedback.find('根据订单号没有查询到订单,订单取消失败') >= 0: raise OrderNotFound(feedback)
def handle_errors(self, code, reason, url, method, headers, body, response=None): if body[0] == '{': response = json.loads(body) # {success: False, message: "message"} success = self.safe_value(response, 'success') if success is None: raise ExchangeError(self.id + ': malformed response: ' + self.json(response)) if isinstance(success, basestring): # bleutrade uses string instead of boolean success = True if (success == 'true') else False if not success: message = self.safe_string(response, 'message') feedback = self.id + ' ' + self.json(response) exceptions = self.exceptions if message == 'APIKEY_INVALID': if self.options['hasAlreadyAuthenticatedSuccessfully']: raise DDoSProtection(feedback) else: raise AuthenticationError(feedback) if message == 'DUST_TRADE_DISALLOWED_MIN_VALUE_50K_SAT': raise InvalidOrder( self.id + ' order cost should be over 50k satoshi ' + self.json(response)) if message == 'INVALID_ORDER': # Bittrex will return an ambiguous INVALID_ORDER message # upon canceling already-canceled and closed orders # therefore self special case for cancelOrder # url = 'https://bittrex.com/api/v1.1/market/cancel?apikey=API_KEY&uuid=ORDER_UUID' cancel = 'cancel' indexOfCancel = url.find(cancel) if indexOfCancel >= 0: parts = url.split('&') orderId = None for i in range(0, len(parts)): part = parts[i] keyValue = part.split('=') if keyValue[0] == 'uuid': orderId = keyValue[1] break if orderId is not None: raise OrderNotFound(self.id + ' cancelOrder ' + orderId + ' ' + self.json(response)) else: raise OrderNotFound(self.id + ' cancelOrder ' + self.json(response)) if message in exceptions: raise exceptions[message](feedback) if message is not None: if message.find('throttled. Try again') >= 0: raise DDoSProtection(feedback) if message.find('problem') >= 0: raise ExchangeNotAvailable( feedback ) # 'There was a problem processing your request. If self problem persists, please contact...') raise ExchangeError(feedback)