[pyar] Puedo evitar ejecución del bloque con un Context Manager?

fisa fisadev en gmail.com
Vie Jun 14 18:33:47 ART 2013


El día 14 de junio de 2013 18:12, Jesús Gómez <jgomo3 en gmail.com> escribió:
> 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.
>

Entiendo la idea, y de hecho se puede mejorar más, porque eso quedaría
bien elegante con un decorador.
Ej:

@avoid_twice
def create_pos...

El tema es que no me gustaba ir por ese lado porque tengo muuucho
código intercalado de cosas que no tienen que hacerse dos veces, y
cosas que sí es lógico que se vuelvan a hacer, por lo que terminaría
teniendo una bolsada de funcioncitas sueltas.

--
fisa  -  Juan Pedro Fisanotti


More information about the pyar mailing list