def get_api_endpoints(self, patterns=None, prefix=''): """ Return a list of all available API endpoints by inspecting the URL conf. """ if patterns is None: patterns = self.patterns api_endpoints = [] 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 if self.should_include_endpoint(path, callback): for method in self.get_allowed_methods(callback): endpoint = (path, method, callback) api_endpoints.append(endpoint) elif isinstance(pattern, URLResolver): nested_endpoints = self.get_api_endpoints( patterns=pattern.url_patterns, prefix=path_regex ) api_endpoints.extend(nested_endpoints) api_endpoints = sorted(api_endpoints, key=endpoint_ordering) return api_endpoints
def get_api_endpoints(self, patterns=None, prefix=''): """ Return a list of all available API endpoints by inspecting the URL conf. """ if patterns is None: patterns = self.patterns api_endpoints = [] 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 if self.should_include_endpoint(path, callback): for method in self.get_allowed_methods(callback): endpoint = (path, path_regex, method, callback) api_endpoints.append(endpoint) elif isinstance(pattern, URLResolver): nested_endpoints = self.get_api_endpoints( patterns=pattern.url_patterns, prefix=path_regex) api_endpoints.extend(nested_endpoints) return sorted(api_endpoints, key=alpha_operation_sorter)
def get_api_endpoints(self, patterns=None, prefix='', app_name=None, namespace=None, ignored_endpoints=None): """ Return a list of all available API endpoints by inspecting the URL conf. Copied entirely from super. """ if patterns is None: patterns = self.patterns api_endpoints = [] if ignored_endpoints is None: ignored_endpoints = set() for pattern in patterns: path_regex = prefix + get_original_route(pattern) if isinstance(pattern, URLPattern): 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) # avoid adding endpoints that have already been seen, # as Django resolves urls in top-down order if path in ignored_endpoints: continue ignored_endpoints.add(path) for method in self.get_allowed_methods(callback): endpoint = (path, method, callback) api_endpoints.append(endpoint) except Exception: # pragma: no cover logger.warning('failed to enumerate view', exc_info=True) elif isinstance(pattern, URLResolver): nested_endpoints = self.get_api_endpoints( patterns=pattern.url_patterns, prefix=path_regex, app_name="%s:%s" % (app_name, pattern.app_name) if app_name else pattern.app_name, namespace="%s:%s" % (namespace, pattern.namespace) if namespace else pattern.namespace, ignored_endpoints=ignored_endpoints) api_endpoints.extend(nested_endpoints) else: logger.warning("unknown pattern type {}".format(type(pattern))) api_endpoints = sorted(api_endpoints, key=endpoint_ordering) return api_endpoints
def get_api_endpoints(self, patterns=None, prefix='', namespace=""): # noqa max-complexity=12 """ Return a list of all available API endpoints with basename by inspecting the URL conf. """ if patterns is None: patterns = self.patterns find_endpoint = re.compile(r'([^\/\^\?\]\+\)\(\.]+)(?:(?=\/\([^\)]+\)\/\$)|(?=\/\$))') api_endpoints = [] pattern_basenames = {} for pattern in patterns: path_regex = get_original_route(pattern) if isinstance(pattern, URLPattern): path = self.get_path_from_regex(path_regex) callback = pattern.callback if pattern.name: if len(pattern.name.split('-')) > 1: basename = pattern.name.split('-')[0] else: basename = pattern.name.split('_')[0] basename = namespace + basename else: basename = None sub = None if find_endpoint.search(pattern.describe()) and basename not in pattern_basenames: sub = find_endpoint.search(pattern.describe()).groups()[0] pattern_basenames[basename] = sub else: sub = pattern_basenames.get(basename, None) if self.should_include_endpoint(path, callback): for method in self.get_allowed_methods(callback): if sub: subtest = re.compile('^' + sub) if basename and sub: if not subtest.match(path) and sub in path: path = ('^' + path[path.index(sub):]) path = path.replace(sub, basename) endpoint = (path, method, callback) api_endpoints.append(endpoint) elif isinstance(pattern, URLResolver): inner_namespace = namespace + pattern.namespace + ":" if pattern.namespace else namespace nested_endpoints = self.get_api_endpoints( patterns=pattern.url_patterns, prefix=path_regex, namespace=inner_namespace, ) api_endpoints.extend(nested_endpoints) api_endpoints = sorted(api_endpoints, key=endpoint_ordering) return api_endpoints
def get_api_endpoints(self, patterns=None, prefix='', app_name=None, namespace=None, default_decorators=None): """ Return a list of all available API endpoints by inspecting the URL conf. Copied from super and edited to look at decorators. """ #pylint:disable=arguments-differ,too-many-arguments,too-many-locals if patterns is None: patterns = self.patterns api_endpoints = [] for pattern in patterns: path_regex = prefix + get_original_route(pattern) decorators = default_decorators if hasattr(pattern, 'decorators'): decorators = pattern.decorators if isinstance(pattern, URLPattern): 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, decorators) api_endpoints.append(endpoint) except Exception: #pylint:disable=broad-except LOGGER.warning('failed to enumerate view', exc_info=True) elif isinstance(pattern, URLResolver): nested_endpoints = self.get_api_endpoints( patterns=pattern.url_patterns, prefix=path_regex, app_name="%s:%s" % (app_name, pattern.app_name) if app_name else pattern.app_name, namespace="%s:%s" % (namespace, pattern.namespace) if namespace else pattern.namespace, default_decorators=decorators) api_endpoints.extend(nested_endpoints) else: LOGGER.warning("unknown pattern type %s", type(pattern)) api_endpoints = sorted(api_endpoints, key=endpoint_ordering) return api_endpoints
def get_api_endpoints(self, patterns=None, prefix='', app_name=None, namespace=None): """ Return a list of all available API endpoints by inspecting the URL conf. Copied entirely from super. """ if patterns is None: patterns = self.patterns api_endpoints = [] 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) elif isinstance(pattern, URLResolver): nested_endpoints = self.get_api_endpoints( patterns=pattern.url_patterns, prefix=path_regex, app_name="%s:%s" % (app_name, pattern.app_name) if app_name else pattern.app_name, namespace="%s:%s" % (namespace, pattern.namespace) if namespace else pattern.namespace) api_endpoints.extend(nested_endpoints) else: logger.warning("unknown pattern type {}".format(type(pattern))) api_endpoints = sorted(api_endpoints, key=endpoint_ordering) return api_endpoints
def get_api_endpoints(self, patterns=None, prefix=''): """ Return a list of all available API endpoints by inspecting the URL conf. """ if patterns is None: patterns = self.patterns api_endpoints = [] for pattern in patterns: path_regex = prefix + get_original_route(pattern) if isinstance(pattern, URLResolver): nested_endpoints = self.get_api_endpoints( patterns=pattern.url_patterns, prefix=path_regex) api_endpoints.extend(nested_endpoints) api_endpoints = sorted(api_endpoints, key=endpoint_ordering) return api_endpoints
def get_api_endpoints(patterns=None, namespace="", prefix=""): """ Return a list of all available API endpoints by inspecting the URL conf. """ api_endpoints = [] for pattern in patterns: path_regex = prefix + get_original_route(pattern) if isinstance(pattern, URLPattern): path = get_path_from_regex(path_regex) callback = pattern.callback if should_include_endpoint(path, callback): for method in get_allowed_methods(callback): endpoint = { "path": path, "method": method, "pattern": pattern, "namespace": namespace, } api_endpoints.append(endpoint) elif isinstance(pattern, URLResolver): if namespace and pattern.namespace: pattern_namespace = f"{namespace}:{pattern.namespace}" elif namespace: pattern_namespace = namespace else: pattern_namespace = pattern.namespace nested_endpoints = get_api_endpoints(patterns=pattern.url_patterns, prefix=path_regex, namespace=pattern_namespace) api_endpoints.extend(nested_endpoints) return api_endpoints
def get_api_endpoints(patterns=None, namespace="", prefix=""): """ Return a list of all available API endpoints by inspecting the URL conf. """ api_endpoints = [] for pattern in patterns: path_regex = prefix + get_original_route(pattern) if isinstance(pattern, URLPattern): path = get_path_from_regex(path_regex) callback = pattern.callback if should_include_endpoint(path, callback): for method in get_allowed_methods(callback): endpoint = { "path": path, "method": method, "pattern": pattern, "namespace": namespace, } api_endpoints.append(endpoint) elif isinstance(pattern, URLResolver): if namespace and pattern.namespace: pattern_namespace = f"{namespace}:{pattern.namespace}" elif namespace: pattern_namespace = namespace else: pattern_namespace = pattern.namespace nested_endpoints = get_api_endpoints( patterns=pattern.url_patterns, prefix=path_regex, namespace=pattern_namespace ) api_endpoints.extend(nested_endpoints) return api_endpoints