MCPcopy Create free account
hub / github.com/ccxt/ccxt / ArrayCacheBySymbolById

Class ArrayCacheBySymbolById

python/ccxt/async_support/base/ws/cache.py:135–177  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

133
134
135class ArrayCacheBySymbolById(ArrayCache):
136 def __init__(self, max_size=None):
137 super(ArrayCacheBySymbolById, self).__init__(max_size)
138 self._nested_new_updates_by_symbol = True
139 self.hashmap = {}
140 self._index = collections.deque([], max_size)
141
142 def append(self, item):
143 by_id = self.hashmap.setdefault(item['symbol'], {})
144 if item['id'] in by_id:
145 reference = by_id[item['id']]
146 if reference != item:
147 reference.update(item)
148 item = reference
149 index = self._index.index(item['id'])
150 del self._deque[index]
151 del self._index[index]
152 else:
153 by_id[item['id']] = item
154 if len(self._deque) == self._deque.maxlen:
155 delete_item = self._deque.popleft()
156 self._index.popleft()
157 try:
158 del self.hashmap[delete_item['symbol']][delete_item['id']]
159 except Exception as e:
160 logger.error(f"Error deleting item from hashmap: {delete_item}. Error:{e}")
161 self._deque.append(item)
162 self._index.append(item['id'])
163 if self._clear_all_updates:
164 self._clear_all_updates = False
165 self._clear_updates_by_symbol.clear()
166 self._all_new_updates = 0
167 self._new_updates_by_symbol.clear()
168 if item['symbol'] not in self._new_updates_by_symbol:
169 self._new_updates_by_symbol[item['symbol']] = set()
170 if self._clear_updates_by_symbol.get(item['symbol']):
171 self._clear_updates_by_symbol[item['symbol']] = False
172 self._new_updates_by_symbol[item['symbol']].clear()
173 id_set = self._new_updates_by_symbol[item['symbol']]
174 before_length = len(id_set)
175 id_set.add(item['id'])
176 after_length = len(id_set)
177 self._all_new_updates = (self._all_new_updates or 0) + (after_length - before_length)
178
179
180class ArrayCacheBySymbolBySide(ArrayCache):

Callers 15

test_safe_methodsFunction · 0.90
handle_orderMethod · 0.90
handle_my_tradeMethod · 0.90
handle_orderMethod · 0.90
handle_my_tradesMethod · 0.90
handle_orderMethod · 0.90
handle_my_tradesMethod · 0.90
handle_orderMethod · 0.90
handle_orderMethod · 0.90
handle_ordersMethod · 0.90
handle_my_tradesMethod · 0.90
handle_my_tradeMethod · 0.90

Calls

no outgoing calls

Tested by 2

test_safe_methodsFunction · 0.72
test_ws_cacheFunction · 0.72

Used in the wild real call sites across dependent graphs

searching dependent graphs…