Reputation: 1681
Attempting to send an image to the client browser - the following code works perfectly - please assume that I am receiving the correct base64.b64encoded byte stream:
def get_user_image(usr_rec):
with open("config.json",) as config:
data = json.load(config)
avatar = data["PATHS"]["AVATAR"]
file_ext = os.path.splitext(usrdata["avatar"])[1] if usrdata["avatar"] else ".png"
file_fmt = ".jpeg" if file_ext.upper()==".JPG" else file_ext
path = "{}/{}{}".format(avatar,usr_rec["recordid"],file_ext)
img = Image.open(path,mode="r")
barr = io.BytesIO()
img.save(barr,format="{}".format(file_fmt[1:].upper()))
return b64encode(barr.getvalue())
def format_record (usr_rec):
avatar = get_user_image(usr_rec["recordid"])
return jsonify({"avatar": str(avatar)})
On my development box. Move it to a flask production running under gunicorn and I get JSON serialization errors: TypeError: Object of type bytes is not JSON serializable
I am also getting this error for Decimal
types as well.
How can I get around this issue?
Upvotes: 0
Views: 364
Reputation: 2022
This is because your get_user_image
function returns a stream of bytes and not a string, so you have to cast the bytes read into a string: get_user_image(usr_rec["recordid"]).decode("utf-8")
. The same happens for the object of type Decimal
.
The jsonify
function only serializes objects of type string, as you can also see here and here
Upvotes: 1