# -*- coding: iso-8859-1 -*- # Copyright 20003 - 2008: Julien Bourdaillet (julien.bourdaillet@lip6.fr), Jean-Gabriel Ganascia (jean-gabriel.ganascia@lip6.fr) # This file is part of MEDITE. # # MEDITE is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # MEDITE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Foobar; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #---------------------------------------------------------------------------- # Nom: cDossierGenetique.py # Objet: Classe qui interface entre les dossiers et l'interface graphique #---------------------------------------------------------------------------- import os,dircache import posixpath import shutil from Utile.constantesDonnees import * from Donnees.donnees import * from Donnees.donneesInformations import * # C'est la classe de type 'Controleur' qui fait le lien entre les dossiers et l'interface class CDossierGenetique: # Constructeur def __init__(self): self.__don = Donnees() # Methode qui cree le dossier version dans le dossier genetique de # l'oeuvre passee en parametre def creerDossierVersion(self,pNom,pTitre,pVersion): nomDG = self.__don.getNomDG(pNom, pTitre) #print nomDG chem=os.path.join(LEURREP,pNom,nomDG,pVersion) #print chem os.mkdir(chem) # Methode qui renvoie une liste des dossiers Version contenus # dans le dossier genetique de l'oeuvre passee en parametre def getListeDossiersVersions(self,pNom,pTitre): listeDossiersVersions=[] nomDG = self.__don.getNomDG(pNom, pTitre) cheminDG=os.path.join(LEURREP,pNom,nomDG) for X in os.listdir(cheminDG): chemin=os.path.join(cheminDG,X) if posixpath.isdir(chemin): listeDossiersVersions.append(X) return listeDossiersVersions # Methode qui renvoie une liste des dossiers Version contenus # dans le dossier genetique de l'oeuvre passee en parametre def getListeVersions(self,pNom,pTitre,pVersion): listeVersions=[] nomDG = self.__don.getNomDG(pNom, pTitre) cheminDG=os.path.join(LEURREP,pNom,nomDG) cheminVersion = os.path.join(LEURREP,cheminDG,pVersion) for X in os.listdir(cheminVersion): chemin=os.path.join(cheminVersion,X) if posixpath.isfile(chemin): listeVersions.append(X) return listeVersions # Methode qui supprime un dossier Version et tout ce qu'il contient def supprimerDossierVersion(self,pNom,pTitre,pVersion): nomDG = self.__don.getNomDG(pNom, pTitre) chemin=os.path.join(LEURREP,pNom,nomDG,pVersion) self.__suppDos(chemin) # Methode qui renvoie une liste des états contenus dans le dossier # version passe en parametre def getListeEtats(self,pNom,pTitre,pVersion): listeEtats=[] nomDG = self.__don.getNomDG(pNom, pTitre) cheminDG=os.path.join(LEURREP,pNom,nomDG,pVersion) return os.listdir(cheminDG) # Methode qui cree un état a partir d'un fichier texte def creerEtat(self,pNom,pTitre,pVersion,pFichier): nomDG = self.__don.getNomDG(pNom, pTitre) (filepath, nomEtat) = os.path.split(pFichier) cheminEtat=os.path.join(LEURREP,pNom,nomDG,pVersion,nomEtat) self.__copieFichier(pFichier,cheminEtat) # Methode privee qui sert a la copie d'un fichier def __copieFichier(self,pSource,pDestinataire): if posixpath.isfile(pDestinataire): ## print 'ce fic existe' raise FichierExistant(pSource,pDestinataire) else : shutil.copyfile(pSource,pDestinataire) ## fichier=open(pSource,'r') ## etat=open(pDestinataire,'w') ## contenuFichier=fichier.readlines() ## fichier.close() ## etat.writelines(contenuFichier) ## etat.close() # Methode privee qui sert à la copie d'un fichier def ecraserFichier(self,pSource,pDestinataire): shutil.copyfile(pSource,pDestinataire) ## fichier=open(pSource,'r') ## etat=open(pDestinataire,'w') ## contenuFichier=fichier.readlines() ## fichier.close() ## etat.writelines(contenuFichier) ## etat.close() # Methode qui renvoie le chemin d'un état def cheminEtat(self,pNom,pTitre,pVersion,pEtat): nomDG = self.__don.getNomDG(pNom, pTitre) return os.path.join(LEURREP,pNom,nomDG,pVersion,pEtat) # Methode qui supprime l'état def supprimerEtat(self,pNom,pTitre,pVersion,pEtat): donInf = DonneesInformations() nomDG = self.__don.getNomDG(pNom, pTitre) path = os.path.join(LEURREP, pNom, nomDG, FICHIER_INFO) lEtatsFils = donInf.getListeEtatsFils(path,pEtat,pVersion) chemin=self.cheminEtat(pNom,pTitre,pVersion,pEtat) self.__suppDos(chemin) if lEtatsFils != None and lEtatsFils != []: for etatFils in lEtatsFils: chemin=self.cheminEtat(pNom,pTitre,pVersion,etatFils) self.__suppDos(chemin) # Methode qui supprime un dossier Auteur et tout ce qu'il contient def supprimerDossierAuteur(self, pNom): self.__suppDos(os.path.join(LEURREP,pNom)) # Methode qui supprime un dossier Oeuvre et tout ce qu'il contient def supprimerDossierOeuvre(self, pNom, pNomDG): rep = os.path.join(LEURREP, pNom, pNomDG) self.__suppDos(rep) # Methode privee qui supprime recursivement un dossier et tout ce qu'il contient def __suppDos(self, pPath): try: if posixpath.isdir(pPath): liste = os.listdir(pPath) for i in liste : self.__suppDos(os.path.join(pPath,i)) os.rmdir(pPath) else : os.remove(pPath) except OSError: fake=1 # Methode qui copie un repertoire def importerRepertoire(self, pNom, pTitre, pPath, fenetreMedite): ## print 'ds CDG : importerRepertoire' #nomDG = self.__don.getNomDG(pNom, pTitre) (filepath, nomRep) = os.path.split(pPath) # création de la version du nom du répertoire self.creerDossierVersion(pNom,pTitre,nomRep) fenetreMedite.cinfos.enregistrerVersion(pNom,pTitre,nomRep) # chem = self.cheminVersion(pNom,pTitre,nomRep) for fichier in dircache.listdir(pPath): if os.path.isfile(os.path.join(pPath,fichier)): self.creerEtat(pNom,pTitre,nomRep,os.path.join(pPath,fichier)) fenetreMedite.cinfos.enregistrerEtat(pNom,pTitre,fichier,nomRep,"") # (fpath, fname) = os.path.split(file) # shutil.copyfile(file,os.join(chem,fname)) # self.creerEtat #shutil.copytree(pPath,chem) # Methode qui renvoie le chemin d'une version def cheminVersion(self,pNom,pTitre,pVersion): nomDG = self.__don.getNomDG(pNom, pTitre) return os.path.join(LEURREP,pNom,nomDG,pVersion)