示例#1
0
 def _log_order(self, order: Order):
     logging.info("[ORDER RESULT]:", order)
     if self.should_db_logging:
         SharedMongoClient.async_order_insert(order.to_dict())
 def do_interval(self):
     # noinspection PyBroadException
     try:
         res_json = self.api.get_order_info(self.order.currency, self.order)
         if res_json is None:
             # it's impossible to know if a gopax order is cancelled or not
             # this behavior may need to be changed in accordance with the api changes
             if self.order.market is Market.GOPAX:
                 # gopax api sucks, just consider it done (or cancelled)
                 # see `get_order_info` method for detail
                 self.order.updated_at = int(time.time())
                 self.order.filled_amount = self.order.order_amount
                 self.order.remain_amount = 0
                 self.order.fee_rate = GopaxMarketManager().taker_fee
                 self.order.fee = self.order.fee_rate * self.order.filled_amount
                 self.order.status = OrderStatus.FILLED
             else:
                 raise Exception(
                     "Unexpected response: with `get_order_info`, returned None"
                 )
         else:
             self.order.update_from_api(res_json)
     except KorbitApi as e:
         # consider it cancelled
         if "Order id does not exist" in str(e):
             logging.info("Order<%s> in %s is cancelled." %
                          (self.order.order_id, self.order.market.value))
             self.order.status = OrderStatus.CANCELLED
         else:
             logging.warning(e)
             logging.warning(
                 "get_order_info in OrderWatcher failed! (Order %s)" %
                 self.order.order_id)
     except CoinoneError as e:
         # consider it cancelled
         if "Order id does not exist" in str(e):
             logging.info("Order<%s> in %s is cancelled." %
                          (self.order.order_id, self.order.market.value))
             self.order.status = OrderStatus.CANCELLED
         else:
             logging.warning(e)
             logging.warning(
                 "get_order_info in OrderWatcher failed! (Order %s)" %
                 self.order.order_id)
     except OkcoinError as e:
         # consider it cancelled
         if "Order id does not exist" in str(e):
             logging.info("Order<%s> in %s is cancelled." %
                          (self.order.order_id, self.order.market.value))
             self.order.status = OrderStatus.CANCELLED
         else:
             logging.warning(e)
             logging.warning(
                 "get_order_info in OrderWatcher failed! (Order %s)" %
                 self.order.order_id)
     except Exception as e:
         logging.warning(e)
         logging.warning(
             "get_order_info in OrderWatcher failed! (Order %s)" %
             self.order.order_id)
     finally:
         SharedMongoClient.async_order_insert(self.order.to_dict())