self.get_some_smile()
)
- def load_drunk_sum(self, *args, **kwargs):
+ def load_drunk_sum(self, flavor, dtf, dtt):
"""Get list of drunken ``flavor`` from ``dtf`` to ``dtt``, update msg.
Keyword arguments:
dtf -- Date and time *from*.
dtt -- Date and time *to*.
"""
- self.top = self.db.get_drunk_sum(*args, **kwargs)
- if args:
- flavor = args[0]
- dtf = args[1]
- dtt = args[2]
- elif kwargs:
- flavor = kwargs["flavor"]
- dtf = kwargs["dtf"]
- dtt = kwargs["dtt"]
+ self.top = self.db.get_drunk_sum(flavor, dtf, dtt)
self.msg = "{} drunk from {} to {}:\n".format(flavor, dtf, dtt)
for (un, cnt) in self.top:
self.msg += "{}: {}\n".format(un, cnt)
self.msg += "---"
return
- def load_drunk_list(self, *args, **kwargs):
+ def load_drunk_list(self, flavor, dtf, dtt):
"""Get list of drunken ``flavor`` from ``dtf`` to ``dtt``, update msg.
Keyword arguments:
dtf -- Date and time *from*.
dtt -- Date and time *to*.
"""
- self.top = self.db.get_drunk_sum(*args, **kwargs)
- d = self.db.get_drunk_list(*args, **kwargs)
- if args:
- flavor = args[0]
- dtf = args[1]
- dtt = args[2]
- elif kwargs:
- flavor = kwargs["flavor"]
- dtf = kwargs["dtf"]
- dtt = kwargs["dtt"]
+ self.top = self.db.get_drunk_sum(flavor, dtf, dtt)
+ d = self.db.get_drunk_list(flavor, dtf, dtt)
self.msg = "{} drunk from {} to {}:\n".format(flavor, dtf, dtt)
for (un, l) in d.items():
self.msg += "{}: ".format(un)
SELECT count(*), flavor
FROM coffees
- WHERE time BETWEEN
+ WHERE (coffees.time BETWEEN
{dtf}
- AND {dtt}
+ AND {dtt})
GROUP BY flavor
"""
elif q == "get_drinkers_of":
if isinstance(b, tuple) or isinstance(b, list):
assert len(b) > 0
- f = f"WHERE flavor = '{b[0]}'"
+ f = f"WHERE (flavor = '{b[0]}'"
for i in b[1:]:
f += f" OR flavor = '{i}'"
+ f += ")"
else:
assert b != ""
f = f"WHERE flavor = '{b}'"
return f"""
SELECT count(*), users.name FROM coffees
- LEFT JOIN identifiers on coffees.id = identifiers.userid
- LEFT JOIN users on identifiers.userid = users.id
+ INNER JOIN identifiers on coffees.id = identifiers.id
+ INNER JOIN users on identifiers.userid = users.id
{f}
- AND coffees.time BETWEEN
+ AND (coffees.time BETWEEN
{dtf}
- AND {dtt}
- GROUP BY identifiers.userid
+ AND {dtt})
+ GROUP BY users.id
"""
top.sort(key=lambda x: (x[1], x[0]), reverse=True)
return tuple(top)
- def get_drunk_sum(self, *args, **kwargs):
+ def get_drunk_sum(self, flavor, dtf, dtt):
"""Return list of drunken ``flavor`` from ``dtf`` to ``dtt``.
Keyword arguments:
dtf -- Date and time *from*.
dtt -- Date and time *to*.
"""
- assert ((len(args) == 3 and len(kwargs) == 0)
- or (len(args) == 0 and len(kwargs) == 3))
- if args:
- flavor = args[0]
- dtf = args[1]
- dtt = args[2]
- elif kwargs:
- flavor = kwargs["flavor"]
- dtf = kwargs["dtf"]
- dtt = kwargs["dtt"]
que = Q("get_drinkers_of", flavor.split(";"), (dtf, dtt))
drunk = []
for (cnt, un) in self.cur.execute(que):
drunk.append((un, cnt))
return tuple(drunk)
- def get_drunk_list(self, *args, **kwargs):
+ def get_drunk_list(self, flavor, dtf, dtt):
"""Return dict of lists of drunken ``flavor`` from ``dtf`` to ``dtt``.
Keyword arguments:
dtf -- Date and time *from*.
dtt -- Date and time *to*.
"""
- assert ((len(args) == 3 and len(kwargs) == 0)
- or (len(args) == 0 and len(kwargs) == 3))
- if args:
- flavor = args[0]
- dtf = args[1]
- dtt = args[2]
- elif kwargs:
- flavor = kwargs["flavor"]
- dtf = kwargs["dtf"]
- dtt = kwargs["dtt"]
flavors = flavor.split(";")
drunk = {}
i = 0
#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""Print drunk drink in time period."""
from sys import argv, exit
-from cbgetter import CoffeebotGetter
+from coffee_getter.bot import Bot
SS = {
"covfefe": "espresso;espresso lungo;cappuccino;latte macchiato",
print("- covfefe (equal to coffee)")
print("- mate (for all Club-mates)")
exit(1)
- g = CoffeebotGetter()
+ b = Bot()
if ";" in argv[1]:
- g.loadDrunkList(argv[1], argv[2], argv[3])
+ b.load_drunk_list(argv[1], argv[2], argv[3])
elif argv[1] in SS:
- g.loadDrunkSum(SS[argv[1]], argv[2], argv[3])
+ b.load_drunk_sum(SS[argv[1]], argv[2], argv[3])
else:
- g.loadDrunkSum(argv[1], argv[2], argv[3])
- print(g.getMsg())
+ b.load_drunk_sum(argv[1], argv[2], argv[3])
+ print(b.get_msg())
#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
"""Get top 5 mate drinkers and post it to Slack."""
-from cbgetter import CoffeebotGetter
+from coffee_getter.bot import Bot
if __name__ == "__main__":
- g = CoffeebotGetter()
- g.loadTopMateDrinkers()
- if len(g.top) >= 3:
- g.sendMsgToSlack()
- g.load_top_tea_drinkers()
- if len(g.top) >= 3:
- g.sendMsgToSlack()
+ b = Bot()
+ b.load_top_mate_drinkers()
+ if len(b.top) >= 3:
+ b.send_msg_to("slack")
+ b.load_top_tea_drinkers()
+ if len(b.top) >= 3:
+ b.send_msg_to("slack")
assert len(self.b.topeq) == 2
def test_nof_args(self):
- self.assertRaises(AssertionError, self.b.load_drunk_sum)
- self.assertRaises(AssertionError, self.b.load_drunk_sum, ["espresso"])
+ self.assertRaises(TypeError, self.b.load_drunk_sum)
+ self.assertRaises(TypeError, self.b.load_drunk_sum, ["espresso"])
self.assertRaises(
- AssertionError,
+ TypeError,
self.b.load_drunk_sum,
["espresso", "2010-10-20"])
self.assertRaises(
- AssertionError,
+ TypeError,
self.b.load_drunk_sum,
["espresso", "lungo", "2010-10-20", "2020-10-20"])
- self.assertRaises(AssertionError, self.b.load_drunk_list)
- self.assertRaises(AssertionError, self.b.load_drunk_list, ["espresso"])
+ self.assertRaises(TypeError, self.b.load_drunk_list)
+ self.assertRaises(TypeError, self.b.load_drunk_list, ["espresso"])
self.assertRaises(
- AssertionError,
+ TypeError,
self.b.load_drunk_list,
["espresso", "2010-10-20"])
self.assertRaises(
- AssertionError,
+ TypeError,
self.b.load_drunk_list,
["espresso", "lungo", "2010-10-20", "2020-10-20"])
SELECT count(*), flavor
FROM coffees
- WHERE time BETWEEN
+ WHERE (coffees.time BETWEEN
datetime('now', 'localtime', '-7 days')
- AND datetime('now', 'localtime')
+ AND datetime('now', 'localtime'))
GROUP BY flavor
"""
assert Q("get_drinkers_of", "FOO") == """
SELECT count(*), users.name FROM coffees
- LEFT JOIN identifiers on coffees.id = identifiers.userid
- LEFT JOIN users on identifiers.userid = users.id
+ INNER JOIN identifiers on coffees.id = identifiers.id
+ INNER JOIN users on identifiers.userid = users.id
WHERE flavor = 'FOO'
- AND coffees.time BETWEEN
+ AND (coffees.time BETWEEN
datetime('now', 'localtime', '-7 days')
- AND datetime('now', 'localtime')
- GROUP BY identifiers.userid
+ AND datetime('now', 'localtime'))
+ GROUP BY users.id
"""
assert Q("get_drinkers_of", "BAR", ["FROM", "TO"]) == """
SELECT count(*), users.name FROM coffees
- LEFT JOIN identifiers on coffees.id = identifiers.userid
- LEFT JOIN users on identifiers.userid = users.id
+ INNER JOIN identifiers on coffees.id = identifiers.id
+ INNER JOIN users on identifiers.userid = users.id
WHERE flavor = 'BAR'
- AND coffees.time BETWEEN
+ AND (coffees.time BETWEEN
datetime('FROM', 'localtime')
- AND datetime('TO', 'localtime')
- GROUP BY identifiers.userid
+ AND datetime('TO', 'localtime'))
+ GROUP BY users.id
"""
assert Q("get_drinkers_of", ["FOO", "BAR", "B"], ["FROM", "TO"]) == """
SELECT count(*), users.name FROM coffees
- LEFT JOIN identifiers on coffees.id = identifiers.userid
- LEFT JOIN users on identifiers.userid = users.id
- WHERE flavor = 'FOO' OR flavor = 'BAR' OR flavor = 'B'
- AND coffees.time BETWEEN
+ INNER JOIN identifiers on coffees.id = identifiers.id
+ INNER JOIN users on identifiers.userid = users.id
+ WHERE (flavor = 'FOO' OR flavor = 'BAR' OR flavor = 'B')
+ AND (coffees.time BETWEEN
datetime('FROM', 'localtime')
- AND datetime('TO', 'localtime')
- GROUP BY identifiers.userid
+ AND datetime('TO', 'localtime'))
+ GROUP BY users.id
"""
""")
cur.executescript("""
INSERT OR IGNORE INTO users VALUES('1111','tester');
-insert into identifiers (userid, id, name) values ('1111', '10', 'chip 10');
+insert into identifiers (userid, id, name) values ('1111', '1111', 'chip 10');
INSERT OR IGNORE INTO users VALUES('2222','newer');
-insert into identifiers (userid, id, name) values ('2222', '20', 'chip 20');
+insert into identifiers (userid, id, name) values ('2222', '2222', 'chip 20');
INSERT OR IGNORE INTO users VALUES('3333','clone');
-insert into identifiers (userid, id, name) values ('3333', '30', 'chip 30');
+insert into identifiers (userid, id, name) values ('3333', '3333', 'chip 30');
INSERT or ignore INTO coffees (id, flavor, time) VALUES
('1111', 'espresso lungo', datetime('now', 'localtime', '-99 seconds')),
('1111', 'Club-Mate 0,5 l', datetime('now', 'localtime', '-99 seconds')),
assert s == {"tester": [4, 4], "newer": [0, 2], "clone": [1, 2]}
def test_assert_error_raised_for_bad_number_of_arguments(self):
- self.assertRaises(AssertionError, self.db.get_drunk_sum)
- self.assertRaises(AssertionError, self.db.get_drunk_sum, "")
- self.assertRaises(AssertionError, self.db.get_drunk_sum, [])
- self.assertRaises(AssertionError, self.db.get_drunk_sum, "espresso")
+ self.assertRaises(TypeError, self.db.get_drunk_sum)
+ self.assertRaises(TypeError, self.db.get_drunk_sum, "")
+ self.assertRaises(TypeError, self.db.get_drunk_sum, [])
+ self.assertRaises(TypeError, self.db.get_drunk_sum, "espresso")
self.assertRaises(
- AssertionError,
+ TypeError,
self.db.get_drunk_sum,
"espresso",
"2010-10-20")
self.assertRaises(
- AssertionError,
+ TypeError,
self.db.get_drunk_sum,
"espresso",
"lungo",