Skip to content

Commit

Permalink
♻️
Browse files Browse the repository at this point in the history
  • Loading branch information
mraniki committed Jul 5, 2024
1 parent 0b268b2 commit c3d5eae
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 45 deletions.
90 changes: 47 additions & 43 deletions findmyorder/handler/standard.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,49 +44,53 @@ async def identify_order(
dict
"""
try:
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")
if not await self.search(my_string):
logger.debug("No order identified")
return None
else:
try:
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_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()
order = order_grammar.parse_string(instring=my_string, parse_all=False)
logger.debug("Order parsed {}", order)
return order.asDict()

except Exception as error:
logger.error(error)
return error
except Exception as error:
logger.error(error)
return error
5 changes: 3 additions & 2 deletions tests/test_unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,13 +191,14 @@ async def test_identify_order(fmo, short_order):
async def test_identify_order_invalid_input(fmo, invalid_order):
"""Identify Testing"""
result = await fmo.identify_order(invalid_order)
assert str(result).startswith("Expected")
print(result)
assert result == [None]


@pytest.mark.asyncio
async def test_valid_get_order(fmo, order, result_order):
"""get order Testing"""
result = await fmo.get_order(order)
print(result)
assert result["action"] == result_order["action"]
assert result["instrument"] == result_order["instrument"]
assert int(result["stop_loss"]) == result_order["stop_loss"]
Expand Down

0 comments on commit c3d5eae

Please sign in to comment.