-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDatabase.py
92 lines (77 loc) · 3.09 KB
/
Database.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import sqlite3, logging, random, time
logger = logging.getLogger(__name__)
from View import MessageSource
class Database:
# Using sqlite for simplicity, even though it doesn't store my dict in a convenient matter.
def __init__(self):
self.create_db()
def create_db(self):
sql = """
CREATE TABLE IF NOT EXISTS Levels (
user TEXT PRIMARY KEY,
code TEXT,
weight REAL
)
"""
logger.debug("Creating Database...")
self.execute(sql)
logger.debug("Database created.")
sql = """
CREATE TABLE IF NOT EXISTS LevelClear (
time INTEGER
)
"""
logger.debug("Creating Database...")
self.execute(sql)
logger.debug("Database created.")
sql = """
CREATE TABLE IF NOT EXISTS LevelCurrent (
user TEXT,
code TEXT
)
"""
logger.debug("Creating Database...")
self.execute(sql)
logger.debug("Database created.")
clear_t = self.get_clear_time()
if len(clear_t) == 0:
self.set_clear_time()
def execute(self, sql, values=None, fetch=False):
with sqlite3.connect("Levels.db") as conn:
cur = conn.cursor()
if values is None:
cur.execute(sql)
else:
cur.execute(sql, values)
conn.commit()
if fetch:
return cur.fetchall()
def add_level(self, user, code, weight):
if self.execute("SELECT SUM(user) FROM LevelCurrent WHERE user == ?", values=(user,), fetch=True)[0][0] != None:
return MessageSource.ADD_LEVEL_ERROR
warning = self.execute("SELECT SUM(user) FROM Levels WHERE user == ?", values=(user,), fetch=True)[0][0] != None
self.execute("INSERT OR REPLACE INTO Levels VALUES(?, ?, ?)", values=(user, code, weight))
return MessageSource.ADD_LEVEL_WARNING if warning else MessageSource.ADD_LEVEL_SUCCESS
def set_new_current(self, user, code):
# Remove the winner from the Levels database
self.execute("DELETE FROM Levels WHERE user == ?;", (user,))
# Clear the current database
self.execute("DELETE FROM LevelCurrent;")
# Set the new current
self.execute("INSERT INTO LevelCurrent VALUES(?, ?);", values=(user, code,))
def get_current_level(self):
return self.execute("SELECT user, code FROM LevelCurrent;", fetch=True)
def get_levels(self):
return self.execute("SELECT user, code FROM Levels;", fetch=True)
def get_levels_weight(self):
return self.execute("SELECT * FROM Levels;", fetch=True)
def get_clear_time(self):
return self.execute("SELECT time FROM LevelClear;", fetch=True)
def clear(self):
# Deletes all items
self.execute("DELETE FROM Levels;")
self.execute("DELETE FROM LevelCurrent;")
self.execute("DELETE FROM LevelClear;")
self.set_clear_time()
def set_clear_time(self):
self.execute("INSERT INTO LevelClear VALUES(?);", values=(round(time.time()),))