import marshmallow as ma from typing import Dict from webargs import missing from webargs.flaskparser import FlaskParser class FlaskParserExt(FlaskParser): DEFAULT_UNKNOWN_BY_LOCATION: Dict[str, str or None] = { "json_or_query": ma.RAISE, **FlaskParser.DEFAULT_UNKNOWN_BY_LOCATION, } __location_map__ = dict(json_or_query="load_json_or_query", **FlaskParser.__location_map__) def load_json_or_query(self, request, schema): """Load data from a request, accepting either JSON or query data. The data will first be loaded as JSON, and, if that fails, it will be loaded as a query string. """ data = self.load_json(request, schema) if data is not missing: return data return self.load_querystring(request, schema) parser = FlaskParserExt()