Skip to content

misc: determine a method to globally handle custom json serialization using httpx #586

@cmyui

Description

@cmyui

At the moment, our server has a couple of locations where objects of types such as datetime are not able to be serialized into JSON due to a lack of support in the stdlib json module. httpx -- the http client we use for outgoing requests, relies specifically on the stdlib json module.

I see a couple of ways we can tackle this:

  1. Use post(headers={'Content-Type': 'application/json'}, data=custom_json_dumps(...)) in each call. Never use post(json=...). Seems quite error prone/duplicative.
  2. Subclass AsyncClient, override the build_request method, copy most from httpx but use a custom Request which overrides __init__ to perform option 1's suggestion automatically before yielding to super().__init__.
  3. Monkey-patch httpx._content.encode_json to provide a custom JSONEncoder subclass to json.dumps(cls=...).
  4. Implement the httpx maintainer's proposal to httpx to implement support for AsyncClient(request_class=..., response_class=...). Do the same __init__ override as suggested in option 1.

My preference is probably option 4 -- seems the best for the overall ecosystem. We could potentially do one of the other options in the short term as I believe this is currently having an effect on production.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingcode qualitySomething is implemented poorly

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions