LINUX.ORG.RU

Flask и Transfer-Encoding: chunked

 , ,


0

1

Привет.

Есть приложение написанное на flask. На запрос на /api/foo приложение идет в другое на /api2/bar, где выполняются некие действия и второе приложение отдает порционно контент с Transfer-Encoding: chunked.

Чтобы было понятней схема такая:

USER------->API1-------------->API2
USER<-------API1<--CHUNKED----API2

Как можно реализовать, чтобы API1 отдавало контент так же порционно?

Приложение API1 пускается через uwsgi. В конфиг добавлено:

plugin = python,transformation_chunked
route-run = chunked:

HTTP хидер навешивается. Но со стороны пользователя контент получаю весь сразу.

Роут фласка:

@app.route('/api/foo', methods=['POST'])
def do_action(cluster, action):
    return do_request("http://api2/api/bar").content

Как бы это правильно сделать?

★★★★

Ответ на: комментарий от bvn13

порционно умеет tornado

Тотальный булшит.

anonymous
()
Ответ на: комментарий от anonymous

Вероятно как-то так?

for i in do_request("http://api2/api/bar"):
    yield i
ei-grad ★★★★★
()

Всем спасибо, так заработало:

from Flask import Response
import requests


@app.route('/api/foo', methods=['POST'])
def do_action():
    return Response(return_chunk(), mimetype='text/plain')


def return_chunk():
    for chunk in requests.post("http://api2/api/bar", stream=True, data=None).iter_content():
        yield chunk
Difrex ★★★★
() автор топика
Последнее исправление: Difrex (всего исправлений: 1)
Ответ на: комментарий от Difrex

а не проще ли так?

@app.route('/api/foo', methods=['POST'])
def do_action():
    return Response(requests.post("http://api2/api/bar", stream=True, data=None).iter_content(), mimetype='text/plain')
диванный аналитик, на фласке ничего не писал ни разу

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