[pyar] reusando decoradores parametrizados

Claudio Freire klaussfreire en gmail.com
Mar Oct 1 00:59:40 ART 2013


Creo que esto debería funcionar

def compose(*decors):
    def composed(f):
        for decor in reversed(decors):
            f = decor(f)
        return f
    return composed

my_magic = compose(
    magic_arguments.magic_arguments()
    magic_arguments.argument(
        "-v", "--verbosity", action="count", default=0,
        help="increase output verbosity"
    )
    magic_arguments.argument(
        '--fcompiler',
        choices=allowed_fcompilers,
        help="""Specify Fortran compiler type by vendor.
                See %%f2py_help --fcompiler""",
    )
    magic_arguments.argument(
        '--compiler',
        choices=allowed_compilers,
        help="""Specify C compiler type (as defined by distutils).
                See %%f2py_help --compiler"""
    )
    magic_arguments.argument(
        '--f90flags', help="Specify F90 compiler flags"
    )
    magic_arguments.argument(
        '--f77flags', help="Specify F77 compiler flags"
    )
    magic_arguments.argument(
        '--opt', help="Specify optimization flags"
    )
    magic_arguments.argument(
        '--arch', help="Specify architecture specific optimization flags"
    )
    magic_arguments.argument(
        '--noopt', action="store_true", help="Compile without optimization"
    )
    magic_arguments.argument(
        '--noarch', action="store_true", help="Compile without
arch-dependent optimization"
    )
    magic_arguments.argument(
        '--debug', action="store_true", help="Compile with debugging
information"
    )
    magic_arguments.argument(
        '--link', action='append', default=[],
        help="""Link extension module with LINK resource, as defined
                by numpy.distutils/system_info.py. E.g. to link
                with optimized LAPACK libraries (vecLib on MacOSX,
                ATLAS elsewhere), use --link lapack_opt.
                See also %%f2py_help --resources switch."""
    )
)

@my_magic
@line_magic
def blah(bleh):
   return "blih"


2013/10/1 Martín Gaitán <gaitan en gmail.com>:
> Hola a tod en s.
>
> Tengo un método de una clase que usa mucho decoradores, algunos de ellos con
> parámetros.
>
> https://github.com/mgaitan/fortran_magic/blob/2bacf52accb0bd64541d9e882b78596a3d981a4a/fortranmagic.py#L93
>
> resulta que necesito hacer otro método de la misma clase que debe tener
> exáctamente los mismos decoradores (excepto, quizas, el último @cell_magic).
>
> ¿Cómo puedo convertir todo el set de decoradores parametrizados en un sólo
> decorador "my_arguments" que pueda usar en ambos metodos? Es decir, que se
> pueda usar asi:
>
> @my_arguments
> @cell_magic
>     def fortran(self, line, cell):
>          ...
>
> @my_arguments
> @line_magic
>     def the_new_method(self, line, cell):
>          ...
>
>
> chas gracias.
>
>
> _______________________________________________
> 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


More information about the pyar mailing list