From e5ec36b6ff3a920a5d5a15492d82089617fb6820 Mon Sep 17 00:00:00 2001 From: xuning Date: Tue, 19 Nov 2019 15:06:10 +0800 Subject: [PATCH 01/10] fix AttributeError: 'bytes' object has no attribute 'lists' --- swagger_py_codegen/templates/tornado/validators.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swagger_py_codegen/templates/tornado/validators.tpl b/swagger_py_codegen/templates/tornado/validators.tpl index 08b6592..d964217 100644 --- a/swagger_py_codegen/templates/tornado/validators.tpl +++ b/swagger_py_codegen/templates/tornado/validators.tpl @@ -29,7 +29,7 @@ class ValidatorAdaptor(object): if obj is None or not obj: return None if six.PY3: - if isinstance(obj, str): + if isinstance(obj, str) or isinstance(obj, bytes): obj = MultiDict(json.loads(obj)) else: if isinstance(obj, (str, unicode, basestring)): From 53c5c37b04b90f433ec9d5d6955ac1e5de8e6beb Mon Sep 17 00:00:00 2001 From: xuning Date: Tue, 19 Nov 2019 16:34:35 +0800 Subject: [PATCH 02/10] tornado, support json post in body request --- .../templates/tornado/validators.tpl | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/swagger_py_codegen/templates/tornado/validators.tpl b/swagger_py_codegen/templates/tornado/validators.tpl index d964217..f0a670a 100644 --- a/swagger_py_codegen/templates/tornado/validators.tpl +++ b/swagger_py_codegen/templates/tornado/validators.tpl @@ -11,7 +11,7 @@ import six from functools import wraps from jsonschema import Draft4Validator -from .schemas import validators, scopes, resolver, normalize, filters +from .schemas import definitions, validators, scopes, resolver, normalize, filters class ValidatorAdaptor(object): @@ -25,6 +25,16 @@ class ValidatorAdaptor(object): except ValueError: return value + @staticmethod + def get_ref_obj(ref): + fields = ref.split('/') + obj = definitions + for value in fields: + if value == '#': + continue + obj = obj[value] + return obj + def type_convert(self, obj): if obj is None or not obj: return None @@ -53,7 +63,11 @@ class ValidatorAdaptor(object): return [func([i]) for i in v] for k, values in obj.lists(): - prop = self.validator.schema['properties'].get(k, {}) + obj = self.validator.schema + if '$ref' in obj: + obj = self.get_ref_obj(obj['$ref']) + + prop = obj['properties'].get(k, {}) type_ = prop.get('type') fun = convert_funs.get(type_, lambda v: v[0]) if type_ == 'array': From 3e8d8e4a93e8522b03a73c05dd76fc09febdf36d Mon Sep 17 00:00:00 2001 From: xuning Date: Tue, 19 Nov 2019 18:19:09 +0800 Subject: [PATCH 03/10] rename obj to schema --- swagger_py_codegen/templates/tornado/validators.tpl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/swagger_py_codegen/templates/tornado/validators.tpl b/swagger_py_codegen/templates/tornado/validators.tpl index f0a670a..4e5a90b 100644 --- a/swagger_py_codegen/templates/tornado/validators.tpl +++ b/swagger_py_codegen/templates/tornado/validators.tpl @@ -63,11 +63,11 @@ class ValidatorAdaptor(object): return [func([i]) for i in v] for k, values in obj.lists(): - obj = self.validator.schema - if '$ref' in obj: - obj = self.get_ref_obj(obj['$ref']) + schema = self.validator.schema + if '$ref' in schema: + schema = self.get_ref_obj(schema['$ref']) - prop = obj['properties'].get(k, {}) + prop = schema['properties'].get(k, {}) type_ = prop.get('type') fun = convert_funs.get(type_, lambda v: v[0]) if type_ == 'array': From d79b26b7006f5f825970e54602f7538a334ea0af Mon Sep 17 00:00:00 2001 From: xuning Date: Wed, 20 Nov 2019 14:19:02 +0800 Subject: [PATCH 04/10] validate string error, because it's byte --- swagger_py_codegen/templates/tornado/validators.tpl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/swagger_py_codegen/templates/tornado/validators.tpl b/swagger_py_codegen/templates/tornado/validators.tpl index 4e5a90b..909b97f 100644 --- a/swagger_py_codegen/templates/tornado/validators.tpl +++ b/swagger_py_codegen/templates/tornado/validators.tpl @@ -25,6 +25,12 @@ class ValidatorAdaptor(object): except ValueError: return value + @staticmethod + def convert_to_string_if_bytes(value): + if isinstance(value, bytes): + return bytes.decode(value) + return value + @staticmethod def get_ref_obj(ref): fields = ref.split('/') @@ -55,7 +61,7 @@ class ValidatorAdaptor(object): 'boolean': lambda v: v[0].lower() not in ['n', 'no', 'false', '', '0'], 'null': lambda v: None, 'number': lambda v: self.validate_number(float, v[0]), - 'string': lambda v: v[0] + 'string': lambda v: self.convert_to_string_if_bytes(v[0]) } def convert_array(type_, v): From a73acd49a4502fe58a1d3df634a8ad470901f696 Mon Sep 17 00:00:00 2001 From: xuning Date: Wed, 20 Nov 2019 14:30:58 +0800 Subject: [PATCH 05/10] use if express --- swagger_py_codegen/templates/tornado/validators.tpl | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/swagger_py_codegen/templates/tornado/validators.tpl b/swagger_py_codegen/templates/tornado/validators.tpl index 909b97f..59a6c5b 100644 --- a/swagger_py_codegen/templates/tornado/validators.tpl +++ b/swagger_py_codegen/templates/tornado/validators.tpl @@ -25,12 +25,6 @@ class ValidatorAdaptor(object): except ValueError: return value - @staticmethod - def convert_to_string_if_bytes(value): - if isinstance(value, bytes): - return bytes.decode(value) - return value - @staticmethod def get_ref_obj(ref): fields = ref.split('/') @@ -61,7 +55,7 @@ class ValidatorAdaptor(object): 'boolean': lambda v: v[0].lower() not in ['n', 'no', 'false', '', '0'], 'null': lambda v: None, 'number': lambda v: self.validate_number(float, v[0]), - 'string': lambda v: self.convert_to_string_if_bytes(v[0]) + 'string': lambda v: bytes.decode(v[0]) if isinstance(v[0], bytes) else v[0] } def convert_array(type_, v): From 5a765e5dbe6559775fb275d16de712b671d0e42a Mon Sep 17 00:00:00 2001 From: xuning Date: Thu, 21 Nov 2019 09:30:09 +0800 Subject: [PATCH 06/10] tornado, using resolver to solve ref --- swagger_py_codegen/templates/tornado/validators.tpl | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/swagger_py_codegen/templates/tornado/validators.tpl b/swagger_py_codegen/templates/tornado/validators.tpl index 59a6c5b..85dfb28 100644 --- a/swagger_py_codegen/templates/tornado/validators.tpl +++ b/swagger_py_codegen/templates/tornado/validators.tpl @@ -25,16 +25,6 @@ class ValidatorAdaptor(object): except ValueError: return value - @staticmethod - def get_ref_obj(ref): - fields = ref.split('/') - obj = definitions - for value in fields: - if value == '#': - continue - obj = obj[value] - return obj - def type_convert(self, obj): if obj is None or not obj: return None @@ -65,7 +55,7 @@ class ValidatorAdaptor(object): for k, values in obj.lists(): schema = self.validator.schema if '$ref' in schema: - schema = self.get_ref_obj(schema['$ref']) + _, schema = resolver.resolve(schema['$ref']) prop = schema['properties'].get(k, {}) type_ = prop.get('type') From 710fbd61fc169cb8979716bd2bc11bd372fefdf3 Mon Sep 17 00:00:00 2001 From: xuning Date: Thu, 21 Nov 2019 09:35:00 +0800 Subject: [PATCH 07/10] delete useless code --- swagger_py_codegen/templates/tornado/validators.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swagger_py_codegen/templates/tornado/validators.tpl b/swagger_py_codegen/templates/tornado/validators.tpl index 85dfb28..8137174 100644 --- a/swagger_py_codegen/templates/tornado/validators.tpl +++ b/swagger_py_codegen/templates/tornado/validators.tpl @@ -11,7 +11,7 @@ import six from functools import wraps from jsonschema import Draft4Validator -from .schemas import definitions, validators, scopes, resolver, normalize, filters +from .schemas import validators, scopes, resolver, normalize, filters class ValidatorAdaptor(object): From ee6d7e3f77f28560a64d26bb7096edcb0243c833 Mon Sep 17 00:00:00 2001 From: xuning Date: Tue, 24 Dec 2019 21:51:11 +0800 Subject: [PATCH 08/10] fix bool value is bytes type problem --- swagger_py_codegen/templates/tornado/validators.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swagger_py_codegen/templates/tornado/validators.tpl b/swagger_py_codegen/templates/tornado/validators.tpl index 8137174..d1110b0 100644 --- a/swagger_py_codegen/templates/tornado/validators.tpl +++ b/swagger_py_codegen/templates/tornado/validators.tpl @@ -42,7 +42,7 @@ class ValidatorAdaptor(object): convert_funs = { 'integer': lambda v: self.validate_number(int, v[0]), - 'boolean': lambda v: v[0].lower() not in ['n', 'no', 'false', '', '0'], + 'boolean': lambda v: bytes.decode(v[0]).lower() not in ['n', 'no', 'false', '', '0'], 'null': lambda v: None, 'number': lambda v: self.validate_number(float, v[0]), 'string': lambda v: bytes.decode(v[0]) if isinstance(v[0], bytes) else v[0] From e95e229f27d9c712af296d1abc39a175a8764b08 Mon Sep 17 00:00:00 2001 From: xuning Date: Thu, 18 Nov 2021 12:15:20 +0800 Subject: [PATCH 09/10] refactor --- swagger_py_codegen/templates/tornado/validators.tpl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/swagger_py_codegen/templates/tornado/validators.tpl b/swagger_py_codegen/templates/tornado/validators.tpl index d1110b0..174326b 100644 --- a/swagger_py_codegen/templates/tornado/validators.tpl +++ b/swagger_py_codegen/templates/tornado/validators.tpl @@ -40,12 +40,15 @@ class ValidatorAdaptor(object): obj = MultiDict(six.iteritems(obj)) result = dict() + def convert_string_if_bytes(value): + return bytes.decode(value) if isinstance(value, bytes) else value + convert_funs = { 'integer': lambda v: self.validate_number(int, v[0]), - 'boolean': lambda v: bytes.decode(v[0]).lower() not in ['n', 'no', 'false', '', '0'], + 'boolean': lambda v: convert_string_if_bytes(v[0]).lower() not in ['n', 'no', 'false', '', '0'], 'null': lambda v: None, 'number': lambda v: self.validate_number(float, v[0]), - 'string': lambda v: bytes.decode(v[0]) if isinstance(v[0], bytes) else v[0] + 'string': lambda v: convert_string_if_bytes(v[0]) } def convert_array(type_, v): From df1b59e50313c127a5057e9443c41672e91e2112 Mon Sep 17 00:00:00 2001 From: xuning Date: Tue, 25 Jan 2022 16:54:35 +0800 Subject: [PATCH 10/10] return a string or nothing should be ok --- swagger_py_codegen/templates/tornado/validators.tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/swagger_py_codegen/templates/tornado/validators.tpl b/swagger_py_codegen/templates/tornado/validators.tpl index 174326b..8dcbfaa 100644 --- a/swagger_py_codegen/templates/tornado/validators.tpl +++ b/swagger_py_codegen/templates/tornado/validators.tpl @@ -123,8 +123,8 @@ def response_filter(obj): method = request.method if method == 'HEAD': method = 'GET' - headers = None - status = None + headers = {} + status = 200 if isinstance(resp, tuple): resp, status, headers = unpack(resp) filter = filters.get((endpoint, method), None)