class FileNotSetError(ValueError):
pass
+class ArgCountError(ValueError):
+ pass
+
class Db:
def __init__(self, dbpath=False):
if dbpath:
top.append((un, cnt))
top.sort(key=lambda x: (x[1], x[0]), reverse=True)
return top
+
+ def getDrunkSum(self, *args, **kwargs):
+ """Return list of drunken ``flavor`` from ``dtf`` to ``dtt``.
+
+ Keyword arguments:
+ flavor -- The flavor of beverage.
+ dtf -- Date and time *from*.
+ dtt -- Date and time *to*.
+ """
+ if not ((len(args) == 3 and len(kwargs) == 0) or
+ (len(args) == 0 and len(kwargs) == 3)):
+ raise ArgCountError("3 arguments needed: flavor, from, and to")
+ if args:
+ flavor = args[0]
+ dtf = args[1]
+ dtt = args[2]
+ elif kwargs:
+ flavor = kwargs["flavor"]
+ dtf = kwargs["dtf"]
+ dtt = kwargs["dtt"]
+ que = """
+ SELECT count(*), users.name FROM coffees
+ INNER JOIN users ON coffees.id = users.id
+ WHERE flavor = '{}'
+ AND coffees.time BETWEEN
+ datetime('{}', 'localtime') AND
+ datetime('{}', 'localtime')
+ GROUP BY coffees.id
+ """.format(flavor, dtf, dtt)
+ drunk = []
+ for (cnt, un) in self.cur.execute(que):
+ drunk.append((un, cnt))
+ return drunk
self.getSomeSmile()
)
return
+
+ def loadDrunkSum(self, *args, **kwargs):
+ """Get list of drunken ``flavor`` from ``dtf`` to ``dtt``, update msg.
+
+ Keyword arguments:
+ flavor -- The flavor of beverage.
+ dtf -- Date and time *from*.
+ dtt -- Date and time *to*.
+ """
+ self.top = self.db.getDrunkSum(*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.msg = "{} drunk from {} to {}:\n".format(flavor, dtf, dtt)
+ for (un, cnt) in self.top:
+ self.msg += "{}: {}\n".format(un, cnt)
+ self.msg += "---"
+ return