]> rtime.felk.cvut.cz Git - hubacji1/coffee-getter.git/commitdiff
Merge branch 'rework-runs' master v0.5.0
authorJiri Vlasak <jiri.vlasak.2@cvut.cz>
Mon, 7 Nov 2022 15:19:23 +0000 (16:19 +0100)
committerJiri Vlasak <jiri.vlasak.2@cvut.cz>
Mon, 7 Nov 2022 15:19:23 +0000 (16:19 +0100)
coffee_getter/bot.py
coffee_getter/db.py
run/drunk_sum.py
run/top5_mate_stats.py
ut/test_bot.py
ut/test_db.py

index 346aeae5726b61c3ba3a3ab62cc921bd2fad3373..4aed9b0057820cdd7fe0cb8e007bf4e1557135f7 100644 (file)
@@ -199,7 +199,7 @@ class Bot:
             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:
@@ -207,22 +207,14 @@ class Bot:
         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:
@@ -230,16 +222,8 @@ class Bot:
         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)
index 8959d78e6cdbb904693886e36c44e0db043124f6..5c4eb91b88d713e1c9b0ff05fe194241dbbd5afb 100644 (file)
@@ -24,31 +24,32 @@ def Q(q, b="", t=["now", "-7 days"]):
 
         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
 
         """
 
@@ -97,7 +98,7 @@ class Db:
         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:
@@ -105,23 +106,13 @@ class Db:
         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:
@@ -129,16 +120,6 @@ class Db:
         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
index eeec196ecd112adfe8a12dde886908cc29805eea..4abc0ea4a159eb17e752b793714982242977232c 100755 (executable)
@@ -1,8 +1,6 @@
 #!/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",
@@ -32,11 +30,11 @@ if __name__ == "__main__":
         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())
index 71e2de94d796124b41122c62ee0a599a5fee7f86..1bdaf7d6503a776b32e6c01065b8f0a05c408849 100755 (executable)
@@ -1,13 +1,12 @@
 #!/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")
index e86613a024dde71b4717d2238ddb75b2bd1b09ae..7193c02c330dc932457791c93ef13594b5ca2956 100644 (file)
@@ -74,23 +74,23 @@ class CoffeeGetterBotTests(TestCase):
         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"])
index 40d3e5619e9753ab8610488ca21be1778e281de0..62fe493e618b528b896b1b082954cc77dc271fa9 100644 (file)
@@ -12,9 +12,9 @@ class Queries(TestCase):
 
         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
 
         """
@@ -23,37 +23,37 @@ class Queries(TestCase):
         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
 
         """
 
@@ -123,11 +123,11 @@ CREATE TABLE if not exists identifiers (
     """)
     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')),
@@ -234,17 +234,17 @@ class DrunkSummary(TestCase):
         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",