wrapper python




Est-il possible d'obtenir la liste des noms de vues ayant un décorateur, Python, Django (2)

Je pense que tu pourrais faire un tour avec le docteur. Ce qui suit est ma solution. Juste pour votre inspiration. Vous pourriez essayer :)

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 vous voulez essayer si une fonction a un décorateur, faites comme ceci:

print a.decorator == 'my_decorator'

J'ai un fichier views.py comme celui-ci

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")

Je veux obtenir une liste de vues ayant décorateur "my_decorator"

Exemple:

views_list_with_my_decorator=["a","b","c","d"]

aidez-moi s'il vous plaît, merci d'avance.


decorated = []
def myDecorator(fn):
    decorated.append(fn)
    ...

peut être? mais cela ne fonctionnera que si elles ont été décorées (c'est-à-dire importées ou autrement "exécutées" ... ça ne marchera pas si elles sont juste installées dans des fichiers .py quelque part)





python-decorators