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()