]> rtime.felk.cvut.cz Git - hubacji1/coffee-getter.git/blob - cbdb.py
Update changelog
[hubacji1/coffee-getter.git] / cbdb.py
1 # -*- coding: utf-8 -*-
2 """Database access."""
3 from sqlite3 import connect
4
5 class FileNotSetError(ValueError):
6     pass
7
8 class Db:
9     def __init__(self, dbpath=False):
10         if dbpath:
11             self.con = connect(dbpath)
12         else:
13             self.con = None
14             raise FileNotSetError("Database file must be set")
15         self.cur = self.con.cursor()
16         return None
17
18     def __del__(self):
19         if self.con:
20             self.con.close()
21
22     def getTopMateDrinkers(self):
23         """Return list of pairs of name, count for Mate drinkers."""
24         users = {}
25         que = """
26             SELECT count(*), users.name FROM coffees
27             INNER JOIN users ON coffees.id = users.id
28             WHERE flavor = 'Club-Mate 0,5 l'
29             AND coffees.time BETWEEN
30                 datetime('now', 'localtime', '-7 days') AND
31                 datetime('now', 'localtime')
32             GROUP BY coffees.id
33         """
34         for (cnt, un) in self.cur.execute(que):
35             users[un] = cnt * 0.5
36         que = """
37             SELECT count(*), users.name FROM coffees
38             INNER JOIN users ON coffees.id = users.id
39             WHERE flavor = 'Club-Mate 0,33 l'
40             AND coffees.time BETWEEN
41                 datetime('now', 'localtime', '-7 days') AND
42                 datetime('now', 'localtime')
43             GROUP BY coffees.id
44         """
45         for (cnt, un) in self.cur.execute(que):
46             if un in users:
47                 users[un] += cnt * 0.33
48             else:
49                 users[un] = cnt * 0.33
50         top = []
51         for (un, cnt) in users.items():
52             top.append((un, cnt))
53         top.sort(key=lambda x: (x[1], x[0]), reverse=True)
54         return top