-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsysteme.py
165 lines (132 loc) · 5.28 KB
/
systeme.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# imports
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
import sqlite3
from glade import UI
class ST:
"""
namespace de la classe Systeme pour stocker des variables
"""
class Systeme:
"""
classe pour gérer la base de donnees
"""
def __init__(self, db_file):
# ==========================
"""
Initialise une nouvelle instance de la classe Systeme
"""
# on fixe les requêtes de base
ST.requete_base_systemes = ""
ST.requete_add_sections_jeux = ""
ST.requete_add_etats_jeux = ""
ST.requete_add_recherches = ""
# on fixe le dictionnaire des requêtes
ST.dict_requetes = {}
ST.cle_requete_jeux_en_cours = ""
ST.dict_count_from_machine = {}
# connexion à la base de données
db_connect = sqlite3.connect(db_file)
db_cursor = db_connect.cursor()
# on récupère dans une liste le nom des machines
# en supprimant les doublons
db_cursor.execute("SELECT machine,televerseur FROM systemes")
db_connect.commit()
self.machines = []
for item in db_cursor:
if item[0] not in self.machines:
self.machines.append(item[0])
# on boucle sur le nom des machines
i0 = -1
for machine in self.machines:
# on insère dans le tree_view_systeme le nom de la machine.
i0 += 1 ; i1 = -1
iter_level_1 = UI.tree_store_tree_view_systemes.insert_before(None, None)
UI.tree_store_tree_view_systemes.set_value(iter_level_1, 0, machine)
db_cursor.execute(f"SELECT televerseur FROM systemes WHERE machine='{machine}'")
db_connect.commit()
ST.dict_requetes[f"[{i0}]"] = self.requete_machine(machine)
ST.dict_count_from_machine[f"[{i0}]"] = [machine]
# on boucle sur les nom des téléverseurs à partir du nom
# de la machine. liste établis depuis une requête.
for televerseur in db_cursor:
# on insère dans le tree_view_systeme le nom du téléverseur
i1 += 1
iter_level_2 = UI.tree_store_tree_view_systemes.insert_before(iter_level_1, None)
UI.tree_store_tree_view_systemes.set_value(iter_level_2, 0, televerseur[0])
ST.dict_requetes[f"[{i0}, {i1}]"] = self.requete_machine_televerseur(machine, televerseur)
ST.dict_count_from_machine[f"[{i0}, {i1}]"] = televerseur
# on ferme la connexion à la base de données
db_connect.close()
# on appel la fonction 'get_counts_from_machines()'
# pour compter le nombre de jeux dans chaque machine
self.get_counts_from_machines(db_file)
def get_counts_from_machines(self, db_file):
# ==========================================
"""
Retourne le nombre de jeux contenus dans chaque machine de la base de données.
"""
# on fixe la variable 'total_games' à 0
total_games = 0
# on crée la requête pour compter le nombre de jeux
requete_base = "SELECT COUNT(*) "+\
"FROM jeux A, pages B, systemes C "+\
"WHERE A.lien_page = B.lien "+\
"AND B.identifiant_systeme = C.identifiant "
current_machine = ""
# on boucle sur la liste des noms de machines
for cle in ST.dict_count_from_machine:
# si la clé est inférieure à 5, il s'agit d'une machine
if len(cle) < 5:
# on insère dans le dictionnaire le nom de la machine
machine = ST.dict_count_from_machine[cle][0]
requete = requete_base + f"AND C.machine = '{machine}'"
ST.dict_count_from_machine[cle] = self.select_count_from_machine(db_file, requete)
# on additionne le nombre de jeux de la machine
print(f"{machine:<20}", f":{ST.dict_count_from_machine[cle]:>8}")
total_games += ST.dict_count_from_machine[cle]
else:
# on insère dans le dictionnaire le nom du televerseur
televerseur = ST.dict_count_from_machine[cle][0]
requete = requete_base + f"AND C.machine = '{current_machine}'" + f"AND C.televerseur = '{televerseur}'"
ST.dict_count_from_machine[cle] = self.select_count_from_machine(db_file, requete)
# on conserve le nom de la machine
current_machine = machine
# on affiche le nombre total de jeux
label="TOTAL"
print(f"{label:<20}", f":{total_games:>8} games")
def select_count_from_machine(self, db_file, requete):
# ====================================================
"""
Compte le nombre d'enregistrements, de jeux contenus dans un système, machine, en
exécutant une requête avec la commande 'COUNT(*)'
"""
db_connect = sqlite3.connect(db_file)
db_cursor = db_connect.cursor()
db_cursor.execute(requete)
db_connect.commit()
count = db_cursor.fetchone()[0]
db_connect.close()
return count
def requete_machine(self, machine):
# =================================
"""
Crée une requête SQL pour obtenir tous les jeux d'une machine donnée.
"""
return ("SELECT A.id, telechargement, nom, televerseur "+\
"FROM jeux A, pages B, systemes C "+\
"WHERE A.lien_page = B.lien "+\
"AND B.identifiant_systeme = C.identifiant "+\
f"AND C.machine = '{machine}'")
def requete_machine_televerseur(self, machine, televerseur):
# ==========================================================
"""
Crée une requête SQL pour obtenir tous les jeux d'une machine et d'un téléverseur donnés.
"""
return ("SELECT A.id, telechargement, nom, televerseur "+\
"FROM jeux A, pages B, systemes C "+\
"WHERE A.lien_page = B.lien "+\
"AND B.identifiant_systeme = C.identifiant "+\
f"AND C.machine = '{machine}' "+\
f"AND C.televerseur = '{televerseur[0]}'")