openapi-core icon indicating copy to clipboard operation
openapi-core copied to clipboard

Add more tests for deserializing bytes values, and support bytes when deserializing application/x-www-form-urlencoded

Open pepijn-motosumo opened this issue 2 years ago • 2 comments

I noticed that the deserializers for application/json and multipart/form-data both support bytes values, but the deserializer for application/x-www-form-urlencoded does not. So in this PR I'm adding that support. I'm also adding some tests to verify this functionality.

Note that the existing support for bytes values does not align with the documentation for the OpenAPIRequest dataclass:

@dataclass
class OpenAPIRequest:
    """
    [...]
        body
            The request body, as string.
    [...]
    """
    # [...]
    body: str
    # [...]

I'm not sure if and how that should be changed, and what any other implications might be.

Merging this would fix an issue with pyramid_openapi3, where it is currently not possible to validate requests with application/x-www-form-urlencoded bodies. See this Github issue: https://github.com/Pylons/pyramid_openapi3/issues/167. Note that this is not the only way to fix this issue, but with what I've learned so far I think it's the best one.

pepijn-motosumo avatar May 19 '22 13:05 pepijn-motosumo

Codecov Report

Merging #396 (7555547) into master (1627889) will increase coverage by 0.00%. The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master     #396   +/-   ##
=======================================
  Coverage   95.25%   95.25%           
=======================================
  Files          83       83           
  Lines        1874     1876    +2     
  Branches      280      281    +1     
=======================================
+ Hits         1785     1787    +2     
  Misses         68       68           
  Partials       21       21           
Impacted Files Coverage Δ
openapi_core/deserializing/media_types/util.py 100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update 1627889...7555547. Read the comment docs.

codecov[bot] avatar Jun 01 '22 06:06 codecov[bot]

bytes was supported because not strict type checking. With new version that shouldn't be the case with new Request protocol.

p1c2u avatar Sep 12 '22 12:09 p1c2u

Can confirm that the new version fixes this. Thanks for your patience!

pepijn-motosumo avatar Dec 19 '22 16:12 pepijn-motosumo