From 3e54ed0ea8ccdce2ae8826bc52354da92b6be3b5 Mon Sep 17 00:00:00 2001 From: Marcos Dione Date: Thu, 3 Nov 2016 17:19:35 +0100 Subject: [PATCH 1/5] First step to fix nested `urls.py` files. This patch accumulates parent_regexps with the current one, but changes the ABI, so there's a second patch to come to fix `ApiEndpoint` --- rest_framework_docs/api_docs.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rest_framework_docs/api_docs.py b/rest_framework_docs/api_docs.py index d22dd4c..868224d 100644 --- a/rest_framework_docs/api_docs.py +++ b/rest_framework_docs/api_docs.py @@ -21,13 +21,13 @@ def __init__(self, drf_router=None): else: self.get_all_view_names(root_urlconf.urlpatterns) - def get_all_view_names(self, urlpatterns, parent_pattern=None): + def get_all_view_names(self, urlpatterns, parent_regex=None): for pattern in urlpatterns: if isinstance(pattern, RegexURLResolver): - parent_pattern = None if pattern._regex == "^" else pattern - self.get_all_view_names(urlpatterns=pattern.url_patterns, parent_pattern=parent_pattern) + regex = '' if pattern._regex == "^" else pattern._regex + self.get_all_view_names(urlpatterns=pattern.url_patterns, parent_regex=parent_regex+regex) elif isinstance(pattern, RegexURLPattern) and self._is_drf_view(pattern) and not self._is_format_endpoint(pattern): - api_endpoint = ApiEndpoint(pattern, parent_pattern, self.drf_router) + api_endpoint = ApiEndpoint(pattern, parent_regex, self.drf_router) self.endpoints.append(api_endpoint) def _is_drf_view(self, pattern): From a2d8710721b22ff9e587f673bde8e0b7cf2a5416 Mon Sep 17 00:00:00 2001 From: Marcos Dione Date: Thu, 3 Nov 2016 17:23:08 +0100 Subject: [PATCH 2/5] Second step to fix nested `urls.py` files. This patch fixes the ABI changed in `ApiDocumentation`. --- rest_framework_docs/api_endpoint.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rest_framework_docs/api_endpoint.py b/rest_framework_docs/api_endpoint.py index 89a33f8..318eaa1 100644 --- a/rest_framework_docs/api_endpoint.py +++ b/rest_framework_docs/api_endpoint.py @@ -7,14 +7,14 @@ class ApiEndpoint(object): - def __init__(self, pattern, parent_pattern=None, drf_router=None): + def __init__(self, pattern, parent_regex=None, drf_router=None): self.drf_router = drf_router self.pattern = pattern self.callback = pattern.callback # self.name = pattern.name self.docstring = self.__get_docstring__() - self.name_parent = simplify_regex(parent_pattern.regex.pattern).strip('/') if parent_pattern else None - self.path = self.__get_path__(parent_pattern) + self.name_parent = simplify_regex(parent_regex).strip('/') if parent_pattern else None + self.path = self.__get_path__(parent_regex) self.allowed_methods = self.__get_allowed_methods__() # self.view_name = pattern.callback.__name__ self.errors = None @@ -26,8 +26,8 @@ def __init__(self, pattern, parent_pattern=None, drf_router=None): self.permissions = self.__get_permissions_class__() - def __get_path__(self, parent_pattern): - if parent_pattern: + def __get_path__(self, parent_regex): + if parent_regex: return "/{0}{1}".format(self.name_parent, simplify_regex(self.pattern.regex.pattern)) return simplify_regex(self.pattern.regex.pattern) From e69fd13a4c61d170fea4fbe96ab15c493b1e77b5 Mon Sep 17 00:00:00 2001 From: Marcos Dione Date: Thu, 3 Nov 2016 17:39:45 +0100 Subject: [PATCH 3/5] Fix flake8 complaint. ... --- rest_framework_docs/api_docs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework_docs/api_docs.py b/rest_framework_docs/api_docs.py index 868224d..487eb97 100644 --- a/rest_framework_docs/api_docs.py +++ b/rest_framework_docs/api_docs.py @@ -25,7 +25,7 @@ def get_all_view_names(self, urlpatterns, parent_regex=None): for pattern in urlpatterns: if isinstance(pattern, RegexURLResolver): regex = '' if pattern._regex == "^" else pattern._regex - self.get_all_view_names(urlpatterns=pattern.url_patterns, parent_regex=parent_regex+regex) + self.get_all_view_names(urlpatterns=pattern.url_patterns, parent_regex=parent_regex + regex) elif isinstance(pattern, RegexURLPattern) and self._is_drf_view(pattern) and not self._is_format_endpoint(pattern): api_endpoint = ApiEndpoint(pattern, parent_regex, self.drf_router) self.endpoints.append(api_endpoint) From 5e238b8eab0405aabdcc4d188f0a92f2c4ddd983 Mon Sep 17 00:00:00 2001 From: Marcos Dione Date: Thu, 3 Nov 2016 17:44:54 +0100 Subject: [PATCH 4/5] Typo/missed replace. I shuld do local dev instead of edit via GitHub's page... --- rest_framework_docs/api_endpoint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework_docs/api_endpoint.py b/rest_framework_docs/api_endpoint.py index 318eaa1..f598e34 100644 --- a/rest_framework_docs/api_endpoint.py +++ b/rest_framework_docs/api_endpoint.py @@ -13,7 +13,7 @@ def __init__(self, pattern, parent_regex=None, drf_router=None): self.callback = pattern.callback # self.name = pattern.name self.docstring = self.__get_docstring__() - self.name_parent = simplify_regex(parent_regex).strip('/') if parent_pattern else None + self.name_parent = simplify_regex(parent_regex).strip('/') if parent_regex else None self.path = self.__get_path__(parent_regex) self.allowed_methods = self.__get_allowed_methods__() # self.view_name = pattern.callback.__name__ From fccdce9579d8a4c32a7ab7a2f8b96bd4af5c481f Mon Sep 17 00:00:00 2001 From: Marcos Dione Date: Thu, 3 Nov 2016 17:49:21 +0100 Subject: [PATCH 5/5] Another bug 3 and counting... --- rest_framework_docs/api_docs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework_docs/api_docs.py b/rest_framework_docs/api_docs.py index 487eb97..d14fae4 100644 --- a/rest_framework_docs/api_docs.py +++ b/rest_framework_docs/api_docs.py @@ -21,7 +21,7 @@ def __init__(self, drf_router=None): else: self.get_all_view_names(root_urlconf.urlpatterns) - def get_all_view_names(self, urlpatterns, parent_regex=None): + def get_all_view_names(self, urlpatterns, parent_regex=''): for pattern in urlpatterns: if isinstance(pattern, RegexURLResolver): regex = '' if pattern._regex == "^" else pattern._regex