Use modern `Union` pipe op syntax for msg fields
parent
7fe3e3f482
commit
b52c4092f3
|
@ -18,14 +18,13 @@
|
|||
Clearing sub-system message and protocols.
|
||||
|
||||
"""
|
||||
from collections import (
|
||||
ChainMap,
|
||||
deque,
|
||||
)
|
||||
# from collections import (
|
||||
# ChainMap,
|
||||
# deque,
|
||||
# )
|
||||
from typing import (
|
||||
Optional,
|
||||
Literal,
|
||||
Union,
|
||||
)
|
||||
|
||||
from ..data._source import Symbol
|
||||
|
@ -55,7 +54,8 @@ from ..data.types import Struct
|
|||
|
||||
|
||||
# TODO: ``msgspec`` stuff worth paying attention to:
|
||||
# - schema evolution: https://jcristharif.com/msgspec/usage.html#schema-evolution
|
||||
# - schema evolution:
|
||||
# https://jcristharif.com/msgspec/usage.html#schema-evolution
|
||||
# - for eg. ``BrokerdStatus``, instead just have separate messages?
|
||||
# - use literals for a common msg determined by diff keys?
|
||||
# - https://jcristharif.com/msgspec/usage.html#literal
|
||||
|
@ -92,7 +92,7 @@ class Order(Struct):
|
|||
|
||||
# internal ``emdsd`` unique "order id"
|
||||
oid: str # uuid4
|
||||
symbol: Union[str, Symbol]
|
||||
symbol: str | Symbol
|
||||
account: str # should we set a default as '' ?
|
||||
|
||||
price: float
|
||||
|
@ -110,7 +110,6 @@ class Cancel(Struct):
|
|||
action: str = 'cancel'
|
||||
oid: str # uuid4
|
||||
symbol: str
|
||||
req: Optional[Order] = None
|
||||
|
||||
|
||||
# --------------
|
||||
|
@ -123,31 +122,38 @@ class Status(Struct):
|
|||
|
||||
name: str = 'status'
|
||||
time_ns: int
|
||||
oid: str # uuid4 ems-order dialog id
|
||||
|
||||
resp: Literal[
|
||||
'pending', # acked but not yet open
|
||||
'pending', # acked by broker but not yet open
|
||||
'open',
|
||||
'dark_open', # live in dark loop
|
||||
'triggered', # dark-submitted to brokerd-backend
|
||||
'dark_open', # dark/algo triggered order is open in ems clearing loop
|
||||
'triggered', # above triggered order sent to brokerd, or an alert closed
|
||||
'closed', # fully cleared all size/units
|
||||
'fill', # partial execution
|
||||
'canceled',
|
||||
'error',
|
||||
]
|
||||
|
||||
oid: str # uuid4
|
||||
|
||||
# this maps normally to the ``BrokerdOrder.reqid`` below, an id
|
||||
# normally allocated internally by the backend broker routing system
|
||||
reqid: Optional[Union[int, str]] = None
|
||||
reqid: Optional[int | str] = None
|
||||
|
||||
# the (last) source order/request msg if provided
|
||||
# (eg. the Order/Cancel which causes this msg)
|
||||
req: Optional[Union[Order, Cancel]] = None
|
||||
# (eg. the Order/Cancel which causes this msg) and
|
||||
# acts as a back-reference to the corresponding
|
||||
# request message which was the source of this msg.
|
||||
req: Optional[Order | Cancel] = None
|
||||
|
||||
# XXX: better design/name here?
|
||||
# flag that can be set to indicate a message for an order
|
||||
# event that wasn't originated by piker's emsd (eg. some external
|
||||
# trading system which does it's own order control but that you
|
||||
# might want to "track" using piker UIs/systems).
|
||||
src: Optional[str] = None
|
||||
|
||||
# for relaying backend msg data "through" the ems layer
|
||||
# for relaying a boxed brokerd-dialog-side msg data "through" the
|
||||
# ems layer to clients.
|
||||
brokerd_msg: dict = {}
|
||||
|
||||
|
||||
|
@ -169,7 +175,7 @@ class BrokerdCancel(Struct):
|
|||
# for setting a unique order id then this value will be relayed back
|
||||
# on the emsd order request stream as the ``BrokerdOrderAck.reqid``
|
||||
# field
|
||||
reqid: Optional[Union[int, str]] = None
|
||||
reqid: Optional[int | str] = None
|
||||
|
||||
|
||||
class BrokerdOrder(Struct):
|
||||
|
@ -188,7 +194,7 @@ class BrokerdOrder(Struct):
|
|||
# for setting a unique order id then this value will be relayed back
|
||||
# on the emsd order request stream as the ``BrokerdOrderAck.reqid``
|
||||
# field
|
||||
reqid: Optional[Union[int, str]] = None
|
||||
reqid: Optional[int | str] = None
|
||||
|
||||
symbol: str # fqsn
|
||||
price: float
|
||||
|
@ -211,7 +217,7 @@ class BrokerdOrderAck(Struct):
|
|||
name: str = 'ack'
|
||||
|
||||
# defined and provided by backend
|
||||
reqid: Union[int, str]
|
||||
reqid: int | str
|
||||
|
||||
# emsd id originally sent in matching request msg
|
||||
oid: str
|
||||
|
@ -221,7 +227,7 @@ class BrokerdOrderAck(Struct):
|
|||
class BrokerdStatus(Struct):
|
||||
|
||||
name: str = 'status'
|
||||
reqid: Union[int, str]
|
||||
reqid: int | str
|
||||
time_ns: int
|
||||
status: Literal[
|
||||
'open',
|
||||
|
@ -235,14 +241,6 @@ class BrokerdStatus(Struct):
|
|||
reason: str = ''
|
||||
remaining: float = 0.0
|
||||
|
||||
# external: bool = False
|
||||
# order: Optional[BrokerdOrder] = None
|
||||
|
||||
# XXX: better design/name here?
|
||||
# flag that can be set to indicate a message for an order
|
||||
# event that wasn't originated by piker's emsd (eg. some external
|
||||
# trading system which does it's own order control but that you
|
||||
# might want to "track" using piker UIs/systems).
|
||||
# external: bool = False
|
||||
|
||||
# XXX: not required schema as of yet
|
||||
|
@ -258,7 +256,7 @@ class BrokerdFill(Struct):
|
|||
|
||||
'''
|
||||
name: str = 'fill'
|
||||
reqid: Union[int, str]
|
||||
reqid: int | str
|
||||
time_ns: int
|
||||
|
||||
# order exeuction related
|
||||
|
@ -288,7 +286,7 @@ class BrokerdError(Struct):
|
|||
|
||||
# if no brokerd order request was actually submitted (eg. we errored
|
||||
# at the ``pikerd`` layer) then there will be ``reqid`` allocated.
|
||||
reqid: Optional[Union[int, str]] = None
|
||||
reqid: Optional[int | str] = None
|
||||
|
||||
symbol: str
|
||||
reason: str
|
||||
|
|
Loading…
Reference in New Issue