Add support for top-level description in API docs

This commit is contained in:
Tom Christie 2017-03-03 14:03:05 +00:00
parent fd328dfda0
commit 55269ea9c7
3 changed files with 31 additions and 13 deletions

View File

@ -6,32 +6,43 @@ from rest_framework.renderers import (
from rest_framework.schemas import get_schema_view from rest_framework.schemas import get_schema_view
def get_docs_view(title=None, url=None, renderer_classes=None, public=True): def get_docs_view(title=None, description=None, schema_url=None, public=True):
if renderer_classes is None: renderer_classes = [DocumentationRenderer, CoreJSONRenderer]
renderer_classes = [DocumentationRenderer, CoreJSONRenderer]
return get_schema_view( return get_schema_view(
title=title, title=title,
url=url, url=schema_url,
description=description,
renderer_classes=renderer_classes, renderer_classes=renderer_classes,
public=public public=public
) )
def get_schemajs_view(title=None, url=None, public=True): def get_schemajs_view(title=None, description=None, schema_url=None, public=True):
renderer_classes = [SchemaJSRenderer] renderer_classes = [SchemaJSRenderer]
return get_schema_view( return get_schema_view(
title=title, title=title,
url=url, url=schema_url,
description=description,
renderer_classes=renderer_classes, renderer_classes=renderer_classes,
public=public public=public
) )
def include_docs_urls(title=None, schema_url=None, public=True): def include_docs_urls(title=None, description=None, schema_url=None, public=True):
docs_view = get_docs_view(title, schema_url, public=public) docs_view = get_docs_view(
schema_js_view = get_schemajs_view(title, schema_url, public=public) title=title,
description=description,
schema_url=schema_url,
public=public
)
schema_js_view = get_schemajs_view(
title=title,
description=description,
schema_url=schema_url,
public=public
)
urls = [ urls = [
url(r'^$', docs_view, name='docs-index'), url(r'^$', docs_view, name='docs-index'),
url(r'^schema.js$', schema_js_view, name='schema-js') url(r'^schema.js$', schema_js_view, name='schema-js')

View File

@ -275,7 +275,7 @@ class SchemaGenerator(object):
# Set by 'SCHEMA_COERCE_PATH_PK'. # Set by 'SCHEMA_COERCE_PATH_PK'.
coerce_path_pk = None coerce_path_pk = None
def __init__(self, title=None, url=None, patterns=None, urlconf=None): def __init__(self, title=None, url=None, description=None, patterns=None, urlconf=None):
assert coreapi, '`coreapi` must be installed for schema support.' assert coreapi, '`coreapi` must be installed for schema support.'
assert coreschema, '`coreschema` must be installed for schema support.' assert coreschema, '`coreschema` must be installed for schema support.'
@ -288,6 +288,7 @@ class SchemaGenerator(object):
self.patterns = patterns self.patterns = patterns
self.urlconf = urlconf self.urlconf = urlconf
self.title = title self.title = title
self.description = description
self.url = url self.url = url
self.endpoints = None self.endpoints = None
@ -307,7 +308,10 @@ class SchemaGenerator(object):
if not url and request is not None: if not url and request is not None:
url = request.build_absolute_uri() url = request.build_absolute_uri()
return coreapi.Document(title=self.title, url=url, content=links) return coreapi.Document(
title=self.title, description=self.description,
url=url, content=links
)
def get_links(self, request=None): def get_links(self, request=None):
""" """
@ -661,11 +665,11 @@ class SchemaGenerator(object):
return named_path_components + [action] return named_path_components + [action]
def get_schema_view(title=None, url=None, urlconf=None, renderer_classes=None, public=False): def get_schema_view(title=None, url=None, description=None, urlconf=None, renderer_classes=None, public=False):
""" """
Return a schema view. Return a schema view.
""" """
generator = SchemaGenerator(title=title, url=url, urlconf=urlconf) generator = SchemaGenerator(title=title, url=url, description=description, urlconf=urlconf)
if renderer_classes is None: if renderer_classes is None:
if renderers.BrowsableAPIRenderer in api_settings.DEFAULT_RENDERER_CLASSES: if renderers.BrowsableAPIRenderer in api_settings.DEFAULT_RENDERER_CLASSES:
rclasses = [renderers.CoreJSONRenderer, renderers.BrowsableAPIRenderer] rclasses = [renderers.CoreJSONRenderer, renderers.BrowsableAPIRenderer]

View File

@ -3,6 +3,9 @@
<div class="row intro"> <div class="row intro">
<div class="col-md-6 intro-title"> <div class="col-md-6 intro-title">
<h1>{{ document.title }}</h1> <h1>{{ document.title }}</h1>
{% if document.description %}
<p>{% render_markdown document.description %}</p>
{% endif %}
</div> </div>
<div class="col-md-6 intro-code"> <div class="col-md-6 intro-code">
{% if 'shell' in langs %}{% include "rest_framework/docs/langs/shell-intro.html" %}{% endif %} {% if 'shell' in langs %}{% include "rest_framework/docs/langs/shell-intro.html" %}{% endif %}