Оберните декоратор python другим декоратором

У меня есть общий вызов декоратора во всей моей кодовой базе Django:

@override_settings(
    CACHES={
        **settings.CACHES,
        "default": generate_cache("default", dummy=False),
        "throttling": generate_cache("throttling", dummy=False),
    }
)
def test_something():
    ...

Код декоратора слишком многословен. Я бы хотел завернуть этот код в новый декоратор под названием @use_real_cache, чтобы тестовая функция выглядела намного чище:

@use_real_cache
def test_something():
    ...

Как обернуть декоратор другим декоратором?

Просто присвойте ему значение:

use_real_cache = override_settings(
    CACHES={
        **settings.CACHES,
        'default': generate_cache('default', dummy=False),
        'throttling': generate_cache('throttling', dummy=False),
    }
)

# …

@use_real_cache
def test_something():
    # …
    pass

По сути, это то, что происходит в первом примере кода из вопроса, за исключением того, что вы не присваиваете его (явной) переменной.

Вернуться на верх