Search code examples
pythongoogle-app-engineflasktask-queueflask-restful

How to pass params to Task Queue?


I am about to implement a Push Task queue in Flask/Google App Engine. Essentially I would like to POST to the API and execute the underlying work in the task queue.

The initial entry point is a REST API (flask_restful)

class FTRecordsAPI(Resource):
    def post(self):
        arguments = self.reqparser.parse_args()
        json_records = arguments.get('records')
        user = User.query(...).get()
        if user:
            taskqueue.add(url='/worker/', params={'user': user})
            return '', 201
        else:
            return '', 401

The worker is defined as a view in the url.py:

app.add_url_rule('/worker', 'worker',
                 view_func=csrf_protect.exempt(TaskView.as_view('taskView')))

And the TaskView is:

from flask.globals import request

class TaskView(MethodView):
    def post(self):
        user = request.json['user']
        return "OK"

Strangely when I debug in the TaskView nowhere in the request object is any trace of the user object I sent to the /worker. However I find in there the records object which was from the previous call ?!

What am I missing please?


Solution

  • Try:

    taskqueue.add(url='/worker', params={'user': user}, method="POST")

    and

    user = request.form.get('user')

    As marcadian pointed out, taskqueue uses POST by default, so perhaps you need the request.form to access the POST vars.