flasgger / flasgger

Easy OpenAPI specs and Swagger UI for your Flask API

Home Page:http://flasgger.pythonanywhere.com/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Flasgger 0.9.7.1 breaks compatibility with Python 3.7 and Flask 2.3

maciej-lech opened this issue · comments

Hi!

After a recent upgrade to Flasgger 0.9.7.1, it breaks compatibility with Python 3.7 and Flask 2.3.

Traceback (most recent call last):
  File "/.../lib/python3.7/site-packages/flask/app.py", line 1823, in full_dispatch_request
    rv = self.dispatch_request()
  File "/.../lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/.../lib/python3.7/site-packages/flask_restful/__init__.py", line 489, in wrapper
    resp = resource(*args, **kwargs)
  File "/.../lib/python3.7/site-packages/flask/views.py", line 107, in view
    return current_app.ensure_sync(self.dispatch_request)(**kwargs)
  File "/.../lib/python3.7/site-packages/flask_restful/__init__.py", line 604, in dispatch_request
    resp = meth(*args, **kwargs)
  File "/.../lib/python3.7/site-packages/flasgger/utils.py", line 305, in wrapper
    file_ref_path = relative_path + '/' + value
  File "/.../lib/python3.7/site-packages/mypackage/login.py", line 10, in post
    "csrf_access_token": get_csrf_token(access_token),
  File "/.../lib/python3.7/site-packages/flask/json/__init__.py", line 342, in jsonify
    return current_app.json.response(*args, **kwargs)
  File "/.../lib/python3.7/site-packages/flask/json/provider.py", line 309, in response
    f"{self.dumps(obj, **dump_args)}\n", mimetype=mimetype
  File "/.../lib/python3.7/site-packages/flask/json/provider.py", line 230, in dumps
    return json.dumps(obj, **kwargs)
  File "/usr/lib/python3.7/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
TypeError: __init__() got an unexpected keyword argument 'skipkeys'

I am using:

app.json_encoder = LazyJSONEncoder

The same code with Flasgger 0.9.5 works fine.

PS. I would consider following more user-friendly versioning standard like https://semver.org/

I actually hit this too while packaging for Arch Linux, but with Python 3.11 and Flask 2.2 instead. The test suite doesn't collect successfully:

============================= test session starts ==============================
platform linux -- Python 3.11.3, pytest-7.3.2, pluggy-1.0.0
rootdir: /build/python-flasgger/src/flasgger-0.9.7.1
collected 10 items / 1 error

==================================== ERRORS ====================================
___________________ ERROR collecting tests/test_examples.py ____________________
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:265: in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:80: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/python.py:271: in pytest_pycollect_makeitem
    return list(collector._genfunctions(name, obj))
/usr/lib/python3.11/site-packages/_pytest/python.py:498: in _genfunctions
    self.ihook.pytest_generate_tests.call_extra(methods, dict(metafunc=metafunc))
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:292: in call_extra
    return self(**kwargs)
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:265: in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:80: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
tests/conftest.py:82: in pytest_generate_tests
    test_data = [
tests/conftest.py:84: in <listcomp>
    get_specs_data(mod), get_test_metadata(mod))
tests/conftest.py:40: in get_specs_data
    apidocs = client.get('?'.join((specs_route, 'json=true')))
/usr/lib/python3.11/site-packages/werkzeug/test.py:1240: in get
    return self.open(*args, **kw)
/usr/lib/python3.11/site-packages/flask/testing.py:238: in open
    response = super().open(
/usr/lib/python3.11/site-packages/werkzeug/test.py:1194: in open
    response = self.run_wsgi_app(request.environ, buffered=buffered)
/usr/lib/python3.11/site-packages/werkzeug/test.py:1068: in run_wsgi_app
    rv = run_wsgi_app(self.application, environ, buffered=buffered)
/usr/lib/python3.11/site-packages/werkzeug/test.py:1342: in run_wsgi_app
    app_rv = app(environ, start_response)
/usr/lib/python3.11/site-packages/flask/app.py:2552: in __call__
    return self.wsgi_app(environ, start_response)
/usr/lib/python3.11/site-packages/flask/app.py:2532: in wsgi_app
    response = self.handle_exception(e)
/usr/lib/python3.11/site-packages/flask/app.py:2529: in wsgi_app
    response = self.full_dispatch_request()
/usr/lib/python3.11/site-packages/flask/app.py:1825: in full_dispatch_request
    rv = self.handle_user_exception(e)
/usr/lib/python3.11/site-packages/flask/app.py:1823: in full_dispatch_request
    rv = self.dispatch_request()
/usr/lib/python3.11/site-packages/flask/app.py:1799: in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
/usr/lib/python3.11/site-packages/flask/views.py:107: in view
    return current_app.ensure_sync(self.dispatch_request)(**kwargs)
/usr/lib/python3.11/site-packages/flask/views.py:188: in dispatch_request
    return current_app.ensure_sync(meth)(**kwargs)
flasgger/base.py:108: in get
    return jsonify(data)
/usr/lib/python3.11/site-packages/flask/json/__init__.py:342: in jsonify
    return current_app.json.response(*args, **kwargs)
/usr/lib/python3.11/site-packages/flask/json/provider.py:309: in response
    f"{self.dumps(obj, **dump_args)}\n", mimetype=mimetype
/usr/lib/python3.11/site-packages/flask/json/provider.py:230: in dumps
    return json.dumps(obj, **kwargs)
/usr/lib/python3.11/json/__init__.py:234: in dumps
    return cls(
E   TypeError: JSONProvider.__init__() got an unexpected keyword argument 'skipkeys'