[pyar] Puedo evitar ejecución del bloque con un Context Manager?
hernantz
hernantz en gmail.com
Vie Jun 14 22:10:34 ART 2013
On Fri 14 Jun 2013 06:47:21 PM ART, QliX=D! [aka EHB] wrote:
> Workflow bssed programming? Hay un par de frameworks orientados a la
> tarea de ar mm ar un flujo de trabajo que sea retomable en multiples
> puntos del mismo. Busco los pinks cuando llego a casa y te lo paso.
>
> El jun 14, 2013 5:40 PM, "fisa" <fisadev en gmail.com
> <mailto: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')
>
> 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 <mailto: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
>
>
>
> _______________________________________________
> 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
done = []
def not_done(key):
if key not in done:
done.add(key)
return True
if not_done('setup_database'):
setup_database()
if not_done('setup_database'):
setup_database() # este ya no corre
No se si se puede salir desde un with stmt programaticamente, no creo
que exista un raise StopIteration para salir, tampoco pude probando con
llamar __exit__() del context manager, se llama solo y punto. Puede ser
por el lado de usar generadores como hace el contextlib.contextmanager,
pero creo que estamos en el mismo problema. [0]
[0] http://bpaste.net/show/QuZLh3YKXqsFJ72kPI9I/
More information about the pyar
mailing list