Skip to content

TypeError exception in response validation with falcon framework #138

@marco-a-itl

Description

@marco-a-itl

Running code generated for falcon framework from the following yaml file

https://forge.etsi.org/gitlab/mec/gs011-app-enablement-api/blob/master/Mp1.yaml

I get an exception for every response that the application tries to send out:

[2019-02-14 09:36:04 +0000] [17948] [ERROR] Error handling request /exampleAPI/mp1/v1/applications/applicazione1/dns_rules
Traceback (most recent call last):
  File "/src/var/mec/prova_venv/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 135, in handle
    self.handle_request(listener, req, client, addr)
  File "/src/var/mec/prova_venv/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 176, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/src/var/mec/prova_venv/lib/python2.7/site-packages/falcon/api.py", line 244, in __call__
    responder(req, resp, **params)
  File "/src/var/mec/prova_venv/lib/python2.7/site-packages/falcon/hooks.py", line 182, in do_after
    shim(req, resp, self, *action_args, **action_kwargs)
  File "/src/var/mec/swagger_test/mp1_ref/mp1_ref/exampleAPI_mp1_v1/validators.py", line 169, in response_filter
    description='`%d` is not a defined status code.' % status)
TypeError: %d format: a number is required, not NoneType

This is due to the fact that in validators.py (function response_filter) the status variable is (in falcon) a string containing the status code and the reason phrase, while filter is a dictionary indexed by status code as integer.

My workaround is the following:

-    status = None
-
-    if len(filter) == 1:
-        if six.PY3:
-            status = list(filter.keys())[0]
-        else:
-            status = filter.keys()[0]
+    status = int(resp.status.split()[0])

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions