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())
```
This commit is contained in:
Shantanu
2020-01-22 17:11:52 -08:00
committed by Jelle Zijlstra
parent 8b241b5243
commit b4da2b694b
2 changed files with 10 additions and 17 deletions

View File

@@ -1,6 +1,6 @@
import sys
from typing import Any, Iterable, Iterator, List, Optional, Protocol, Sequence, Text, Union
from typing import Any, Iterable, Iterator, List, Optional, Protocol, Sequence, Text, Type, Union
QUOTE_ALL: int
QUOTE_MINIMAL: int
@@ -20,6 +20,8 @@ class Dialect:
strict: int
def __init__(self) -> None: ...
_DialectLike = Union[str, Dialect, Type[Dialect]]
class _reader(Iterator[List[str]]):
dialect: Dialect
line_num: int
@@ -41,8 +43,8 @@ class _writer:
class _Writer(Protocol):
def write(self, s: str) -> Any: ...
def writer(csvfile: _Writer, dialect: Union[Dialect, str] = ..., **fmtparams: Any) -> _writer: ...
def reader(csvfile: Iterable[Text], dialect: Union[Dialect, str] = ..., **fmtparams: Any) -> _reader: ...
def writer(csvfile: _Writer, dialect: _DialectLike = ..., **fmtparams: Any) -> _writer: ...
def reader(csvfile: Iterable[Text], dialect: _DialectLike = ..., **fmtparams: Any) -> _reader: ...
def register_dialect(name: str, dialect: Any = ..., **fmtparams: Any) -> None: ...
def unregister_dialect(name: str) -> None: ...
def get_dialect(name: str) -> Dialect: ...

View File

@@ -4,7 +4,9 @@ from _csv import (
QUOTE_MINIMAL as QUOTE_MINIMAL,
QUOTE_NONE as QUOTE_NONE,
QUOTE_NONNUMERIC as QUOTE_NONNUMERIC,
Dialect as Dialect,
Error as Error,
_DialectLike,
_reader,
_writer,
field_size_limit as field_size_limit,
@@ -18,19 +20,8 @@ from _csv import (
from collections import OrderedDict
from typing import Any, Dict, Iterable, Iterator, List, Mapping, Optional, Sequence, Text, Type, Union
_Dialect = Union[str, Dialect, Type[Dialect]]
_DictRow = Mapping[str, Any]
class Dialect(object):
delimiter: str
quotechar: Optional[str]
escapechar: Optional[str]
doublequote: bool
skipinitialspace: bool
lineterminator: str
quoting: int
def __init__(self) -> None: ...
class excel(Dialect):
delimiter: str
quotechar: str
@@ -62,7 +53,7 @@ class DictReader(Iterator[_DRMapping]):
restkey: Optional[str]
restval: Optional[str]
reader: _reader
dialect: _Dialect
dialect: _DialectLike
line_num: int
fieldnames: Sequence[str]
def __init__(
@@ -71,7 +62,7 @@ class DictReader(Iterator[_DRMapping]):
fieldnames: Optional[Sequence[str]] = ...,
restkey: Optional[str] = ...,
restval: Optional[str] = ...,
dialect: _Dialect = ...,
dialect: _DialectLike = ...,
*args: Any,
**kwds: Any,
) -> None: ...
@@ -92,7 +83,7 @@ class DictWriter(object):
fieldnames: Iterable[str],
restval: Optional[Any] = ...,
extrasaction: str = ...,
dialect: _Dialect = ...,
dialect: _DialectLike = ...,
*args: Any,
**kwds: Any,
) -> None: ...