From c1707548d9eaa7b681e36a2183f0646d4c27805c Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 9 Dec 2016 12:59:49 +0000 Subject: [PATCH] Initial components for documentation --- rest_framework/documentation.py | 8 ++++++++ rest_framework/renderers.py | 10 ++++++++++ rest_framework/schemas.py | 7 ++++++- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 rest_framework/documentation.py diff --git a/rest_framework/documentation.py b/rest_framework/documentation.py new file mode 100644 index 000000000..d63fe11a1 --- /dev/null +++ b/rest_framework/documentation.py @@ -0,0 +1,8 @@ +from rest_framework.renderers import DocumentationRenderer, CoreJSONRenderer +from rest_framework.schemas import get_schema_view + + +def get_docs_view(title=None, url=None, renderer_classes=None): + if renderer_classes is None: + renderer_classes = [DocumentationRenderer, CoreJSONRenderer] + return get_schema_view(title, url, renderer_classes) diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 97984daf9..97ec8164c 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -794,6 +794,16 @@ class AdminRenderer(BrowsableAPIRenderer): return context +class DocumentationRenderer(BaseRenderer): + media_type = 'text/html' + format = 'html' + charset = 'utf-8' + + def render(self, data, accepted_media_type=None, renderer_context=None): + from coredocs.main import render as render_docs + return render_docs(data, theme='cerulean', highlight='emacs', static=lambda path: '/static/rest_framework/docs/' + path) + + class MultiPartRenderer(BaseRenderer): media_type = 'multipart/form-data; boundary=BoUnDaRyStRiNg' format = 'multipart' diff --git a/rest_framework/schemas.py b/rest_framework/schemas.py index 773df6261..dd2e1c1d5 100644 --- a/rest_framework/schemas.py +++ b/rest_framework/schemas.py @@ -242,7 +242,12 @@ class SchemaGenerator(object): links = self.get_links(request) if not links: return None - return coreapi.Document(title=self.title, url=self.url, content=links) + + url = self.url + if not url and request is not None: + url = request.build_absolute_uri() + + return coreapi.Document(title=self.title, url=url, content=links) def get_links(self, request=None): """