← Back to companies
[ OK ] Loaded —
[ INFO ]
$ cd
$ ls -lt
01
02
03
04
05
$ ls -lt
01
02
03
04
05
user@intervues:~/$
`python from enum import Enum from collections import OrderedDict, defaultdict
class OrderStatus(Enum): ACTIVE = "active" PAUSED = "paused"
class Order: def init(self, order_id: str, user_id: str, currency: str, amount: float, price: float): self.order_id = order_id self.user_id = user_id self.currency = currency self.amount = amount self.price = price self.status = OrderStatus.ACTIVE
class Stream: """A single shard that manages a subset of orders.""" def init(self): self.orders = OrderedDict() # order_id -> Order self.user_orders = defaultdict(set) # user_id -> set of order_ids
def place(self, order: Order) -> None:
if order.order_id in self.orders:
return
self.orders[order.order_id] = order
self.user_orders[order.user_id].add(order.order_id)
def pause(self, order_id: str) -> :
order_id .orders:
order = .orders[order_id]
order.status != OrderStatus.ACTIVE:
order.status = OrderStatus.PAUSED
() -> :
order_id .orders:
order = .orders[order_id]
order.status != OrderStatus.PAUSED:
order.status = OrderStatus.ACTIVE
() -> :
order_id .orders:
order = .orders[order_id]
.user_orders[order.user_id].discard(order_id)
.user_orders[order.user_id]:
.user_orders[order.user_id]
.orders[order_id]
() -> :
user_id .user_orders:
[]
order_ids = (.user_orders[user_id])
order_id order_ids:
.orders[order_id]
.user_orders[user_id]
order_ids
() -> :
result = []
order .orders.values():
order.status == OrderStatus.PAUSED:
result.append()
:
result.append(order.order_id)
result
: (): .num_streams = num_streams .streams = [Stream() _ (num_streams)] .order_to_stream = {}
() -> :
(user_id) % .num_streams
() -> :
order_id .order_to_stream:
stream_idx = ._get_stream_index(user_id)
order = Order(order_id, user_id, currency, amount, price)
.streams[stream_idx].place(order)
.order_to_stream[order_id] = stream_idx
() -> :
order_id .order_to_stream:
stream_idx = .order_to_stream[order_id]
.streams[stream_idx].pause(order_id)
() -> :
order_id .order_to_stream:
stream_idx = .order_to_stream[order_id]
.streams[stream_idx].resume(order_id)
() -> :
order_id .order_to_stream:
stream_idx = .order_to_stream[order_id]
result = .streams[stream_idx].cancel(order_id)
result:
.order_to_stream[order_id]
result
() -> :
stream_idx = ._get_stream_index(user_id)
cancelled_ids = .streams[stream_idx].cancel_all_by_user(user_id)
order_id cancelled_ids:
.order_to_stream[order_id]
(cancelled_ids)
() -> :
result = []
stream .streams:
result.extend(stream.get_live_orders())
result
`