Skip to content

Commit

Permalink
major search update, with new sort and filterbyauteur, fix minors bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
dedaleDev committed May 15, 2024
1 parent b0f6934 commit 3b544f8
Show file tree
Hide file tree
Showing 63 changed files with 483 additions and 85 deletions.
1 change: 1 addition & 0 deletions database.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class db():
"updatePointDeVente" : "UPDATE `Point de vente` SET `Nom` = %s, `Site web` = %s, `Tel` = %s WHERE `Adresse` = %s;",
"updateEditeur" : "UPDATE `Editeur` SET `Adresse` = %s WHERE `Nom` = %s;",
"selectISBNAllLivres" : "SELECT ISBN FROM `Livre`;",
"selectPointDeVenteNameByAdresse" : "SELECT Nom FROM `Point de vente` WHERE `Adresse` = %s;",
}

def __init__(self, host:str ="localhost", user:str="root", passwd:str="1234", port:int=3306, debug:bool=False) -> None:
Expand Down
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
print(os.path.join(www_dir, 'css'))
serverConf = {
'global': {
'server.socket_host': '127.0.0.1',
'server.socket_host': '192.168.1.20',#si necessaire, changez l'adresse IP du site web
'server.socket_port': 8080,
'error_page.default': server.jsonify_error,
},
Expand Down
30 changes: 22 additions & 8 deletions operationOnDataBase.py
Original file line number Diff line number Diff line change
Expand Up @@ -722,6 +722,24 @@ def filterLivre(livres:list, operation:str,db:database.db)-> list:
except Exception as e:
print(f"Une erreur est survenue lors du filtrage des livres :{e}, ligne : {e.__traceback__.tb_lineno}")


def filterLivreByAuteur(livres:list[tuple], auteur:str,db:database.db)-> list:
""" This function filters the books by author.
Args :
livres (list): The list of books.
auteur (str): The author.
db (database.db): The database object.
Returns:
list: The filtered list of books."""
result = []

for i in range(len(livres)):
if searchEngine.getAuteurNameByID(db,livres[i][2]) == auteur:
result.append(livres[i])
print(f"Résultat du filtrage par auteur : '{auteur}'", result)
return result


def sortLivre(livres:list, operation:str)-> list:
""" This function sorts the books.
Args:
Expand All @@ -731,15 +749,14 @@ def sortLivre(livres:list, operation:str)-> list:
list: The sorted list of books.
"""
try :
if operation == "note":
if operation == "sortByNote":
print("Tri par note")
livres.sort(key=lambda x: x[4], reverse=True)
elif operation == "ordre alphabétique":
elif operation == "sortByAlpha":
print("Tri par ordre alphabétique")
livres.sort(key=lambda x: x[1])
elif operation == "date de parution":
elif operation == "sortByDate":
print("Tri par date de parution")
#algo de tri sans utiliser sort :
try :
for i in range(len(livres)):
for j in range(i+1, len(livres)):
Expand All @@ -758,12 +775,9 @@ def sortLivre(livres:list, operation:str)-> list:
except Exception as e:
print(f"Une erreur est survenue lors du tri par date de parution :{e}, ligne : {e.__traceback__.tb_lineno}")
print('Résultat du tri par date de parution :')
elif operation == "prix":
elif operation == "sortByPrix":
print("Tri par prix")
livres.sort(key=lambda x: x[9])
elif operation == "point de vente":
print("Tri par point de vente")
livres.sort(key=lambda x: x[10])
return livres
except Exception as e:
print(f"Une erreur est survenue lors du tri des livres :{e}, ligne : {e.__traceback__.tb_lineno}")
Expand Down
11 changes: 8 additions & 3 deletions searchEngine.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,14 @@ def searchLivre(recherche:str, db:database.db, onlyOne:bool = False)->list:
temp = []
for i in result:#enlève les doublons
if i not in temp and i != None and i != ( ):
temp.append(i)
doublon = False
for j in temp :
if i[0] == j[0]:
doublon = True
break
if not doublon:
temp.append(i)

if temp == []:
return None
result = temp
Expand All @@ -183,8 +190,6 @@ def searchLivre(recherche:str, db:database.db, onlyOne:bool = False)->list:
return None
except :
print("Désolé, le format de la réponse est incorrect. Veuillez réessayer.")
if result == []:
return None
return result
except Exception as e :
print("Une erreur est survenue lors de la recherche du livre (searchLivre): ",e ,e.__traceback__.tb_lineno)
Expand Down
42 changes: 35 additions & 7 deletions server.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,19 @@ def makeResponse(self, is_error=False, content=None, error_message=None):

@cherrypy.expose()
@cherrypy.tools.json_out()
def searchLivre(self, search:str) -> str:
def searchLivre(self, search:str, sort:str, auteur:str="Tous") -> str:
sortList = ["sortByAlpha", "sortByNote", "sortByDate", "sortByPrix"]
if sort not in sortList:
sort = "sortByAlpha"
try :
searchResult = searchEngine.searchLivre(search,self.db)
print(searchResult)
#print("SEARCH RESULT", searchResult)
if searchResult == None : return None
searchResult = utils.formatLivreToJson(searchResult, self.db)
searchResult= operationOnDataBase.sortLivre(searchResult,sort)
if auteur != "Tous":
searchResult = operationOnDataBase.filterLivreByAuteur(searchResult, auteur, self.db)
searchResult = utils.formatLivreToJsonOrdered(searchResult, self.db)

return self.makeResponse(content=searchResult)
except Exception as e:
print("\033[31mErreur lors de la recherche : ",e, e.__traceback__.tb_lineno, searchResult, "\033[0m")
Expand All @@ -34,12 +41,34 @@ def searchLivre(self, search:str) -> str:
@cherrypy.expose
@cherrypy.tools.json_out()
def searchAuteur(self, search:str) -> str:
print("OK")
try :
searchResult = searchEngine.searchAuteur(search, self.db)
if searchResult == None : return None
searchResult = utils.formatAuteurToJson(searchResult)
print("OK2", searchResult)
return self.makeResponse(content=searchResult)
except Exception as e:
print("\033[31mErreur lors de la recherche : ",e, e.__traceback__.tb_lineno, "\033[0m")
return self.makeResponse(is_error=True, error_message="Oups, une erreur est survenue : "+ str(e))

@cherrypy.expose
@cherrypy.tools.json_out()
def searchPointDeVente(self, search:str) -> str:
try :
searchResult = searchEngine.searchPointDeVente(search, self.db)
if searchResult == None : return None
searchResult = utils.formatPointDeVenteToJson(searchResult)
return self.makeResponse(content=searchResult)
except Exception as e:
print("\033[31mErreur lors de la recherche : ",e, e.__traceback__.tb_lineno, "\033[0m")
return self.makeResponse(is_error=True, error_message="Oups, une erreur est survenue : "+ str(e))

@cherrypy.expose
@cherrypy.tools.json_out()
def searchEditeur(self, search:str) -> str:
try :
searchResult = searchEngine.searchEditeur(search, self.db)
if searchResult == None : return None
searchResult = utils.formatEditeurToJson(searchResult)
return self.makeResponse(content=searchResult)
except Exception as e:
print("\033[31mErreur lors de la recherche : ",e, e.__traceback__.tb_lineno, "\033[0m")
Expand All @@ -51,7 +80,6 @@ def getLivre(self, isbn:str) -> str:
try :
self.db.mkRequest("selectLivreByISBN",False, isbn)
livre = self.db.cursor.fetchall()
print("LIVRE : ",livre)
if livre is not None:
livre = utils.formatLivreToJson(livre, self.db)
return self.makeResponse(content=livre)
Expand All @@ -66,7 +94,7 @@ def index(self) -> str :
return open('www/html/index.html', encoding="utf-8")

@cherrypy.expose
def search(self, search:str, type:str="livre") -> str :
def search(self, search:str, type:str="livre", sort="default", auteur="Tous") -> str :
return open('www/html/search.html', encoding="utf-8")

@cherrypy.expose
Expand Down
126 changes: 122 additions & 4 deletions test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,122 @@
#afficher un message d'erreur en rouge
print("\033[91mErreur : \033[0mLe fichier n'existe pas.")
#afficher en vert
print("\033[92mSuccès : \033[0mLe fichier a été créé avec succès.")
[
{
"ISBN": "2070624544",
"titre": "Harry Potter - : Harry Potter et le prisonnier d'Azkaban",
"auteur": "J. K. Rowling",
"description": "Harry Potter a treize ans. Apr\u00e8s des vacances insupportables chez les horribles Dursley, il retrouve ses fid\u00e8les amis, Ron et Hermione, pour prendre le train qui les ram\u00e8ne au coll\u00e8ge Poudlard. Le monde des gens ordinaires, les Moldus, comme celui des sorciers, est en \u00e9moi : aux derni\u00e8res nouvelles, Sirius Black, un dangereux criminel proche de Voldemort, s'est \u00e9chapp\u00e9 de la prison d'Azkaban. Les redoutables gardiens de la prison assureront la s\u00e9curit\u00e9 du coll\u00e8ge Poudlard, car le prisonnier \u00e9vad\u00e9 recherche Harry Potter, responsable de l'\u00e9limination de son ma\u00eetre. C'est donc sous bonne garde que l'apprenti sorcier fait sa troisi\u00e8me rentr\u00e9e. Au programme : des cours de divination, la fabrication d'une potion de ratatinage, le dressage des hippogriffes... Mais Harry est-il vraiment \u00e0 l'abri du danger qui le menace ?",
"note": 10.0,
"dateDeParution": "19/10/1999",
"status": "emprunt\u00e9",
"genre": "Fantastique",
"format": "Grand Format",
"prix": 9.99,
"pointDeVente": "17, avenue Victor-Hugo Centre commercial Victor-Hugo - 26000 Valence\n\n",
"pointDeVenteName": "Fnac",
"editeur": "Gallimard"
},
{
"ISBN": "2070541290",
"titre": "Harry Potter - Tome 2 : Harry potter et la chambre des secrets",
"auteur": "J. K. Rowling",
"description": "Cette deuxi\u00e8me aventure d'Harry Potter m\u00eale avec g\u00e9nie humour, myst\u00e8re et frisson. L'intrigue savamment ficel\u00e9e et pleine de rebondissements inattendus envo\u00fbte litt\u00e9ralement le lecteur de la premi\u00e8re \u00e0 la derni\u00e8re page. Un r\u00e9gal !",
"note": 10.0,
"dateDeParution": "01/11/1999",
"status": "hors stock",
"genre": "Fantastique",
"format": "Grand Format",
"prix": 22.5,
"pointDeVente": "12, place des clercs 26000 Valence",
"pointDeVenteName": "La Licorne",
"editeur": "Gallimard"
},
{
"ISBN": "2070543587",
"titre": "Harry Potter - Tome 4 : Harry potter et la coupe de feu",
"auteur": "J. K. Rowling",
"description": "Apr\u00e8s un horrible \u00e9t\u00e9 chez les Dursley, Harry Potter entre en quatri\u00e8me ann\u00e9e au coll\u00e8ge de Poudlard. \u00c0 quatorze ans, il voudrait simplement \u00eatre un jeune sorcier comme les autres, retrouver ses amis Ron et Hermione, assister avec eux \u00e0 la Coupe du Monde de Quidditch, apprendre de nouveaux sortil\u00e8ges et essayer des potions inconnues. Une grande nouvelle l'attend \u00e0 son arriv\u00e9e : la tenue \u00e0 Poudlard d'un tournoi de magie entre les plus c\u00e9l\u00e8bres \u00e9coles de sorcellerie. D\u00e9j\u00e0 les spectaculaires d\u00e9l\u00e9gations \u00e9trang\u00e8res font leur entr\u00e9e... Harry se r\u00e9jouit. Trop vite. Il va se trouver plong\u00e9 au coeur des \u00e9v\u00e9nements les plus dramatiques qu'il ait jamais eu \u00e0 affronter.\nEnvo\u00fbtant, dr\u00f4le, bouleversant, ce quatri\u00e8me tome est le pilier central des aventures de Harry Potter.",
"note": 10.0,
"dateDeParution": "01/11/2000",
"status": "disponible",
"genre": "Fantastique",
"format": "Grand Format",
"prix": 14.5,
"pointDeVente": "Place Charles de Gaulle \u00e0 Chabeuil (Dr\u00f4me)",
"pointDeVenteName": " Librairie Ecriture",
"editeur": "Gallimard"
},
{
"ISBN": "2070556859",
"titre": "Harry Potter - Tome 5 : Harry potter et l'ordre du phenix ",
"auteur": "J. K. Rowling",
"description": "\u00c0 quinze ans, Harry entre en cinqui\u00e8me ann\u00e9e \u00e0 Poudlard, mais il n'a jamais \u00e9t\u00e9 si anxieux. L'adolescence, la perspective des examens et ces \u00e9tranges cauchemars... Car Celui-Dont-On-Ne-Doit-Pas-Prononcer-Le-Nom est de retour. Le minist\u00e8re de la Magie semble ne pas prendre cette menace au s\u00e9rieux, contrairement \u00e0 Dumbledore. La r\u00e9sistance s'organise alors autour de Harry qui va devoir compter sur le courage et la fid\u00e9lit\u00e9 de ses amis de toujours... ",
"note": 10.0,
"dateDeParution": "01/12/2003",
"status": "disponible",
"genre": "Fantastique",
"format": "Grand Format",
"prix": 12.99,
"pointDeVente": "Place Charles de Gaulle \u00e0 Chabeuil (Dr\u00f4me)",
"pointDeVenteName": " Librairie Ecriture",
"editeur": "Gallimard"
},
{
"ISBN": "2070572676",
"titre": "Harry Potter - Tome 6 : Harry potter et le prince de sang-mele ",
"auteur": "J. K. Rowling",
"description": "Harry, Ron et Hermione entrent en sixi\u00e8me ann\u00e9e \u00e0 Poudlard o\u00f9 ils vont vivre leur derni\u00e8re ann\u00e9e avant la majorit\u00e9 qui est fix\u00e9e, chez les sorciers, \u00e0 l'\u00e2ge de dix-sept ans. Des \u00e9v\u00e9nements particuli\u00e8rement marquants vont contribuer \u00e0 faire passer Harry du statut d'adolescent \u00e0 celui d'homme. Ce tome, sur fond de guerre contre un Voldemort plus puissant que jamais, se r\u00e9v\u00e8le plus sombre que les pr\u00e9c\u00e9dents. Secrets, alliances et trahisons conduisent aux \u00e9v\u00e9nements les plus dramatiques qu'Harry ait eu \u00e0 affronter. Mais, en... ",
"note": 10.0,
"dateDeParution": "01/10/2005",
"status": "disponible",
"genre": "Fantastique",
"format": "Grand Format",
"prix": 10.99,
"pointDeVente": "31 rue Madier de Montjau\n26000 Valence",
"pointDeVenteName": "L'\u00c9tincelle",
"editeur": "Gallimard"
},
{
"ISBN": "2070615367",
"titre": "Harry Potter - Tome 7 : Harry potter et les reliques de la mort",
"auteur": "J. K. Rowling",
"description": "\u00abEnvers et contre tout\u00bb est une caract\u00e9ristique-cl\u00e9 chez J.K. Rowling. Paradoxalement, c'est lorsqu'elle a continu\u00e9 \u00e0 \u00e9crire avec une \u00e9nergie, une passion, un engagement inentam\u00e9s, en particulier \u00e0 partir du tome 4 - alors qu'elle \u00e9tait devenue l'une des femmes les plus c\u00e9l\u00e8bres et riches au monde, et que chaque suite \u00e9tait attendue par des dizaines de millions de lecteurs du monde entier - , qu'elle force le plus l'admiration. Elle accomplit la mission qu'elle s'est donn\u00e9e sans faillir, sans jamais d\u00e9cevoir.\nL'ambition de... ",
"note": 10.0,
"dateDeParution": "27/10/2007",
"status": "emprunt\u00e9",
"genre": "Fantastique",
"format": "Grand Format",
"prix": 15.99,
"pointDeVente": "17, avenue Victor-Hugo Centre commercial Victor-Hugo - 26000 Valence\n\n",
"pointDeVenteName": "Fnac",
"editeur": "Gallimard"
},
{
"ISBN": "2070615367",
"titre": "Harry Potter - Tome 7 : Harry potter et les reliques de la mort",
"auteur": "J. K. Rowling",
"description": "\u00abEnvers et contre tout\u00bb est une caract\u00e9ristique-cl\u00e9 chez J.K. Rowling. Paradoxalement, c'est lorsqu'elle a continu\u00e9 \u00e0 \u00e9crire avec une \u00e9nergie, une passion, un engagement inentam\u00e9s, en particulier \u00e0 partir du tome 4 - alors qu'elle \u00e9tait devenue l'une des femmes les plus c\u00e9l\u00e8bres et riches au monde, et que chaque suite \u00e9tait attendue par des dizaines de millions de lecteurs du monde entier - , qu'elle force le plus l'admiration. Elle accomplit la mission qu'elle s'est donn\u00e9e sans faillir, sans jamais d\u00e9cevoir.\nL'ambition de... ",
"note": 10.0,
"dateDeParution": "27/10/2007",
"status": "emprunt\u00e9",
"genre": "Fantastique",
"format": "Grand Format",
"prix": 15.99,
"pointDeVente": "17, avenue Victor-Hugo Centre commercial Victor-Hugo - 26000 Valence\n\n",
"pointDeVenteName": "Fnac",
"editeur": "Gallimard"
},
{
"ISBN": "9782070518425",
"titre": "Harry Potter, tome 1 : Harry Potter \u00e0 l'\u00e9cole des sorciers\n",
"auteur": "J. K. Rowling",
"description": "Pour et Mrs Dursley, qui habitaient au 4, Privet Drive, avaient toujours affirm\u00e9 avec la plus grande fiert\u00e9 qu'ils \u00e9taient parfaitement nor\u00admaux, merci pour eux. Jamais quiconque n'aurait imagin\u00e9 qu'ils puissent se trouver impliqu\u00e9s dans quoi que ce soit d'\u00e9trange ou de myst\u00e9rieux. Ils n'avaient pas de temps \u00e0 perdre avec des sornettes.",
"note": 10.0,
"dateDeParution": "01/01/1998",
"status": "emprunt\u00e9",
"genre": "Fantastique",
"format": "Poche",
"prix": 10.99,
"pointDeVente": "12, place des clercs 26000 Valence",
"pointDeVenteName": "La Licorne",
"editeur": "Gallimard"
}
]
Loading

0 comments on commit 3b544f8

Please sign in to comment.