Package medite :: Package Controleurs :: Module DGManager
[hide private]
[frames] | no frames]

Source Code for Module medite.Controleurs.DGManager

  1  # -*- coding: iso-8859-1 -*- 
  2  # Copyright 20003 - 2008: Julien Bourdaillet (julien.bourdaillet@lip6.fr), Jean-Gabriel Ganascia (jean-gabriel.ganascia@lip6.fr) 
  3  # This file is part of MEDITE. 
  4  # 
  5  #    MEDITE is free software; you can redistribute it and/or modify 
  6  #    it under the terms of the GNU General Public License as published by 
  7  #    the Free Software Foundation; either version 2 of the License, or 
  8  #    (at your option) any later version. 
  9  # 
 10  #    MEDITE is distributed in the hope that it will be useful, 
 11  #    but WITHOUT ANY WARRANTY; without even the implied warranty of 
 12  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 13  #    GNU General Public License for more details. 
 14  # 
 15  #    You should have received a copy of the GNU General Public License 
 16  #    along with Foobar; if not, write to the Free Software 
 17  #    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
 18   
 19  import shelve,os,os.path,shutil,dircache 
 20  import Utile.constantesDonnees, Utile.exceptionsDonnees 
 21  import FInfoManager 
 22  from Utile.exceptionsDonnees import * 
 23   
