[Python-es] Funciones Decoradores

Manuel A. Estevez Fernandez stvzito en gmail.com
Mie Jun 22 00:07:34 CEST 2011


Hola que tal

Estoy aprendiendo a utilizar las funciones decoradoras para llevar un log:

Donde tengo la funcion decoradora:

/def log(f):
     def inner(*args,**kwargs):
         if sincro_config.NIVEL_REGISTRO == 1:
             archivo_log_ = open(config.LOG_PATH,'a')
             archivo_log_.write('Ejecutando %s 
%s\n'%(f.__name__,strftime("%Y-%m-%d  %H:%M:%S", localtime())))
             archivo_log_.close()
             #return inner
         elif sincro_config.NIVEL_REGISTRO==2:
             archivo_log_ = open(config.LOG_PATH,'a')
             archivo_log_.write('Ejecutando %s 
%s\n'%(f.__name__,strftime("%Y-%m-%d  %H:%M:%S", localtime())))
             archivo_log_.write('Parametros Recibos: \n')
             for name,value in kwargs.items():
                 archivo_log_.write('Nombre: %s\t\tValor: 
%s\n'%(name,value))
             archivo_log_.close()
     return inner/


ademas tengo la clase de la cual quiero ir guardando los sucesos:

class Conexion:

     configuracion_ = ''
     cursor_ = ''
     bandera_ = ''
     conxn_ = ''

     def __init__(self,configuracion_):
         self.configuracion_ = configuracion_
         return


     @log
     def get_pk(self,_tabla):
             [..]
             return lista_

    @log
     def get_query_statement(self,_diccionario,_tabla,_operacion):
         [..]
         return     cadena

     @log
     def connect(self):
             [..]
             return

     @log
     def get_informacion(self ,_tabla,_diccionario ):
           query_ = self.get_query_statement(_diccionario,_tabla,'select')
           resultado_ = self.cursor_.query(query_).dictresult()
           return resultado_

     #   Funcion que tiene como finalidad realizar una escritura en la 
base de datos
     # rebice un diccionario con los campos, el nombre de la tabla y el 
tipo de operacion
     # a realizar ( insert o update)
     @log
     def set_informacion(self,_diccionario,_tabla, _operacion):
         [ .. ]
         return success_

     # Cierra la conexion con la base de datos
     @log
     def close(self):
         [ .. ]
         return

Entonces cual realizo una prueba de mi clase  con el siguiente script:

from sincro_config import sincro_config
import sincro_conexion

db_ = sincro_conexion.Conexion(sincro_config)
db_.connect()

ventas_ = {'id_sucursal':2}
query_ = db_.get_informacion('sucursales',ventas_)

print query_
db_.close()

El log marcado como 2 :

me da el siguiente resultado:

/Ejecutando connect 2011-06-20  18:30:42
Parametros Recibos:
Ejecutando get_informacion 2011-06-20  18:30:42
Parametros Recibos:
Ejecutando close 2011-06-20  18:30:42
Parametros Recibos: /


Alguien me podría ayudar para poder guardar los parámetros que recibe la 
función que se va a ejecutar, y ademas la funcion get_informacion, 
dentro de su funcionamiento manda a llamar a la funcion 
get_query_statement y esta no se registra en el log ¿por qué?

Saludos y gracias y por su atención.



------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110621/886e14c6/attachment.html>


Más información sobre la lista de distribución Python-es