mental32 / spotify.py

🌐 API wrapper for Spotify 🎶
https://spotifypy.readthedocs.io/en/latest/
MIT License
150 stars 38 forks source link

[Flask OAuth] User is not JSON serializable #17

Closed LorenzoCavatorta closed 5 years ago

LorenzoCavatorta commented 5 years ago

Hi,

I'm still working on the flask OAuth example. I'm currently able to give my user consent and get to the redirect; flask is throwing an error on Object of type User is not JSON serializable. FYI this is already including the two minor fixes I mention in the other two open issues, plus an added APP.secret_key on the flask program (required to be able to write/read from session)

* Serving Flask app "spotify_test3" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:8888/ (Press CTRL+C to quit)
127.0.0.1 - - [26/Sep/2019 17:09:36] "GET / HTTP/1.1" 302 -
[2019-09-26 17:09:38,659] ERROR in app: Exception on /spotify/callback [GET]
Traceback (most recent call last):
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
    return self.finalize_request(rv)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/app.py", line 1969, in finalize_request
    response = self.process_response(response)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/app.py", line 2268, in process_response
    self.session_interface.save_session(self, ctx.session, response)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/sessions.py", line 378, in save_session
    val = self.get_signing_serializer(app).dumps(dict(session))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/itsdangerous/serializer.py", line 166, in dumps
    payload = want_bytes(self.dump_payload(obj))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/itsdangerous/url_safe.py", line 42, in dump_payload
    json = super(URLSafeSerializerMixin, self).dump_payload(obj)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/itsdangerous/serializer.py", line 133, in dump_payload
    return want_bytes(self.serializer.dumps(obj, **self.serializer_kwargs))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/json/tag.py", line 305, in dumps
    return dumps(self.tag(value), separators=(",", ":"))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/json/__init__.py", line 211, in dumps
    rv = _json.dumps(obj, **kwargs)
  File "/usr/lib64/python3.7/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/usr/lib64/python3.7/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib64/python3.7/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/json/__init__.py", line 100, in default
    return _json.JSONEncoder.default(self, o)
  File "/usr/lib64/python3.7/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type User is not JSON serializable
[2019-09-26 17:09:38,669] ERROR in app: Request finalizing failed with an error while handling an error
Traceback (most recent call last):
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
    return self.finalize_request(rv)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/app.py", line 1969, in finalize_request
    response = self.process_response(response)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/app.py", line 2268, in process_response
    self.session_interface.save_session(self, ctx.session, response)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/sessions.py", line 378, in save_session
    val = self.get_signing_serializer(app).dumps(dict(session))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/itsdangerous/serializer.py", line 166, in dumps
    payload = want_bytes(self.dump_payload(obj))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/itsdangerous/url_safe.py", line 42, in dump_payload
    json = super(URLSafeSerializerMixin, self).dump_payload(obj)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/itsdangerous/serializer.py", line 133, in dump_payload
    return want_bytes(self.serializer.dumps(obj, **self.serializer_kwargs))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/json/tag.py", line 305, in dumps
    return dumps(self.tag(value), separators=(",", ":"))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/json/__init__.py", line 211, in dumps
    rv = _json.dumps(obj, **kwargs)
  File "/usr/lib64/python3.7/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/usr/lib64/python3.7/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib64/python3.7/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/json/__init__.py", line 100, in default
    return _json.JSONEncoder.default(self, o)
  File "/usr/lib64/python3.7/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type User is not JSON serializable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/app.py", line 1969, in finalize_request
    response = self.process_response(response)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/app.py", line 2268, in process_response
    self.session_interface.save_session(self, ctx.session, response)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/sessions.py", line 378, in save_session
    val = self.get_signing_serializer(app).dumps(dict(session))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/itsdangerous/serializer.py", line 166, in dumps
    payload = want_bytes(self.dump_payload(obj))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/itsdangerous/url_safe.py", line 42, in dump_payload
    json = super(URLSafeSerializerMixin, self).dump_payload(obj)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/itsdangerous/serializer.py", line 133, in dump_payload
    return want_bytes(self.serializer.dumps(obj, **self.serializer_kwargs))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/json/tag.py", line 305, in dumps
    return dumps(self.tag(value), separators=(",", ":"))
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/json/__init__.py", line 211, in dumps
    rv = _json.dumps(obj, **kwargs)
  File "/usr/lib64/python3.7/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/usr/lib64/python3.7/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib64/python3.7/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/home/lollo/.local/share/virtualenvs/spotinator-I8qC83Ee/lib/python3.7/site-packages/flask/json/__init__.py", line 100, in default
    return _json.JSONEncoder.default(self, o)
  File "/usr/lib64/python3.7/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type User is not JSON serializable
127.0.0.1 - - [26/Sep/2019 17:09:38] "GET /spotify/callback?code=AQAHJwiOILULHRJRKWkt_u-XP6kIYgmb4wAtHjW5pVkIhrW_rfYnse-YOosYb9TAjSV5Gusl4su2-T3Iqv3zXd_PILQNOA73WzJTlzlHmRsSnQbYKZLzHTCoXAMlyo7kKDtf6CzB4M-rrdwu3TYCT4Gdb6i0RlYcsPhnOv2H0aeaLv_GwqVL8VtwnKZ9DvpOWclE3N_pYBlMPuRx_z1Hu2VuQDRe7QQdtHMSYJMMvUC-dOEXTLOnSswWji94YfHFVb4iXLQhCizWQ1czS830I_b883MwoIseUwzAzBl4_kWMubT33Ue5CU5VvLtqhzOouQ HTTP/1.1" 500 -
127.0.0.1 - - [26/Sep/2019 17:09:41] "GET /favicon.ico HTTP/1.1" 404 -