[pyar] Puedo evitar ejecución del bloque con un Context Manager?
Jesús Gómez
jgomo3 en gmail.com
Vie Jun 14 18:12:50 ART 2013
No respondo a tu pregunta pero ...
El 14 de junio de 2013 16:10, fisa <fisadev en gmail.com> escribió:
> Busqué medio rápido y no vi que se pueda, así que pregunto por si
> alguno se le ocurre alguna manera.
>
> La idea: un context manager para usar en scripts de deploy (ej:
> fabric), que evite que se ejecute código que ya fue ejecutado alguna
> otra vez en el servidor.
>
> Ejemplo:
>
> with avoid_twice('create_postgres_cluster'):
> sudo('bla bla bla create cluster')
> sudo('bla bla more things')
>
>
Si ya te estás tomando la molestia de ponerle un nombre al bloque
(create_postgres_cluster), tal vez sea más elegante crear funciones, en
este caso "create_postgres_cluster" y usar algún wrap:
avoid_twice(create_postgres_cluster)
avoid_twice(create_tal_otra_cosa)
avoid_twice(preparar_lo_otro)
Y entonces implementas esa lógica en la función avoid_twice, preguntando
por el nombre de la función con :__name__ y manteniendo una lista:
def avoid_twice(f):
if f.__name__ not in register:
register.append(f.__name__)
f()
Claro, eso de la elegancia es a gusto personal, pero mi justificación es
que te quedan las llamadas a los bloques de trabajo repetible en tres
líneas, en vez de tres llamadas a with con bloques de diferente tamaño. Al
final, visualmente vez una simple lista de tres tareas que deben hacerse
sin repetirlas cada una.
El comportamiento que quiero de avoid_twice sería el siguiente:
> * en el ingreso: busco nombre de acción ('create_postgres_cluster') en
> un archivo, si no está, sigue todo normal. Si ya está, *evito* que se
> ejecute el contenido del bloque
> * en la salida: guardo nombre de la acción en el archivo (así evitando
> futuras repeticiones)
>
> Por qué? me ahorra repetir esta lógica en muchos lados:
>
> if was_executed('x'):
> # code code code
> save_executed('x')
>
> (no me gusta tener que siempre recordar meter el save, y tener que
> siempre poner 2 veces el nombre de la acción)
>
> Todo es una pavada, salvo por el "Si ya está, *evito* que se ejecute
> el contenido del bloque". Alguna idea de cómo lograr eso
> específicamente?
>
> Saludos!
>
> --
> fisa - Juan Pedro Fisanotti
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130614/504289cd/attachment.html>
More information about the pyar
mailing list