Skip to content

Ignore that body can be None in validators #2193

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jul 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Changelog
Next
----

- Support passing data as strings.

2024.07.02.1
------------

Expand Down
4 changes: 2 additions & 2 deletions src/mock_vws/_query_validators/content_length_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def validate_content_length_header_not_too_large(
"""
given_content_length = request_headers["Content-Length"]

body_length = len(request_body if request_body else b"")
body_length = len(request_body)
given_content_length_value = int(given_content_length)
# We skip coverage here as running a test to cover this is very slow.
if given_content_length_value > body_length: # pragma: no cover
Expand All @@ -81,7 +81,7 @@ def validate_content_length_header_not_too_small(
"""
given_content_length = request_headers["Content-Length"]

body_length = len(request_body if request_body else b"")
body_length = len(request_body)
given_content_length_value = int(given_content_length)

if given_content_length_value < body_length:
Expand Down
18 changes: 16 additions & 2 deletions src/mock_vws/_requests_mock_server/mock_web_query_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,20 @@
return decorator


def _body_bytes(request: Request) -> bytes:
"""
Return the body of a request as bytes.
"""
if request.body is None:
return b""

if isinstance(request.body, str):
return request.body.encode(encoding="utf-8")

Check warning on line 80 in src/mock_vws/_requests_mock_server/mock_web_query_api.py

View check run for this annotation

Codecov / codecov/patch

src/mock_vws/_requests_mock_server/mock_web_query_api.py#L80

Added line #L80 was not covered by tests

assert isinstance(request.body, bytes)
return request.body


class MockVuforiaWebQueryAPI:
"""
A fake implementation of the Vuforia Web Query API.
Expand Down Expand Up @@ -103,7 +117,7 @@
run_query_validators(
request_path=request.path,
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
databases=self._target_manager.databases,
)
Expand All @@ -114,7 +128,7 @@

response_text = get_query_match_response_text(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand Down
46 changes: 30 additions & 16 deletions src/mock_vws/_requests_mock_server/mock_web_services_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,20 @@
return decorator


def _body_bytes(request: Request) -> bytes:
"""
Return the body of a request as bytes.
"""
if request.body is None:
return b""

if isinstance(request.body, str):
return request.body.encode(encoding="utf-8")

Check warning on line 92 in src/mock_vws/_requests_mock_server/mock_web_services_api.py

View check run for this annotation

Codecov / codecov/patch

src/mock_vws/_requests_mock_server/mock_web_services_api.py#L92

Added line #L92 was not covered by tests

assert isinstance(request.body, bytes)
return request.body


class MockVuforiaWebServicesAPI:
"""
A fake implementation of the Vuforia Web Services API.
Expand Down Expand Up @@ -129,7 +143,7 @@
try:
run_services_validators(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand All @@ -141,7 +155,7 @@

database = get_database_matching_server_keys(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand Down Expand Up @@ -206,7 +220,7 @@
try:
run_services_validators(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand All @@ -219,7 +233,7 @@
body: dict[str, str] = {}
database = get_database_matching_server_keys(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand Down Expand Up @@ -273,7 +287,7 @@
try:
run_services_validators(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand All @@ -287,7 +301,7 @@

database = get_database_matching_server_keys(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand Down Expand Up @@ -339,7 +353,7 @@
try:
run_services_validators(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand All @@ -351,7 +365,7 @@

database = get_database_matching_server_keys(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand Down Expand Up @@ -399,7 +413,7 @@
try:
run_services_validators(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand All @@ -411,7 +425,7 @@

database = get_database_matching_server_keys(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand Down Expand Up @@ -467,7 +481,7 @@
try:
run_services_validators(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand All @@ -479,7 +493,7 @@

database = get_database_matching_server_keys(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand Down Expand Up @@ -541,7 +555,7 @@
try:
run_services_validators(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand All @@ -553,7 +567,7 @@

database = get_database_matching_server_keys(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand Down Expand Up @@ -650,7 +664,7 @@
try:
run_services_validators(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand All @@ -662,7 +676,7 @@

database = get_database_matching_server_keys(
request_headers=request.headers,
request_body=request.body,
request_body=_body_bytes(request=request),
request_method=request.method,
request_path=request.path,
databases=self._target_manager.databases,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def validate_content_length_header_is_int(
ContentLengthHeaderNotIntError: The content length header is not an
integer
"""
body_length = len(request_body if request_body else b"")
body_length = len(request_body)
given_content_length = request_headers.get("Content-Length", body_length)

try:
Expand All @@ -55,7 +55,7 @@ def validate_content_length_header_not_too_large(
ContentLengthHeaderTooLargeError: The given content length header says
that the content length is greater than the body length.
"""
body_length = len(request_body if request_body else b"")
body_length = len(request_body)
given_content_length = request_headers.get("Content-Length", body_length)
given_content_length_value = int(given_content_length)
# We skip coverage here as running a test to cover this is very slow.
Expand All @@ -80,7 +80,7 @@ def validate_content_length_header_not_too_small(
AuthenticationFailureError: The given content length header says that
the content length is smaller than the body length.
"""
body_length = len(request_body if request_body else b"")
body_length = len(request_body)
given_content_length = request_headers.get("Content-Length", body_length)
given_content_length_value = int(given_content_length)

Expand Down
8 changes: 6 additions & 2 deletions tests/mock_vws/fixtures/prepared_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,9 @@ def delete_target(
date = rfc_1123_date()
request_path = f"/targets/{target_id}"
method = HTTPMethod.DELETE
content = b""
# This could be b"" or None, but we want to exercise handling
# all three of those types.
content = ""

access_key = vuforia_database.server_access_key
secret_key = vuforia_database.server_secret_key
Expand Down Expand Up @@ -158,7 +160,9 @@ def database_summary(vuforia_database: VuforiaDatabase) -> Endpoint:
request_path = "/summary"
method = HTTPMethod.GET

content = b""
# This could be b"" or "", but we want to exercise handling
# all three of those types.
content = None

access_key = vuforia_database.server_access_key
secret_key = vuforia_database.server_secret_key
Expand Down
Loading