You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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:
Use post(headers={'Content-Type': 'application/json'}, data=custom_json_dumps(...)) in each call. Never use post(json=...). Seems quite error prone/duplicative.
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__.
Monkey-patch httpx._content.encode_json to provide a custom JSONEncoder subclass to json.dumps(cls=...).
Implement the httpxmaintainer'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.
The text was updated successfully, but these errors were encountered:
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 stdlibjson
module.httpx
-- the http client we use for outgoing requests, relies specifically on the stdlibjson
module.I see a couple of ways we can tackle this:
post(headers={'Content-Type': 'application/json'}, data=custom_json_dumps(...))
in each call. Never usepost(json=...)
. Seems quite error prone/duplicative.AsyncClient
, override thebuild_request
method, copy most fromhttpx
but use a customRequest
which overrides__init__
to perform option 1's suggestion automatically before yielding tosuper().__init__
.httpx._content.encode_json
to provide a customJSONEncoder
subclass tojson.dumps(cls=...)
.httpx
maintainer's proposal tohttpx
to implement support forAsyncClient(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.
The text was updated successfully, but these errors were encountered: