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

Source Code for Module medite.Controleurs.cDossierGenetique

  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  # Nom:          cDossierGenetique.py 
 20  # Objet:        Classe qui interface entre les dossiers et l'interface graphique 
 21  #---------------------------------------------------------------------------- 
 22   
 23  import os,dircache 
 24  import posixpath 
 25  import shutil 
 26   
 27  from Utile.constantesDonnees import * 
 28  from Donnees.donnees import * 
 29  from Donnees.donneesInformations import * 
 30   
 31   
 32  # C'est la classe de type 'Controleur' qui fait le lien entre les dossiers et l'interface 
33 -class CDossierGenetique:
34 # Constructeur
35 - def __init__(self):
36 self.__don = Donnees()
37 38 # Methode qui cree le dossier version dans le dossier genetique de 39 # l'oeuvre passee en parametre
40 - def creerDossierVersion(self,pNom,pTitre,pVersion):
41 nomDG = self.__don.getNomDG(pNom, pTitre) 42 #print nomDG 43 chem=os.path.join(LEURREP,pNom,nomDG,pVersion) 44 #print chem 45 os.mkdir(chem)
46 47 # Methode qui renvoie une liste des dossiers Version contenus 48 # dans le dossier genetique de l'oeuvre passee en parametre
49 - def getListeDossiersVersions(self,pNom,pTitre):
50 listeDossiersVersions=[] 51 nomDG = self.__don.getNomDG(pNom, pTitre) 52 cheminDG=os.path.join(LEURREP,pNom,nomDG) 53 for X in os.listdir(cheminDG): 54 chemin=os.path.join(cheminDG,X) 55 if posixpath.isdir(chemin): 56 listeDossiersVersions.append(X) 57 return listeDossiersVersions
58 59 # Methode qui renvoie une liste des dossiers Version contenus 60 # dans le dossier genetique de l'oeuvre passee en parametre
61 - def getListeVersions(self,pNom,pTitre,pVersion):
62 listeVersions=[] 63 nomDG = self.__don.getNomDG(pNom, pTitre) 64 cheminDG=os.path.join(LEURREP,pNom,nomDG) 65 cheminVersion = os.path.join(LEURREP,cheminDG,pVersion) 66 for X in os.listdir(cheminVersion): 67 chemin=os.path.join(cheminVersion,X) 68 if posixpath.isfile(chemin): 69 listeVersions.append(X) 70 return listeVersions
71 72 # Methode qui supprime un dossier Version et tout ce qu'il contient
73 - def supprimerDossierVersion(self,pNom,pTitre,pVersion):
74 nomDG = self.__don.getNomDG(pNom, pTitre) 75 chemin=os.path.join(LEURREP,pNom,nomDG,pVersion) 76 self.__suppDos(chemin)
77 78 # Methode qui renvoie une liste des états contenus dans le dossier 79 # version passe en parametre
80 - def getListeEtats(self,pNom,pTitre,pVersion):
81 listeEtats=[] 82 nomDG = self.__don.getNomDG(pNom, pTitre) 83 cheminDG=os.path.join(LEURREP,pNom,nomDG,pVersion) 84 return os.listdir(cheminDG)
85 86 # Methode qui cree un état a partir d'un fichier texte
87 - def creerEtat(self,pNom,pTitre,pVersion,pFichier):
88 nomDG = self.__don.getNomDG(pNom, pTitre) 89 (filepath, nomEtat) = os.path.split(pFichier) 90 cheminEtat=os.path.join(LEURREP,pNom,nomDG,pVersion,nomEtat) 91 self.__copieFichier(pFichier,cheminEtat)
92 93 # Methode privee qui sert a la copie d'un fichier
94 - def __copieFichier(self,pSource,pDestinataire):
95 if posixpath.isfile(pDestinataire): 96 ## print 'ce fic existe' 97 raise FichierExistant(pSource,pDestinataire) 98 else : 99 shutil.copyfile(pSource,pDestinataire)
100 ## fichier=open(pSource,'r') 101 ## etat=open(pDestinataire,'w') 102 ## contenuFichier=fichier.readlines() 103 ## fichier.close() 104 ## etat.writelines(contenuFichier) 105 ## etat.close() 106 107 # Methode privee qui sert à la copie d'un fichier
108 - def ecraserFichier(self,pSource,pDestinataire):
109 shutil.copyfile(pSource,pDestinataire)
110 ## fichier=open(pSource,'r') 111 ## etat=open(pDestinataire,'w') 112 ## contenuFichier=fichier.readlines() 113 ## fichier.close() 114 ## etat.writelines(contenuFichier) 115 ## etat.close() 116 117 118 # Methode qui renvoie le chemin d'un état
119 - def cheminEtat(self,pNom,pTitre,pVersion,pEtat):
120 nomDG = self.__don.getNomDG(pNom, pTitre) 121 return os.path.join(LEURREP,pNom,nomDG,pVersion,pEtat)
122 123 # Methode qui supprime l'état
124 - def supprimerEtat(self,pNom,pTitre,pVersion,pEtat):
125 donInf = DonneesInformations() 126 nomDG = self.__don.getNomDG(pNom, pTitre) 127 path = os.path.join(LEURREP, pNom, nomDG, FICHIER_INFO) 128 lEtatsFils = donInf.getListeEtatsFils(path,pEtat,pVersion) 129 chemin=self.cheminEtat(pNom,pTitre,pVersion,pEtat) 130 self.__suppDos(chemin) 131 if lEtatsFils != None and lEtatsFils != []: 132 for etatFils in lEtatsFils: 133 chemin=self.cheminEtat(pNom,pTitre,pVersion,etatFils) 134 self.__suppDos(chemin)
135 136 # Methode qui supprime un dossier Auteur et tout ce qu'il contient
137 - def supprimerDossierAuteur(self, pNom):
138 self.__suppDos(os.path.join(LEURREP,pNom))
139 140 # Methode qui supprime un dossier Oeuvre et tout ce qu'il contient
141 - def supprimerDossierOeuvre(self, pNom, pNomDG):
142 rep = os.path.join(LEURREP, pNom, pNomDG) 143 self.__suppDos(rep)
144 145 # Methode privee qui supprime recursivement un dossier et tout ce qu'il contient
146 - def __suppDos(self, pPath):
147 try: 148 if posixpath.isdir(pPath): 149 liste = os.listdir(pPath) 150 for i in liste : 151 self.__suppDos(os.path.join(pPath,i)) 152 os.rmdir(pPath) 153 else : 154 os.remove(pPath) 155 except OSError: 156 fake=1
157 158 # Methode qui copie un repertoire
159 - def importerRepertoire(self, pNom, pTitre, pPath, fenetreMedite):
160 ## print 'ds CDG : importerRepertoire' 161 #nomDG = self.__don.getNomDG(pNom, pTitre) 162 (filepath, nomRep) = os.path.split(pPath) 163 # création de la version du nom du répertoire 164 self.creerDossierVersion(pNom,pTitre,nomRep) 165 fenetreMedite.cinfos.enregistrerVersion(pNom,pTitre,nomRep) 166 # chem = self.cheminVersion(pNom,pTitre,nomRep) 167 for fichier in dircache.listdir(pPath): 168 if os.path.isfile(os.path.join(pPath,fichier)): 169 self.creerEtat(pNom,pTitre,nomRep,os.path.join(pPath,fichier)) 170 fenetreMedite.cinfos.enregistrerEtat(pNom,pTitre,fichier,nomRep,"")
171 # (fpath, fname) = os.path.split(file) 172 # shutil.copyfile(file,os.join(chem,fname)) 173 # self.creerEtat 174 #shutil.copytree(pPath,chem) 175 176 177 # Methode qui renvoie le chemin d'une version
178 - def cheminVersion(self,pNom,pTitre,pVersion):
179 nomDG = self.__don.getNomDG(pNom, pTitre) 180 return os.path.join(LEURREP,pNom,nomDG,pVersion)
181