Source code for findmyorder.handler.standard

"""
Standard Parser

"""

from loguru import logger
from pyparsing import (
    Combine,
    Optional,
    Suppress,
    Word,
    alphas,
    nums,
    one_of,
    pyparsing_common,
)

from ._client import ParserClient


[docs] class StandardHandler(ParserClient): def __init__(self, **kwargs): """ Initialize the Handler object """ super().__init__(**kwargs) self.client = "standard"
[docs] async def identify_order( self, my_string: str, ) -> dict: """ Identify an order and return a dictionary with the order parameters Args: my_string (str): Message Returns: dict """ if not await self.search(my_string): logger.debug("No order identified") return None else: action = ( one_of(self.action_identifier, caseless=True) .set_results_name("action") .set_parse_action(pyparsing_common.upcase_tokens) ) instrument = Word(alphas + nums).set_results_name("instrument") stop_loss = Combine( Suppress(self.stop_loss_identifier) + Word(nums) ).set_results_name("stop_loss") take_profit = Combine( Suppress(self.take_profit_identifier) + Word(nums) ).set_results_name("take_profit") quantity = Combine( Suppress(self.quantity_identifier) + Word(nums) + Optional(Suppress("%")) ).set_results_name("quantity") order_type = one_of( self.order_type_identifier, caseless=True ).set_results_name("order_type") leverage_type = one_of( self.leverage_type_identifier, caseless=True ).set_results_name("leverage_type") comment = Combine( Suppress(self.comment_identifier) + Word(alphas) ).set_results_name("comment") order_grammar = ( action("action") + Optional(instrument, default=None) + Optional(stop_loss, default=self.stop_loss) + Optional(take_profit, default=self.take_profit) + Optional(quantity, default=self.quantity) + Optional(order_type, default=None) + Optional(leverage_type, default=None) + Optional(comment, default=None) ) order = order_grammar.parse_string(instring=my_string, parse_all=False) logger.debug("Order parsed {}", order) return order.asDict()