def run(self, lines: List[str]) -> List[str]: done = False while not done: for line in lines: loc = lines.index(line) match = REGEXP.search(line) if not match: continue filename = match.group(1) doc_name = match.group(2) filename = os.path.expanduser(filename) is_openapi_format = filename.endswith(".yaml") if not os.path.isabs(filename): parent_dir = self.base_path filename = os.path.normpath( os.path.join(parent_dir, filename)) if is_openapi_format: endpoint, method = doc_name.rsplit(":", 1) arguments: List[Dict[str, Any]] = [] try: arguments = get_openapi_parameters(endpoint, method) except KeyError as e: # Don't raise an exception if the "parameters" # field is missing; we assume that's because the # endpoint doesn't accept any parameters if e.args != ("parameters", ): raise e else: with open(filename) as fp: json_obj = json.load(fp) arguments = json_obj[doc_name] if arguments: text = self.render_table(arguments) # We want to show this message only if the parameters # description doesn't say anything else. elif is_openapi_format and get_parameters_description( endpoint, method) == "": text = ["This endpoint does not accept any parameters."] else: text = [] # The line that contains the directive to include the macro # may be preceded or followed by text or tags, in that case # we need to make sure that any preceding or following text # stays the same. line_split = REGEXP.split(line, maxsplit=0) preceding = line_split[0] following = line_split[-1] text = [preceding, *text, following] lines = lines[:loc] + text + lines[loc + 1:] break else: done = True return lines
def render(self, function: str) -> List[str]: description: List[str] = [] path, method = function.rsplit(":", 1) raw_description = get_parameters_description(path, method) description.extend(raw_description.splitlines()) return description