Skip to content

Commit

Permalink
code improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
dedaleDev committed May 25, 2024
1 parent e24fa93 commit b2781e4
Show file tree
Hide file tree
Showing 20 changed files with 670 additions and 1,868 deletions.
23 changes: 11 additions & 12 deletions database.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class db():
"selectEditeurByAdresse" : "SELECT * FROM `Editeur` WHERE `Adresse` LIKE %s;",
"deleteLivre" : "DELETE FROM `Livre` WHERE `ISBN` = %s;",
"deleteLivreByAuteur" : "DELETE FROM `Livre` WHERE `Auteur` = %s;",
"deleteNoteByISBN" : "DELETE FROM `Note` WHERE `Livre` = %s;",
"deleteAuteur" : "DELETE FROM `Auteur` WHERE `ID` = %s;",
"deletePointDeVente" : "DELETE FROM `Point de vente` WHERE `Adresse` = %s;",
"deleteEditeur" : "DELETE FROM `Editeur` WHERE `Nom` = %s;",
Expand Down Expand Up @@ -96,7 +97,7 @@ def __init__(self, host:str ="localhost", user:str="root", passwd:str="1234", po
else :
exit(1)
except :
print("Création de la base de donnée échouée ! Veuillez vérifier vos paramètres de connexion (en haut du fichier main.py). Si cela ne résout pas le problème, essayez de relancer Apache et MariaDB.")
print("\033[31mCréation de la base de donnée échouée ! Veuillez vérifier vos paramètres de connexion (en haut du fichier main.py). Si cela ne résout pas le problème, essayez de relancer Apache et MariaDB.\033[0m")
exit(1)
self.cursor = self.db.cursor()
#test si les tables existent
Expand All @@ -112,7 +113,7 @@ def __init__(self, host:str ="localhost", user:str="root", passwd:str="1234", po
else :
exit(1)
if tablesLoad != self.list_tables:#verification des tables
print("Erreur : Base de donnée corrompue ! Les tables ne correspondent pas avec le modèle UML attendu, veuillez vérifier vos tables.")
print("\033[31mErreur : Base de donnée corrompue ! Les tables ne correspondent pas avec le modèle UML attendu, veuillez vérifier vos tables.\033[0m")
print("Tables attendues : ",self.list_tables)
print("Tables trouvées : ",tablesLoad)
if input("Voulez-vous réinitialiser la base de donnée ? (Y/N) : ") == "Y":
Expand Down Expand Up @@ -164,7 +165,7 @@ def mkRequest(self, request:str, verbose=False, *args) -> None:
print(f"Nombre d'arguments : {len(args)}\n--------------------------------------------------\033[0m")

def retryDatabaseConnection(self) -> bool:
"""This function retries to connect to the database."""
"""This function retries to connect to the database if an error occured."""
print("Connexion à la base de donnée perdu, tentative de reconnexion...")
try :
maxRetries = 3
Expand Down Expand Up @@ -206,14 +207,14 @@ def create_db(self) -> int:
print("Données ajoutées avec succès !")
return 0
else :
print("Erreur : Impossible d'ajouter le jeu de donnée.")
print("\033[31mErreur : Impossible d'ajouter le jeu de donnée. Veuillez vérifier vos fichiers .csv dans le dossier data. Il est possible que le format ne corresponde pas.\033[0m")
return 0
else :
print("Erreur : Impossible de créer les tables.")
print("\033[31mErreur : Impossible de créer les tables.\033[0m")
else :
print("Erreur : Impossible de créer la base de donnée.")
print("\033[31mErreur : Impossible de créer la base de donnée.\033[0m")
except Exception as e:
print("Erreur : Impossible de créer la base de donnée ! Une erreur est survenue : ",e)
print("\033[31mErreur : Impossible de créer la base de donnée ! Une erreur est survenue : ",e,"\033[0m")
return 1

def loadData(self) -> int:
Expand All @@ -227,7 +228,7 @@ def loadData(self) -> int:
for i in os.listdir("data/livres"):
os.system(f"cp data/livres/{i} www/img/livres/{i}")
except Exception as e:
print("Erreur : Impossible d'importer les images de références ! Une erreur est survenue : ",e)
print("\033[31mErreur : Impossible d'importer les images de références ! Une erreur est survenue : ",e,"\033[0m")

self.db = pymysql.connect(host=self.host, charset="utf8mb4", user=self.user, passwd=self.passwd, port=self.port, db="BookWorm",init_command='SET sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE"')
data= ["data/Auteur.csv","data/Editeur.csv","data/PointDeVente.csv","data/Livre.csv","data/Utilisateur.csv","data/Note.csv","data/Emprunt.csv"]
Expand All @@ -243,15 +244,13 @@ def loadData(self) -> int:
continue
if file in idTable:
row.pop(0)
#if ',' in row[-1]: #desativé pour le moment car inutile à priori à voir dans le temps #danger
#row[-1] = row[-1].split(',')[0]
self.mkRequest("insert"+file.split("/")[-1].split(".")[0], False, *row)
self.db.commit()
except FileNotFoundError or PermissionError as e:
print(f"Erreur : Impossible de trouver le fichier {file} dans le repertoire data ! Le fichier n'existe pas ou vous n'avez pas les droits pour le lire.",e)
print(f"\033[31mErreur : Impossible de trouver le fichier {file} dans le repertoire data ! Le fichier n'existe pas ou vous n'avez pas les droits pour le lire.",e,"\033[0m")
return 1
except Exception as e:
print(f"Erreur : Impossible de lire le fichier {file} ! Une erreur est survenue : ",e, "ligne : ", e.__traceback__.tb_lineno)
print(f"\033[31mErreur : Impossible de lire le fichier {file} ! Une erreur est survenue : ",e, "ligne : ", e.__traceback__.tb_lineno,"\033[0m")
return 1
return 0

126 changes: 13 additions & 113 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import database, operationOnDataBase, server, utils
import os, cherrypy, shutil
import database, server, utils
import os, cherrypy

#---------------------Configuration---------------------
db_HOST = "localhost"
db_USER = "root"
db_PASSWD = "1234"
db_PORT = 3306
db_HOST = "localhost"#changer si nécessaire
db_USER = "root"#changer
db_PASSWD = "1234"#changer
db_PORT = 3306#changer si nécessaire

debug = False #Rénitialise l'ensemble des données au démarrage. En cas de problème, essayez d'activer ce mode.

www_dir = os.path.abspath('./www')
print(os.path.join(www_dir, 'css'))
serverConf = {
'global': {
'server.socket_host': '192.168.1.20',#si necessaire, changez l'adresse IP du site web
'server.socket_host': '192.168.1.20',#si nécessaire, changez l'adresse IP du site web
'server.socket_port': 8080,
'error_page.default': server.jsonify_error,
},
Expand Down Expand Up @@ -59,115 +59,13 @@

#------------------------------------------------------

def search(db:database.db) -> None:
"""This function creates a search menu and calls the search function from operationOnDataBase.py. Take the database object as a parameter."""
while True :
choiceListSearch = [
("Livre",operationOnDataBase.searchLivre, db),
("Auteur",operationOnDataBase.searchAuteur, db),
("Point de vente",operationOnDataBase.searchPointDeVente, db),
("Editeur",operationOnDataBase.searchEditeur, db)]
if showMenu(choiceAction=choiceListSearch, title= "Que souhaitez-vous rechercher ?", defaultChoice=True, question="Veuillez saisir l'objet de votre recherche ou rechercher un livre : " ) == 2 :
return

def addElement(db:database.db) -> None:
"""This function creates a menu to add an element to the database. Take the database object as a parameter."""
choiceListAddElement = [
("Livre",operationOnDataBase.addLivre, db),
("Auteur",operationOnDataBase.addAuteur,db),
("Point de vente",operationOnDataBase.addPointDeVente,db),
("Editeur",operationOnDataBase.addEditeur,db)]
showMenu(choiceAction=choiceListAddElement, title= "Que souhaitez-vous ajouter ?")

def deleteElement(db:database.db) -> None:
"""This function creates a menu to delete an element from the database."""
choiceListDeleteElement = [
("Livre",operationOnDataBase.deleteLivre, db),
("Auteur",operationOnDataBase.deleteAuteur,db),
("Point de vente",operationOnDataBase.deletePointDeVente,db),
("Editeur",operationOnDataBase.deleteEditeur,db)]
showMenu(choiceAction=choiceListDeleteElement, title= "Que souhaitez-vous supprimer ?")

def editElement(db:database.db) -> None:
"""This function creates a menu to edit an element from the database."""
choiceListEditElement = [
("Livre",operationOnDataBase.editLivre, db),
("Auteur",operationOnDataBase.editAuteur,db),
("Point de vente",operationOnDataBase.editPointDeVente,db),
("Editeur",operationOnDataBase.editEditeur,db)]
showMenu(choiceAction=choiceListEditElement, title= "Que souhaitez-vous editer ?")

def config(db:database.db):
"""This function creates a configuration menu."""
while True :
choiceListConfig = [
("Ajouter un livre, auteur...",addElement, db),
("Editer un livre, auteur...",editElement, db),
("Supprimer un livre, auteur...",deleteElement, db)]
if showMenu(choiceAction=choiceListConfig, title= "Menu de configuration") == 2 :
return


def showMenu(choiceAction : list, title = "Menu", defaultChoice:bool = False, question:str="Veuillez saisir une opération : "):
"""This function creates a menu with the choiceAction list.
Args :
choiceAction : list of tuple with the following format : (str, function, *args)
title : str, title of the menu
defaultChoice : bool, if True, the user can enter a string to select the first choice
question : str, question to ask the user
Return :
1 : if the function returns None
2 : if the user wants to quit
"""
if title == "Menu" :
print(f"\n---------------{title}---------------")
else :
print(f'\n------------------------------------\n\n{title}')
for ch in choiceAction:
print (f'\t{choiceAction.index(ch)+1} : {ch[0]}')
print (f'\t{len(choiceAction)+1} : Quitter (Ctrl + C)\n')
while True :
try :
if not defaultChoice :
operation = input(question).strip().split(' ')[0]
else :
operation = input(question).strip()
if operation.isdigit() :
choice = int(operation)
elif operation :
choice = -1
else :
print("Choix invalide, veuillez réessayer.")
continue
if choice == len(choiceAction)+1 :#Quitter
return 2
elif choice >= 1 and len(choiceAction) >= choice :
if len(choiceAction[choice-1]) == 2 :
result = choiceAction[choice-1][1]()
else :
result = choiceAction[choice-1][1](choiceAction[choice-1][2])
if result is not None: # Si la fonction retourne une valeur, retourner cette valeur
return result
return 1
elif defaultChoice and choice == -1:
result = choiceAction[0][1](choiceAction[choice-1][2],operation)
if result is not None:
return result
return 1
else :
print("Choix invalide, veuillez réessayer.")
except KeyboardInterrupt :
return 2
except Exception as e:
print("Choix invalide, veuillez réessayer.",e, e.__traceback__.tb_lineno)

def updateJS(conf: dict):
"""This function updates the API_URL in js files.
Args :
conf : dict, configuration of the server cherrypy"""
try :
api_url = f"http://{conf['global']['server.socket_host']}:{conf['global']['server.socket_port']}"
files = ['www/js/index.js', 'www/js/search.js', 'www/js/livre.js', 'www/js/login.js','www/js/account.js','www/js/config.js','www/js/addLivre.js', 'www/js/addAuteur.js','www/js/addPointDeVente.js', 'www/js/addEditeur.js']
files = ['www/js/index.js', 'www/js/search.js', 'www/js/livre.js', 'www/js/login.js','www/js/account.js','www/js/config.js','www/js/addLivre.js','www/js/addAuteur.js','www/js/addPointDeVente.js', 'www/js/addEditeur.js', 'www/js/createAccount.js', ]
for file in files :
with open(file, 'r', encoding='utf-8') as f:
code = f.readlines()
Expand All @@ -182,6 +80,7 @@ def updateJS(conf: dict):


if __name__ == '__main__':
print("\033[35m")
print(r"""
______ _ _ _
| ___ \ | | | | | |
Expand All @@ -191,17 +90,18 @@ def updateJS(conf: dict):
\____/ \___/ \___/|_|\_\ \/ \/ \___/|_| |_| |_| |_|
"""
)
print("\033[0m")
print("Initialisation...")
if debug :
print("Attention : le mode de débogage est activé, les résultats résultants pourraient être instables.")
print("Attention : Le mode debug est activé. Toutes les données vont être réinitialisées.")
db = database.db(db_HOST,db_USER,db_PASSWD,db_PORT,debug)
if db.needRestart == True :
exit(0)
print("Connexion à la base de donnée réussie !")
print("\033[32mConnexion à la base de donnée réussie !\033[0m")
print("Démarrage du site web...")
utils.cleanFileNameForLivre()
try :
updateJS(serverConf)
cherrypy.quickstart(server.Server(db,serverConf ), '/', serverConf)
except Exception as e:
print(f"\033[91mErreur : Impossible de démarrer le serveur web. Veuillez vérifier que le port 8080 et 8092 sont disponibles. {e} ligne : {e.__traceback__.tb_lineno}\033[0m")
print(f"\033[91mErreur : Impossible de démarrer le serveur web. Veuillez vérifier que le port du site web est disponible (defaut 8080). {e} ligne : {e.__traceback__.tb_lineno}\033[0m")
Loading

0 comments on commit b2781e4

Please sign in to comment.