From b67d2996847e1c14b3b2475d271103371100e048 Mon Sep 17 00:00:00 2001 From: Yann Savary Date: Tue, 3 Sep 2019 16:07:30 +0200 Subject: [PATCH] Replaced 'TODO' hardcoded version info by a parameter with default '0.1.0' (#6899) --- docs/api-guide/schemas.md | 5 ++++- rest_framework/schemas/__init__.py | 5 +++-- rest_framework/schemas/coreapi.py | 2 +- rest_framework/schemas/generators.py | 3 ++- rest_framework/schemas/openapi.py | 2 +- tests/schemas/test_openapi.py | 14 ++++++++++++++ 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/docs/api-guide/schemas.md b/docs/api-guide/schemas.md index 040c2ed14b0..e1ac16a2290 100644 --- a/docs/api-guide/schemas.md +++ b/docs/api-guide/schemas.md @@ -60,7 +60,8 @@ urlpatterns = [ # * Provide view name for use with `reverse()`. path('openapi', get_schema_view( title="Your Project", - description="API for all things …" + description="API for all things …", + version="1.0.0" ), name='openapi-schema'), # ... ] @@ -72,6 +73,7 @@ The `get_schema_view()` helper takes the following keyword arguments: * `title`: May be used to provide a descriptive title for the schema definition. * `description`: Longer descriptive text. +* `version`: The version of the API. Defaults to `0.1.0`. * `url`: May be used to pass a canonical base URL for the schema. schema_view = get_schema_view( @@ -137,6 +139,7 @@ Arguments: * `title` **required**: The name of the API. * `description`: Longer descriptive text. +* `version`: The version of the API. Defaults to `0.1.0`. * `url`: The root URL of the API schema. This option is not required unless the schema is included under path prefix. * `patterns`: A list of URLs to inspect when generating the schema. Defaults to the project's URL conf. * `urlconf`: A URL conf module name to use when generating the schema. Defaults to `settings.ROOT_URLCONF`. diff --git a/rest_framework/schemas/__init__.py b/rest_framework/schemas/__init__.py index 8fdb2d86a6d..588680362dc 100644 --- a/rest_framework/schemas/__init__.py +++ b/rest_framework/schemas/__init__.py @@ -31,7 +31,8 @@ def get_schema_view( title=None, url=None, description=None, urlconf=None, renderer_classes=None, public=False, patterns=None, generator_class=None, authentication_classes=api_settings.DEFAULT_AUTHENTICATION_CLASSES, - permission_classes=api_settings.DEFAULT_PERMISSION_CLASSES): + permission_classes=api_settings.DEFAULT_PERMISSION_CLASSES, + version=None): """ Return a schema view. """ @@ -43,7 +44,7 @@ def get_schema_view( generator = generator_class( title=title, url=url, description=description, - urlconf=urlconf, patterns=patterns, + urlconf=urlconf, patterns=patterns, version=version ) # Avoid import cycle on APIView diff --git a/rest_framework/schemas/coreapi.py b/rest_framework/schemas/coreapi.py index 8d9099f2a95..d811da2d83f 100644 --- a/rest_framework/schemas/coreapi.py +++ b/rest_framework/schemas/coreapi.py @@ -124,7 +124,7 @@ class SchemaGenerator(BaseSchemaGenerator): # Set by 'SCHEMA_COERCE_METHOD_NAMES'. coerce_method_names = None - def __init__(self, title=None, url=None, description=None, patterns=None, urlconf=None): + def __init__(self, title=None, url=None, description=None, patterns=None, urlconf=None, version=None): assert coreapi, '`coreapi` must be installed for schema support.' assert coreschema, '`coreschema` must be installed for schema support.' diff --git a/rest_framework/schemas/generators.py b/rest_framework/schemas/generators.py index a656c3ba5a8..0b789fc79c1 100644 --- a/rest_framework/schemas/generators.py +++ b/rest_framework/schemas/generators.py @@ -151,7 +151,7 @@ class BaseSchemaGenerator(object): # Set by 'SCHEMA_COERCE_PATH_PK'. coerce_path_pk = None - def __init__(self, title=None, url=None, description=None, patterns=None, urlconf=None): + def __init__(self, title=None, url=None, description=None, patterns=None, urlconf=None, version='0.1.0'): if url and not url.endswith('/'): url += '/' @@ -161,6 +161,7 @@ def __init__(self, title=None, url=None, description=None, patterns=None, urlcon self.urlconf = urlconf self.title = title self.description = description + self.version = version self.url = url self.endpoints = None diff --git a/rest_framework/schemas/openapi.py b/rest_framework/schemas/openapi.py index b9ab104a08d..ac846bf801e 100644 --- a/rest_framework/schemas/openapi.py +++ b/rest_framework/schemas/openapi.py @@ -24,7 +24,7 @@ class SchemaGenerator(BaseSchemaGenerator): def get_info(self): info = { 'title': self.title, - 'version': 'TODO', + 'version': self.version, } if self.description is not None: diff --git a/tests/schemas/test_openapi.py b/tests/schemas/test_openapi.py index 187672ca28f..d9375585bd0 100644 --- a/tests/schemas/test_openapi.py +++ b/tests/schemas/test_openapi.py @@ -556,3 +556,17 @@ def test_schema_construction(self): assert 'openapi' in schema assert 'paths' in schema + + def test_schema_information(self): + """Construction of the top level dictionary.""" + patterns = [ + url(r'^example/?$', views.ExampleListView.as_view()), + ] + generator = SchemaGenerator(patterns=patterns, title='My title', version='1.2.3', description='My description') + + request = create_request('/') + schema = generator.get_schema(request=request) + + assert schema['info']['title'] == 'My title' + assert schema['info']['version'] == '1.2.3' + assert schema['info']['description'] == 'My description'