ScolaSync: Fichier source de src/db.py

ScolaSync 5.1 |

db.py
Aller à la documentation de ce fichier.
1 # $Id: db.py 47 2011-06-13 10:20:14Z georgesk $
2
3 licence={}
4 licence['en']="""
5 file db.py
6 this file is part of the project scolasync
7
8 Copyright (C) 2010 Georges Khaznadar <georgesk@ofset.org>
9
10 This program is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version3 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 """
23
24 import os.path, sqlite3, subprocess
25 import version
26 from globaldef import userShareDir
27
28 database= None # base de données sqlite 3 commune à tous les modules
29 cursor=None
30
31 ##
32 #
33 # Ouverture de la base de données de l'application, et création si nécessaire.
34 # @return une instance de base de données sqlite3
35 #
36 def openDb():
37 global database, cursor
38 dir=os.path.expanduser(userShareDir)
39 if not os.path.isdir(dir):
40 subprocess.call("mkdir %s" %dir, shell=True)
41 database = sqlite3.connect(os.path.join(dir,"db"))
42 cursor=database.cursor()
43 cursor.execute('''create table if not exists owners (stickid text, uuid text, tatoo text, student text)''')
44 cursor.execute('''create table if not exists version (major text, minor text)''')
45 cursor.execute('''create table if not exists preferences (checkable int, mv int, schoolfile text, workdir text, manfile text)''')
46 database.commit()
47 checkVersion(version.major(), version.minor())
48
49 ##
50 #
51 # Vérifie si la base de données reste compatible.
52 # Un changement de version majeur implique une mise à jour en cas de
53 # base de donnée ancienne. Un changmeent de version mineur n'implique
54 # pas de changement de structure de la base de données.
55 #
56 def checkVersion(major, minor):
57 cursor.execute('''select * from version''')
58 values=cursor.fetchone()
59 if values == None:
60 # pas de version existante, on la crée
61 cursor.execute('''insert into version values (?,?)''', (version.major(), version.minor()))
62 else:
63 major, minor = values
64 if major < version.major():
65 raise KeyError("The database version is too old!")
66 elif minor < version.minor():
67 cursor.execute("""update version
68 set minor=?
69 where major=?""", (version.minor(), version.major()))
70 database.commit()
71
72 ##
73 #
74 # vérifie qu'un étudiant est déjà connu
75 # @param student propriétaire du baladeur
76 # @return True si le propriétaire existe déjà
77 #
78 def hasStudent(student):
79 global cursor
80 cursor.execute("select * from owners where student=?", (student,))
81 return cursor.fetchone() != None
82
83 ##
84 #
85 # dit si une clé USB est déjà connue
86 # @param stickid un identifiant de baladeur
87 # @param uuid un identifiant de partition
88 # @param tattoo un tatouage de partition
89 # @return un booléen vrai si la clé USB est connue, faux sinon
90 #
91 def knowsId(stickid, uuid,tattoo):
92 global cursor
93 cursor.execute("select * from owners where stickid=? and uuid=? and tatoo=?", (stickid, uuid,tattoo))
94 return cursor.fetchone() != None
95
96 ##
97 #
98 # Renvoie la liste des tatouages connus de la base de données
99 #
100 def tattooList():
101 global cursor
102 cursor.execute("select tatoo from owners")
103 return cursor.fetchmany()
104
105 ##
106 #
107 # renvoie l'étudiant qui possède une clé USB
108 # @return un nom d'étudiant ou None si la clé est inconnue
109 #
110 def readStudent(stickid, uuid, tattoo):
111 global cursor
112 cursor.execute("select student from owners where stickid=? and uuid=? and tatoo=?", (stickid, uuid,tattoo))
113 s = cursor.fetchone()
114 if s != None:
115 return s[0]
116 else:
117 return None
118
119 ##
120 #
121 # renvoie les préférences de ScolaSync
122 # @return un dictionnaire de préférences
123 #
124 def readPrefs():
125 global cursor
126 cursor.execute("select checkable, mv, schoolfile,workdir, manfile from preferences")
127 s = cursor.fetchone()
128 if s != None:
129 checkable = s[0]==1
130 mv = s[1]==1
131 schoolFile = s[2]
132 workdir = s[3]
133 manfile = s[4]
134 return {"checkable" : checkable,
135 "mv" : mv,
136 "schoolFile" : schoolFile,
137 "workdir" : workdir,
138 "manfile" : manfile,
139 }
140 else:
141 # valeur par défaut si la base est vide de préférences
142 return {"checkable" : True,
143 "mv" : False,
144 "schoolFile" : "/usr/share/scolasync/exemple/SCONET_test.xml",
145 "workdir" : "Travail",
146 "manfile" : "/usr/share/scolasync/help/manualPage_fr_FR.html",
147 }
148
149 ##
150 #
151 # définit le nouveau nom du répertoire de travail préféré.
152 #
153 def setWd(newDir):
154 cursor.execute("""update preferences set workdir=?""",
155 (newDir,))
156 database.commit()
157
158 ##
159 #
160 # inscrit un étudiant comme propriétaire d'une clé USB
161 # @param student un nom d'étudiant
162 #
163 def writeStudent(stickid, uuid, tattoo, student):
164 global database, cursor
165 if knowsId(stickid, uuid, tattoo):
166 cursor.execute("""update owners
167 set student=?
168 where stickid=? and uuid=? and tatoo=?""", (student, stickid, uuid, tattoo))
169 else:
170 cursor.execute("""insert into owners
171 values (?,?,?,?)""", (stickid, uuid, tattoo, student))
172 database.commit()
173
174 ##
175 #
176 # inscrit les préférences
177 # @param prefs un dictionnaire {"checkable": booléen toujours vrai, "workdir" : le répertoire préféré pour les fichiers de travail}
178 #
179 def writePrefs(prefs):
180 global database, cursor
181 checkable=1
182 if prefs["mv"]:
183 mv=1
184 else:
185 mv=0
186 cursor.execute("select checkable from preferences")
187 s = cursor.fetchone()
188 newValues=(1, mv, prefs["schoolFile"], prefs["workdir"], prefs["manfile"])
189 if s != None:
190 cursor.execute("""update preferences
191 set checkable=?, mv=?, schoolfile=?, workdir=?, manfile=?""",
192 newValues)
193 else:
194 cursor.execute("""insert into preferences
195 values (?,?,?,?,?)""",
196 newValues)
197 database.commit()
198
199
200 if database == None:
201 openDb()
src.db.writeStudent
def writeStudent(stickid, uuid, tattoo, student)
inscrit un étudiant comme propriétaire d'une clé USB
Definition: db.py:163
src.db.knowsId
def knowsId(stickid, uuid, tattoo)
dit si une clé USB est déjà connue
Definition: db.py:91
src.db.checkVersion
def checkVersion(major, minor)
Vérifie si la base de données reste compatible.
Definition: db.py:56
src.db.setWd
def setWd(newDir)
définit le nouveau nom du répertoire de travail préféré.
Definition: db.py:153
src.db.tattooList
def tattooList()
Renvoie la liste des tatouages connus de la base de données.
Definition: db.py:100
src.db.openDb
def openDb()
Ouverture de la base de données de l'application, et création si nécessaire.
Definition: db.py:36
src.db.writePrefs
def writePrefs(prefs)
inscrit les préférences
Definition: db.py:179
src.db.hasStudent
def hasStudent(student)
vérifie qu'un étudiant est déjà connu
Definition: db.py:78
src.db.readStudent
def readStudent(stickid, uuid, tattoo)
renvoie l'étudiant qui possède une clé USB
Definition: db.py:110
src.db.readPrefs
def readPrefs()
renvoie les préférences de ScolaSync
Definition: db.py:124