]> rtime.felk.cvut.cz Git - hubacji1/coffee-getter.git/blob - cbgetter.py
Update usage of `drunk_sum` runnable
[hubacji1/coffee-getter.git] / cbgetter.py
1 # -*- coding: utf-8 -*-
2 """Get data from database and publish them."""
3 from json import dumps
4 from random import randint
5 from requests import post
6 from cbconf import Conf
7 from cbdb import Db
8
9 class CoffeebotGetter:
10     """This class connects configuration, database access and publishing."""
11     def __init__(self):
12         self.cfg = Conf()
13         self.db = Db(self.cfg.getCoffeeDbPath())
14         self.msg = ""
15         self.top = []
16         self.topeq = []
17         return None
18
19     def getMsg(self):
20         """Return message."""
21         return self.msg
22
23     def sendMsgToSlack(self):
24         """Send message to Slack Bot."""
25         return post(self.cfg.getCoffeebotURL(), dumps({"text": self.msg}))
26
27     def getHeroComment(self):
28         """Return comment for hero."""
29         hsuff = [
30             ", oops",
31             " - real hero",
32             " because couldn't resist",
33             " - drunken master",
34             ", woohoo",
35             " - unbeatable",
36             " - superultramaxidrinker",
37             " and didn't sleep last week",
38             " in last 604800 seconds",
39             ", no idea how",
40             " and still drinking",
41         ]
42         ri = randint(0, len(hsuff) - 1)
43         return hsuff[ri]
44
45     def getSomeSmile(self):
46         """Return some Slack smile."""
47         smiles = [
48             ":party_parrot:",
49             ":cat2:",
50             ":heavy_check_mark:",
51             ":baby_bottle:",
52             ":+1:",
53             ":aaw_yeah:",
54             ":better:",
55         ]
56         ri = randint(0, len(smiles) - 1)
57         return smiles[ri]
58
59     def computeEqualDrinkers(self):
60         """Compute equally drunken drinkers."""
61         lc = self.top[0][1] + 1
62         for (un, c) in self.top:
63             if c < lc:
64                 self.topeq.append([])
65                 lc = c
66             self.topeq[-1].append((un, c))
67         return
68
69     def loadTopMateDrinkers(self):
70         """Get list of top Mate drinkers, update message."""
71         self.msg = "*Top 5 Club-Mate drinkers*\n"
72         self.top = self.db.getTopMateDrinkers()
73         self.computeEqualDrinkers()
74         totl = [c for (un, c) in self.top]
75         tot = sum(totl)
76         isuff = {1: "st", 2: "nd", 3: "rd", 4: "th", 5: "th"}
77         i = 1
78         for drinkers in self.topeq[:5]:
79             c = drinkers[0][1]
80             d = [un for (un, c) in drinkers]
81             self.msg += "{}{}".format(i, isuff[i])
82             if len(d) > 1:
83                 self.msg += " are "
84             else:
85                 self.msg += " is "
86             for un in d:
87                 if un is d[0]:
88                     self.msg += "*{}*".format(un)
89                 elif un is d[-1]:
90                     self.msg += "" if len(d) == 2 else ","
91                     self.msg += " and *{}*".format(un)
92                 else:
93                     self.msg += ", *{}*".format(un)
94             if len(d) > 1:
95                 self.msg += " of whom each drank "
96             else:
97                 self.msg += " who drank "
98             self.msg += "`{:.2f}` liters".format(c)
99             if i == 1:
100                 self.msg += self.getHeroComment()
101             self.msg += "\n"
102             i += 1
103         self.msg += "\n"
104         self.msg += "Oh, and together we drank *{:.2f}* liters {}".format(
105             tot,
106             self.getSomeSmile()
107         )
108         return
109
110     def loadDrunkSum(self, *args, **kwargs):
111         """Get list of drunken ``flavor`` from ``dtf`` to ``dtt``, update msg.
112
113         Keyword arguments:
114         flavor -- The flavor of beverage.
115         dtf -- Date and time *from*.
116         dtt -- Date and time *to*.
117         """
118         self.top = self.db.getDrunkSum(*args, **kwargs)
119         if args:
120             flavor = args[0]
121             dtf = args[1]
122             dtt = args[2]
123         elif kwargs:
124             flavor = kwargs["flavor"]
125             dtf = kwargs["dtf"]
126             dtt = kwargs["dtt"]
127         self.msg = "{} drunk from {} to {}:\n".format(flavor, dtf, dtt)
128         for (un, cnt) in self.top:
129             self.msg += "{}: {}\n".format(un, cnt)
130         self.msg += "---"
131         return