2018-02-02 00:22:57 +01:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 1 22 : 49 : 56 2018
@author : alice
"""
import sqlite3
2018-02-02 21:04:51 +01:00
from datetime import date
2018-02-02 00:22:57 +01:00
""" TODO :
gérer liste acteurs : une autre table ( id , idFilm , String acteur )
gérer date
"""
class filmSQ ( ) :
def __init__ ( self , idN ) :
""" ceci est une aide """
self . idN = idN
def __init__ ( self , dic ) :
""" ceci est une aide """
conn = sqlite3 . connect ( " baseFilms.db " )
conn . row_factory = sqlite3 . Row
c = conn . cursor ( )
2018-02-02 00:28:36 +01:00
2018-02-07 20:36:13 +01:00
try :
c . execute ( ' INSERT INTO films VALUES (:i, :idN, :date, :nom, :realisateur, :duree, :synopsis, :pays, :annee, :youtube, :couleur, :image, :formatCopie, :langST) ' , dic )
2018-02-02 00:22:57 +01:00
2018-02-07 20:36:13 +01:00
acteursToSq = [ { ' idFilm ' : self . i , ' acteur ' : a } for a in dic [ ' acteurs ' ] ]
c . executemany ( ' INSERT INTO acteurs VALUES (NULL, :idFilm, :acteur) ' , acteursToSq )
conn . commit ( )
finally :
c . close ( )
2018-02-02 00:22:57 +01:00
#id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT [PRIMARY KEY]
2018-02-07 20:36:13 +01:00
self . idN = dic [ ' idN ' ]
2018-02-02 21:04:51 +01:00
2018-02-02 00:22:57 +01:00
def __setattr__ ( self , nom_attr , val_attr ) :
2018-02-02 21:04:51 +01:00
if nom_attr == ' idN ' :
res = object . __setattr__ ( self , ' idN ' , val_attr )
2018-02-02 00:22:57 +01:00
else :
2018-02-07 20:46:38 +01:00
try :
conn = sqlite3 . connect ( " baseFilms.db " )
conn . row_factory = sqlite3 . Row
c = conn . cursor ( )
if nom_attr == ' acteurs ' :
c . execute ( ' DELETE FROM acteurs WHERE idFilm =? ' , ( self . i ) )
acteursToSq = [ { ' idFilm ' : self . i , ' acteur ' : a } for a in val_attr ]
c . executemany ( ' INSERT INTO acteurs VALUES (NULL, :idFilm, :acteur) ' , acteursToSq )
else :
c . execute ( ' UPDATE films SET ? = ? WHERE idN = ? ' , ( nom_attr , val_attr , self . idN ) )
2018-02-07 13:05:47 +01:00
finally :
2018-02-07 20:46:38 +01:00
c . commit ( )
2018-02-07 13:05:47 +01:00
conn . close ( )
2018-02-02 00:22:57 +01:00
def __getattr__ ( self , nom ) :
2018-02-07 13:05:47 +01:00
try :
2018-02-02 21:04:51 +01:00
conn = sqlite3 . connect ( " baseFilms.db " )
conn . row_factory = sqlite3 . Row
c = conn . cursor ( )
if nom == ' acteurs ' :
c . execute ( ' SELECT :acteur FROM acteurs WHERE idFilms=? ' , ( self . i ) )
r = c . fetchall ( )
res = [ a [ 0 ] for a in r ]
else :
c . execute ( ' SELECT :nom_attr FROM films WHERE idN=:idN ' , { " idN " : self . idN , " nom_attr " : nom } )
r = c . fetchone ( )
res = r [ 0 ]
2018-02-07 20:46:38 +01:00
2018-02-07 13:05:47 +01:00
finally :
2018-02-07 20:46:38 +01:00
c . commit ( )
2018-02-02 21:04:51 +01:00
conn . close ( )
2018-02-02 00:22:57 +01:00
return res
def __str__ ( self ) :
2018-02-07 13:05:47 +01:00
try :
conn = sqlite3 . connect ( " baseFilms.db " )
conn . row_factory = sqlite3 . Row
c = conn . cursor ( )
c . execute ( ' SELECT (?,?,?) FROM films WHERE idN = ? ' , ( ' idN ' , ' nom ' , ' date ' , self . idN ) )
r = c . fetchone ( )
s = r [ 0 ] + ' : ' + r [ 1 ] + ' le ' + r [ 2 ]
finally :
conn . close ( )
2018-02-02 00:22:57 +01:00
return s
def blog ( self ) :
res = u ' <div class= " entry-trailer " ><iframe src= " '
res + = self . youtube
res + = u ' " width= " 560 " height= " 315 " frameborder= " 0 " allowfullscreen= " allowfullscreen " ></iframe></div><br /> '
res + = u ' <!-- Commentaire pertinent quelconque vis-à-vis du film --> <div class= " entry-mainblock " > \
< div class = " entry-separator " > < a href = " http://www.cineclub.ens.fr/wp-content/uploads/2017/08/toujoursReveGangster.jpg " > < img class = " alignnone wp-image-1873 size-medium " src = " http://www.cineclub.ens.fr/wp-content/uploads/2017/08/toujoursReveGangster-300x300.jpg " alt = " " width = " 300 " height = " 300 " / > < / a > < / div > \
< div class = " entry-text-info " > < b > Durée < / b > : '
res + = self . duree
if self . couleur :
res + = u ' <br /><b>Couleur</b> '
else :
res + = u ' <br /><b>Noir et blanc</b> '
res + = u ' <br /><b>Pays :</b> ' + self . pays
res + = u ' <br /><b>Format de la copie :</b> ' + self . formatCopie
res + = u ' <br /><b> ' + self . langST + ' </b> '
res + = u ' <br /><b>Année :</b> ' + str ( self . annee )
res + = u ' <br /><b>Avec :</b> ' + strListe ( self . acteurs )
res + = u ' <br /><div class= " entry-text-info " ><strong>Synopsis</strong> : ' + self . synopsis + ' </div> '
res + = u " <br /></div> "
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 ' <div class= " entry-resume " > Et pour résumer : <div class= " resume-bloc " ><span class= " resume-date " >Rendez-vous le ' + self . date
res + = u ' , 20h30</span><br /><span class= " resume-place " >en salle Dussane, au 45 rue ' + " d ' Ulm</span><br /> " + ' <span class= " resume-see " >pour voir et revoir</span> <br /><span class= " resume-title " > '
res + = self . nom + u ' </span><br /><span class= " resume-director " > de ' + self . realisateur
res + = u " </span><br /></div></div><!-- Balise de commentaire à retirer lors de l ' insertion de l ' analyse " + u ' <div class= " entry-analyse " > '
res + = u " <h2>Proposition d ' analyse</h2>Bientôt…</div>--> "
return res
def calendrier ( self ) :
res = ' <!-- Film # ' + str ( self . i ) + ' --> \n \n <div class= " entry-mainblock " > <div class= " entry-separator " > '
res + = ' <img class= " entry-poster " src= " http://www.cof.ens.fr/cineclub/blogImages/2016-2017/affiche-1-thumbnail200.jpg " alt= " " /></div> '
res + = ' <div class= " entry-text-info " ><br /><br /><b> ' + self . date + ' , 20h30 <br /><i> '
res + = self . nom + ' </i> de ' + self . realisateur + ' ( ' + str ( self . annee ) + ' )</b><br /><br /> '
res + = self . duree + ' . '
if self . couleur :
res + = " Couleurs "
else :
res + = " Noir & Blanc "
res + = " . " + self . pays + " . <br /> Avec : " + strListe ( self . acteurs ) + " .<br/> "
res + = self . langST + ' . ' + self . formatCopie + " .<br/><br/> "
res + = ' <span class= " entry-synopsis " > ' + self . synopsis + ' </span><br/><br/></div> '
res + = ' </div><br/><a style= " float: right; " href= " #haut " >Retour en haut de page</a> '
res + = " <br/> \n \n <!-- END OF POST --><br/> "
return res
def bocal ( self ) :
res = " \ centerline { \ date { " + self . date + " , 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 + " } "
res + = " \ centerline { \\ textit { " + 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 = ' <html> \n \t <head> \n \n <meta http-equiv= " content-type " content= " text/html; charset=utf-8 " > \n \t \t '
res + = ' <style type= " text/css " >p { margin: 0; }</style> \n \t \t '
res + = ' <title>[cine-info] ' + self . nom + ' de ' + self . realisateur + ' ( ' + self . date + ' , 20h30)</title> \n \t '
res + = ' </head> \n \t <body text= " #000000 " bgcolor= " #FFFFFF " > \n \t \t <div style= " font-family: arial,helvetica,sans-serif; font-size: 12pt; color: #000000 " > '
res + = ' \n \t \t \t <style>p { margin: 0; }</style> \n \t \t \t '
res + = ' <div style= " font-family: arial,helvetica,sans-serif; font-size: 12pt; color: #000000 " > \n <style>p { margin: 0; }</style> \n <div style= " font-family: arial,helvetica,sans-serif; font-size: 12pt; color: #000000 " > '
res + = ' \n \t \t \t \t \t <style>p { margin: 0; }</style> \n \t \t \t \t <div style= " font-family: arial,helvetica,sans-serif;font-size: 12pt; color: #000000 " > \n '
res + = ' <p>Bonjour à toutes et à tous,</p> \n <p><i>Ce mail contient du HTML. Si vous ne pouvez pas le lire, allez sur notre site : <a class= " moz-txt-link-freetext " href= " http://www.cineclub.ens.fr " target= " _blank " >http://www.cineclub.ens.fr</a></i></p> '
res + = ' \n <p style= " text-align:justify " >Retrouvez-nous en salle Dussane <b> ' + self . date + " , 20h30</b> ! Comme d ' habitude, l ' entrée coûte <b>4€, 3€</b> 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.<br> "
res + = ' </p> <div style= " border:grey 1px solid; padding:5px; text-align:justify; " > '
res + = ' <center><b><i> ' + self . nom + ' </i></b> \n de <b> ' + self . realisateur + ' <br> \n </b></center> \n <br> '
res + = ' <b>Durée </b>: ' + self . duree + ' .<br> \n '
if self . couleur :
res + ' <b>Couleur</b>. <br> \n '
else :
res + = ' <b>Noir et blanc</b> <br> \n '
res + = ' <b>Pays :</b> ' + self . pays + ' <br> \n '
res + = ' <b>Format de la copie :</b> ' + self . formatCopie + ' <br> \n '
res + = ' <b> ' + self . langST + ' </b> <br> \n '
res + = ' <b>Année :</b> ' + str ( self . annee ) + ' <br> \n '
res + = ' <b>Avec :</b> ' + strListe ( self . acteurs ) + ' ...<br> \n '
res + = ' <b>Rapide synopsis :</b> ' + self . synopsis + ' <br> <br> '
res + = ' <span class= " entry-synopsis " > </span> <br> <center><a href= " http://cineclub.ens.fr " title= " Plus d \' informations (bande-annonce, synopsis, etc.) sur notre blog ! " target= " _blank " >Plus d \' informations (bande-annonce, etc.) sur notre blog !</a></center> '
res + = ' </div> <p style= " text-align:justify " >Vous ne pouvez pas venir à cette séance mais vous aimeriez aller au ciné-club une prochaine fois ?<br> '
res + = ' <a href= " http://cineclub.ens.fr/calendrier " title= " Découvrez le calendrier de nos prochaines séances. " target= " _blank " >Découvrez le calendrier de nos prochaines séances.</a></p> '
res + = ' <p>À très bientôt en salle Dussane !<br> L \' équipe du ciné-club<br> <a href= " http://cineclub.ens.fr " title= " http://cineclub.ens.fr " target= " _blank " >http://cineclub.ens.fr</a></p> '
res + = ' <p>Toutes les séances du ciné-club se déroulent en salle Dussane, au 45 rue d \' Ulm, Paris. <br> Métro : Luxembourg, Place Monge. Bus: Feuillantine.</p> '
res + = ' <p style= " text-align:center " ><small>Vous ne souhaitez plus recevoir notre newsletter ? <a href= " http://www.cineclub.ens.fr/newsletter-desinscription/ " target= " _blank " > Désinscrivez-vous</a></small></p> '
res + = ' </div> </div> </body> </html> '
return res
def maxId ( ) :
2018-02-07 13:05:47 +01:00
try :
conn = sqlite3 . connect ( " baseFilms.db " )
2018-02-02 00:22:57 +01:00
2018-02-07 13:05:47 +01:00
conn . row_factory = sqlite3 . Row
c = conn . cursor ( )
c . execute ( ' SELECT MAX(i) FROM films ' )
r = c . fetchone ( )
finally :
conn . close ( )
2018-02-02 00:22:57 +01:00
return r [ 0 ]
def printAll ( ) :
2018-02-07 13:05:47 +01:00
try :
conn = sqlite3 . connect ( " baseFilms.db " )
conn . row_factory = sqlite3 . Row
c = conn . cursor ( )
c . execute ( ' SELECT idN FROM films ORDER_BY i ' )
r = c . fetchall ( )
for movie in r :
print ( r [ 0 ] + ' : ' + r [ 1 ] + ' le ' + r [ 2 ] )
finally :
conn . close ( )
2018-02-02 00:22:57 +01:00
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 ? " )
2018-02-02 21:04:51 +01:00
d = eval ( input ( " date de la séance (format (JJ, MM, AAAA) " ) )
dic [ ' date ' ] = date ( d [ 2 ] , d [ 1 ] , d [ 0 ] )
2018-02-02 00:22:57 +01:00
dic [ ' nom ' ] = input ( " titre ? " )
dic [ ' acteurs ' ] = eval ( input ( " acteurs (format [acteur1, acteur2, ..]) ? " ) )
dic [ ' realisateur ' ] = input ( " realisateur ? " )
2018-02-02 21:04:51 +01:00
dic [ ' duree ' ] = eval ( input ( " durée du film (en minutes)? " ) )
2018-02-02 00:22:57 +01:00
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 ? " )
2018-02-02 21:04:51 +01:00
dic [ ' image ' ] = input ( " url d ' une affiche du film ? " )
2018-02-02 00:22:57 +01:00
dic [ ' couleur ' ] = eval ( input ( " le film est-il en couleur (format True/False) ? " ) )
2018-02-02 21:04:51 +01:00
dic [ ' formatCopie ' ] = input ( " format de la copie ? " )
dic [ ' langST ' ] = input ( " langue et sous-titre : VF/VOSTFR ? " )
2018-02-02 00:22:57 +01:00
2018-02-07 20:36:13 +01:00
print ( dic )
2018-02-02 00:22:57 +01:00
seance = filmSQ ( dic )
2018-02-07 20:36:13 +01:00
return ( dic , seance )
2018-02-02 00:22:57 +01:00