From f00191a6dbc0d2ac49363e653baff6b700543dca Mon Sep 17 00:00:00 2001 From: peppelinux Date: Wed, 5 Aug 2020 12:03:40 +0200 Subject: [PATCH] [OAS3] integer and number formats --- rest_framework/schemas/generators.py | 4 +++- rest_framework/schemas/openapi.py | 7 ++++--- tests/schemas/test_openapi.py | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/rest_framework/schemas/generators.py b/rest_framework/schemas/generators.py index d3c6446aa..1008378fe 100644 --- a/rest_framework/schemas/generators.py +++ b/rest_framework/schemas/generators.py @@ -151,7 +151,9 @@ class BaseSchemaGenerator: # Set by 'SCHEMA_COERCE_PATH_PK'. coerce_path_pk = None - def __init__(self, title=None, url=None, description=None, patterns=None, urlconf=None, version=None): + def __init__(self, title=None, url=None, description=None, + patterns=None, urlconf=None, version=None): + if url and not url.endswith('/'): url += '/' diff --git a/rest_framework/schemas/openapi.py b/rest_framework/schemas/openapi.py index 9774a94c7..c9b910b29 100644 --- a/rest_framework/schemas/openapi.py +++ b/rest_framework/schemas/openapi.py @@ -113,9 +113,8 @@ class SchemaGenerator(BaseSchemaGenerator): return schema + # View Inspectors - - class AutoSchema(ViewInspector): def __init__(self, tags=None, operation_id_base=None, component_name=None): @@ -471,13 +470,15 @@ class AutoSchema(ViewInspector): if isinstance(field, serializers.FloatField): content = { 'type': 'number', + 'format': 'float' } self._map_min_max(field, content) return content if isinstance(field, serializers.IntegerField): content = { - 'type': 'integer' + 'type': 'integer', + 'format': 'int64' } self._map_min_max(field, content) # 2147483647 is max for int32_size, so we use int64 for format diff --git a/tests/schemas/test_openapi.py b/tests/schemas/test_openapi.py index d483f3d45..f80507142 100644 --- a/tests/schemas/test_openapi.py +++ b/tests/schemas/test_openapi.py @@ -54,7 +54,7 @@ class TestFieldMapping(TestCase): cases = [ (serializers.ListField(), {'items': {}, 'type': 'array'}), (serializers.ListField(child=serializers.BooleanField()), {'items': {'type': 'boolean'}, 'type': 'array'}), - (serializers.ListField(child=serializers.FloatField()), {'items': {'type': 'number'}, 'type': 'array'}), + (serializers.ListField(child=serializers.FloatField()), {'items': {'type': 'number', 'format': 'float'}, 'type': 'array'}), (serializers.ListField(child=serializers.CharField()), {'items': {'type': 'string'}, 'type': 'array'}), (serializers.ListField(child=serializers.IntegerField(max_value=4294967295)), {'items': {'type': 'integer', 'maximum': 4294967295, 'format': 'int64'}, 'type': 'array'}),