-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbeerlist.py
More file actions
67 lines (53 loc) · 2.27 KB
/
beerlist.py
File metadata and controls
67 lines (53 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from __future__ import annotations
import json
from pathlib import Path
class Beerlist:
def __init__(self, filename: str = "beerdrinkers.json") -> None:
self.file = Path(filename)
self.beer_drinkers = dict()
self.__load_beer_drinkers()
def __load_beer_drinkers(self) -> None:
self.file.parent.mkdir(parents=True, exist_ok=True)
self.file.touch(exist_ok=True)
if self.file.stat().st_size > 0:
with self.file.open(mode="r") as f:
content = json.loads(f.read())
for element in content:
drinker = BeerDrinker(
element["username"],
element["user_id"],
element["beers_drank"],
element["beers_spilled"])
self.beer_drinkers[element["user_id"]] = drinker
def __save_beer_drinkers(self) -> None:
with self.file.open("w") as f:
f.write(json.dumps([drinker.__dict__ for drinker in self.beer_drinkers.values()]))
def add_action(self, action, user_id, username, count):
if action not in ["drink", "spill"]: return
if not user_id in self.beer_drinkers.keys():
self.beer_drinkers[user_id] = BeerDrinker(username, user_id)
beer_drinker = self.beer_drinkers[user_id]
beer_drinker.username = username
beer_drinker.action(action, count)
self.__save_beer_drinkers()
def __str__(self) -> str:
out = "<b>Beerlist:</b>\n"
for drinker in self.beer_drinkers.values():
out += f"- {str(drinker)}"
return out
class BeerDrinker:
def __init__(self, username: str, user_id: str, beers_drank: int = 0, beers_spilled: int = 0) -> BeerDrinker:
self.username = username
self.user_id = user_id
self.beers_drank = beers_drank
self.beers_spilled = beers_spilled
def action(self, action, count = 1) -> BeerDrinker:
if action == "drink":
self.beers_drank += count
elif action == "spill":
self.beers_spilled += count
else:
print(f"action not supported: <{action}>")
return self
def __str__(self) -> str:
return f"{self.username}: 🍻: {self.beers_drank}, 💦: {self.beers_spilled}\n"