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 getHeroComment(self):
29 """Return comment for hero."""
33 " because couldn't resist",
37 " - superultramaxidrinker",
38 " and didn't sleep last week",
39 " in last 604800 seconds",
41 " and still drinking",
43 ri = randint(0, len(hsuff) - 1)
46 def getSomeSmile(self):
47 """Return some Slack smile."""
57 ri = randint(0, len(smiles) - 1)
60 def computeEqualDrinkers(self):
61 """Compute equally drunken drinkers."""
62 if len(self.top) <= 0:
64 lc = self.top[0][1] + 1
65 for (un, c) in self.top:
69 self.topeq[-1].append((un, c))
72 def loadTopMateDrinkers(self):
73 """Get list of top Mate drinkers, update message."""
74 self.msg = "*Top 5 Club-Mate drinkers*\n"
75 self.top = self.db.getTopMateDrinkers()
76 self.computeEqualDrinkers()
77 totl = [c for (un, c) in self.top]
80 for drinkers in self.topeq[:5]:
82 d = [un for (un, c) in drinkers]
83 self.msg += "{}{}".format(i, self.isuff[i])
90 self.msg += "*{}*".format(un)
92 self.msg += "" if len(d) == 2 else ","
93 self.msg += " and *{}*".format(un)
95 self.msg += ", *{}*".format(un)
97 self.msg += " of whom each drank "
99 self.msg += " who drank "
100 self.msg += "`{:.2f}` liters".format(c)
102 self.msg += self.getHeroComment()
106 self.msg += "Oh, and together we drank *{:.2f}* liters {}".format(
112 def load_top_tea_drinkers(self):
113 """Get list of top tea drinkers, update message."""
114 self.msg = "*Top 5 tea drinkers*\n"
115 self.top = self.db.get_top_tea_drinkers()
116 self.computeEqualDrinkers()
117 tot = sum([c for (un, c) in self.top])
119 for drinkers in self.topeq[:5]:
121 d = [un for (un, c) in drinkers]
122 self.msg += "{}{}".format(i, self.isuff[i])
129 self.msg += "*{}*".format(un)
131 self.msg += "" if len(d) == 2 else ","
132 self.msg += " and *{}*".format(un)
134 self.msg += ", *{}*".format(un)
136 self.msg += " of whom each drank "
138 self.msg += " who drank "
140 self.msg += "`{:.2f}` teas".format(c)
142 self.msg += "`{:.2f}` tea".format(c)
146 self.msg += "Oh, and together we drank *{:.2f}* teas {}".format(
151 def loadDrunkSum(self, *args, **kwargs):
152 """Get list of drunken ``flavor`` from ``dtf`` to ``dtt``, update msg.
155 flavor -- The flavor of beverage.
156 dtf -- Date and time *from*.
157 dtt -- Date and time *to*.
159 self.top = self.db.getDrunkSum(*args, **kwargs)
165 flavor = kwargs["flavor"]
168 self.msg = "{} drunk from {} to {}:\n".format(flavor, dtf, dtt)
169 for (un, cnt) in self.top:
170 self.msg += "{}: {}\n".format(un, cnt)
174 def loadDrunkList(self, *args, **kwargs):
175 """Get list of drunken ``flavor`` from ``dtf`` to ``dtt``, update msg.
178 flavor -- The flavor of beverage.
179 dtf -- Date and time *from*.
180 dtt -- Date and time *to*.
182 self.top = self.db.getDrunkSum(*args, **kwargs)
183 d = self.db.getDrunkList(*args, **kwargs)
189 flavor = kwargs["flavor"]
192 self.msg = "{} drunk from {} to {}:\n".format(flavor, dtf, dtt)
193 for (un, l) in d.items():
194 self.msg += "{}: ".format(un)
196 self.msg += "{}, ".format(cnt)
197 self.msg += "{}\n".format(l[-1])