patron - que es un decorador en python
¿Hay alguna manera de obtener la lista de nombres de vistas que tienen un decorador, Python, Django (2)
Tengo un archivo de views.py como este
views.py
@my_decorator
def a(request):
return HttpResponse("success")
@my_decorator
def b(request):
return HttpResponse("success")
@my_decorator
def c(request):
return HttpResponse("success")
@my_decorator
def d(request):
return HttpResponse("success")
@my_another_decorator
def e(request):
return HttpResponse("success")
Quiero obtener una lista de vistas con el decorador "my_decorator"
Ejemplo:
views_list_with_my_decorator=["a","b","c","d"]
por favor, ayúdenme, gracias de antemano.
Creo que podrías hacer algún truco con el docorator. La siguiente es mi solución. Solo por tu inspiración. Podrías probar :)
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrap_func(*args, **kwargs):
return func()
wrap_func.decorator = my_decorator.func_name
return wrap_func
def my_another_decorator(func):
@wraps(func)
def wrap_func(*args, **kwargs):
return func()
wrap_func.decorator = my_another_decorator.func_name
return wrap_func
@my_decorator
def a(request):
pass
@my_decorator
def b(request):
rpass
@my_decorator
def c(request):
pass
@my_decorator
def d(request):
pass
@my_another_decorator
def e(request):
pass
func_list_with_my_decorator = [e for e in globals().values() if getattr(e, ''decorator'', None)==''my_decorator'']
print func_list_with_my_decorator
Si quiere probar si una función tiene un decorador, haga lo siguiente:
print a.decorator == ''my_decorator''
decorated = []
def myDecorator(fn):
decorated.append(fn)
...
¿tal vez? pero solo funcionará si han sido decorados (es decir, importados o de otra forma "ejecutados" ... no funcionará si simplemente están sentados en archivos .py en alguna parte)