24 -class DGManager(object):
25 - def getDirAuteur(self,nomAuteur):
26 """ Renvoie le dossier associé à un auteur 27 pre: isinstance(nomAuteur,str) """ 28 return os.path.join(Utile.constantesDonnees.DG_REP, nomAuteur)
29 - def getFileAuteur(self,nomAuteur):
30 """ Renvoie le nom du fichier stockant l'objet auteur 31 pre: isinstance(nomAuteur,str) """ 32 return os.path.join(self.getDirAuteur(nomAuteur),Utile.constantesDonnees.DG_AUTEUR_FILE)
33 - def getDG(self,nomAuteur,nomOeuvre):
34 """ Renvoie le DG associé à un auteur et une oeuvre 35 pre: isinstance(nomAuteur,str) and isinstance(nomOeuvre,str)""" 36 return os.path.join(self.getDirAuteur(nomAuteur),nomOeuvre)
37 - def existeAuteur(self,nomAuteur):
38 """ Vrai si l'auteur existe 39 pre: isinstance(nomAuteur,str) 40 post: isinstance(__return__,bool) """ 41 lAuteurs = os.listdir(Utile.constantesDonnees.DG_REP) 42 if nomAuteur in lAuteurs: return True 43 else: return False
44 - def addAuteur(self,auteur):
45 """ Crée un dossier nomAuteur 46 pre: isinstance(auteur,Auteur) """ 47 if (self.existeAuteur(auteur.getNom())): 48 raise AuteurDejaExistant('L\'auteur "'+auteur.getNom()+'" existe deja.',auteur) 49 dirAuteur = self.getDirAuteur(auteur.getNom()) 50 if not os.path.isdir(dirAuteur): 51 os.mkdir(dirAuteur) 52 fileAuteur = self.getFileAuteur(auteur.getNom()) 53 # stocke l'objet auteur dans 1 fichier 54 dicAuteur = shelve.open(fileAuteur) 55 dicAuteur[Utile.constantesDonnees.DG_AUTEUR_CLE] = auteur 56 dicAuteur.close()
57 - def delAuteur(self,nomAuteur):
58 """ Supprime un dossier nomAuteur 59 pre: isinstance(nomAuteur,str) """ 60 dirAuteur = self.getDirAuteur(nomAuteur) 61 if os.path.isdir(dirAuteur): 62 self.recDelFolder(dirAuteur)
63 - def getAuteur(self,nomAuteur):
64 """ Renvoie l'objet Auteur associé à nomAuteur ou en crée si il n'existe pas 65 pre: isinstance(nomAuteur,str) 66 post: isinstance(__return__,Auteur)""" 67 fileAuteur = self.getFileAuteur(nomAuteur) 68 if os.path.isfile(fileAuteur): 69 dicAuteur = shelve.open(fileAuteur) 70 auteur = dicAuteur[Utile.constantesDonnees.DG_AUTEUR_CLE] 71 dicAuteur.close() 72 else: auteur = Auteur(nomAuteur) 73 return auteur
74 - def getListeAuteurs(self):
75 """ Renvoie une liste des noms des dossiers auteurs 76 post: isinstance(__return__,list) """ 77 dirAuteurs = self.getDirAuteur("") 78 ld = dircache.listdir(dirAuteurs) 79 ld = filter(lambda x: x != "CVS" and x!= Utile.constantesDonnees.DG_AUTEUR_FILE, ld) 80 return ld
81
82 - def addOeuvre(self,nomAuteur,oeuvre):
83 """ Crée un DG 84 pre: isinstance(nomAuteur,str) and isinstance(oeuvre,Oeuvre) """ 85 nomDG = self.getDG(nomAuteur,oeuvre.getTitre()) 86 if not os.path.isdir(nomDG): 87 os.mkdir(nomDG) 88 auteur = self.getAuteur(nomAuteur) 89 fim = FInfoManager.FInfoManager(auteur,oeuvre) 90 fim.creerFichierInformations()
91
92 - def delOeuvre(self,nomAuteur,nomOeuvre):
93 """ Supprime un DG 94 pre: isinstance(nomAuteur,str) and isinstance(nomOeuvre,str) """ 95 nomDG = self.getDG(nomAuteur,nomOeuvre) 96 if os.path.isdir(nomDG): 97 self.recDelFolder(nomDG)
98 - def getListeOeuvresAuteur(self,nomAuteur):
99 """ Renvoie une liste des oeuvres d'un auteur 100 pre: isinstance(nomAuteur,str) 101 post: isinstance(__return__,list) """ 102 dirAuteur = self.getDirAuteur(nomAuteur) 103 ld = dircache.listdir(dirAuteur) 104 ld = filter(lambda x: x != "CVS" and x!='.cvsignore' and x!= Utile.constantesDonnees.DG_AUTEUR_FILE, ld) 105 return ld
106 107
108 - def loadDG(self,nomAuteur,nomOeuvre):
109 pass
110
111 - def addVersion(self,nomAuteur,nomOeuvre,nomVersion):
112 """ Crée une version 113 pre: isinstance(nomAuteur,str) and isinstance(nomOeuvre,str) and isinstance(nomVersion,str)""" 114 nomDG = self.getDG(nomAuteur,nomOeuvre) 115 dirVersion = os.path.join(nomDG,nomVersion) 116 if not os.path.isdir(dirVersion): 117 os.mkdir(dirVersion) 118 fim = FInfoManager.FInfoManager(Auteur(nomAuteur),Oeuvre(nomOeuvre)) 119 fim.creerVersion(nomVersion)
120 - def delVersion(self,nomAuteur,nomOeuvre,nomVersion):
121 """ Supprime une version 122 pre: isinstance(nomAuteur,str) and isinstance(nomOeuvre,str) and isinstance(nomVersion,str)""" 123 nomDG = self.getDG(nomAuteur,nomOeuvre) 124 dirVersion = os.path.join(nomDG,nomVersion) 125 if os.path.isdir(dirVersion): 126 self.recDelFolder(dirVersion) 127 fim = FInfoManager.FInfoManager(Auteur(nomAuteur),Oeuvre(nomOeuvre)) 128 fim.supprimerVersion(nomVersion)
129
130 - def addEtat(self,nomAuteur,nomOeuvre,nomVersion,fileEtat,etatPere=""):
131 """ Ajoute un état à partir du fichier fileEtat dans la version nomVersion 132 et ayant éventellement un etatPere 133 pre: isinstance(nomAuteur,str) and isinstance(nomOeuvre,str) and \ 134 isinstance(nomVersion,str) and isinstance(fileEtat,str) and isinstance(etatPere,str)""" 135 (filepath, nomEtat) = os.path.split(fileEtat) 136 nomDG = self.getDG(nomAuteur,nomOeuvre) 137 dirVersion = os.path.join(nomDG,nomVersion) 138 cheminEtat=os.path.join(dirVersion,nomEtat) 139 self.__copieFichier(fileEtat,cheminEtat) 140 fim = FInfoManager.FInfoManager(Auteur(nomAuteur),Oeuvre(nomOeuvre)) 141 fim.creerEtat(nomVersion, nomEtat, etatPere)
142
143 - def delEtat(self,nomAuteur,nomOeuvre,nomVersion,nomEtat):
144 """ Supprime un état 145 pre: isinstance(nomAuteur,str) and isinstance(nomOeuvre,str) and \ 146 isinstance(nomVersion,str) and isinstance(nomEtat,str) """ 147 fim = FInfoManager.FInfoManager(Auteur(nomAuteur),Oeuvre(nomOeuvre)) 148 lEtatsFils = fim.getListeEtatsFils(nomVersion,nomEtat) 149 nomDG = self.getDG(nomAuteur,nomOeuvre) 150 dirVersion = os.path.join(nomDG,nomVersion) 151 cheminEtat=os.path.join(dirVersion,nomEtat) 152 self.recDelFolder(cheminEtat) 153 if lEtatsFils != None and lEtatsFils != []: 154 for etatFils in lEtatsFils: 155 cheminEtat=os.path.join(dirVersion,etatFils) 156 self.recDelFolder(cheminEtat) 157 fim.supprimerEtat(nomVersion, nomEtat)
158
159 - def getListeVersionsDG(self,nomAuteur,nomOeuvre):
160 """ Renvoie une liste des versions d'un DG 161 pre: isinstance(nomAuteur,str) and isinstance(nomOeuvre,str) 162 post: isinstance(__return__,list) """ 163 nomDG = self.getDG(nomAuteur,nomOeuvre) 164 ld = dircache.listdir(nomDG) 165 ld = filter(lambda x: x != "CVS" and x != '.cvsignore' and x!= Utile.constantesDonnees.DG_FILE_INFO, ld) 166 return ld
167 - def getListeEtatsVersion(self,nomAuteur,nomOeuvre,nomVersion):
168 """ Renvoie une liste des etats d'une version 169 pre: isinstance(nomAuteur,str) and isinstance(nomOeuvre,str) and isinstance(nomVersion,str) 170 post: isinstance(__return__,list) """ 171 nomDG = self.getDG(nomAuteur,nomOeuvre) 172 path = os.path.join(nomDG,nomVersion) 173 #if not os.path.isdir(path): return [] 174 ld = dircache.listdir(path) 175 ld = filter(lambda x: x != "CVS" and x != '.cvsignore', ld) 176 return ld
177
178 - def __copieFichier(self,pSource,pDestinataire):
179 """ Methode privee qui sert a la copie d'un fichier """ 180 if os.path.isfile(pDestinataire): 181 raise Utile.exceptionsDonnees.FichierExistant(pSource,pDestinataire) 182 else: shutil.copyfile(pSource,pDestinataire)
183
184 - def importTextFolder(self,nomAuteur,nomOeuvre,textFolder):
185 """ Importe un répertoire d'états 186 pre: isinstance(nomAuteur,str) and isinstance(nomOeuvre,str) and isinstance(textFolder,str) """ 187 (filepath, nomVersion) = os.path.split(textFolder) 188 # création de la version du nom du répertoire 189 self.addVersion(nomAuteur,nomOeuvre,nomVersion) 190 for fichier in os.listdir(textFolder): 191 if os.path.isfile(os.path.join(textFolder,fichier)): 192 self.addEtat(nomAuteur,nomOeuvre,nomVersion,os.path.join(textFolder,fichier))
193
194 - def getEtatPath(self,nomAuteur,nomOeuvre,nomVersion,nomEtat):
195 """ Renvoie le fichier associé à un état 196 pre: isinstance(nomAuteur,str) and isinstance(nomOeuvre,str) and \ 197 isinstance(nomVersion,str) and isinstance(nomEtat,str) 198 post: isinstance(__return__,str) """ 199 nomDG = self.getDG(nomAuteur,nomOeuvre) 200 dirVersion = os.path.join(nomDG,nomVersion) 201 cheminEtat = os.path.join(dirVersion,nomEtat) 202 return cheminEtat
203
204 - def recDelFolder(self,folder):
205 """Efface récursivement un dossier et tout ce qu'il contient 206 pre: isinstance(folder,str) or isinstance(folder,unicode) """ 207 if os.path.isdir(folder): 208 liste = os.listdir(folder) 209 for i in liste : 210 self.recDelFolder(os.path.join(folder,i)) 211 os.rmdir(folder) 212 else: 213 os.remove(folder)
214
215 -class Auteur(object):
216 - def __init__(self, pNom, pPrenom="", pNais="", pDeces=""):
217 self.__nom = pNom 218 self.__prenom = pPrenom 219 self.__naissance = pNais 220 self.__deces = pDeces
221 - def getNom(self):
222 return self.__nom
223 - def getPrenom(self):
224 return self.__prenom
225 - def getNaissance(self):
226 return self.__naissance
227 - def getDeces(self):
228 return self.__deces
229 - def equals(self,auteur):
230 """pre: isinstance(auteur,Auteur) """ 231 return (self.getNom()==auteur.getNom() and self.getPrenom()==auteur.getPrenom() and 232 self.getNaissance()==auteur.getNaissance() and self.getDeces()==auteur.getDeces())
233
234 -class Oeuvre(object):
235 - def __init__(self, pTitre, pEdition="", pPublication=""):
236 self.__titre = pTitre 237 self.__edition = pEdition 238 self.__publication = pPublication
239 - def getTitre(self):
240 return self.__titre
241 - def getEdition(self):
242 return self.__edition
243 - def getPublication(self):
244 return self.__publication
245