Skip to content

JSON serialization failed #188

Open
Open
@CysIsHappy

Description

@CysIsHappy

version

python version: 3.11.7
flask version: 3.1.0
flask-pymongo version: 3.0.1

Code

File:/path/app/extensions.py

from flask_pymongo import PyMongo
mongo = PyMongo()

File:/path/app/init.py

from flask import Flask as _Flask
from app.extensions import mongo
class Flask(_Flask):
    from app.core.json_encoder import DefaultJSONProvider
    json_provider_class = DefaultJSONProvider

def create_app(flask_env):
    app = Flask(__name__)
    app.config.from_object(secure)
    mongo.init_app(app)
    return app

File:/path/app/core/json_encoder.py

from datetime import time as datetime_time, date as datetime_date, datetime
from flask.json.provider import DefaultJSONProvider as _DefaultJSONProvider
from app.core.error import ServerError

def _default(o):
    if hasattr(o, 'keys') and hasattr(o, '__getitem__'):
        o.lock_fileds()
        return dict(o)

    if isinstance(o, datetime):
        return o.strftime('%Y-%m-%d %H:%M:%S')

    if isinstance(o, datetime_date):
        return o.strftime('%Y-%m-%d')

    if isinstance(o, datetime_time):
        return o.strftime("%H:%M:%S")

    if isinstance(o, bytes):
        return o.decode('utf-8')
    raise ServerError()

class DefaultJSONProvider(_DefaultJSONProvider):
    default = staticmethod(_default)

ERROR:

[2025-02-12 11:07:23 +0800] [17224] [ERROR] Error handling request /v1/api_format/validators_service
Traceback (most recent call last):
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/gunicorn/workers/base_async.py", line 55, in handle
self.handle_request(listener_name, req, client, addr)
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/gunicorn/workers/ggevent.py", line 128, in handle_request
super().handle_request(listener_name, req, sock, addr)
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/gunicorn/workers/base_async.py", line 108, in handle_request
respiter = self.wsgi(environ, resp.start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask/app.py", line 1536, in call
return self.wsgi_app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask/app.py", line 1514, in wsgi_app
response = self.handle_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask_cors/extension.py", line 194, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask/app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask/app.py", line 919, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask_cors/extension.py", line 194, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask/app.py", line 809, in handle_user_exception
return self.ensure_sync(handler)(e) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/app/core/hook_func.py", line 38, in framework_error
raise error
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/app/api/v1/api_format.py", line 43, in validators_service
return Success(datas)
^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/app/core/error.py", line 90, in init
self.data = jsonify(data)
^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/app/core/utils.py", line 19, in jsonify
return current_app.json.response(*args, **kwargs).json
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask/json/provider.py", line 105, in response
return self._app.response_class(self.dumps(obj), mimetype="application/json")
^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/flask_pymongo/helpers.py", line 111, in dumps
return json_util.dumps(obj)
^^^^^^^^^^^^^^^^^^^^
File "/Users/cys/Me_cys/data/Company_data/yong_wei/project/cmdb/.venv/lib/python3.11/site-packages/bson/json_util.py", line 473, in dumps
return json.dumps(_json_convert(obj, json_options), *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/json/init.py", line 231, in dumps
return _default_encoder.encode(obj)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/json/encoder.py", line 200, in encode
chunks = self.iterencode(o, _one_shot=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/json/encoder.py", line 258, in iterencode
return _iterencode(o, 0)
^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/json/encoder.py", line 180, in default
raise TypeError(f'Object of type {o.class.name} '
TypeError: Object of type date is not JSON serializable

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions