From 3f059ec1e0408c71d43d3b9be1b5b1c76dd4fab0 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Tue, 5 Nov 2019 12:56:48 +0100 Subject: generate_openapi: fix enums when they are declared as const Fixes: #2781 --- openapi/generate_openapi.py | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'openapi') diff --git a/openapi/generate_openapi.py b/openapi/generate_openapi.py index 9c15b0d3..54526416 100644 --- a/openapi/generate_openapi.py +++ b/openapi/generate_openapi.py @@ -474,7 +474,41 @@ class SchemaProperty(object): elif p.key.name == 'allowedValues': self.type = 'enum' - self.enum = [e.value.lower() for e in p.value.elements] + if p.value.type == 'ArrayExpression': + self.enum = [e.value.lower() for e in p.value.elements] + elif p.value.type == 'Identifier': + # tree wide lookout for the identifier + def find_variable(elem, match): + if isinstance(elem, list): + for value in elem: + ret = find_variable(value, match) + if ret is not None: + return ret + + try: + items = elem.items() + except AttributeError: + return None + except TypeError: + return None + + if (elem.type == 'VariableDeclarator' and + elem.id.name == match): + return elem + + for type, value in items: + ret = find_variable(value, match) + if ret is not None: + return ret + + return None + + elem = find_variable(context.program.body, p.value.name) + + if elem.init.type != 'ArrayExpression': + raise TypeError('can not find "{}"'.format(p.value.name)) + + self.enum = [e.value.lower() for e in elem.init.elements] elif p.key.name == 'blackbox': self.blackbox = True -- cgit v1.2.3-1-g7c22