diff --git a/piker/clearing/_ems.py b/piker/clearing/_ems.py index 3f7045fa..2ea06d8a 100644 --- a/piker/clearing/_ems.py +++ b/piker/clearing/_ems.py @@ -1182,12 +1182,16 @@ async def process_client_order_cmds( submitting live orders immediately if requested by the client. ''' - # cmd: dict + # TODO, only allow `msgspec.Struct` form! + cmd: dict async for cmd in client_order_stream: - log.info(f'Received order cmd:\n{pformat(cmd)}') + log.info( + f'Received order cmd:\n' + f'{pformat(cmd)}\n' + ) # CAWT DAMN we need struct support! - oid = str(cmd['oid']) + oid: str = str(cmd['oid']) # register this stream as an active order dialog (msg flow) for # this order id such that translated message from the brokerd @@ -1347,7 +1351,11 @@ async def process_client_order_cmds( # (``translate_and_relay_brokerd_events()`` above) will # handle relaying the ems side responses back to # the client/cmd sender from this request - log.info(f'Sending live order to {broker}:\n{pformat(msg)}') + log.info( + f'Sending live order to {broker}:\n' + f'{pformat(msg)}' + ) + await brokerd_order_stream.send(msg) # an immediate response should be ``BrokerdOrderAck`` @@ -1531,7 +1539,7 @@ async def _emsd_main( ctx: tractor.Context, fqme: str, exec_mode: str, # ('paper', 'live') - loglevel: str | None = None, + loglevel: str|None = None, ) -> tuple[ dict[ diff --git a/piker/clearing/_messages.py b/piker/clearing/_messages.py index 51a3860c..788fe669 100644 --- a/piker/clearing/_messages.py +++ b/piker/clearing/_messages.py @@ -19,6 +19,7 @@ Clearing sub-system message and protocols. """ from __future__ import annotations +from decimal import Decimal from typing import ( Literal, ) @@ -71,7 +72,15 @@ class Order(Struct): symbol: str # | MktPair account: str # should we set a default as '' ? - price: float + # https://docs.python.org/3/library/decimal.html#decimal-objects + # + # ?TODO? decimal usage throughout? + # -[ ] possibly leverage the `Encoder(decimal_format='number')` + # bit? + # |_https://jcristharif.com/msgspec/supported-types.html#decimal + # -[ ] should we also use it for .size? + # + price: Decimal size: float # -ve is "sell", +ve is "buy" brokers: list[str] = [] @@ -178,7 +187,7 @@ class BrokerdOrder(Struct): time_ns: int symbol: str # fqme - price: float + price: Decimal size: float # TODO: if we instead rely on a +ve/-ve size to determine