Skip to content

Commit b4da2b6

Browse files
hauntsaninjaJelleZijlstra
authored andcommitted
csv: re-export Dialect from _csv (#3613)
Resolves #3611 Tested with mypy on: ``` f = open("asdf.csv", "w") csv.writer(f) csv.writer(f, dialect=csv.excel) csv.writer(f, dialect=csv.excel()) csv.DictReader(f) csv.DictReader(f, dialect=csv.excel) csv.DictReader(f, dialect=csv.excel()) class CustomDialect(csv.Dialect): delimiter = "%" csv.writer(f, dialect=CustomDialect) csv.writer(f, dialect=CustomDialect()) ```
1 parent 8b241b5 commit b4da2b6

File tree

2 files changed

+10
-17
lines changed

2 files changed

+10
-17
lines changed

stdlib/2and3/_csv.pyi

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import sys
22

3-
from typing import Any, Iterable, Iterator, List, Optional, Protocol, Sequence, Text, Union
3+
from typing import Any, Iterable, Iterator, List, Optional, Protocol, Sequence, Text, Type, Union
44

55
QUOTE_ALL: int
66
QUOTE_MINIMAL: int
@@ -20,6 +20,8 @@ class Dialect:
2020
strict: int
2121
def __init__(self) -> None: ...
2222

23+
_DialectLike = Union[str, Dialect, Type[Dialect]]
24+
2325
class _reader(Iterator[List[str]]):
2426
dialect: Dialect
2527
line_num: int
@@ -41,8 +43,8 @@ class _writer:
4143

4244
class _Writer(Protocol):
4345
def write(self, s: str) -> Any: ...
44-
def writer(csvfile: _Writer, dialect: Union[Dialect, str] = ..., **fmtparams: Any) -> _writer: ...
45-
def reader(csvfile: Iterable[Text], dialect: Union[Dialect, str] = ..., **fmtparams: Any) -> _reader: ...
46+
def writer(csvfile: _Writer, dialect: _DialectLike = ..., **fmtparams: Any) -> _writer: ...
47+
def reader(csvfile: Iterable[Text], dialect: _DialectLike = ..., **fmtparams: Any) -> _reader: ...
4648
def register_dialect(name: str, dialect: Any = ..., **fmtparams: Any) -> None: ...
4749
def unregister_dialect(name: str) -> None: ...
4850
def get_dialect(name: str) -> Dialect: ...

stdlib/2and3/csv.pyi

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ from _csv import (
44
QUOTE_MINIMAL as QUOTE_MINIMAL,
55
QUOTE_NONE as QUOTE_NONE,
66
QUOTE_NONNUMERIC as QUOTE_NONNUMERIC,
7+
Dialect as Dialect,
78
Error as Error,
9+
_DialectLike,
810
_reader,
911
_writer,
1012
field_size_limit as field_size_limit,
@@ -18,19 +20,8 @@ from _csv import (
1820
from collections import OrderedDict
1921
from typing import Any, Dict, Iterable, Iterator, List, Mapping, Optional, Sequence, Text, Type, Union
2022

21-
_Dialect = Union[str, Dialect, Type[Dialect]]
2223
_DictRow = Mapping[str, Any]
2324

24-
class 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-
3425
class excel(Dialect):
3526
delimiter: str
3627
quotechar: str
@@ -62,7 +53,7 @@ class DictReader(Iterator[_DRMapping]):
6253
restkey: Optional[str]
6354
restval: Optional[str]
6455
reader: _reader
65-
dialect: _Dialect
56+
dialect: _DialectLike
6657
line_num: int
6758
fieldnames: Sequence[str]
6859
def __init__(
@@ -71,7 +62,7 @@ class DictReader(Iterator[_DRMapping]):
7162
fieldnames: Optional[Sequence[str]] = ...,
7263
restkey: Optional[str] = ...,
7364
restval: Optional[str] = ...,
74-
dialect: _Dialect = ...,
65+
dialect: _DialectLike = ...,
7566
*args: Any,
7667
**kwds: Any,
7768
) -> None: ...
@@ -92,7 +83,7 @@ class DictWriter(object):
9283
fieldnames: Iterable[str],
9384
restval: Optional[Any] = ...,
9485
extrasaction: str = ...,
95-
dialect: _Dialect = ...,
86+
dialect: _DialectLike = ...,
9687
*args: Any,
9788
**kwds: Any,
9889
) -> None: ...

0 commit comments

Comments
 (0)