connexion icon indicating copy to clipboard operation
connexion copied to clipboard

Throw an error on no operation_id

Open alsonkemp opened this issue 5 years ago • 1 comments

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())

alsonkemp avatar Feb 21 '20 20:02 alsonkemp

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'

ocanty avatar Feb 24 '20 17:02 ocanty