(self, client: Client, message)
| 785 | return await self.watch_public(topics, messageHashes, params, True) |
| 786 | |
| 787 | def handle_order_book(self, client: Client, message): |
| 788 | # |
| 789 | # initial snapshot is fetched with ccxt's fetchOrderBook |
| 790 | # the feed does not include a snapshot, just the deltas |
| 791 | # |
| 792 | # { |
| 793 | # "data": { |
| 794 | # "E": "1754903057555305", |
| 795 | # "T": "1754903057554352", |
| 796 | # "U": 1345937436, |
| 797 | # "a": [], |
| 798 | # "b": [], |
| 799 | # "e": "depth", |
| 800 | # "s": "ETH_USDC", |
| 801 | # "u": 1345937436 |
| 802 | # }, |
| 803 | # "stream": "depth.ETH_USDC" |
| 804 | # } |
| 805 | # |
| 806 | data = self.safe_dict(message, 'data', {}) |
| 807 | marketId = self.safe_string(data, 's') |
| 808 | symbol = self.safe_symbol(marketId) |
| 809 | if not (symbol in self.orderbooks): |
| 810 | self.orderbooks[symbol] = self.order_book() |
| 811 | storedOrderBook = self.orderbooks[symbol] |
| 812 | nonce = self.safe_integer(storedOrderBook, 'nonce') |
| 813 | deltaNonce = self.safe_integer(data, 'u') |
| 814 | messageHash = 'orderbook:' + symbol |
| 815 | if nonce is None: |
| 816 | cacheLength = len(storedOrderBook.cache) |
| 817 | # the rest API is very delayed |
| 818 | # usually it takes at least 9 deltas to resolve |
| 819 | snapshotDelay = self.handle_option('watchOrderBook', 'snapshotDelay', 10) |
| 820 | if cacheLength == snapshotDelay: |
| 821 | self.spawn(self.load_order_book, client, messageHash, symbol, None, {}) |
| 822 | storedOrderBook.cache.append(data) |
| 823 | return |
| 824 | elif nonce > deltaNonce: |
| 825 | return |
| 826 | self.handle_delta(storedOrderBook, data) |
| 827 | client.resolve(storedOrderBook, messageHash) |
| 828 | |
| 829 | def handle_delta(self, orderbook, delta): |
| 830 | timestamp = self.parse_to_int(self.safe_integer(delta, 'T', 0) / 1000) |
no test coverage detected