From c376ffbb955ee33e9ba183d8d1961ce198c41d9e Mon Sep 17 00:00:00 2001 From: Jason Kraus Date: Mon, 16 Oct 2017 16:30:39 -0700 Subject: [PATCH 1/3] decode field formats --- openapi_codec/decode.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openapi_codec/decode.py b/openapi_codec/decode.py index 679ddb8..c300b24 100644 --- a/openapi_codec/decode.py +++ b/openapi_codec/decode.py @@ -44,9 +44,9 @@ def _parse_document(data, base_url=None): name=field_name, location='form', required=is_required, - schema=coreschema.String(description=field_description) + schema=coreschema.String(description=field_description, format=field_format) ) - for field_name, is_required, field_description in expanded + for field_name, is_required, field_description, field_format in expanded if not any([field.name == field_name for field in fields]) ] fields += expanded_fields @@ -188,7 +188,7 @@ def _expand_schema(schema): schema_required = _get_list(schema, 'required') if ((schema_type == ['object']) or (schema_type == 'object')) and schema_properties: return [ - (key, key in schema_required, schema_properties[key].get('description')) + (key, key in schema_required, schema_properties[key].get('description'), schema_properties[key].get('format')) for key in schema_properties.keys() ] return None From 00b0b0e47ad61c144fa249d7952dfa2c6aa4851d Mon Sep 17 00:00:00 2001 From: Jason Kraus Date: Tue, 17 Oct 2017 13:45:12 -0700 Subject: [PATCH 2/3] encode and test format --- openapi_codec/encode.py | 11 +++++++++++ tests/test_encode.py | 23 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/openapi_codec/encode.py b/openapi_codec/encode.py index 13b3ef4..35fc129 100644 --- a/openapi_codec/encode.py +++ b/openapi_codec/encode.py @@ -128,6 +128,10 @@ def _get_field_type(field): }.get(field.schema.__class__, 'string') +def _get_field_format(field): + return field.schema and field.schema.format + + def _get_parameters(link, encoding): """ Generates Swagger Parameter Item object. @@ -140,6 +144,7 @@ def _get_parameters(link, encoding): location = get_location(link, field) field_description = _get_field_description(field) field_type = _get_field_type(field) + field_format = _get_field_format(field) if location == 'form': if encoding in ('multipart/form-data', 'application/x-www-form-urlencoded'): # 'formData' in swagger MUST be one of these media types. @@ -152,6 +157,8 @@ def _get_parameters(link, encoding): } if field_type == 'array': parameter['items'] = {'type': 'string'} + if field_format: + parameter['format'] = field_format parameters.append(parameter) else: # Expand coreapi fields with location='form' into a single swagger @@ -179,6 +186,8 @@ def _get_parameters(link, encoding): 'description': field_description, 'schema': schema } + if field_format: + parameter['format'] = field_format parameters.append(parameter) else: parameter = { @@ -190,6 +199,8 @@ def _get_parameters(link, encoding): } if field_type == 'array': parameter['items'] = {'type': 'string'} + if field_format: + parameter['format'] = field_format parameters.append(parameter) if properties: diff --git a/tests/test_encode.py b/tests/test_encode.py index 429a9f0..57deb9d 100644 --- a/tests/test_encode.py +++ b/tests/test_encode.py @@ -106,3 +106,26 @@ def test_expected_fields(self): 'type': 'string' # Everything is a string for now. } self.assertEquals(self.swagger[0], expected) + + +class TestFormat(TestCase): + def setUp(self): + self.field = coreapi.Field( + name='published_before', + required=True, + location='query', + schema=coreschema.String(description='Filter by published date.', format='date') + ) + self.swagger = _get_parameters(coreapi.Link(fields=[self.field]), encoding='') + + def test_expected_fields(self): + self.assertEquals(len(self.swagger), 1) + expected = { + 'name': self.field.name, + 'required': self.field.required, + 'in': 'query', + 'description': self.field.schema.description, + 'type': 'string', + 'format': 'date' + } + self.assertEquals(self.swagger[0], expected) From 9e11a718183b217edee6c5cf3b35516f3cef7a81 Mon Sep 17 00:00:00 2001 From: Jason Kraus Date: Thu, 2 Nov 2017 18:42:07 -0700 Subject: [PATCH 3/3] add test for encoding an integer field; catches format regression --- openapi_codec/encode.py | 2 +- tests/test_encode.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/openapi_codec/encode.py b/openapi_codec/encode.py index 35fc129..0e2d58e 100644 --- a/openapi_codec/encode.py +++ b/openapi_codec/encode.py @@ -129,7 +129,7 @@ def _get_field_type(field): def _get_field_format(field): - return field.schema and field.schema.format + return field.schema and getattr(field.schema, 'format', None) def _get_parameters(link, encoding): diff --git a/tests/test_encode.py b/tests/test_encode.py index 57deb9d..e344700 100644 --- a/tests/test_encode.py +++ b/tests/test_encode.py @@ -129,3 +129,25 @@ def test_expected_fields(self): 'format': 'date' } self.assertEquals(self.swagger[0], expected) + + +class TestIntegerField(TestCase): + def setUp(self): + self.field = coreapi.Field( + name='page', + required=True, + location='query', + schema=coreschema.Integer(description='A page number.') + ) + self.swagger = _get_parameters(coreapi.Link(fields=[self.field]), encoding='') + + def test_expected_fields(self): + self.assertEquals(len(self.swagger), 1) + expected = { + 'name': self.field.name, + 'required': self.field.required, + 'in': 'query', + 'description': self.field.schema.description, + 'type': 'integer' + } + self.assertEquals(self.swagger[0], expected) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy