LINUX.ORG.RU

Помогите с декоратором

 


0

1

Есть задача, обернуть некоторое имеющийся api в «ленивые декораторы»

идея такая, в цепочку различных декораторов api добавляется @lazy_request

который вместо выполнения запроса, создаёт celery.task и возвращает id таска, данные по которому можно получить позже

я сделал так:

def set_auth(required=False):
   ...

def get_django_session():
   ...

def get_session_region(session, default_home_region):
   ...


def lazy_request(countdown=5):
    """Декоратор отдаёт функцию на выполнение в celery очередь"""
    def lazy_request_(fun):
        @celery.task()
        def celery_fun(*args, **kwargs):
            with app.test_request_context():
                request.cookies = kwargs.pop('cookies')
                return fun(*args, **kwargs)
        @wraps(fun)
        def wrapper(*args, **kwargs):
            kwargs['cookies'] = request.cookies # запоминаем сессию для контекста внутри celery
            result = celery_fun.apply_async(args=args, kwargs=kwargs, countdown=countdown )
            return jsonify( task_id=result.id )
        return wrapper
    return lazy_request_

@app.route('/api/lazy_diff/<int:a>/<int:b>', methods=["GET"])
@lazy_request()
@set_auth(required=True)
@chech_role_permission('is_superuser')
def lazy_diff(a, b, **kwargs):
    return dict( result = a-b )

@app.route('/api/lazy_sum/<int:a>/<int:b>', methods=["GET"])
@lazy_request()
@set_auth(required=True)
@chech_role_permission('is_staff')
def lazy_sum(a, b, **kwargs):
    return dict( result = a+b )

всё работает, создаётся task и выполняется, но почему то всегда celery выполняет только первую (в даннам случае lazy_diff), ну соответственно в результатах всега только разница

не понимаю, почему такое поведение?

★★

Последнее исправление: fMad (всего исправлений: 1)

@celery.task()

Может просто @celery.task?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.