OpenAPI仕様とconnexion2.0で不思議なエラーが発生した場合、それを理解するとここに投稿されます
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
[2018-11-05 23:51:32,803] ERROR in app: Exception on /path [GET]
Traceback (most recent call last):
File "/project/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/project/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/project/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/project/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/project/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/project/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/project/lib/python3.6/site-packages/connexion/decorators/decorator.py", line 73, in wrapper
response = function(request)
File "/project/lib/python3.6/site-packages/connexion/decorators/uri_parsing.py", line 132, in wrapper
response = function(request)
File "/project/lib/python3.6/site-packages/connexion/decorators/validation.py", line 339, in wrapper
return function(request)
File "/project/lib/python3.6/site-packages/connexion/decorators/decorator.py", line 44, in wrapper
response = function(request)
File "/project/lib/python3.6/site-packages/connexion/decorators/parameter.py", line 108, in wrapper
request.files, arguments, has_kwargs, sanitize)
File "/project/lib/python3.6/site-packages/connexion/operations/abstract.py", line 268, in get_arguments
has_kwargs, sanitize))
File "/project/lib/python3.6/site-packages/connexion/operations/openapi.py", line 284, in _get_query_arguments
arguments, has_kwargs, sanitize)
File "/project/lib/python3.6/site-packages/connexion/operations/abstract.py", line 194, in _query_args_helper
res[key] = self._get_val_from_param(value, query_defn)
File "/project/lib/python3.6/site-packages/connexion/operations/openapi.py", line 295, in _get_val_from_param
return make_type(value, query_schema["type"])
File "/project/lib/python3.6/site-packages/connexion/utils.py", line 46, in make_type
return type_func(value)
ValueError: dictionary update sequence element #0 has length 1; 2 is required
127.0.0.1 - - [05/Nov/2018 23:51:32] "GET /path?foo=bar HTTP/1.1" 500 -
私のOpenAPI仕様では、これを変更しました
Geo:
description: A Geolocation object
type: object
properties:
latitude:
type: integer
example: 40.742306
longitude:
type: integer
example: -74.003494
これに
Geo:
description: A Geolocation object
type: array
items:
type: number
format: double
example: 40.742306,-74.003494
そしてそれは問題を解決するようです
問題を再現できるように、動作仕様全体を投稿していただければ、非常に役立ちます。
やあ、
このバグは、入力がdictではなくstringであるため、次の行が失敗することが原因です。
https://github.com/zalando/connexion/blob/master/connexion/operations/openapi.py#L268
文字列をdictに変換することで、これを修正できますか?
前もって感謝します!
最も参考になるコメント
私のOpenAPI仕様では、これを変更しました
これに
そしてそれは問題を解決するようです