pallets / quart

An async Python micro framework for building web applications.
https://quart.palletsprojects.com
MIT License
2.92k stars 159 forks source link

Quart test client does not support same "data" arguments as Flask / Werkzeug #353

Open kruton opened 1 month ago

kruton commented 1 month ago

When migrating from Flask to Quart, one of the issues I ran into was that Werkzeug's client supports more in the data field. This input supports having a dict passed in which will encode it to a form and also allows values to be file data. If you look at Quart's test client, it only accepts pre-formatted data fields. It doesn't support passing in form-like data which is encoded. This is much less flexible than Flask / Werkzeug allowed and is making porting hundreds of tests a headache for this Flask project.

Here's an example of a snippet of tests:

async with aiofiles.open(filename, 'rb') as f:
    data = {
        'file_mapping': 'custom',
        'xlsx_file': (io.BytesIO(await f.read()), 'spreadsheet.xlsx')
    }

    res = await client.post(
        url_for("import_page"),
        data=data,
        follow_redirects=True,
    )

In Quart this results in something that is not parseable on the server side.