1
1
import sys
2
+
3
+ # actually csv.Dialect is a different class to _csv.Dialect at runtime, but for typing purposes, they're identical
2
4
from _csv import (
3
5
QUOTE_ALL as QUOTE_ALL ,
4
6
QUOTE_MINIMAL as QUOTE_MINIMAL ,
@@ -19,9 +21,10 @@ from _csv import (
19
21
unregister_dialect as unregister_dialect ,
20
22
writer as writer ,
21
23
)
22
- from _typeshed import Self
24
+ from _typeshed import Self , SupportsWrite
23
25
from collections .abc import Collection , Iterable , Iterator , Mapping , Sequence
24
26
from typing import Any , Generic , TypeVar , overload
27
+ from typing_extensions import Literal
25
28
26
29
if sys .version_info >= (3 , 8 ):
27
30
from builtins import dict as _DictReadMapping
@@ -108,14 +111,14 @@ class DictReader(Generic[_T], Iterator[_DictReadMapping[_T, str]]):
108
111
class DictWriter (Generic [_T ]):
109
112
fieldnames : Collection [_T ]
110
113
restval : Any | None
111
- extrasaction : str
114
+ extrasaction : Literal [ "raise" , "ignore" ]
112
115
writer : _writer
113
116
def __init__ (
114
117
self ,
115
- f : Any ,
118
+ f : SupportsWrite [ str ] ,
116
119
fieldnames : Collection [_T ],
117
120
restval : Any | None = ...,
118
- extrasaction : str = ...,
121
+ extrasaction : Literal [ "raise" , "ignore" ] = ...,
119
122
dialect : _DialectLike = ...,
120
123
* args : Any ,
121
124
** kwds : Any ,
0 commit comments