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