#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sun Mar 25 18:20:49 2018 @author: alice """ #Enhancements : # * utiliser un dictionnaire pour les menus, afins d'avoir un menu de fond (quitter, corriger etc) # * mettre en place une file d'instruction pour anticiper # * vérifier les eval et les types donnés from cineclubBlogSQ import filmSQ as f import sqlite3 import readline DEBUG = True class FilmInterface(): def __init__(self): self.filmCharge = None def menu(self): self.filmEnCours() champ = input("""Voulez-vous \n 1: consulter la liste des films de la base de données \n 2: ajouter un film à la base de données \n 3: afficher une communication\n 4: modifier une séance\n 5: créer une base de données vierges\n""") try: champ = eval(champ) except NameError: pass if champ == 1: self.selectFilm() elif champ == 2: self.newFilm() print("\nFilm enregistré.\n") self.menu() elif champ == 3: self.communication() pass elif champ == 4: self.corrigerFilm() elif champ == 5: self.initBDD() else: print("\n Champ inconnu. Pour quitter, appuyer sur Ctrl-D\n") self.menu() pass def filmEnCours(self): if self.filmCharge: print("\nLe film couramment chargé est", self.filmCharge.nom, "\n") def initBDD(self): fichier = open("dumpFile","r") instruction = fichier.read() fichier.close() conn = sqlite3.connect('baseFilms.db') c = conn.cursor() c.executescript(instruction) conn.commit() conn.close() def selectFilm(self): f.printAll() rep = input("Entrez le code identifiant du film\n") try: self.filmCharge = f(rep) except TypeError: print("L'identifiant n'est pas correct") finally: self.menu() def newFilm(self): self.filmCharge = f.newFilm() def afficherFilm(self): if self.filmCharge: self.filmCharge.show() else: print("Vous n'avez aucun film chargé pour le moment.\n") rep = eval(input("Tapez \n 1: Charger un film à partir de la base de données \n 2: ajouter un nouveau film à la base de données \n 0: revenir au menu principal \n")) if rep == 1: self.selectFilm() elif rep == 2: self.newFilm() elif rep == 0: self.menu() else: print("Votre entrée n'est pas valide. Merci d'entrer quelque chose de possible.\n") self.afficherFilm() def corrigerFilm(self): if self.filmCharge: #recuperer les cles possibles conn = sqlite3.connect("baseFilms.db") conn.row_factory = sqlite3.Row c = conn.cursor() try: c.execute("SELECT * FROM films") keys = [a[0] for a in c.description] except Exception as e: conn.rollback() if DEBUG: raise(e) finally: conn.close() #faire la modification if keys: keys += ['acteurs'] print("Les champs possibles sont : ") for k in keys: print(k) nomAttr = input("Choisissez l'attribut que vous souhaitez modifier chez %s \n" % self.filmCharge.nom ) if nomAttr == "acteurs": print("La valeur actuelle du champ %s est %s.\nVeuillez entrer la nouvelle valeur pour ce champ (et -1 si vous ne souhaitez finalement pas modifier le champ)\n" % (nomAttr, self.filmCharge.__getattr__(nomAttr))) newValue = f.makeListActors() elif nomAttr == "durée": self.filmCharge.__setattr__(nomAttr, f.input_duree()) elif nomAttr == "couleur": self.filmCharge.__setattr__(nomAttr, f.input_color()) elif nomAttr == "date": self.filmCharge.__setattr__(nomAttr, f.input_date()) else: newValue = input("La valeur actuelle du champ %s est %s.\nVeuillez entrer la nouvelle valeur pour ce champ (et -1 si vous ne souhaitez finalement pas modifier le champ)\n" % (nomAttr, self.filmCharge.__getattr__(nomAttr))) if newValue != "-1": iStill = self.filmCharge.__getattr__(nomAttr) self.filmCharge.__setattr__(nomAttr, newValue) if nomAttr == "idN": self.filmCharge = f(iStill) else: print("\nVous n'avez finalement pas modifié cet attribut.") else: print("\nLa connexion avec la base de données a planté, la modification n'a pas été effectuée") #on retourne au reste de la navigation rep = input("\nVoulez-vous\n 1: modifier une nouvelle fois le film %s \n 0: retourner au menu principal\n" % self.filmCharge.nom) if rep == "1": self.corrigerFilm() elif rep == "0": self.menu() else: print("\nVous n'avez pas de film chargé à corriger. Veuillez en sélectionner un") self.menu() def communication(self): self.filmEnCours() rep = input("Voulez-vous afficher \n 1: l'article du bocal du film courant \n 2: l'article de blog du film courant \n 3: le calendrier du film courant \n 4: la communication Facebook du film courant \n 5: l'email du film courant \n 6: le calendrier des films à partir du film courant \n 7: changer le film sélectionné \n 0: revenir au menu principal \n") if rep == "1": print(self.filmCharge.bocal()) self.finAction() elif rep == "2": print(self.filmCharge.blog()) self.finAction() elif rep == "3": print(self.filmCharge.calendrier()) self.finAction() elif rep == "4": print(self.filmCharge.facebook()) self.finAction() elif rep == "5": print(self.filmCharge.mail()) self.finAction() elif rep == "6": print(self.filmCharge.allCalendars()) self.finAction() elif rep == "7": self.selectFilm() elif rep == "0": self.menu() def finAction(self): self.menu() pass def main(self): self.menu() pass fi = FilmInterface() try: fi.main() except EOFError: print("\nCtrl-D : Sortie du programme") pass except: fi.main() pass