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

Class ArrayCacheBySymbolBySide

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

Source from the content-addressed store, hash-verified

178
179
180class ArrayCacheBySymbolBySide(ArrayCache):
181 def __init__(self, max_size=None):
182 super(ArrayCacheBySymbolBySide, self).__init__(max_size)
183 self._nested_new_updates_by_symbol = True
184 self.hashmap = {}
185 self._index = collections.deque([], max_size)
186
187 def append(self, item):
188 by_side = self.hashmap.setdefault(item['symbol'], {})
189 if item['side'] in by_side:
190 reference = by_side[item['side']]
191 if reference != item:
192 reference.update(item)
193 item = reference
194 index = self._index.index(item['symbol'] + item['side'])
195 del self._deque[index]
196 del self._index[index]
197 else:
198 by_side[item['side']] = item
199 if len(self._deque) == self._deque.maxlen:
200 delete_item = self._deque.popleft()
201 self._index.popleft()
202 del self.hashmap[delete_item['symbol']][delete_item['side']]
203 self._deque.append(item)
204 self._index.append(item['symbol'] + item['side'])
205 if self._clear_all_updates:
206 self._clear_all_updates = False
207 self._clear_updates_by_symbol.clear()
208 self._all_new_updates = 0
209 self._new_updates_by_symbol.clear()
210 if item['symbol'] not in self._new_updates_by_symbol:
211 self._new_updates_by_symbol[item['symbol']] = set()
212 if self._clear_updates_by_symbol.get(item['symbol']):
213 self._clear_updates_by_symbol[item['symbol']] = False
214 self._new_updates_by_symbol[item['symbol']].clear()
215 side_set = self._new_updates_by_symbol[item['symbol']]
216 before_length = len(side_set)
217 side_set.add(item['side'])
218 after_length = len(side_set)
219 self._all_new_updates = (self._all_new_updates or 0) + (after_length - before_length)

Callers 15

test_safe_methodsFunction · 0.90
set_positions_cacheMethod · 0.90
handle_positionsMethod · 0.90
set_positions_cacheMethod · 0.90
handle_positionsMethod · 0.90
handle_positionsMethod · 0.90
handle_positionsMethod · 0.90
set_positions_cacheMethod · 0.90
handle_positionsMethod · 0.90
handle_positionsMethod · 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…