From 23ebe2ff3eec19f0d7782462abf58ddcd49f7017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristi=20V=C3=AEjdea?= Date: Sat, 12 May 2018 18:14:33 +0300 Subject: [PATCH] Guard against views that throw exceptions from __init__ --- docs/changelog.rst | 9 +++++++++ src/drf_yasg/generators.py | 19 +++++++++++-------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 1063321..1c7f22e 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -3,6 +3,15 @@ Changelog ######### +********* +**1.7.3** +********* + +*Release date: May 12, 2018* + +- **FIXED:** views whose ``__init__`` methods throw exceptions will now be ignored during endpoint enumeration + + ********* **1.7.2** ********* diff --git a/src/drf_yasg/generators.py b/src/drf_yasg/generators.py index 1f54ce9..1a929f2 100644 --- a/src/drf_yasg/generators.py +++ b/src/drf_yasg/generators.py @@ -86,14 +86,17 @@ class EndpointEnumerator(_EndpointEnumerator): for pattern in patterns: path_regex = prefix + get_original_route(pattern) if isinstance(pattern, URLPattern): - path = self.get_path_from_regex(path_regex) - callback = pattern.callback - url_name = pattern.name - if self.should_include_endpoint(path, callback, app_name or '', namespace or '', url_name): - path = self.replace_version(path, callback) - for method in self.get_allowed_methods(callback): - endpoint = (path, method, callback) - api_endpoints.append(endpoint) + try: + path = self.get_path_from_regex(path_regex) + callback = pattern.callback + url_name = pattern.name + if self.should_include_endpoint(path, callback, app_name or '', namespace or '', url_name): + path = self.replace_version(path, callback) + for method in self.get_allowed_methods(callback): + endpoint = (path, method, callback) + api_endpoints.append(endpoint) + except Exception: + logger.warning('failed to enumerate view', exc_info=True) elif isinstance(pattern, URLResolver): nested_endpoints = self.get_api_endpoints(