#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 1 22:49:56 2018
@author: alice
TODO :
* simplifier l'input autant que possible
* remplir
* débug
* documenter
"""
import sqlite3
from datetime import date
import locale
locale.setlocale(locale.LC_ALL, 'fr_FR.utf8')
class filmSQ():
def __init__(self, dic):
"""ceci est une aide"""
if type(dic) == type(""):
self.idN = dic
else:
conn = sqlite3.connect("baseFilms.db")
conn.row_factory = sqlite3.Row
c = conn.cursor()
try:
c.execute('INSERT INTO films VALUES (:i, :idN, :date, :nom, :realisateur, :duree, :synopsis, :pays, :annee, :youtube, :couleur, :image, :formatCopie, :langST)', dic)
acteursToSq = [{'idFilm' : dic['i'], 'acteur' : a} for a in dic['acteurs']]
c.executemany('INSERT INTO acteurs VALUES (NULL, :idFilm, :acteur)', acteursToSq)
conn.commit()
except Exception as e:
conn.rollback()
raise e
finally:
conn.close()
#id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT [PRIMARY KEY]
self.__setattr__('idN', dic['idN'])
def __setattr__(self, nom_attr, val_attr):
if nom_attr == 'idN':
object.__setattr__(self, 'idN', val_attr)
else:
try:
conn = sqlite3.connect("baseFilms.db")
conn.row_factory = sqlite3.Row
c = conn.cursor()
if nom_attr == 'acteurs':
c.execute("""DELETE FROM acteurs WHERE iFilm =?""", (self.i,))
acteursToSq = [{'iFilm' : self.i, 'acteur' : a} for a in val_attr]
c.executemany('INSERT INTO acteurs VALUES (NULL, :iFilm, :acteur)', acteursToSq)
else:
c.execute('UPDATE films SET %s = ? WHERE idN = ?' % nom_attr, (val_attr, self.idN))
conn.commit()
except Exception as e:
conn.rollback()
raise e
finally:
conn.close()
def __getattr__(self, nom):
conn = sqlite3.connect("baseFilms.db", detect_types=sqlite3.PARSE_DECLTYPES)
conn.row_factory = sqlite3.Row
c = conn.cursor()
try:
if nom == 'acteurs':
c.execute("""SELECT name FROM acteurs WHERE iFilm=?""", (self.i,))
r = c.fetchall()
res = [a[0] for a in r]
else:
c.execute("""SELECT %s FROM films WHERE idN=:idN""" % nom, {"idN":self.idN})
r = c.fetchone()
res = r[0]
conn.commit()
except Exception as e:
conn.rollback()
raise e
finally:
conn.close()
return res
def __str__(self):
try:
conn = sqlite3.connect("baseFilms.db")
#conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute('SELECT idN, nom, date FROM films WHERE idN = ?', (self.idN))
r = c.fetchone()
s = r[0] + ' : ' + r[1] + ' le ' + r[2]
conn.commit()
except Exception as e:
conn.rollback()
raise e
finally:
conn.close()
return s
def blog(self):
res = u'
\
\
Durée :'
res += str(self.duree)
if self.couleur:
res += u'
Couleur'
else:
res += u'
Noir et blanc'
res += u'
Pays :' + self.pays
res += u'
' + self.formatCopie + ' . ' + self.langST +''
res += u'
Année :' + str(self.annee)
res += u'
Avec :' + strListe(self.acteurs)
res += u'
Synopsis : ' + self.synopsis + '
'
res += u"
"
res += u"Comme d'habitude, l'entrée coûte 4 euros, 3 pour les membres du COF et vous avez la possibilité d'acheter des cartes de 10 places pour respectivement 30 et 20 euros. L'entrée est gratuite pour les étudiant.e.s invité.e.s."
res += u'
Et pour résumer :
Rendez-vous le ' + self.date.strftime("mardi %d %B %Y")
res += u', 20h30
en salle Dussane, au 45 rue ' + "d'Ulm
" + 'pour voir et revoir
'
res += self.nom + u'
de ' + self.realisateur
res += u"
"
return res
def calendrier(self):
res = ' \n \n
'
res += '
'
res += '
' + self.date.strftime("mardi %d %B %Y") +', 20h30
'
res += self.nom + ' de ' + self.realisateur +' (' +str(self.annee) + ')
'
res += str(self.duree) + ' . '
if self.couleur:
res += "Couleurs"
else:
res += "Noir & Blanc"
res += " . " + self.pays + ".
Avec : " + strListe(self.acteurs) + ".
"
res += self.langST + ' . ' + self.formatCopie + ".
"
res += '' + self.synopsis + '
'
res += '
Retour en haut de page'
res += "
\n \n
"
return res
def bocal(self):
res = "\centerline{\date{" + self.date.strftime("mardi %d %B %Y") + ", 20h30}} \n"
res += "\centerline{Salle Dussane} \n"
res += "\centerline{\emph{\Large " + self.nom + "}} \n"
res += "\centerline{" + self.realisateur + " (" + str(self.annee) + ") } \n"
res += "\medskip \n"
if len(self.acteurs) == 1 :
res += "\centerline{" + self.acteurs[0] + "}\n"
if len(self.acteurs) >= 2 :
res += "\centerline{" + self.acteurs[0]+ ', ' + self.acteurs[1] + "}\n"
if len(self.acteurs) > 2 :
res += "\centerline{" + self.acteurs[2] + "}\n"
res += "\medskip \n"
res += "\centerline{" + self.langST + ' . ' + self.formatCopie + "}\n"
res += "\medskip \n"
res += "\centerline{\\textit{" + str(self.duree) + "}}\n \n"
res += "\medskip\n"
res += "\medskip \n \centerline{4~€~/~3~€ COF} \n \medskip \n \n "
res += "\centerline{\includegraphics[width=5cm]{cine}}\n \n"
res += "\medskip\n"
res += self.synopsis
return res
def mail(self):
res = ' \n \t \n \n
\n \t \t'
res += ' \n \t \t'
res += '
[cine-info] ' + self.nom + ' de ' + self.realisateur + ' (' + self.date.strftime("mardi %d %B %Y") + ', 20h30) \n \t'
res += ' \n \t \n \t \t
'
res += '\n \t \t \t \n \t\t\t'
res += '
\n \n
'
res += '\n \t\t\t\t\t \n\t\t\t\t
\n'
res += '
Bonjour à toutes et à tous,
\n
Ce mail contient du HTML. Si vous ne pouvez pas le lire, allez sur notre site : http://www.cineclub.ens.fr
'
res += '\n
Retrouvez-nous en salle Dussane ' + self.date.strftime("mardi %d %B %Y") + ", 20h30 ! Comme d'habitude, l'entrée coûte 4€, 3€ pour les membres du COF et vous avez la possibilité d'acheter des cartes de 10 places pour respectivement 30€ et 20€. L'entrée est gratuite pour les étudiants invités.
"
res += '
'
res += '
'+ self.nom +' \n de ' + self.realisateur + '
\n \n
'
res += '
Durée : '+ str(self.duree) + '.
\n'
if self.couleur:
res +'
Couleur.
\n'
else:
res += '
Noir et blanc \n'
res += '
Pays : ' + self.pays + '
\n'
res += '
Format de la copie : ' + self.formatCopie + '
\n'
res += '
' + self.langST + ' \n'
res += '
Année : ' + str(self.annee) + '
\n'
res += '
Avec : ' + strListe(self.acteurs) + '...
\n'
res += '
Rapide synopsis : ' + self.synopsis + '
'
res += '
Plus d\'informations (bande-annonce, etc.) sur notre blog !'
res += '
Vous ne pouvez pas venir à cette séance mais vous aimeriez aller au ciné-club une prochaine fois ?
'
res += 'Découvrez le calendrier de nos prochaines séances.
'
res += '
À très bientôt en salle Dussane !
L\'équipe du ciné-club
http://cineclub.ens.fr
'
res += '
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.
'
res += '
Vous ne souhaitez plus recevoir notre newsletter ? Désinscrivez-vous
'
res += '
'
return res
def maxId():
try:
conn = sqlite3.connect("baseFilms.db")
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute('SELECT MAX(i) FROM films')
r = c.fetchone()
except Exception as e:
conn.rollback()
raise e
finally:
conn.close()
return r[0]
def printAll():
try:
conn = sqlite3.connect("baseFilms.db")
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute('SELECT idN, nom, date FROM films ORDER BY i DESC')
r = c.fetchall()
for movie in r:
print(movie[0], ' : ', movie[1], ' le ', movie[2])
except Exception as e:
conn.rollback()
raise e
finally:
conn.close()
pass
def strListe(liste):
res = ""
for l in liste[:-1]:
res += l +', '
if liste != []:
res += liste[-1]
return res
def newFilm():
"""Interface d'ajout d'un nouveau film"""
dic = {}
i = filmSQ.maxId()
dic['i'] = i+1
dic['idN'] = input("identifiant du film ? ")
d = input("date de la séance (format JJ/MM/AAAA ) ")
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['realisateur'] = input("realisateur ? ")
dic['duree'] = eval(input("durée du film (en minutes)? "))
dic['synopsis'] = input("Donnez ici un synopsis rapide du film ")
dic['pays'] = input("pays de diffusion du film ? ")
dic['annee'] = input("année de sortie du film (format AAAA) ? ")
dic['youtube'] = input("adresse youtube de la bande-annonce ? ")
dic['image'] = input("url d'une affiche du film ? ")
dic['couleur'] = eval(input("le film est-il en couleur (format True/False) ? "))
dic['formatCopie'] = input("format de la copie ? ")
dic['langST'] = input("langue et sous-titre : VF/VOSTFR ? ")
print(dic)
seance = filmSQ(dic)
return seance