From ed0f7b8b65c49f68a5f76674520c24bf8e5f5b41 Mon Sep 17 00:00:00 2001 From: Emmanouil Konstantinidis Date: Sat, 12 Dec 2015 00:47:48 +0000 Subject: [PATCH 1/5] Get a list with all the views --- drfdocs/templates/drfdocs/base.html | 2 ++ drfdocs/templates/drfdocs/home.html | 8 ++++++++ drfdocs/views.py | 17 ++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/drfdocs/templates/drfdocs/base.html b/drfdocs/templates/drfdocs/base.html index 39f414c..68b55d9 100644 --- a/drfdocs/templates/drfdocs/base.html +++ b/drfdocs/templates/drfdocs/base.html @@ -7,5 +7,7 @@

Django Rest Frameworks Docs

+ {% block content %}{% endblock %} + diff --git a/drfdocs/templates/drfdocs/home.html b/drfdocs/templates/drfdocs/home.html index 9f291cc..be7a304 100644 --- a/drfdocs/templates/drfdocs/home.html +++ b/drfdocs/templates/drfdocs/home.html @@ -1 +1,9 @@ {% extends "drfdocs/base.html" %} + +{% block content %} + +{% endblock %} diff --git a/drfdocs/views.py b/drfdocs/views.py index 815285e..1bfb542 100644 --- a/drfdocs/views.py +++ b/drfdocs/views.py @@ -1,11 +1,26 @@ +from django.conf import settings from django.views.generic.base import TemplateView +from django.core.urlresolvers import RegexURLResolver, RegexURLPattern class DRFDocsView(TemplateView): + root_urlconf = __import__(settings.ROOT_URLCONF) template_name = "drfdocs/home.html" + VIEW_NAMES = [] + + def get_all_view_names(self, urlpatterns): + for pattern in urlpatterns: + if isinstance(pattern, RegexURLResolver): + self.get_all_view_names(pattern.url_patterns) + elif isinstance(pattern, RegexURLPattern): + view_name = pattern.callback.__name__ + self.VIEW_NAMES.append(view_name) + return self.VIEW_NAMES def get_context_data(self, **kwargs): + self.VIEW_NAMES = [] context = super(DRFDocsView, self).get_context_data(**kwargs) - context['example'] = True + all_urlpatterns = self.root_urlconf.urls.urlpatterns + context['views'] = self.get_all_view_names(all_urlpatterns) return context From cf942015821ecf96e314acfa8faba938988ca910 Mon Sep 17 00:00:00 2001 From: Emmanouil Konstantinidis Date: Sat, 12 Dec 2015 01:17:54 +0000 Subject: [PATCH 2/5] Exclude Admin & DRFDocs Urls --- README.md | 2 +- drfdocs/views.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 49216b3..dc4c80a 100644 --- a/README.md +++ b/README.md @@ -34,5 +34,5 @@ Finally include the `drfdocs` urls in your `urls.py`: urlpatterns = [ ... - url(r'^docs/', include('drfdocs.urls', namespace='drfdocs')), + url(r'^docs/', include('drfdocs.urls', app_name='drfdocs', namespace='drfdocs')), ] diff --git a/drfdocs/views.py b/drfdocs/views.py index 1bfb542..3092866 100644 --- a/drfdocs/views.py +++ b/drfdocs/views.py @@ -7,12 +7,14 @@ class DRFDocsView(TemplateView): root_urlconf = __import__(settings.ROOT_URLCONF) template_name = "drfdocs/home.html" + EXCLUDED_APPS = ["admin", "drfdocs"] VIEW_NAMES = [] def get_all_view_names(self, urlpatterns): for pattern in urlpatterns: if isinstance(pattern, RegexURLResolver): - self.get_all_view_names(pattern.url_patterns) + if pattern.app_name not in self.EXCLUDED_APPS: + self.get_all_view_names(pattern.url_patterns) elif isinstance(pattern, RegexURLPattern): view_name = pattern.callback.__name__ self.VIEW_NAMES.append(view_name) From 7546f054c5ea4a4a796c8f20587d533e28fb9a34 Mon Sep 17 00:00:00 2001 From: Emmanouil Konstantinidis Date: Sat, 12 Dec 2015 13:47:43 +0000 Subject: [PATCH 3/5] Clean up --- drfdocs/api_docs.py | 22 ++++++++++++++++++++++ drfdocs/api_endpoint.py | 0 drfdocs/views.py | 21 +++------------------ 3 files changed, 25 insertions(+), 18 deletions(-) create mode 100644 drfdocs/api_docs.py create mode 100644 drfdocs/api_endpoint.py diff --git a/drfdocs/api_docs.py b/drfdocs/api_docs.py new file mode 100644 index 0000000..4c8183f --- /dev/null +++ b/drfdocs/api_docs.py @@ -0,0 +1,22 @@ +from django.conf import settings +from django.core.urlresolvers import RegexURLResolver, RegexURLPattern + + +class ApiDocumentation(object): + excluded_apps = ["admin", "drfdocs"] + root_urlconf = __import__(settings.ROOT_URLCONF) + + def __init__(self): + self.view_names = [] + self.get_all_view_names(self.root_urlconf.urls.urlpatterns) + + def get_all_view_names(self, urlpatterns): + for pattern in urlpatterns: + print(pattern) + if isinstance(pattern, RegexURLResolver) and (pattern.app_name not in self.excluded_apps): + self.get_all_view_names(pattern.url_patterns) + elif isinstance(pattern, RegexURLPattern): + self.view_names.append(pattern.callback.__name__) + + def get_views(self): + return self.view_names diff --git a/drfdocs/api_endpoint.py b/drfdocs/api_endpoint.py new file mode 100644 index 0000000..e69de29 diff --git a/drfdocs/views.py b/drfdocs/views.py index 3092866..e014e3e 100644 --- a/drfdocs/views.py +++ b/drfdocs/views.py @@ -1,28 +1,13 @@ -from django.conf import settings from django.views.generic.base import TemplateView -from django.core.urlresolvers import RegexURLResolver, RegexURLPattern +from drfdocs.api_docs import ApiDocumentation class DRFDocsView(TemplateView): - root_urlconf = __import__(settings.ROOT_URLCONF) template_name = "drfdocs/home.html" - EXCLUDED_APPS = ["admin", "drfdocs"] - VIEW_NAMES = [] - - def get_all_view_names(self, urlpatterns): - for pattern in urlpatterns: - if isinstance(pattern, RegexURLResolver): - if pattern.app_name not in self.EXCLUDED_APPS: - self.get_all_view_names(pattern.url_patterns) - elif isinstance(pattern, RegexURLPattern): - view_name = pattern.callback.__name__ - self.VIEW_NAMES.append(view_name) - return self.VIEW_NAMES def get_context_data(self, **kwargs): - self.VIEW_NAMES = [] context = super(DRFDocsView, self).get_context_data(**kwargs) - all_urlpatterns = self.root_urlconf.urls.urlpatterns - context['views'] = self.get_all_view_names(all_urlpatterns) + docs = ApiDocumentation() + context['views'] = docs.get_views() return context From 15ac572bc7f041111a0587e635b52efd00bd6629 Mon Sep 17 00:00:00 2001 From: Emmanouil Konstantinidis Date: Sat, 12 Dec 2015 13:49:29 +0000 Subject: [PATCH 4/5] Remove print --- drfdocs/api_docs.py | 1 - 1 file changed, 1 deletion(-) diff --git a/drfdocs/api_docs.py b/drfdocs/api_docs.py index 4c8183f..239494a 100644 --- a/drfdocs/api_docs.py +++ b/drfdocs/api_docs.py @@ -12,7 +12,6 @@ def __init__(self): def get_all_view_names(self, urlpatterns): for pattern in urlpatterns: - print(pattern) if isinstance(pattern, RegexURLResolver) and (pattern.app_name not in self.excluded_apps): self.get_all_view_names(pattern.url_patterns) elif isinstance(pattern, RegexURLPattern): From dae46049bd72ce1599fd4169e3d8d6bd8ca1c622 Mon Sep 17 00:00:00 2001 From: Emmanouil Konstantinidis Date: Sat, 12 Dec 2015 13:54:30 +0000 Subject: [PATCH 5/5] Exclude "serve" view (static files) --- drfdocs/api_docs.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drfdocs/api_docs.py b/drfdocs/api_docs.py index 239494a..809f214 100644 --- a/drfdocs/api_docs.py +++ b/drfdocs/api_docs.py @@ -4,6 +4,7 @@ class ApiDocumentation(object): excluded_apps = ["admin", "drfdocs"] + excluded_endpoints = ["serve"] root_urlconf = __import__(settings.ROOT_URLCONF) def __init__(self): @@ -14,7 +15,7 @@ def get_all_view_names(self, urlpatterns): for pattern in urlpatterns: if isinstance(pattern, RegexURLResolver) and (pattern.app_name not in self.excluded_apps): self.get_all_view_names(pattern.url_patterns) - elif isinstance(pattern, RegexURLPattern): + elif isinstance(pattern, RegexURLPattern) and (pattern.callback.__name__ not in self.excluded_endpoints): self.view_names.append(pattern.callback.__name__) def get_views(self):