I have a python flask app that links to a firebase realtime database using pyrebase4. I would like to create a try/except block that catches exceptions to do with unauthorised or expired access tokens trying to access data records. I have tried implementing the following:
import from urllib.error import HTTPError
from flask import jsonify
# Fetch task from db using access token.
try:
data = db.child("tasks").child(task["id"]).get(accessToken)
return jsonify(data.val()), 200
except HTTPError as e:
return jsonify({"msg": f"Authorisation error:{e}"}), 400
When testing the block with an expired token I am presented with the following error:
...raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: URL
During handling of the above exception, another exception occurred:
...raise HTTPError(e, request_object.text) requests.exceptions.HTTPError: [Errno 401 Client Error: Unauthorized for url: URL] { "error" : "Auth token is expired"}
Both errors reference the line: data = db.child("tasks").child(task["id"]).get(accessToken)
What exactly is happening here and how would I go about handling this exception within an exception?
CodePudding user response:
You may be importing 'HTTPError' from a different library than the pyrebase4 package uses. Check you are importing the error from the correct library. E.g.
from requests.exceptions import HTTPError
not
from urllib.error import HTTPError