Exemplo n.º 1
0
 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')
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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)