]> git.0d.be Git - botaradio.git/blob - database.py
feat: beautified current song string, fix ytplay index problem
[botaradio.git] / database.py
1 import sqlite3
2
3 class DatabaseError(Exception):
4     pass
5
6 class Database:
7     def __init__(self, db_path):
8         self.db_path = db_path
9
10         # connect
11         conn = sqlite3.connect(self.db_path)
12         cursor = conn.cursor()
13
14         # check if table exists, or create one
15         tables = cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='botamusique';").fetchall()
16         if len(tables) == 0:
17             cursor.execute("CREATE TABLE botamusique (section text, option text, value text, UNIQUE(section, option))")
18             conn.commit()
19
20         conn.close()
21
22     def get(self, section, option, **kwargs):
23         conn = sqlite3.connect(self.db_path)
24         cursor = conn.cursor()
25         result = cursor.execute("SELECT value FROM botamusique WHERE section=? AND option=?", (section, option)).fetchall()
26         conn.close()
27
28         if len(result) > 0:
29             return result[0][0]
30         else:
31             if 'fallback' in kwargs:
32                 return kwargs['fallback']
33             else:
34                 raise DatabaseError("Item not found")
35
36     def getboolean(self, section, option, **kwargs):
37         return bool(int(self.get(section, option, **kwargs)))
38
39     def getfloat(self, section, option, **kwargs):
40         return float(self.get(section, option, **kwargs))
41
42     def getint(self, section, option, **kwargs):
43         return int(self.get(section, option, **kwargs))
44
45     def set(self, section, option, value):
46         conn = sqlite3.connect(self.db_path)
47         cursor = conn.cursor()
48         cursor.execute('''
49             INSERT OR REPLACE INTO botamusique (section, option, value)
50             VALUES (?, ?, ?)
51         ''', (section, option, value))
52         conn.commit()
53         conn.close()
54
55     def has_option(self, section, option):
56         conn = sqlite3.connect(self.db_path)
57         cursor = conn.cursor()
58         result = cursor.execute("SELECT value FROM botamusique WHERE section=? AND option=?", (section, option)).fetchall()
59         conn.close()
60         if len(result) > 0:
61             return True
62         else:
63             return False
64
65     def remove_option(self, section, option):
66         conn = sqlite3.connect(self.db_path)
67         cursor = conn.cursor()
68         cursor.execute("DELETE FROM botamusique WHERE section=? AND option=?", (section, option))
69         conn.commit()
70         conn.close()
71
72     def remove_section(self, section):
73         conn = sqlite3.connect(self.db_path)
74         cursor = conn.cursor()
75         cursor.execute("DELETE FROM botamusique WHERE section=?", (section, ))
76         conn.commit()
77         conn.close()
78
79     def items(self, section):
80         conn = sqlite3.connect(self.db_path)
81         cursor = conn.cursor()
82         results = cursor.execute("SELECT option, value FROM botamusique WHERE section=?", (section, )).fetchall()
83         conn.close()
84
85         return map(lambda v: (v[0], v[1]), results)
86
87     def drop_table(self):
88         conn = sqlite3.connect(self.db_path)
89         cursor = conn.cursor()
90         cursor.execute("DROP TABLE botamusique")
91         conn.close()
92
93