5 class DatabaseError(Exception):
8 class SettingsDatabase:
10 def __init__(self, db_path):
11 self.db_path = db_path
14 conn = sqlite3.connect(self.db_path)
15 cursor = conn.cursor()
17 self.db_version_check_and_create()
23 conn = sqlite3.connect(self.db_path)
24 cursor = conn.cursor()
25 tables = cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='botamusique';").fetchall()
31 def db_version_check_and_create(self):
32 conn = sqlite3.connect(self.db_path)
33 cursor = conn.cursor()
37 result = cursor.execute("SELECT value FROM botamusique WHERE section=? AND option=?",
38 ("bot", "db_version")).fetchall()
40 if len(result) == 0 or int(result[0][0]) != self.version:
41 old_name = "botamusique_old_%s" % datetime.datetime.now().strftime("%Y%m%d")
42 cursor.execute("ALTER TABLE botamusique RENAME TO %s" % old_name)
45 self.set("bot", "old_db_name", old_name)
51 def create_table(self):
52 conn = sqlite3.connect(self.db_path)
53 cursor = conn.cursor()
54 cursor.execute("CREATE TABLE IF NOT EXISTS botamusique ("
58 "UNIQUE(section, option))")
59 cursor.execute("INSERT INTO botamusique (section, option, value) "
60 "VALUES (?, ?, ?)" , ("bot", "db_version", "1"))
61 cursor.execute("INSERT INTO botamusique (section, option, value) "
62 "VALUES (?, ?, ?)" , ("bot", "music_db_version", "0"))
66 def get(self, section, option, **kwargs):
67 conn = sqlite3.connect(self.db_path)
68 cursor = conn.cursor()
69 result = cursor.execute("SELECT value FROM botamusique WHERE section=? AND option=?", (section, option)).fetchall()
75 if 'fallback' in kwargs:
76 return kwargs['fallback']
78 raise DatabaseError("Item not found")
80 def getboolean(self, section, option, **kwargs):
81 return bool(int(self.get(section, option, **kwargs)))
83 def getfloat(self, section, option, **kwargs):
84 return float(self.get(section, option, **kwargs))
86 def getint(self, section, option, **kwargs):
87 return int(self.get(section, option, **kwargs))
89 def set(self, section, option, value):
90 conn = sqlite3.connect(self.db_path)
91 cursor = conn.cursor()
92 cursor.execute("INSERT OR REPLACE INTO botamusique (section, option, value) "
93 "VALUES (?, ?, ?)" , (section, option, value))
97 def has_option(self, section, option):
98 conn = sqlite3.connect(self.db_path)
99 cursor = conn.cursor()
100 result = cursor.execute("SELECT value FROM botamusique WHERE section=? AND option=?", (section, option)).fetchall()
107 def remove_option(self, section, option):
108 conn = sqlite3.connect(self.db_path)
109 cursor = conn.cursor()
110 cursor.execute("DELETE FROM botamusique WHERE section=? AND option=?", (section, option))
114 def remove_section(self, section):
115 conn = sqlite3.connect(self.db_path)
116 cursor = conn.cursor()
117 cursor.execute("DELETE FROM botamusique WHERE section=?", (section, ))
121 def items(self, section):
122 conn = sqlite3.connect(self.db_path)
123 cursor = conn.cursor()
124 results = cursor.execute("SELECT option, value FROM botamusique WHERE section=?", (section, )).fetchall()
128 return list(map(lambda v: (v[0], v[1]), results))
132 def drop_table(self):
133 conn = sqlite3.connect(self.db_path)
134 cursor = conn.cursor()
135 cursor.execute("DROP TABLE botamusique")
140 def __init__(self, db_path):
141 self.db_path = db_path
144 conn = sqlite3.connect(self.db_path)
145 cursor = conn.cursor()
147 # check if table exists, or create one
148 cursor.execute("CREATE TABLE IF NOT EXISTS music ("
149 "id TEXT PRIMARY KEY, "
157 def insert_music(self, music_dict):
158 conn = sqlite3.connect(self.db_path)
159 cursor = conn.cursor()
161 id = music_dict['id']
162 title = music_dict['title']
163 type = music_dict['type']
164 tags = ",".join(music_dict['tags'])
166 del music_dict['title']
167 del music_dict['type']
168 del music_dict['tags']
170 cursor.execute("INSERT OR REPLACE INTO music (id, type, title, metadata, tags) VALUES (?, ?, ?, ?, ?)",
174 json.dumps(music_dict),
180 def query_music(self, **kwargs):
184 for key, value in kwargs.items():
185 if isinstance(value, str):
186 condition.append(key + "=?")
189 condition.append(key + " " + value[0] + " ?")
190 filler.append(value[1])
192 condition_str = " AND ".join(condition)
194 conn = sqlite3.connect(self.db_path)
195 cursor = conn.cursor()
196 results = cursor.execute("SELECT id, type, title, metadata, tags FROM music "
197 "WHERE %s" % condition_str, filler).fetchall()
202 for result in results:
203 music_dict = json.loads(result[3])
204 music_dict['type'] = result[1]
205 music_dict['title'] = result[2]
206 music_dict['tags'] = result[4].split(",")
207 music_dict['id'] = result[0]
208 music_dicts.append(music_dict)
214 def delete_music(self, **kwargs):
218 for key, value in kwargs.items():
219 if isinstance(value, str):
220 condition.append(key + "=?")
223 condition.append(key + " " + value[0] + " ?")
224 filler.append(value[1])
226 condition_str = " AND ".join(condition)
228 conn = sqlite3.connect(self.db_path)
229 cursor = conn.cursor()
230 cursor.execute("DELETE FROM music "
231 "WHERE %s" % condition_str, filler)