Flask==2.3.3
Werkzeug==2.3.7
I'm trying to get a ms graph subscription going in my app but when I send the subscription request to:
https://graph.microsoft.com/v1.0/subscriptions
and get the follow-up request from ms grap to my endpoint (ValidateSubscription), flask refuses to parse it because of its incorrect mediatype which is text/plain
. So far I've tried using flask-accept
module to parse the response like this:
class ValidateSubscription(Resource):
@accept('text/plain')
def post:
if flask.request.args.get("validationToken"):
token = flask.request.args.get('validationToken')
return Response(status=200, mimetype='text/plain', response=token)
else:
# process notification
pass
but it didn't work and I got the same error.
Also I've tried to add an api representation to my flask app like this:
@api.representation('text/plain')
def output_text(data, code, headers=None):
resp = flask.make_response(data, code, headers)
resp.headers.extend(headers or {})
return resp
When I print out api.representations
I see:
OrderedDict([('application/json', <function output_json at 0x7f872b021424>), ('text/plain', <function output_text at 0x7f8728d04214>)])
And I still get the same exact error without any change whatsoever.
Is there a better way to allow flask-restful to accept a text/plain
header or am I doing something wrong?
So the only solution I found working is rolling flask
and Werkzeug
back to versions 2.0.0
.
This is due to some commit in newer Werkzeug
version that instead of sometimes throwing a, quote, "Poorly comprehendable error message" when Content-Type
of the incoming request isn't application/json
, simply throws 415 INCORRECT MEDIA TYPE error everytime this happens.