Re-organize directory structure (#4971)

See discussion in #2491

Co-authored-by: Ivan Levkivskyi <ilevkivskyi@dropbox.com>
This commit is contained in:
Ivan Levkivskyi
2021-01-27 12:00:39 +00:00
committed by GitHub
parent 869238e587
commit 16ae4c6120
1399 changed files with 601 additions and 97 deletions

View File

@@ -0,0 +1,3 @@
version = "0.1"
python2 = true
requires = ["types-typing-extensions"]

View File

@@ -0,0 +1,2 @@
from .core import Markdown as Markdown, markdown as markdown, markdownFromFile as markdownFromFile
from .extensions import Extension as Extension

View File

@@ -0,0 +1,3 @@
from typing import Any
__version_info__: Any

View File

@@ -0,0 +1,18 @@
from typing import Any
class State(list):
def set(self, state) -> None: ...
def reset(self) -> None: ...
def isstate(self, state): ...
class BlockParser:
blockprocessors: Any
state: Any
md: Any
def __init__(self, md) -> None: ...
@property
def markdown(self): ...
root: Any
def parseDocument(self, lines): ...
def parseChunk(self, parent, text) -> None: ...
def parseBlocks(self, parent, blocks) -> None: ...

View File

@@ -0,0 +1,59 @@
from typing import Any, Pattern
logger: Any
def build_block_parser(md, **kwargs): ...
class BlockProcessor:
parser: Any
tab_length: Any
def __init__(self, parser) -> None: ...
def lastChild(self, parent): ...
def detab(self, text): ...
def looseDetab(self, text, level: int = ...): ...
def test(self, parent, block) -> None: ...
def run(self, parent, blocks) -> None: ...
class ListIndentProcessor(BlockProcessor):
ITEM_TYPES: Any
LIST_TYPES: Any
INDENT_RE: Pattern
def __init__(self, *args) -> None: ...
def create_item(self, parent, block) -> None: ...
def get_level(self, parent, block): ...
class CodeBlockProcessor(BlockProcessor): ...
class BlockQuoteProcessor(BlockProcessor):
RE: Pattern
def clean(self, line): ...
class OListProcessor(BlockProcessor):
TAG: str = ...
STARTSWITH: str = ...
LAZY_OL: bool = ...
SIBLING_TAGS: Any
RE: Pattern
CHILD_RE: Pattern
INDENT_RE: Pattern
def __init__(self, parser) -> None: ...
def get_items(self, block): ...
class UListProcessor(OListProcessor):
TAG: str = ...
RE: Pattern
def __init__(self, parser) -> None: ...
class HashHeaderProcessor(BlockProcessor):
RE: Pattern
class SetextHeaderProcessor(BlockProcessor):
RE: Pattern
class HRProcessor(BlockProcessor):
RE: str = ...
SEARCH_RE: Pattern
match: Any
class EmptyBlockProcessor(BlockProcessor): ...
class ParagraphProcessor(BlockProcessor): ...

View File

@@ -0,0 +1,63 @@
from typing import Any, BinaryIO, Callable, ClassVar, Dict, List, Mapping, Optional, Sequence, Text, TextIO, Union
from typing_extensions import Literal
from xml.etree.ElementTree import Element
from .blockparser import BlockParser
from .extensions import Extension
from .util import HtmlStash, Registry
class Markdown:
preprocessors: Registry
inlinePatterns: Registry
treeprocessors: Registry
postprocessors: Registry
parser: BlockParser
htmlStash: HtmlStash
output_formats: ClassVar[Dict[Literal["xhtml", "html"], Callable[[Element], Text]]]
output_format: Literal["xhtml", "html"]
serializer: Callable[[Element], Text]
tab_length: int
block_level_elements: List[str]
def __init__(
self,
*,
extensions: Optional[Sequence[Union[str, Extension]]] = ...,
extension_configs: Optional[Mapping[str, Mapping[str, Any]]] = ...,
output_format: Optional[Literal["xhtml", "html"]] = ...,
tab_length: Optional[int] = ...,
) -> None: ...
def build_parser(self) -> Markdown: ...
def registerExtensions(
self, extensions: Sequence[Union[Extension, str]], configs: Mapping[str, Mapping[str, Any]]
) -> Markdown: ...
def build_extension(self, ext_name: Text, configs: Mapping[str, str]) -> Extension: ...
def registerExtension(self, extension: Extension) -> Markdown: ...
def reset(self: Markdown) -> Markdown: ...
def set_output_format(self, format: Literal["xhtml", "html"]) -> Markdown: ...
def is_block_level(self, tag: str) -> bool: ...
def convert(self, source: Text) -> Text: ...
def convertFile(
self,
input: Optional[Union[str, TextIO, BinaryIO]] = ...,
output: Optional[Union[str, TextIO, BinaryIO]] = ...,
encoding: Optional[str] = ...,
) -> Markdown: ...
def markdown(
text: Text,
*,
extensions: Optional[Sequence[Union[str, Extension]]] = ...,
extension_configs: Optional[Mapping[str, Mapping[str, Any]]] = ...,
output_format: Optional[Literal["xhtml", "html"]] = ...,
tab_length: Optional[int] = ...,
) -> Text: ...
def markdownFromFile(
*,
input: Optional[Union[str, TextIO, BinaryIO]] = ...,
output: Optional[Union[str, TextIO, BinaryIO]] = ...,
encoding: Optional[str] = ...,
extensions: Optional[Sequence[Union[str, Extension]]] = ...,
extension_configs: Optional[Mapping[str, Mapping[str, Any]]] = ...,
output_format: Optional[Literal["xhtml", "html"]] = ...,
tab_length: Optional[int] = ...,
) -> None: ...

View File

@@ -0,0 +1,13 @@
from typing import Any, Dict, List, Mapping, Tuple
from markdown.core import Markdown
class Extension:
config: Mapping[str, List[Any]] = ...
def __init__(self, **kwargs: Any) -> None: ...
def getConfig(self, key: str, default: Any = ...) -> Any: ...
def getConfigs(self) -> Dict[str, Any]: ...
def getConfigInfo(self) -> List[Tuple[str, str]]: ...
def setConfig(self, key: str, value: Any) -> None: ...
def setConfigs(self, items: Mapping[str, Any]) -> None: ...
def extendMarkdown(self, md: Markdown) -> None: ...

View File

@@ -0,0 +1,16 @@
from typing import Any, Pattern
from markdown.blockprocessors import BlockProcessor
from markdown.extensions import Extension
from markdown.inlinepatterns import InlineProcessor
ABBR_REF_RE: Pattern
class AbbrExtension(Extension): ...
class AbbrPreprocessor(BlockProcessor): ...
class AbbrInlineProcessor(InlineProcessor):
title: Any
def __init__(self, pattern, title) -> None: ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,15 @@
from typing import Any, Pattern
from markdown.blockprocessors import BlockProcessor
from markdown.extensions import Extension
class AdmonitionExtension(Extension): ...
class AdmonitionProcessor(BlockProcessor):
CLASSNAME: str = ...
CLASSNAME_TITLE: str = ...
RE: Pattern
RE_SPACES: Any
def get_class_and_title(self, match): ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,20 @@
from typing import Any, Pattern
from markdown.extensions import Extension
from markdown.treeprocessors import Treeprocessor
def get_attrs(str): ...
def isheader(elem): ...
class AttrListTreeprocessor(Treeprocessor):
BASE_RE: str = ...
HEADER_RE: Pattern
BLOCK_RE: Pattern
INLINE_RE: Pattern
NAME_RE: Pattern
def assign_attrs(self, elem, attrs) -> None: ...
def sanitize_name(self, name): ...
class AttrListExtension(Extension): ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,42 @@
from typing import Any, Optional
from markdown.extensions import Extension
from markdown.treeprocessors import Treeprocessor
pygments: bool
def parse_hl_lines(expr): ...
class CodeHilite:
src: Any
lang: Any
linenums: Any
guess_lang: Any
css_class: Any
style: Any
noclasses: Any
tab_length: Any
hl_lines: Any
use_pygments: Any
def __init__(
self,
src: Optional[Any] = ...,
linenums: Optional[Any] = ...,
guess_lang: bool = ...,
css_class: str = ...,
lang: Optional[Any] = ...,
style: str = ...,
noclasses: bool = ...,
tab_length: int = ...,
hl_lines: Optional[Any] = ...,
use_pygments: bool = ...,
) -> None: ...
def hilite(self): ...
class HiliteTreeprocessor(Treeprocessor):
def code_unescape(self, text): ...
class CodeHiliteExtension(Extension):
def __init__(self, **kwargs) -> None: ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,13 @@
from typing import Any, Pattern
from markdown.blockprocessors import BlockProcessor, ListIndentProcessor
from markdown.extensions import Extension
class DefListProcessor(BlockProcessor):
RE: Pattern
NO_INDENT_RE: Pattern
class DefListIndentProcessor(ListIndentProcessor): ...
class DefListExtension(Extension): ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,10 @@
from typing import Any
from markdown.extensions import Extension
extensions: Any
class ExtraExtension(Extension):
def __init__(self, **kwargs) -> None: ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,16 @@
from typing import Any, Pattern
from markdown.extensions import Extension
from markdown.preprocessors import Preprocessor
class FencedCodeExtension(Extension): ...
class FencedBlockPreprocessor(Preprocessor):
FENCED_BLOCK_RE: Pattern
CODE_WRAP: str = ...
LANG_TAG: str = ...
checked_for_codehilite: bool = ...
codehilite_conf: Any
def __init__(self, md) -> None: ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,57 @@
from typing import Any, Pattern
from markdown.extensions import Extension
from markdown.inlinepatterns import InlineProcessor
from markdown.postprocessors import Postprocessor
from markdown.preprocessors import Preprocessor
from markdown.treeprocessors import Treeprocessor
FN_BACKLINK_TEXT: Any
NBSP_PLACEHOLDER: Any
DEF_RE: Pattern
TABBED_RE: Pattern
RE_REF_ID: Any
class FootnoteExtension(Extension):
unique_prefix: int = ...
found_refs: Any
used_refs: Any
def __init__(self, **kwargs) -> None: ...
parser: Any
md: Any
footnotes: Any
def reset(self) -> None: ...
def unique_ref(self, reference, found: bool = ...): ...
def findFootnotesPlaceholder(self, root): ...
def setFootnote(self, id, text) -> None: ...
def get_separator(self): ...
def makeFootnoteId(self, id): ...
def makeFootnoteRefId(self, id, found: bool = ...): ...
def makeFootnotesDiv(self, root): ...
class FootnotePreprocessor(Preprocessor):
footnotes: Any
def __init__(self, footnotes) -> None: ...
def detectTabbed(self, lines): ...
class FootnoteInlineProcessor(InlineProcessor):
footnotes: Any
def __init__(self, pattern, footnotes) -> None: ...
class FootnotePostTreeprocessor(Treeprocessor):
footnotes: Any
def __init__(self, footnotes) -> None: ...
def add_duplicates(self, li, duplicates) -> None: ...
def get_num_duplicates(self, li): ...
def handle_duplicates(self, parent) -> None: ...
offset: int = ...
class FootnoteTreeprocessor(Treeprocessor):
footnotes: Any
def __init__(self, footnotes) -> None: ...
class FootnotePostprocessor(Postprocessor):
footnotes: Any
def __init__(self, footnotes) -> None: ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,13 @@
from typing import Any, Pattern
from markdown.extensions import Extension
from markdown.treeprocessors import Treeprocessor
ATTR_RE: Pattern
class LegacyAttrs(Treeprocessor):
def handleAttributes(self, el, txt): ...
class LegacyAttrExtension(Extension): ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,13 @@
from typing import Any
from markdown.extensions import Extension
from markdown.inlinepatterns import UnderscoreProcessor
EMPHASIS_RE: str
STRONG_RE: str
STRONG_EM_RE: str
class LegacyUnderscoreProcessor(UnderscoreProcessor): ...
class LegacyEmExtension(Extension): ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,9 @@
from typing import Any, Optional
from markdown.blockprocessors import BlockProcessor
from markdown.extensions import Extension
class MarkdownInHtmlProcessor(BlockProcessor): ...
class MarkdownInHtmlExtension(Extension): ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,18 @@
from typing import Any, Pattern
from markdown.extensions import Extension
from markdown.preprocessors import Preprocessor
log: Any
META_RE: Pattern
META_MORE_RE: Pattern
BEGIN_RE: Pattern
END_RE: Pattern
class MetaExtension(Extension):
md: Any
def reset(self) -> None: ...
class MetaPreprocessor(Preprocessor): ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,9 @@
from typing import Any
from markdown.extensions import Extension
BR_RE: str
class Nl2BrExtension(Extension): ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,14 @@
from typing import Any, Pattern
from markdown.blockprocessors import OListProcessor, UListProcessor
from markdown.extensions import Extension
class SaneOListProcessor(OListProcessor):
def __init__(self, parser) -> None: ...
class SaneUListProcessor(UListProcessor):
def __init__(self, parser) -> None: ...
class SaneListExtension(Extension): ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,39 @@
from typing import Any, Pattern
from markdown.extensions import Extension
from markdown.inlinepatterns import HtmlInlineProcessor
punctClass: str
endOfWordClass: str
closeClass: str
openingQuotesBase: str
substitutions: Any
singleQuoteStartRe: Any
doubleQuoteStartRe: Any
doubleQuoteSetsRe: str
singleQuoteSetsRe: str
decadeAbbrRe: str
openingDoubleQuotesRegex: Any
closingDoubleQuotesRegex: str
closingDoubleQuotesRegex2: Any
openingSingleQuotesRegex: Any
closingSingleQuotesRegex: Any
closingSingleQuotesRegex2: Any
remainingSingleQuotesRegex: str
remainingDoubleQuotesRegex: str
HTML_STRICT_RE: str
class SubstituteTextPattern(HtmlInlineProcessor):
replace: Any
def __init__(self, pattern, replace, md) -> None: ...
class SmartyExtension(Extension):
substitutions: Any
def __init__(self, **kwargs) -> None: ...
def educateDashes(self, md) -> None: ...
def educateEllipses(self, md) -> None: ...
def educateAngledQuotes(self, md) -> None: ...
def educateQuotes(self, md) -> None: ...
inlinePatterns: Any
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,19 @@
from typing import Any
from markdown.blockprocessors import BlockProcessor
from markdown.extensions import Extension
PIPE_NONE: int
PIPE_LEFT: int
PIPE_RIGHT: int
class TableProcessor(BlockProcessor):
RE_CODE_PIPES: Any
RE_END_BORDER: Any
border: bool = ...
separator: str = ...
def __init__(self, parser) -> None: ...
class TableExtension(Extension): ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,44 @@
from typing import Any, Pattern
from markdown.extensions import Extension
from markdown.treeprocessors import Treeprocessor
def slugify(value, separator): ...
IDCOUNT_RE: Pattern
def unique(id, ids): ...
def get_name(el): ...
def stashedHTML2text(text, md, strip_entities: bool = ...): ...
def unescape(text): ...
def nest_toc_tokens(toc_list): ...
class TocTreeprocessor(Treeprocessor):
marker: Any
title: Any
base_level: Any
slugify: Any
sep: Any
use_anchors: Any
anchorlink_class: Any
use_permalinks: Any
permalink_class: Any
permalink_title: Any
header_rgx: Any
toc_top: int = ...
toc_bottom: Any
def __init__(self, md, config) -> None: ...
def iterparent(self, node) -> None: ...
def replace_marker(self, root, elem) -> None: ...
def set_level(self, elem) -> None: ...
def add_anchor(self, c, elem_id) -> None: ...
def add_permalink(self, c, elem_id) -> None: ...
def build_toc_div(self, toc_list): ...
class TocExtension(Extension):
TreeProcessorClass: Any
def __init__(self, **kwargs) -> None: ...
md: Any
def reset(self) -> None: ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,16 @@
from typing import Any
from markdown.extensions import Extension
from markdown.inlinepatterns import InlineProcessor
def build_url(label, base, end): ...
class WikiLinkExtension(Extension):
def __init__(self, **kwargs) -> None: ...
md: Any
class WikiLinksInlineProcessor(InlineProcessor):
config: Any
def __init__(self, pattern, config) -> None: ...
def makeExtension(**kwargs): ...

View File

@@ -0,0 +1,103 @@
from typing import Any, Match, Optional, Tuple, Union
from xml.etree.ElementTree import Element
def build_inlinepatterns(md, **kwargs): ...
NOIMG: str
BACKTICK_RE: str
ESCAPE_RE: str
EMPHASIS_RE: str
STRONG_RE: str
SMART_STRONG_RE: str
SMART_EMPHASIS_RE: str
SMART_STRONG_EM_RE: str
EM_STRONG_RE: str
EM_STRONG2_RE: str
STRONG_EM_RE: str
STRONG_EM2_RE: str
STRONG_EM3_RE: str
LINK_RE: str
IMAGE_LINK_RE: str
REFERENCE_RE: str
IMAGE_REFERENCE_RE: str
NOT_STRONG_RE: str
AUTOLINK_RE: str
AUTOMAIL_RE: str
HTML_RE: str
ENTITY_RE: str
LINE_BREAK_RE: str
def dequote(string): ...
class EmStrongItem: ...
class Pattern:
ANCESTOR_EXCLUDES: Any
pattern: Any
compiled_re: Any
md: Any
def __init__(self, pattern, md: Optional[Any] = ...) -> None: ...
@property
def markdown(self): ...
def getCompiledRegExp(self): ...
def handleMatch(self, m: Match) -> Optional[Union[str, Element]]: ...
def type(self): ...
def unescape(self, text): ...
class InlineProcessor(Pattern):
safe_mode: bool = ...
def __init__(self, pattern, md: Optional[Any] = ...) -> None: ...
def handleMatch(self, m: Match, data) -> Union[Tuple[Element, int, int], Tuple[None, None, None]]: ... # type: ignore
class SimpleTextPattern(Pattern): ...
class SimpleTextInlineProcessor(InlineProcessor): ...
class EscapeInlineProcessor(InlineProcessor): ...
class SimpleTagPattern(Pattern):
tag: Any
def __init__(self, pattern, tag) -> None: ...
class SimpleTagInlineProcessor(InlineProcessor):
tag: Any
def __init__(self, pattern, tag) -> None: ...
class SubstituteTagPattern(SimpleTagPattern): ...
class SubstituteTagInlineProcessor(SimpleTagInlineProcessor): ...
class BacktickInlineProcessor(InlineProcessor):
ESCAPED_BSLASH: Any
tag: str = ...
def __init__(self, pattern) -> None: ...
class DoubleTagPattern(SimpleTagPattern): ...
class DoubleTagInlineProcessor(SimpleTagInlineProcessor): ...
class HtmlInlineProcessor(InlineProcessor): ...
class AsteriskProcessor(InlineProcessor):
PATTERNS: Any
def build_single(self, m, tag, idx): ...
def build_double(self, m, tags, idx): ...
def build_double2(self, m, tags, idx): ...
def parse_sub_patterns(self, data, parent, last, idx) -> None: ...
def build_element(self, m, builder, tags, index): ...
class UnderscoreProcessor(AsteriskProcessor):
PATTERNS: Any
class LinkInlineProcessor(InlineProcessor):
RE_LINK: Any
RE_TITLE_CLEAN: Any
def getLink(self, data, index): ...
def getText(self, data, index): ...
class ImageInlineProcessor(LinkInlineProcessor): ...
class ReferenceInlineProcessor(LinkInlineProcessor):
NEWLINE_CLEANUP_RE: Pattern
def evalId(self, data, index, text): ...
def makeTag(self, href, title, text): ...
class ShortReferenceInlineProcessor(ReferenceInlineProcessor): ...
class ImageReferenceInlineProcessor(ReferenceInlineProcessor): ...
class AutolinkInlineProcessor(InlineProcessor): ...
class AutomailInlineProcessor(InlineProcessor): ...

View File

@@ -0,0 +1,9 @@
from typing import Any
class Version:
def __new__(cls, major, minor, micro, release: str = ..., pre: int = ..., post: int = ..., dev: int = ...): ...
class Pep562:
def __init__(self, name) -> None: ...
def __dir__(self): ...
def __getattr__(self, name): ...

View File

@@ -0,0 +1,17 @@
from typing import Any, Pattern
from . import util
def build_postprocessors(md, **kwargs): ...
class Postprocessor(util.Processor):
def run(self, text) -> Any: ...
class RawHtmlPostprocessor(Postprocessor):
def isblocklevel(self, html): ...
class AndSubstitutePostprocessor(Postprocessor): ...
class UnescapePostprocessor(Postprocessor):
RE: Pattern
def unescape(self, m): ...

View File

@@ -0,0 +1,23 @@
from typing import Any, Iterable, List, Pattern
from . import util
def build_preprocessors(md, **kwargs): ...
class Preprocessor(util.Processor):
def run(self, lines: List[str]) -> List[str]: ...
class NormalizeWhitespace(Preprocessor): ...
class HtmlBlockPreprocessor(Preprocessor):
right_tag_patterns: Any
attrs_pattern: str = ...
left_tag_pattern: Any
attrs_re: Any
left_tag_re: Any
markdown_in_raw: bool = ...
class ReferencePreprocessor(Preprocessor):
TITLE: str = ...
RE: Pattern
TITLE_RE: Pattern

View File

@@ -0,0 +1,4 @@
from typing import Any
def to_html_string(element): ...
def to_xhtml_string(element): ...

View File

@@ -0,0 +1,19 @@
from typing import Any, Optional
from . import util
def build_treeprocessors(md, **kwargs): ...
def isString(s): ...
class Treeprocessor(util.Processor):
def run(self, root) -> Optional[Any]: ...
class InlineProcessor(Treeprocessor):
inlinePatterns: Any
ancestors: Any
def __init__(self, md) -> None: ...
stashed_nodes: Any
parent_map: Any
def run(self, tree, ancestors: Optional[Any] = ...): ...
class PrettifyTreeprocessor(Treeprocessor): ...

View File

@@ -0,0 +1,56 @@
from collections import namedtuple
from typing import Any, Optional, Pattern
PY37: Any
__deprecated__: Any
BLOCK_LEVEL_ELEMENTS: Any
STX: str
ETX: str
INLINE_PLACEHOLDER_PREFIX: Any
INLINE_PLACEHOLDER: Any
INLINE_PLACEHOLDER_RE: Pattern
AMP_SUBSTITUTE: Any
HTML_PLACEHOLDER: Any
HTML_PLACEHOLDER_RE: Pattern
TAG_PLACEHOLDER: Any
INSTALLED_EXTENSIONS: Any
RTL_BIDI_RANGES: Any
def deprecated(message, stacklevel: int = ...): ...
def isBlockLevel(tag): ...
def parseBoolValue(value, fail_on_errors: bool = ..., preserve_none: bool = ...): ...
def code_escape(text): ...
class AtomicString(str): ...
class Processor:
md: Any
def __init__(self, md: Optional[Any] = ...) -> None: ...
@property
def markdown(self): ...
class HtmlStash:
html_counter: int = ...
rawHtmlBlocks: Any
tag_counter: int = ...
tag_data: Any
def __init__(self) -> None: ...
def store(self, html): ...
def reset(self) -> None: ...
def get_placeholder(self, key): ...
def store_tag(self, tag, attrs, left_index, right_index): ...
class Registry:
def __init__(self) -> None: ...
def __contains__(self, item): ...
def __iter__(self) -> Any: ...
def __getitem__(self, key): ...
def __len__(self): ...
def get_index_for_name(self, name): ...
def register(self, item, name, priority) -> None: ...
def deregister(self, name, strict: bool = ...) -> None: ...
def __setitem__(self, key, value) -> None: ...
def __delitem__(self, key) -> None: ...
def add(self, key, value, location) -> None: ...
def __getattr__(name): ...