Advanced¶
advanced.py¶
1from zcached import ZCached, Result
2from typing import TypedDict, List
3
4
5class Item(TypedDict):
6 name: str
7 description: str
8 price: float
9 quantity: int
10
11
12class ShopManager(ZCached):
13
14 def set_items(self, items: List[Item]) -> str:
15 if not self.is_alive():
16 raise RuntimeError("Connection closed.")
17
18 result: Result[str] = self.set(key="items", value=items)
19 if not result:
20 raise RuntimeError(result.error)
21
22 return result.value
23
24 def get_items(self) -> List[Item]:
25 if not self.is_alive():
26 raise RuntimeError("Connection closed.")
27
28 result: Result[List[Item]] = self.get(key="items")
29 if not result:
30 raise RuntimeError(result.error)
31
32 return result.value
33
34 def get_total_quantity(self) -> int:
35 return sum([item["quantity"] for item in self.get_items()])
36
37 def get_total_cost(self) -> float:
38 return sum([item["price"] for item in self.get_items()])
39
40
41if __name__ == "__main__":
42 manager = ShopManager(host="127.0.0.1", port=7556)
43 manager.run()
44 manager.set_items(
45 [
46 Item(name="foo", description="test", price=50.99, quantity=1),
47 Item(name="bar", description="test123", price=89.99, quantity=5),
48 ]
49 )
50 print(manager.get_items())
51 print(manager.get_total_quantity())
52 print(manager.get_total_cost())
53 manager.flush()