| |
- fichero
class fichero |
|
gestiona un fichero de texto que define el contenido de otro parejo
en formato BerkeleyDB, además de encargarse de generar al acabar si
hay cambios de generar ese fichero .db llamando al programa indicado
-el fichero está en texto plano
-los comentarios comienzan por '#'
-cada línea con contenido tiene una parte izquierda (clave única en
todo el fichero) y una parte derecha en la que pueden haber más de
una entrada (separadas por comas y que nosotros convertimos en vector)
-agrupa las partes izquierdas según el dominio si se trata de
direcciones de correo, o según lo que va detrás de '_' en la palabra
que está a la izquierda
este tipo de fichero es utilizado por postfix para mantener las
equivalencias entre email y usuario ('virtual' es el nombre habitual
del fichero)
cuando se carga un fichero:
-lee el fichero y lo carga en forma de diccionarios sobre la clase
-permite insertar nuevas tuplas o borrarlas con append/delete
-permite listar con get1/get2 (según si queremos recuperar a partir
de la parte izquierda o de la parte derecha)
-al salir guarda los cambios y hace el makemap correspondiente
internamente guarda:
-__lista__ -> lista con los comentarios (que se quedarán justo donde
los pusieron)
-__dict1__ -> diccionario ordenado por la parte izda (emails)
-__dict2__ -> contiene lo mismo que __dict1__, pero ahora las claves
son la parte derecha (usuarios) |
|
Methods defined here:
- __anyade__(self, l, a, b)
- añade al diccionario 'l' la clave 'a' con valor ['b'],
pero si ya existía lo que hace es a ese vector añadirle el
elemento 'b'
- __borra__(self, l, a, b, guarda, informa=0)
- elimina del diccionacio 'b' la pareja 'a','b', siendo
'a' la clave y 'b' un elemento del vector asociado a esa clave.
-'guarda' indica que se ha de mantener como comentario en el fichero
-'informa' indica que ha de escribirse por pantalla el resultado
- __busca__(self, l, e, expr_reg=0)
- busca en el diccionario 'l' elementos que casen con la expresión
'e', que puede ser regular si usamos 'expr_reg', y los devuelve
en una lista
- __consulta__(self, l, a)
- comprueba que la lista 'l' tenga la clave 'a' y devuelve None
en caso contrario (a diferencia de l[a], que genera una
excepción
- __del__(self)
- el destructor de la clase se limita a comprobar que no hayamos
querido acabar sin guardar cambios
- __error__(self, mensaje, nlinea=0, linea='')
- tratamiento de errores: aborta el programa, dado que el fichero
de direcciones virtuales contiene datos incorrectos
- __extraer_dominio__(self, email, nlinea, linea)
- dado un email se queda con @loquesea.com, y si lo que nos
dan es algo con un "_", devolvemos la segunda componente
(los usuarios de correo suelen tener de nombre user_dominio)
- __init__(self, fichero, funcion_stdout=None, funcion_stderr=None, depurar=0, anything=1)
- carga el fichero en el objeto llamando a __procesar_fichero__
y configura las opciones indicadas:
- fichero = string fichero a procesar
(el postmap lo hará luego al destruír el objeto)
- depurar = eliminar comentarios que sigan un patrón específico
- anything= permite que sea opcional que haya apariciones de
la palabra 'anything' asociada a cada dominio que
esté en el fichero de direcciones virtuales
(si está a 1 a todos los dominios -lo tuvieran o
o no- le añade 'anything')
- funcion_stdout = en caso de haber de mostrar algún
mensaje por dónde lo ha de mostrar
- funcion_stderr = en caso de haber de mostrar errores,
por dónde lo ha de hacer
- __message__(self, mensaje)
- muestra un mensaje (por <stdout> a menos que se indique una
función que lo haga, y la cual ha de tener como único argumento
el string a mostrar
- __procesar_fichero__(self, fichero, depurar=0)
- 'fichero' debe ser una instancia (vamos, que el fichero debe estar
ya abierto), y 'depurar' significa que ignore las líneas de
comentario que tengan un determinado formato (MB_VIRTUAL_COMENTARIO)
- el fichero ES LEIDO y devuelto a memoria, NO GUARDADO
- devuelve tres elementos:
lista -> lista con los comentarios (que se quedarán justo donde
los pusieron)
dict --> diccionario ordenado por emails
dict_usuarios --> misma información pero la clave es el usuario
- append(self, email, usuario)
- añadir entradas 'email'->'usuario' al fichero
-si ya existe no hace nada
-si es un dominio nuevo también lo detecta
- busca1(self, email, expr_regular=0)
- búsqueda por la parte izquierda (es posible indicar una
expresión regular)
- busca2(self, usuario, expr_regular=0)
- búsqueda por la parte derecha (es posible indicar una
expresión regular)
- delete(self, email, usuario=None, informar=0)
- borra la tupla 'email'->'usuario' del fichero
-si 'email' es None entonces borra cualquier combinación
que tenga ese email con cualquier usuario
-lo mismo para 'usuario'
- finalizar(self)
- finalizar el flujo de operaciones grabando el fichero modificado
(si es que se ha modificado) y creando su hashdb llamando al
comando correspondiente
- get1(self, email, recursiva=1)
- la recuperación habrá de ser recursiva, ya que a derecha puede haber
valores que a su vez vuelvan a estar a la izquierda, los cuales
también se recuperan si se usa 'recursiva'
- get2(self, usuario, recursiva=1)
- al igual que get1() pero ahora se recupera por la parte derecha
todas las partes izquierdas que lo contienen
Data and non-method functions defined here:
- __doc__ = 'gestiona un fichero de texto que define el conte... son la parte derecha (usuarios)\n '
- __module__ = 'ispadmin.berkeleydb'
| |