[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