Re: [Python-es] Funciones Decoradores

2011-06-21 Por tema Alexis Roda

En/na Manuel A. Estevez Fernandez ha escrit:


Alguien me podría ayudar para poder guardar los parámetros que recibe la 
función que se va a ejecutar,


Si no me equivoco kwargs solamente tomará valor si llamas a la función 
con argumentos con nombre:


In [1]: def prueba(*args, **kw) :
   ...: print args, kw
   ...:
   ...:

In [2]: prueba(1)
(1,) {}

In [3]: prueba(foo=1)
() {'foo': 1}

In [4]: prueba(3,foo=1)
(3,) {'foo': 1}

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é?


El problema es que get_informacion no llega a ejecutarse. En el 
decorador te limitas a registrar la llamada en el log, pero no llamas a 
la función decorada.





Saludos

___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


[Python-es] Funciones Decoradores

2011-06-21 Por tema Manuel A. Estevez Fernandez


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.



___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detectar una tecla

2011-06-21 Por tema Douglas Jiménez
El 20 de junio de 2011 09:33, Javier Collado escribió:

> Hola,
>
> El día 20 de junio de 2011 15:49, Douglas Jiménez 
> escribió:
> > Quizás si explico lo que quiero hacer ..
>
> Quizá en lugar de desarrollar la aplicación para consola, sea más
> práctico hacerlo para un entorno de ventanas...
> Un saludo,
>Javier
>

Siguiendo la recomendación de Javier y por aquello de que "Unas cuantas
horas de ensayo y error pueden ayudarte a ahorrar unos minutos de revisión
de los manuales", llevo ya unas cuantas horas leyendo el manual de TKinter
de Fredrik Lundh, que conseguí en la red. Así que esta parte del hilo creo
que va dirigida a quienes manejen TKinter.

Al incio del capítulo 7, en la página 19, Lundh da un ejemplo para manejar
el evento de capturar pulsaciones del ratón. Lo corrí haciendo las pequeñas
modificaciones necesarias para Python 3.1 y todo perfecto. Por supuesto que
se me vino la idea de adaptarlo para las pulsaciones de teclado y lo
convertí en esto:


# Archivo: tecla.py

from tkinter import *

def main():
  root = Tk()

  def callback(evento):
print("La tecla es", evento.keycode) # Línea clave del programa

  frame = Frame(root, width=100, height=100)
  frame.bind("", callback)
  frame.pack()

  root.mainloop()


con lo cual pretendo que al presionar una tecla se imprima algo relacionado
con ella en el terminal (es la que llamé Línea clave del programa). En la
línea clave ha cambiado .keycode por .keysym, keysym_num y otras cosas, pero
nada de nada.

Como es natural, necesito una orientación a este respecto. Es claro que no
he entendido cómo manejar el evento .

Gracias.

Douglas.
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detectar una tecla

2011-06-21 Por tema tny
El lun, 20-06-2011 a las 16:03 +0200, Javier Collado escribió:
> Quizá en lugar de desarrollar la aplicación para consola, sea más
> práctico hacerlo para un entorno de ventanas en cualquiera de los
> frameworks disponibles: gtk, qt, wxwindows, etc.
> 
> Por ejemplo, en gtk, que es el que conozco mejor, no habría problema
> en capturar los eventos de teclado y, además, podrías controlar
> fácilmente el tamaño de letra utilizado que sería uno de los
> requisitos de acuerdo con la explicación.
> 

Yo leyendo el hilo, estaba pensando que sería más práctico aún hacerlo
en un entorno web.
Y si te queda chulo incluso puedes sacar unos durillos extra.

___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/