195 lines
6.8 KiB
Python
195 lines
6.8 KiB
Python
#!/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
|