0

Because I am rewriting a legacy app, I cannot change what the clients either send or accept. I have to accept and return JSON, HTML, and an in-house XML-like serialization. They do, fortunately set headers that describe what they are sending and what they accept.

So right now, what I do is have a decoder module and an encoder module with methods that are basically if/elif/else chains. When a route is ready to process/return something, I call the decoder/encoder module with the python object and the header field, which returns the formatted object as a string and the route processes the result or returns Response().

I am wondering if there is a more Quart native way of doing this.

I'm also trying to figure out how to make this work with Quart-Schema. I see from the docs that one can do app.json_encoder = <class> and I suppose I could sub in a different processor there, but it seems application global, there's no way to set it based on what the client sends. Optimally, it would be great if I could just pass the results of a dynamically chosen parser to Quart-Schema and let it do it's thing on python objects.

Thoughts and suggestions welcome. Thanks!

coyot
  • 418
  • 1
  • 3
  • 12

1 Answers1

0

You can write your own decorator like the quart-schema @validation_headers(). Inside the decorator, check the header for the Content-Type, parse it, and pass the parsed object to the func(...).