1import sys
2from _csv import (
3    QUOTE_ALL as QUOTE_ALL,
4    QUOTE_MINIMAL as QUOTE_MINIMAL,
5    QUOTE_NONE as QUOTE_NONE,
6    QUOTE_NONNUMERIC as QUOTE_NONNUMERIC,
7    Error as Error,
8    _reader,
9    _writer,
10    field_size_limit as field_size_limit,
11    get_dialect as get_dialect,
12    list_dialects as list_dialects,
13    reader as reader,
14    register_dialect as register_dialect,
15    unregister_dialect as unregister_dialect,
16    writer as writer,
17)
18from collections import OrderedDict
19from typing import Any, Dict, Iterable, Iterator, List, Mapping, Optional, Sequence, Text, Type, Union
20
21_Dialect = Union[str, Dialect, Type[Dialect]]
22_DictRow = Mapping[str, Any]
23
24class Dialect(object):
25    delimiter: str
26    quotechar: Optional[str]
27    escapechar: Optional[str]
28    doublequote: bool
29    skipinitialspace: bool
30    lineterminator: str
31    quoting: int
32    def __init__(self) -> None: ...
33
34class excel(Dialect):
35    delimiter: str
36    quotechar: str
37    doublequote: bool
38    skipinitialspace: bool
39    lineterminator: str
40    quoting: int
41
42class excel_tab(excel):
43    delimiter: str
44
45if sys.version_info >= (3,):
46    class unix_dialect(Dialect):
47        delimiter: str
48        quotechar: str
49        doublequote: bool
50        skipinitialspace: bool
51        lineterminator: str
52        quoting: int
53
54if sys.version_info >= (3, 6):
55    _DRMapping = OrderedDict[str, str]
56else:
57    _DRMapping = Dict[str, str]
58
59class DictReader(Iterator[_DRMapping]):
60    restkey: Optional[str]
61    restval: Optional[str]
62    reader: _reader
63    dialect: _Dialect
64    line_num: int
65    fieldnames: Sequence[str]
66    def __init__(
67        self,
68        f: Iterable[Text],
69        fieldnames: Optional[Sequence[str]] = ...,
70        restkey: Optional[str] = ...,
71        restval: Optional[str] = ...,
72        dialect: _Dialect = ...,
73        *args: Any,
74        **kwds: Any,
75    ) -> None: ...
76    def __iter__(self) -> DictReader: ...
77    if sys.version_info >= (3,):
78        def __next__(self) -> _DRMapping: ...
79    else:
80        def next(self) -> _DRMapping: ...
81
82class DictWriter(object):
83    fieldnames: Sequence[str]
84    restval: Optional[Any]
85    extrasaction: str
86    writer: _writer
87    def __init__(
88        self,
89        f: Any,
90        fieldnames: Iterable[str],
91        restval: Optional[Any] = ...,
92        extrasaction: str = ...,
93        dialect: _Dialect = ...,
94        *args: Any,
95        **kwds: Any,
96    ) -> None: ...
97    def writeheader(self) -> None: ...
98    def writerow(self, rowdict: _DictRow) -> None: ...
99    def writerows(self, rowdicts: Iterable[_DictRow]) -> None: ...
100
101class Sniffer(object):
102    preferred: List[str]
103    def __init__(self) -> None: ...
104    def sniff(self, sample: str, delimiters: Optional[str] = ...) -> Type[Dialect]: ...
105    def has_header(self, sample: str) -> bool: ...
106