Skip to content

Commit

Permalink
Drop cgi module from test_multipart (#2424)
Browse files Browse the repository at this point in the history
* Use multipart instead of cgi for multipart tests

The cgi module has been deprecated as of python 3.11.

Signed-off-by: Vincent Fazio <vfazio@gmail.com>

* Update setup.cfg

All references to the cgi module have all been removed so there's no
longer a need to silence those deprecation warnings.

The deprecation warning for certifi is resolved as of version 2022.09.24.

Signed-off-by: Vincent Fazio <vfazio@gmail.com>

Signed-off-by: Vincent Fazio <vfazio@gmail.com>
Co-authored-by: Tom Christie <tom@tomchristie.com>
  • Loading branch information
vfazio and tomchristie committed Nov 3, 2022
1 parent db00b92 commit 1aea953
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 27 deletions.
1 change: 1 addition & 0 deletions requirements.txt
Expand Up @@ -28,6 +28,7 @@ flake8-bugbear==22.7.1
flake8-pie==0.16.0; python_version>='3.7'
importlib-metadata==4.13.0; python_version>='3.7'
isort==5.10.1
multipart==0.2.4
mypy==0.982
types-certifi==2021.10.8.2
pytest==7.1.2
Expand Down
2 changes: 0 additions & 2 deletions setup.cfg
Expand Up @@ -20,8 +20,6 @@ combine_as_imports = True
addopts = -rxXs
filterwarnings =
error
default:path is deprecated:DeprecationWarning:certifi
default:'cgi' is deprecated:DeprecationWarning
asyncio_mode = strict
markers =
copied_from(source, changes=None): mark test as copied from somewhere else, along with a description of changes made to accodomate e.g. our test setup
Expand Down
47 changes: 22 additions & 25 deletions tests/test_multipart.py
@@ -1,11 +1,11 @@
import cgi
import io
import os
import tempfile
import typing
from unittest import mock

import pytest
from multipart import MultipartParser

import httpx
from httpx._content import encode_request
Expand All @@ -26,15 +26,14 @@ def test_multipart(value, output):
response = client.post("http://127.0.0.1:8000/", data=data, files=files)
assert response.status_code == 200

# We're using the cgi module to verify the behavior here, which is a
# bit grungy, but sufficient just for our testing purposes.
boundary = response.request.headers["Content-Type"].split("boundary=")[-1]
content_length = response.request.headers["Content-Length"]
pdict: dict = {
"boundary": boundary.encode("ascii"),
"CONTENT-LENGTH": content_length,
}
multipart = cgi.parse_multipart(io.BytesIO(response.content), pdict)
content_length = int(response.request.headers["Content-Length"])

multipart = {}
for part in MultipartParser(
io.BytesIO(response.content), boundary=boundary, content_length=content_length
):
multipart[part.name] = [part.raw]

# Note that the expected return type for text fields
# appears to differs from 3.6 to 3.7+
Expand Down Expand Up @@ -63,15 +62,14 @@ def test_multipart_explicit_boundary(header: str) -> None:
response = client.post("http://127.0.0.1:8000/", files=files, headers=headers)
assert response.status_code == 200

# We're using the cgi module to verify the behavior here, which is a
# bit grungy, but sufficient just for our testing purposes.
assert response.request.headers["Content-Type"] == header
content_length = response.request.headers["Content-Length"]
pdict: dict = {
"boundary": b"+++",
"CONTENT-LENGTH": content_length,
}
multipart = cgi.parse_multipart(io.BytesIO(response.content), pdict)
content_length = int(response.request.headers["Content-Length"])

multipart = {}
for part in MultipartParser(
io.BytesIO(response.content), boundary="+++", content_length=content_length
):
multipart[part.name] = [part.raw]

assert multipart["file"] == [b"<file content>"]

Expand Down Expand Up @@ -131,15 +129,14 @@ def test_multipart_file_tuple():
response = client.post("http://127.0.0.1:8000/", data=data, files=files)
assert response.status_code == 200

# We're using the cgi module to verify the behavior here, which is a
# bit grungy, but sufficient just for our testing purposes.
boundary = response.request.headers["Content-Type"].split("boundary=")[-1]
content_length = response.request.headers["Content-Length"]
pdict: dict = {
"boundary": boundary.encode("ascii"),
"CONTENT-LENGTH": content_length,
}
multipart = cgi.parse_multipart(io.BytesIO(response.content), pdict)
content_length = int(response.request.headers["Content-Length"])

multipart = {}
for part in MultipartParser(
io.BytesIO(response.content), boundary=boundary, content_length=content_length
):
multipart[part.name] = [part.raw]

# Note that the expected return type for text fields
# appears to differs from 3.6 to 3.7+
Expand Down

0 comments on commit 1aea953

Please sign in to comment.