Preserve blank form values for urlencoded forms (option) (#2439)
* task(request.form): Add tests for blank values * fix(request): abstract form property to implement get_form(), allow for preserving of blanks * fix(request): hinting for parsed_form * fix(request): typing for parsed_files * fix(request): ignore type assumption * fix(request): mypy typechecking caused E501 when type set to ignore * fix(request): mypy is too stupid to parse continuations * fix(request): formatting * fix(request): fix annotation and return for get_form() * fix(request): linting, hinting
This commit is contained in:
@@ -1016,6 +1016,72 @@ async def test_post_form_urlencoded_asgi(app):
|
||||
assert request.form.get("test") == "OK" # For request.parsed_form
|
||||
|
||||
|
||||
def test_post_form_urlencoded_keep_blanks(app):
|
||||
@app.route("/", methods=["POST"])
|
||||
async def handler(request):
|
||||
request.get_form(keep_blank_values=True)
|
||||
return text("OK")
|
||||
|
||||
payload = "test="
|
||||
headers = {"content-type": "application/x-www-form-urlencoded"}
|
||||
|
||||
request, response = app.test_client.post(
|
||||
"/", data=payload, headers=headers
|
||||
)
|
||||
|
||||
assert request.form.get("test") == ""
|
||||
assert request.form.get("test") == "" # For request.parsed_form
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_post_form_urlencoded_keep_blanks_asgi(app):
|
||||
@app.route("/", methods=["POST"])
|
||||
async def handler(request):
|
||||
request.get_form(keep_blank_values=True)
|
||||
return text("OK")
|
||||
|
||||
payload = "test="
|
||||
headers = {"content-type": "application/x-www-form-urlencoded"}
|
||||
|
||||
request, response = await app.asgi_client.post(
|
||||
"/", data=payload, headers=headers
|
||||
)
|
||||
|
||||
assert request.form.get("test") == ""
|
||||
assert request.form.get("test") == "" # For request.parsed_form
|
||||
|
||||
|
||||
|
||||
def test_post_form_urlencoded_drop_blanks(app):
|
||||
@app.route("/", methods=["POST"])
|
||||
async def handler(request):
|
||||
return text("OK")
|
||||
|
||||
payload = "test="
|
||||
headers = {"content-type": "application/x-www-form-urlencoded"}
|
||||
|
||||
request, response = app.test_client.post(
|
||||
"/", data=payload, headers=headers
|
||||
)
|
||||
|
||||
assert "test" not in request.form.keys()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_post_form_urlencoded_drop_blanks_asgi(app):
|
||||
@app.route("/", methods=["POST"])
|
||||
async def handler(request):
|
||||
return text("OK")
|
||||
|
||||
payload = "test="
|
||||
headers = {"content-type": "application/x-www-form-urlencoded"}
|
||||
|
||||
request, response = await app.asgi_client.post(
|
||||
"/", data=payload, headers=headers
|
||||
)
|
||||
|
||||
assert "test" not in request.form.keys()
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"payload",
|
||||
[
|
||||
|
||||
Reference in New Issue
Block a user