Skip to content

Commit aafd0a6

Browse files
Merge pull request #4979 from linovia/feature/improve_schema_shortcut
Restrict doc & schema shortcuts to a subset of urls
2 parents 5e5fd67 + 778aee1 commit aafd0a6

File tree

3 files changed

+35
-12
lines changed

3 files changed

+35
-12
lines changed

docs/api-guide/schemas.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,22 @@ May be used to pass the set of renderer classes that can be used to render the A
170170
renderer_classes=[CoreJSONRenderer, APIBlueprintRenderer]
171171
)
172172

173+
#### `patterns`
174+
175+
List of url patterns to limit the schema introspection to. If you only want the `myproject.api` urls
176+
to be exposed in the schema:
177+
178+
schema_url_patterns = [
179+
url(r'^api/', include('myproject.api.urls')),
180+
]
181+
182+
schema_view = get_schema_view(
183+
title='Server Monitoring API',
184+
url='https://www.example.org/api/',
185+
patterns=schema_url_patterns,
186+
)
187+
188+
173189
## Using an explicit schema view
174190

175191
If you need a little more control than the `get_schema_view()` shortcut gives you,

rest_framework/documentation.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
from rest_framework.schemas import SchemaGenerator, get_schema_view
77

88

9-
def get_docs_view(title=None, description=None, schema_url=None, public=True, generator_class=SchemaGenerator):
9+
def get_docs_view(
10+
title=None, description=None, schema_url=None, public=True,
11+
patterns=None, generator_class=SchemaGenerator):
1012
renderer_classes = [DocumentationRenderer, CoreJSONRenderer]
1113

1214
return get_schema_view(
@@ -15,11 +17,14 @@ def get_docs_view(title=None, description=None, schema_url=None, public=True, ge
1517
description=description,
1618
renderer_classes=renderer_classes,
1719
public=public,
20+
patterns=patterns,
1821
generator_class=generator_class,
1922
)
2023

2124

22-
def get_schemajs_view(title=None, description=None, schema_url=None, public=True, generator_class=SchemaGenerator):
25+
def get_schemajs_view(
26+
title=None, description=None, schema_url=None, public=True,
27+
patterns=None, generator_class=SchemaGenerator):
2328
renderer_classes = [SchemaJSRenderer]
2429

2530
return get_schema_view(
@@ -28,23 +33,28 @@ def get_schemajs_view(title=None, description=None, schema_url=None, public=True
2833
description=description,
2934
renderer_classes=renderer_classes,
3035
public=public,
36+
patterns=patterns,
3137
generator_class=generator_class,
3238
)
3339

3440

35-
def include_docs_urls(title=None, description=None, schema_url=None, public=True, generator_class=SchemaGenerator):
41+
def include_docs_urls(
42+
title=None, description=None, schema_url=None, public=True,
43+
patterns=None, generator_class=SchemaGenerator):
3644
docs_view = get_docs_view(
3745
title=title,
3846
description=description,
3947
schema_url=schema_url,
4048
public=public,
49+
patterns=patterns,
4150
generator_class=generator_class,
4251
)
4352
schema_js_view = get_schemajs_view(
4453
title=title,
4554
description=description,
4655
schema_url=schema_url,
4756
public=public,
57+
patterns=patterns,
4858
generator_class=generator_class,
4959
)
5060
urls = [

rest_framework/schemas.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -695,18 +695,15 @@ def get(self, request, *args, **kwargs):
695695

696696

697697
def get_schema_view(
698-
title=None,
699-
url=None,
700-
description=None,
701-
urlconf=None,
702-
renderer_classes=None,
703-
public=False,
704-
generator_class=SchemaGenerator,
705-
):
698+
title=None, url=None, description=None, urlconf=None, renderer_classes=None,
699+
public=False, patterns=None, generator_class=SchemaGenerator):
706700
"""
707701
Return a schema view.
708702
"""
709-
generator = generator_class(title=title, url=url, description=description, urlconf=urlconf)
703+
generator = generator_class(
704+
title=title, url=url, description=description,
705+
urlconf=urlconf, patterns=patterns,
706+
)
710707
return SchemaView.as_view(
711708
renderer_classes=renderer_classes,
712709
schema_generator=generator,

0 commit comments

Comments
 (0)