1 # -*- coding: utf-8 -*-
2 """Get data from database and publish them."""
4 from random import randint
5 from requests import post
6 from cbconf import Conf
10 """This class connects configuration, database access and publishing."""
13 self.db = Db(self.cfg.getCoffeeDbPath())
17 self.isuff = {1: "st", 2: "nd", 3: "rd", 4: "th", 5: "th"}
24 def sendMsgToSlack(self):
25 """Send message to Slack Bot."""
26 return post(self.cfg.getCoffeebotURL(), dumps({"text": self.msg}))
28 def get_drink_smile(self, drink):
29 """Return Slack smile for ``drink``.
32 drink -- Drink of smile.
36 "espresso": ":coffee:",
37 "espresso lungo": ":coffin:",
38 "cappuccino": ":flara:",
39 "latte macchiato": ":baby_bottle:",
40 "Club-Mate 0,5 l": ":club-mate:",
41 "Club-Mate 0,33 l": ":club-mate_cola:",
45 def getHeroComment(self):
46 """Return comment for hero."""
50 " because couldn't resist",
54 " - superultramaxidrinker",
55 " and didn't sleep last week",
56 " in last 604800 seconds",
58 " and still drinking",
60 ri = randint(0, len(hsuff) - 1)
63 def getSomeSmile(self):
64 """Return some Slack smile."""
74 ri = randint(0, len(smiles) - 1)
77 def computeEqualDrinkers(self):
78 """Compute equally drunken drinkers."""
79 if len(self.top) <= 0:
81 lc = self.top[0][1] + 1
82 for (un, c) in self.top:
86 self.topeq[-1].append((un, c))
89 def load_top_drinks(self):
90 """Get list of top drinks, update message."""
91 self.msg = "*Top drinks*\n"
92 self.top = self.db.get_top_drinks()
93 self.computeEqualDrinkers()
95 for drinks in self.topeq[:3]:
97 d = [un for (un, c) in drinks]
98 self.msg += "{}{}".format(i, self.isuff[i])
105 self.msg += "{}".format(self.get_drink_smile(un))
107 self.msg += "" if len(d) == 2 else ","
108 self.msg += " and {}".format(self.get_drink_smile(un))
110 self.msg += ", *{}*".format(self.get_drink_smile(un))
112 self.msg += " with each of "
115 self.msg += "`{}` drunk".format(c)
119 def loadTopMateDrinkers(self):
120 """Get list of top Mate drinkers, update message."""
121 self.msg = "*Top 5 Club-Mate drinkers*\n"
122 self.top = self.db.getTopMateDrinkers()
123 self.computeEqualDrinkers()
124 totl = [c for (un, c) in self.top]
127 for drinkers in self.topeq[:5]:
129 d = [un for (un, c) in drinkers]
130 self.msg += "{}{}".format(i, self.isuff[i])
137 self.msg += "*{}*".format(un)
139 self.msg += "" if len(d) == 2 else ","
140 self.msg += " and *{}*".format(un)
142 self.msg += ", *{}*".format(un)
144 self.msg += " of whom each drank "
146 self.msg += " who drank "
147 self.msg += "`{:.2f}` liters".format(c)
149 self.msg += self.getHeroComment()
153 self.msg += "Oh, and together we drank *{:.2f}* liters {}".format(
159 def load_top_tea_drinkers(self):
160 """Get list of top tea drinkers, update message."""
161 self.msg = "*Top 5 tea drinkers*\n"
162 self.top = self.db.get_top_tea_drinkers()
163 self.computeEqualDrinkers()
164 tot = sum([c for (un, c) in self.top])
166 for drinkers in self.topeq[:5]:
168 d = [un for (un, c) in drinkers]
169 self.msg += "{}{}".format(i, self.isuff[i])
176 self.msg += "*{}*".format(un)
178 self.msg += "" if len(d) == 2 else ","
179 self.msg += " and *{}*".format(un)
181 self.msg += ", *{}*".format(un)
183 self.msg += " of whom each drank "
185 self.msg += " who drank "
187 self.msg += "`{}` teas".format(c)
189 self.msg += "`{}` tea".format(c)
193 self.msg += "Oh, and together we drank *{}* teas {}".format(
198 def loadDrunkSum(self, *args, **kwargs):
199 """Get list of drunken ``flavor`` from ``dtf`` to ``dtt``, update msg.
202 flavor -- The flavor of beverage.
203 dtf -- Date and time *from*.
204 dtt -- Date and time *to*.
206 self.top = self.db.getDrunkSum(*args, **kwargs)
212 flavor = kwargs["flavor"]
215 self.msg = "{} drunk from {} to {}:\n".format(flavor, dtf, dtt)
216 for (un, cnt) in self.top:
217 self.msg += "{}: {}\n".format(un, cnt)
221 def loadDrunkList(self, *args, **kwargs):
222 """Get list of drunken ``flavor`` from ``dtf`` to ``dtt``, update msg.
225 flavor -- The flavor of beverage.
226 dtf -- Date and time *from*.
227 dtt -- Date and time *to*.
229 self.top = self.db.getDrunkSum(*args, **kwargs)
230 d = self.db.getDrunkList(*args, **kwargs)
236 flavor = kwargs["flavor"]
239 self.msg = "{} drunk from {} to {}:\n".format(flavor, dtf, dtt)
240 for (un, l) in d.items():
241 self.msg += "{}: ".format(un)
243 self.msg += "{}, ".format(cnt)
244 self.msg += "{}\n".format(l[-1])