#!/usr/bin/python
# -*- coding: UTF-8 -*-


"""
    Programme pour tester les acces a une base de donnees avec shelve.
"""


###############################################################################
# Informations de versions
###############################################################################
__project__   = 'Applications Bases de donnees'
__author__    = 'Simon CHOLLET (s.chollet@llr.in2p3.fr)'
__modifiers__ = ''
__date__      = '19/09/2011'
__version__   = '1.0'


###############################################################################
# Importations
###############################################################################
# Importation du module shelve
import shelve


###############################################################################
# Definitions specifiques
###############################################################################
# Chemins des fichiers contenant les donnees
SHELVE_DATA_FILE      = "../output/datas.shv"
SHELVE_DATA_EXT_FILE  = "../output/datas_ext.shv"


###############################################################################
# Declaration des classes / fonctions
###############################################################################


#
#
# Fonction appelee lors de la demande
# d'execution de la classe/module
if __name__ == "__main__":

    # Message de bienvenue
    print ">>> Module shelve <<<"

    # Les donnees a ecrire
    vols     = {'1144':'Dallas',
                '1045':'Los Angeles',
                '1520':'New York'}
    vols_ext = {'1144':('Dallas', '14H30'),
                '1045':('Los Angeles', '15H20'),
                '1520':('New York', '16H20')}
    horaires = ['14H30', '15H20', '16H20']

    ###########################################################################
    # Ajout d'entrees dans un fichier

    # Mode de BASE
    # Creation du gestionnaire de BDD
    db = shelve.open(SHELVE_DATA_FILE, 'n')

    # Enregistrement des donnees
    db['vols']     = vols
    db['horaires'] = horaires

    # Fermeture du gestionnaire de BDD
    db.close()

    # Mode ETENDU
    # Creation du gestionnaire de BDD
    db = shelve.open(SHELVE_DATA_EXT_FILE, 'n')

    # Enregistrement des donnees
    db['vols_ext'] = vols_ext

    # Fermeture du gestionnaire de BDD
    db.close()

    ###########################################################################
    # Lecture des entrees depuis un fichier

    # Mode BASE
    # Ouverture du fichier
    db = shelve.open(SHELVE_DATA_FILE, "r")

    # Extraction des cles du fichier
    # Affiche :
    #   >>> Module shelve <<<
    #    * Mode BASE :
    #      vols: {'1520': 'New York', '1144': 'Dallas', '1045': 'Los Angeles'}
    #      horaires: ['14H30', '15H20', '16H20']
    print " * Mode BASE :"
    for key in db.keys():
        item = db[key]
        print "   %s: %s" % (key, item)

    # Extraction d'une cle particuliere
    # Affiche : * Vol 1144 : 'Dallas'
    print " * Vol 1144 :", db['vols']['1144']

    # Fermeture du gestionnaire de BDD
    db.close()

    # Mode ETENDU
    # Ouverture du fichier
    db = shelve.open(SHELVE_DATA_EXT_FILE, "r")

    # Extraction des cles du fichier
    # Affiche :
    #    * Mode ETENDU :
    #      vols_ext: {'1520': ('New York', '16H20'), '1144': ('Dallas', '14H30'), '1045': ('Los Angeles', '15H20')}
    print " * Mode ETENDU :"
    for key in db.keys():
        item = db[key]
        print "   %s: %s" % (key, item)

    # Extraction d'une cle particuliere
    # Affiche : * Vol 1144 : ('Dallas', '14H30')
    print " * Vol 1144 :", db['vols_ext']['1144']

    # Fermeture du gestionnaire de BDD
    db.close()

    ###########################################################################
    # Modification des entrees depuis un fichier

    # Creation du gestionnaire de BDD
    db = shelve.open(SHELVE_DATA_FILE, 'w', writeback=1)

    # Modification des donnees
    del vols['1144']
    db['vols']['1144'] = 'Orlando'
    db['horaires'][1]  = '14H55'

    # Fermeture du gestionnaire de BDD
    db.close()
    # Mode BASE
    # Ouverture du fichier
    db = shelve.open(SHELVE_DATA_FILE, "r")

    # Extraction des cles du fichier
    # Affiche :
    #    * Modification BASE :
    #      vols: vols: {'1520': 'New York', '1045': 'Los Angeles', '1144': 'Orlando'}
    #      horaires: ['14H30', '14H55', '16H20']
    print " * Modification BASE :"
    for key in db.keys():
        item = db[key]
        print "   %s: %s" % (key, item)

    # Extraction d'une cle particuliere
    # Affiche : * Vol 1144 : 'Orlando'
    print " * Vol 1144 :", db['vols']['1144']

    # Fermeture du gestionnaire de BDD
    db.close()
