diff --git a/README b/README
new file mode 100644
index 0000000..5a88132
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+Ctrl-D : Ferme le programme
diff --git a/ccInterface.py b/ccInterface.py
index 554eb7b..6a31c88 100644
--- a/ccInterface.py
+++ b/ccInterface.py
@@ -13,8 +13,11 @@ Created on Sun Mar 25 18:20:49 2018
from cineclubBlogSQ import filmSQ as f
import sqlite3
+import os
+import readline
DEBUG = True
+OPSYS = (os.uname()).sysname
class FilmInterface():
@@ -23,31 +26,52 @@ class FilmInterface():
def menu(self):
self.filmEnCours()
- champ = eval(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"""))
+ champ = eval(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"""))
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")
- self.filmCharge = f(rep)
- #TODO fix when wrong idN
- self.menu()
+ try:
+ self.filmCharge = f(rep)
+ except TypeError:
+ print("L'identifiant n'est pas correct")
+ finally:
+ self.menu()
def newFilm(self):
- f.newFilm()
+ self.filmCharge = f.newFilm()
def afficherFilm(self):
if self.filmCharge:
@@ -85,13 +109,22 @@ class FilmInterface():
#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 )
- 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 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()
+ 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:
@@ -108,7 +141,7 @@ class FilmInterface():
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")
@@ -128,7 +161,7 @@ class FilmInterface():
print(self.filmCharge.mail())
self.finAction()
elif rep == "6":
- print("Fonction non implémentée pour le moment")
+ print(self.filmCharge.allCalendars())
self.finAction()
elif rep == "7":
self.selectFilm()
@@ -144,4 +177,8 @@ class FilmInterface():
pass
fi = FilmInterface()
-fi.main()
+try:
+ fi.main()
+except EOFError:
+ print("\nCtrl-D : Sortie du programme")
+ pass
diff --git a/cineclubBlogSQ.py b/cineclubBlogSQ.py
index d612984..2b08741 100644
--- a/cineclubBlogSQ.py
+++ b/cineclubBlogSQ.py
@@ -14,17 +14,44 @@ TODO :
"""
import sqlite3
+import datetime
from datetime import date
import locale
locale.setlocale(locale.LC_ALL, 'fr_FR.utf8')
+#def adapt_datetime(ts):
+# return time.mktime(ts.timetuple())
+
+#sqlite3.register_adapter(datetime.date, adapt_datetime)
+
class filmSQ():
def __init__(self, dic):
"""ceci est une aide"""
if type(dic) == type(""):
self.idN = dic
+
+ conn = sqlite3.connect("baseFilms.db")
+ conn.row_factory = sqlite3.Row
+ c = conn.cursor()
+
+ try:
+ c.execute("""SELECT i FROM films WHERE idN = ?""",(dic,))
+ r = c.fetchone()
+ self.i = r[0]
+
+ conn.commit()
+
+ except Exception as e:
+ conn.rollback()
+ raise e
+ finally:
+ conn.close()
+
+
+
elif type(dic) == type(1):
+ self.i = dic
conn = sqlite3.connect("baseFilms.db")
conn.row_factory = sqlite3.Row
c = conn.cursor()
@@ -85,13 +112,7 @@ class filmSQ():
raise e
finally:
conn.close()
-
-
-
-
-
-
-
+
def __getattr__(self, nom):
conn = sqlite3.connect("baseFilms.db", detect_types=sqlite3.PARSE_DECLTYPES)
conn.row_factory = sqlite3.Row
@@ -176,7 +197,30 @@ class filmSQ():
res += '
Retour en haut de page'
res += "
\n \n
"
return res
-
+
+ def allCalendars(self):
+ conn = sqlite3.connect("baseFilms.db", detect_types=sqlite3.PARSE_DECLTYPES)
+ conn.row_factory = sqlite3.Row
+ c = conn.cursor()
+ res = ""
+ try:
+ conn = sqlite3.connect("baseFilms.db")
+ #conn.row_factory = sqlite3.Row
+ c = conn.cursor()
+ c.execute('SELECT idN FROM films WHERE date>=? ', (self.date,))
+ #c.executemany('INSERT INTO acteurs VALUES (NULL, :iFilm, :acteur)', acteursToSq)
+ r = c.fetchall()
+ listFilms = [filmSQ(a[0]) for a in r]
+ conn.commit()
+ for film in listFilms:
+ res += film.calendrier() + "\n\n"
+ except Exception as e:
+ conn.rollback()
+ raise e
+ finally:
+ conn.close()
+ return res
+
def bocal(self):
res = "\centerline{\date{" + self.date.strftime("mardi %d %B %Y") + ", 20h30}} \n"
res += "\centerline{Salle Dussane} \n"
@@ -199,8 +243,9 @@ class filmSQ():
res += "\medskip\n"
res += self.synopsis
return res
-
- def mail(self):
+
+
+ def mail(self):
res = ' \n \t
Toutes les séances du ciné-club se déroulent en salle Dussane, au 45 rue d\'Ulm, Paris.
Métro : Luxembourg, Place Monge. Bus: Feuillantine.
Vous ne souhaitez plus recevoir notre newsletter ? Désinscrivez-vous
' res += ' ' - return res + return res def facebook(self): res = self.nom + " - " + self.realisateur @@ -250,7 +295,7 @@ class filmSQ(): res += "\n Comme d’habitude, l’entrée coûte 4€, 3€ pour les membres du COF (association d'élèves de l'ENS). L’entrée est gratuite pour les membres du Programme Étudiant⋅e⋅s Invité⋅e⋅s." res += " \n L'accès est ouvert à tous ; pas besoin d'être à l'ENS !" return res - + def maxId(): try: conn = sqlite3.connect("baseFilms.db") @@ -273,10 +318,10 @@ class filmSQ(): conn.row_factory = sqlite3.Row c = conn.cursor() - c.execute('SELECT idN, nom, date FROM films ORDER BY i ASC') + c.execute('SELECT idN, nom, date, i FROM films ORDER BY i ASC') r = c.fetchall() for movie in r: - print(movie[0], ' : ', movie[1], ' le ', movie[2]) + print(movie[3], ' - ', movie[0], ' : ', movie[1], ' le ', movie[2]) except Exception as e: conn.rollback() raise e @@ -284,6 +329,18 @@ class filmSQ(): conn.close() pass + def makeListActors(): + l = [] + new = input("Entrez le nom des acteurs en appuyant sur Entrée entre chaque.gccPour terminer, appuyer sur Entrée avec une ligne vide.\n") + if (new == -1): + return -1 + while(new != ""): + l += [new] + new = input() + pass + return l + + def newFilm(): """Interface d'ajout d'un nouveau film""" dic = {} @@ -295,7 +352,8 @@ class filmSQ(): d = d.split("/") dic['date'] = date(int(d[2]), int(d[1]), int(d[0])) dic['nom'] = input("titre ? ") - dic['acteurs'] = eval(input("acteurs (format [acteur1, acteur2, ..]) ? ")) + dic['acteurs'] = filmSQ.makeListActors() + #eval(input("acteurs (format [acteur1, acteur2, ..]) ? ")) dic['realisateur'] = input("realisateur ? ") dic['duree'] = eval(input("durée du film (en minutes)? ")) dic['synopsis'] = input("Donnez ici un synopsis rapide du film ") diff --git a/dumpFile b/dumpFile new file mode 100644 index 0000000..57257dc --- /dev/null +++ b/dumpFile @@ -0,0 +1,21 @@ +CREATE TABLE IF NOT EXISTS "acteurs" ( + `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + `iFilm` SMALLINTUNSIGNED NOT NULL, + `name` TEXT +); +CREATE TABLE films ( + i INTEGER AUTO_INCREMENT PRIMARY KEY, + idN TEXT NOT NULL, + date DATE, + nom TEXT, + realisateur TEXT, + duree INTEGER, + synopsis TEXT, + pays TEXT, + annee INTEGER, + youtube TEXT, + couleur INTEGER, + image TEXT, + formatCopie TEXT, + langST TEXT); +INSERT INTO films VALUES(0,'modele','1-1-1','Titre','Réalisateur',0,'synopsis','Pays',0,'lienYT',1,'lienImg','35mm','VOSTFR');