# -*-coding:Latin-1 -*
"""enregistre et recupere les objets crees depuis une classe dans un dictionnaire"""
import cPickle as pickle #lecture/ecriture d'objets dans un fichier
                         #(cpickle remplace pickle, en + rapide)
from time import time
import os
#import pickle


def enregistrer(nomObj, obj, fichier = "", remplacer = True):
     """enregistre un objet. le nom du fichier est le nom de la classe de l'objet"""
     #on récupère le dictionnaire s'il existe, sinon on le cree
     #t0 = time()
     if len(fichier) == 0 :
          fichier = "{}".format(obj.__class__.__name__)
          
     try:
         with open(fichier, 'rb') as input:
             dico = pickle.load(input) 
         input.close() 
     except IOError:
         dico = {}
        
     #on ajoute notre nouvel objet (si remplacer est faux, en le renommant s'il existe déja)
     if dico.has_key(nomObj) and not remplacer:
        k = 1 
        while dico.has_key("{}{}".format(nomObj, k)):
            k += 1 
        dico["{}{}".format(nomObj,k)]=obj  
     else:    
        dico[nomObj]=obj   
          
     #on remet le dictionnaire dans le fichier
     with open(fichier, 'wb') as output:
         pickle.dump(dico, output, protocol=pickle.HIGHEST_PROTOCOL)
     output.close()
     chaine = "{} sauvegarde.".format(nomObj)
     #print (time() - t0)
     return chaine

def enregistrerUnique(obj, fichier = "", remplacer = True):
     """comme enregistrer, mais stocke l'objet dans un fichier a part (ex: plateau)"""
     if len(fichier) == 0 :
          fichier = "{}".format(obj.__class__.__name__)
     with open(fichier, 'wb') as output:
         pickle.dump(obj, output, protocol=pickle.HIGHEST_PROTOCOL)
     output.close()  

def charger(fichier, nomObj):
    """recupere un objet enregistre"""
    fichier = "{}".format(fichier)
    #on recupere le dictionnaire
    retour = None
    try:
        with open(fichier, 'rb') as input:
            dico = pickle.load(input)
        retour = dico[nomObj]
        input.close()
    except IOError:
        retour = None
    return retour

def chargerUnique(fichier):
    """comme charger, mais charge un objet stocke dans un fichier a part (ex: plateau)"""
    fichier = "{}".format(fichier) 
    #on recupere l'objet
    try:
        with open(fichier, 'rb') as input:
            objet = pickle.load(input)
        input.close()
    except IOError:
        objet = None
    return objet

def afficheSvg(fichier):
    """renvoie le contenu enregistre dans un fichier"""
    #on récupère le dictionnaire s'il existe
    try: 
        with open(fichier, 'rb') as input:
           dico = pickle.load(input)
        input.close()  
        #on met en forme le retour:
        #chaine = ""   
        #for clef in dico.keys():
        #    chaine = chaine + "\n '{}': {}".format(clef,dico[clef])
    except IOError:
        #chaine = "Erreur pour afficher la sauvegarde du fichier {}".format(fichier)
        dico = {}
    return dico

def supprSvg(fichier, nomObj):
    """supprime un objet enregistré dans le fichier"""
    fichier = "{}".format(fichier)
    try:
        #on recupere le dictionnaire
        with open(fichier, 'rb') as input:
            dico = pickle.load(input)
        input.close()    
        #on supprime l'enregistrement    
        del dico[nomObj]
        #on remet le dictionnaire dans le fichier
        with open(fichier, 'wb') as output:
            pickle.dump(dico, output, -1)
        output.close()    
        chaine = "{} supprimé.".format(nomObj)
    except IOError:
        chaine = "Erreur: {} non trouve dans le fichier {}.".format(nomObj, fichier)
        pass
    return chaine





    
