Spaces:
Sleeping
Sleeping
| """Common methods for parsing.""" | |
| import enum | |
| import typing as T | |
| PARAM_KEYWORDS = { | |
| "param", | |
| "parameter", | |
| "arg", | |
| "argument", | |
| "attribute", | |
| "key", | |
| "keyword", | |
| } | |
| RAISES_KEYWORDS = {"raises", "raise", "except", "exception"} | |
| DEPRECATION_KEYWORDS = {"deprecation", "deprecated"} | |
| RETURNS_KEYWORDS = {"return", "returns"} | |
| YIELDS_KEYWORDS = {"yield", "yields"} | |
| EXAMPLES_KEYWORDS = {"example", "examples"} | |
| class ParseError(RuntimeError): | |
| """Base class for all parsing related errors.""" | |
| class DocstringStyle(enum.Enum): | |
| """Docstring style.""" | |
| REST = 1 | |
| GOOGLE = 2 | |
| NUMPYDOC = 3 | |
| EPYDOC = 4 | |
| AUTO = 255 | |
| class RenderingStyle(enum.Enum): | |
| """Rendering style when unparsing parsed docstrings.""" | |
| COMPACT = 1 | |
| CLEAN = 2 | |
| EXPANDED = 3 | |
| class DocstringMeta: | |
| """Docstring meta information. | |
| Symbolizes lines in form of | |
| :param arg: description | |
| :raises ValueError: if something happens | |
| """ | |
| def __init__( | |
| self, args: T.List[str], description: T.Optional[str] | |
| ) -> None: | |
| """Initialize self. | |
| :param args: list of arguments. The exact content of this variable is | |
| dependent on the kind of docstring; it's used to distinguish | |
| between custom docstring meta information items. | |
| :param description: associated docstring description. | |
| """ | |
| self.args = args | |
| self.description = description | |
| class DocstringParam(DocstringMeta): | |
| """DocstringMeta symbolizing :param metadata.""" | |
| def __init__( | |
| self, | |
| args: T.List[str], | |
| description: T.Optional[str], | |
| arg_name: str, | |
| type_name: T.Optional[str], | |
| is_optional: T.Optional[bool], | |
| default: T.Optional[str], | |
| ) -> None: | |
| """Initialize self.""" | |
| super().__init__(args, description) | |
| self.arg_name = arg_name | |
| self.type_name = type_name | |
| self.is_optional = is_optional | |
| self.default = default | |
| class DocstringReturns(DocstringMeta): | |
| """DocstringMeta symbolizing :returns or :yields metadata.""" | |
| def __init__( | |
| self, | |
| args: T.List[str], | |
| description: T.Optional[str], | |
| type_name: T.Optional[str], | |
| is_generator: bool, | |
| return_name: T.Optional[str] = None, | |
| ) -> None: | |
| """Initialize self.""" | |
| super().__init__(args, description) | |
| self.type_name = type_name | |
| self.is_generator = is_generator | |
| self.return_name = return_name | |
| class DocstringRaises(DocstringMeta): | |
| """DocstringMeta symbolizing :raises metadata.""" | |
| def __init__( | |
| self, | |
| args: T.List[str], | |
| description: T.Optional[str], | |
| type_name: T.Optional[str], | |
| ) -> None: | |
| """Initialize self.""" | |
| super().__init__(args, description) | |
| self.type_name = type_name | |
| self.description = description | |
| class DocstringDeprecated(DocstringMeta): | |
| """DocstringMeta symbolizing deprecation metadata.""" | |
| def __init__( | |
| self, | |
| args: T.List[str], | |
| description: T.Optional[str], | |
| version: T.Optional[str], | |
| ) -> None: | |
| """Initialize self.""" | |
| super().__init__(args, description) | |
| self.version = version | |
| self.description = description | |
| class DocstringExample(DocstringMeta): | |
| """DocstringMeta symbolizing example metadata.""" | |
| def __init__( | |
| self, | |
| args: T.List[str], | |
| snippet: T.Optional[str], | |
| description: T.Optional[str], | |
| ) -> None: | |
| """Initialize self.""" | |
| super().__init__(args, description) | |
| self.snippet = snippet | |
| self.description = description | |
| class Docstring: | |
| """Docstring object representation.""" | |
| def __init__( | |
| self, | |
| style=None, # type: T.Optional[DocstringStyle] | |
| ) -> None: | |
| """Initialize self.""" | |
| self.short_description = None # type: T.Optional[str] | |
| self.long_description = None # type: T.Optional[str] | |
| self.blank_after_short_description = False | |
| self.blank_after_long_description = False | |
| self.meta = [] # type: T.List[DocstringMeta] | |
| self.style = style # type: T.Optional[DocstringStyle] | |
| def description(self) -> T.Optional[str]: | |
| """Return the full description of the function | |
| Returns None if the docstring did not include any description | |
| """ | |
| ret = [] | |
| if self.short_description: | |
| ret.append(self.short_description) | |
| if self.blank_after_short_description: | |
| ret.append("") | |
| if self.long_description: | |
| ret.append(self.long_description) | |
| if not ret: | |
| return None | |
| return "\n".join(ret) | |
| def params(self) -> T.List[DocstringParam]: | |
| """Return a list of information on function params.""" | |
| return [item for item in self.meta if isinstance(item, DocstringParam)] | |
| def raises(self) -> T.List[DocstringRaises]: | |
| """Return a list of information on the exceptions that the function | |
| may raise. | |
| """ | |
| return [ | |
| item for item in self.meta if isinstance(item, DocstringRaises) | |
| ] | |
| def returns(self) -> T.Optional[DocstringReturns]: | |
| """Return a single information on function return. | |
| Takes the first return information. | |
| """ | |
| for item in self.meta: | |
| if isinstance(item, DocstringReturns): | |
| return item | |
| return None | |
| def many_returns(self) -> T.List[DocstringReturns]: | |
| """Return a list of information on function return.""" | |
| return [ | |
| item for item in self.meta if isinstance(item, DocstringReturns) | |
| ] | |
| def deprecation(self) -> T.Optional[DocstringDeprecated]: | |
| """Return a single information on function deprecation notes.""" | |
| for item in self.meta: | |
| if isinstance(item, DocstringDeprecated): | |
| return item | |
| return None | |
| def examples(self) -> T.List[DocstringExample]: | |
| """Return a list of information on function examples.""" | |
| return [ | |
| item for item in self.meta if isinstance(item, DocstringExample) | |
| ] | |