Skip to content

Commit a538c41

Browse files
committed
Represent price as an int
1 parent 9ef608c commit a538c41

File tree

4 files changed

+29
-40
lines changed

4 files changed

+29
-40
lines changed

message_passing/update_with_start/lazy_initialization/activities.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import asyncio
22
from dataclasses import dataclass
3-
from decimal import Decimal
43
from typing import Optional
54

65
from temporalio import activity
@@ -13,9 +12,9 @@ class ShoppingCartItem:
1312

1413

1514
@activity.defn
16-
async def get_price(item: ShoppingCartItem) -> Optional[str]:
15+
async def get_price(item: ShoppingCartItem) -> Optional[int]:
1716
await asyncio.sleep(0.1)
18-
price = None if item.sku == "sku-456" else Decimal("5.99")
17+
price = None if item.sku == "sku-456" else 599
1918
if price is None:
2019
return None
21-
return str(price * item.quantity)
20+
return price * item.quantity

message_passing/update_with_start/lazy_initialization/starter.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import asyncio
2-
from decimal import Decimal
32
from typing import Optional, Tuple
43

54
from temporalio import common
@@ -18,7 +17,7 @@
1817

1918
async def handle_add_item_request(
2019
session_id: str, item_id: str, quantity: int, temporal_client: Client
21-
) -> Tuple[Optional[Decimal], WorkflowHandle]:
20+
) -> Tuple[Optional[int], WorkflowHandle]:
2221
"""
2322
Handle a client request to add an item to the shopping cart. The user is not logged in, but a session ID is
2423
available from a cookie, and we use this as the cart ID. The Temporal client was created at service-start
@@ -37,12 +36,10 @@ async def handle_add_item_request(
3736
task_queue="uws",
3837
)
3938
try:
40-
price = Decimal(
41-
await temporal_client.execute_update_with_start_workflow(
42-
ShoppingCartWorkflow.add_item,
43-
ShoppingCartItem(sku=item_id, quantity=quantity),
44-
start_workflow_operation=start_op,
45-
)
39+
price = await temporal_client.execute_update_with_start_workflow(
40+
ShoppingCartWorkflow.add_item,
41+
ShoppingCartItem(sku=item_id, quantity=quantity),
42+
start_workflow_operation=start_op,
4643
)
4744
except WorkflowUpdateFailedError:
4845
price = None

message_passing/update_with_start/lazy_initialization/workflows.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from dataclasses import dataclass
2-
from decimal import Decimal
32
from typing import List, Tuple
43

54
from temporalio import workflow
@@ -14,14 +13,14 @@
1413
@dataclass
1514
class FinalizedOrder:
1615
id: str
17-
items: List[Tuple[ShoppingCartItem, str]]
18-
total: str
16+
items: List[Tuple[ShoppingCartItem, int]]
17+
total: int
1918

2019

2120
@workflow.defn
2221
class ShoppingCartWorkflow:
2322
def __init__(self):
24-
self.items: List[Tuple[ShoppingCartItem, Decimal]] = []
23+
self.items: List[Tuple[ShoppingCartItem, int]] = []
2524
self.order_submitted = False
2625

2726
@workflow.run
@@ -31,20 +30,20 @@ async def run(self) -> FinalizedOrder:
3130
)
3231
return FinalizedOrder(
3332
id=workflow.info().workflow_id,
34-
items=[(item, str(price)) for item, price in self.items],
35-
total=str(sum(price for _, price in self.items) or Decimal("0.00")),
33+
items=self.items,
34+
total=sum(price for _, price in self.items),
3635
)
3736

3837
@workflow.update
39-
async def add_item(self, item: ShoppingCartItem) -> str:
38+
async def add_item(self, item: ShoppingCartItem) -> int:
4039
price = await get_price(item)
4140
if price is None:
4241
raise ApplicationError(
4342
f"Item unavailable: {item}",
4443
)
45-
self.items.append((item, Decimal(price)))
44+
self.items.append((item, price))
4645

47-
return str(sum(price for _, price in self.items) or Decimal("0.00"))
46+
return sum(price for _, price in self.items)
4847

4948
@add_item.validator
5049
def validate_add_item(self, item: ShoppingCartItem) -> None:

tests/message_passing/lazy_initialization/test_lazy_initialization.py

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from decimal import Decimal
2-
31
import pytest
42
from temporalio import common
53
from temporalio.client import (
@@ -35,35 +33,31 @@ async def test_shopping_cart_workflow(client: Client, env: WorkflowEnvironment):
3533
task_queue="lazy-initialization-test",
3634
)
3735
start_op_1 = make_start_op()
38-
price = Decimal(
39-
await client.execute_update_with_start_workflow(
40-
ShoppingCartWorkflow.add_item,
41-
ShoppingCartItem(sku="item-1", quantity=2),
42-
start_workflow_operation=start_op_1,
43-
)
36+
price = await client.execute_update_with_start_workflow(
37+
ShoppingCartWorkflow.add_item,
38+
ShoppingCartItem(sku="item-1", quantity=2),
39+
start_workflow_operation=start_op_1,
4440
)
4541

46-
assert price == Decimal("11.98")
42+
assert price == 1198
4743

4844
workflow_handle = await start_op_1.workflow_handle()
4945

5046
start_op_2 = make_start_op()
51-
price = Decimal(
52-
await client.execute_update_with_start_workflow(
53-
ShoppingCartWorkflow.add_item,
54-
ShoppingCartItem(sku="item-2", quantity=1),
55-
start_workflow_operation=start_op_2,
56-
)
47+
price = await client.execute_update_with_start_workflow(
48+
ShoppingCartWorkflow.add_item,
49+
ShoppingCartItem(sku="item-2", quantity=1),
50+
start_workflow_operation=start_op_2,
5751
)
58-
assert price == Decimal("17.97")
52+
assert price == 1797
5953

6054
workflow_handle = await start_op_2.workflow_handle()
6155

6256
await workflow_handle.signal(ShoppingCartWorkflow.checkout)
6357

6458
finalized_order = await workflow_handle.result()
6559
assert finalized_order.items == [
66-
(ShoppingCartItem(sku="item-1", quantity=2), "11.98"),
67-
(ShoppingCartItem(sku="item-2", quantity=1), "5.99"),
60+
(ShoppingCartItem(sku="item-1", quantity=2), 1198),
61+
(ShoppingCartItem(sku="item-2", quantity=1), 599),
6862
]
69-
assert finalized_order.total == "17.97"
63+
assert finalized_order.total == 1797

0 commit comments

Comments
 (0)