connexion
connexion copied to clipboard
Throw an error on no operation_id
https://github.com/zalando/connexion/blob/96bdcb010a4e5180c2bce18295e7b576c9c1ef0f/connexion/resolver.py#L60
Currently operation_id == None flows into function_resolver and triggers unexpected errors. Better to do?:
if operation_id is None:
raise ResolverError("operation_id is None", sys.exc_info())
An additional comment on this, if a user accidentally does the below:
app = connexion.FlaskApp(__name__, specification_dir='openapi/')
app.add_api('openapi.yml', resolver=RestyResolver, strict_validation=True)
app.run(port=8080)
rather than
app = connexion.FlaskApp(__name__, specification_dir='openapi/')
app.add_api('openapi.yml', resolver=RestyResolver('api'), strict_validation=True)
app.run(port=8080)
They will receive a traceback like so:
Failed to add operation for POST /v1/accounts/
Traceback (most recent call last):
File "v1.py", line 5, in <module>
app.add_api('openapi.yml', resolver=RestyResolver, strict_validation=True)
File "/home/ocanty/nsa3/account/lib/python3.8/site-packages/connexion/apps/flask_app.py", line 57, in add_api
api = super(FlaskApp, self).add_api(specification, **kwargs)
File "/home/ocanty/nsa3/account/lib/python3.8/site-packages/connexion/apps/abstract.py", line 141, in add_api
api = self.api_cls(specification,
File "/home/ocanty/nsa3/account/lib/python3.8/site-packages/connexion/apis/abstract.py", line 111, in __init__
self.add_paths()
File "/home/ocanty/nsa3/account/lib/python3.8/site-packages/connexion/apis/abstract.py", line 219, in add_paths
self._handle_add_operation_error(path, method, sys.exc_info())
File "/home/ocanty/nsa3/account/lib/python3.8/site-packages/connexion/apis/abstract.py", line 231, in _handle_add_operation_error
raise value.with_traceback(traceback)
File "/home/ocanty/nsa3/account/lib/python3.8/site-packages/connexion/apis/abstract.py", line 209, in add_paths
self.add_operation(path, method)
File "/home/ocanty/nsa3/account/lib/python3.8/site-packages/connexion/apis/abstract.py", line 175, in add_operation
self._add_operation_internal(method, path, operation)
File "/home/ocanty/nsa3/account/lib/python3.8/site-packages/connexion/apis/flask_api.py", line 111, in _add_operation_internal
endpoint_name = flask_utils.flaskify_endpoint(operation.operation_id,
File "/home/ocanty/nsa3/account/lib/python3.8/site-packages/connexion/apis/flask_utils.py", line 30, in flaskify_endpoint
result = identifier.replace('.', '_')
AttributeError: 'NoneType' object has no attribute 'replace'