# -*- encoding: utf-8 -*-
"""
Modul bdu
=========
Gestiona una base de dades d'usuaris. Cada usuari té els següents
atributs:
========== =========== ================================
Atribut Tipus Significat
========== =========== ================================
idusuari string Identifica l'usuari (és la clau)
nom string Indica en nom real de l'usuari
email string Adreça de correu electrònic
adreca string Adreça postal de l'usuari
tel int Telèfon de l'usuari
passwd string Paraula clau de l'usuari
========== =========== ================================
Les diferents operacions actuen modificant directament el paràmetre
corresponent atès que està implementat com un diccionari i els
diccionaris són mutables.
Representació
-------------
La base de dades es representa com un diccionari on la clau es
`idusuari` i el valor es una tupla de la forma::
(nom, email, adreca, tel, passwd)
Funcions
--------
"""
[docs]def buida():
"""
Retorna una base de dades d'usuaris buida.
:return: Una bdu buida
"""
return {}
[docs]def afegir (bd, idusuari, nom, email, adreca, tel, passwd):
"""
Modifica la base de dades d'usuari `bd` una vegada s'ha donat
d'alta l'usuari `idusuari` amb les dades corresponents. En cas
que l'usuari `idusuari` ja existis prèviament, la funció no
modifica `bd`.
:param dict bd: La bdu a modificar
:param string idusuari: L'identificador d'usuari a afegir
:param string nom: El nom de l'usuari que s'afegeix
:param string email: L'email de l'usuari que s'afegeix
:param string adreca: L'adreça de l'usuari que s'afegeix
:param int tel: El telefon de l'usuari que s'afegeix
:param string passwd: El password de l'usuariq ue s'afegeix
>>> bd = buida()
>>> afegir(bd, 'id1', 'Pep', 'pep@infern', 'carrer', 980, 'secret')
>>> bd
{'id1': ('Pep', 'pep@infern', 'carrer', 980, 'secret')}
"""
if idusuari not in bd:
bd[idusuari] = (nom, email, adreca, tel, passwd)
[docs]def esborrar(bd, idusuari):
"""
Modifica la base de dades d'usuaris `bd` una vegada s'ha donat de
baixa l'usuari amb clau `idusuari`. En cas que `bd` no contingui
`idusuari` la funcio no modifica `bd`.
>>> bd = buida()
>>> afegir(bd, 'u1','Pere','pere@infern','a',5656,'s1')
>>> esborrar(bd, 'u1')
>>> bd == buida()
True
"""
if idusuari in bd:
del bd[idusuari]
[docs]def mod_nom(bd, idusuari, nom):
"""
Modifica la bd d'usuaris una vegada s'ha modificat
el 'nom' corresponent a 'idusuari'.
Si 'idusuari' no existeix, no es modifica la bd.
>>> bd = buida()
>>> afegir(bd, 'id1', 'Pep', 'pep@infern', 'carrer', 980, 'secret')
>>> mod_nom(bd, 'id1', 'Josep')
>>> bd
{'id1': ('Josep', 'pep@infern', 'carrer', 980, 'secret')}
"""
if idusuari in bd:
dummy,email,adreca,tel,passwd = bd[idusuari]
bd[idusuari] = (nom,email,adreca,tel,passwd)
[docs]def mod_email(bd, idusuari, email):
"""
Modifica la bd d'usuaris una vegada s'ha modificat
el 'email' corresponent a 'idusuari'.
Si 'idusuari' no existeix, no es modifica la bd.
>>> bd = buida()
>>> afegir(bd, 'id1', 'Pep', 'pep@infern', 'carrer', 980, 'secret')
>>> mod_email(bd, 'id1', 'pep@cel')
>>> bd
{'id1': ('Pep', 'pep@cel', 'carrer', 980, 'secret')}
"""
if idusuari in bd:
nom,dummy,adreca,tel,passwd = bd[idusuari]
bd[idusuari] = (nom,email,adreca,tel,passwd)
[docs]def check_passwd(bd, idusuari, passwd):
"""
Retorna True ssi en la bd s'acaren el nom_usuai i el passwd.
>>> bd = buida()
>>> afegir(bd, 'id1', 'Pep', 'pep@infern', 'carrer', 980, 'secret')
>>> check_passwd(bd, 'id1', 'secret')
True
>>> check_passwd(bd, 'id1', 'secret3')
False
"""
return (idusuari in bd) and (bd[idusuari][4] == passwd)
[docs]def escriure(bd):
"""
Escriu per pantalla la bd.
"""
for k in sorted(bd.keys()):
t = bd[k]
print "%6s: " % k
print "%10s %15s %15s %8s %8s\n" % t