Skip to content

Commit 6bbf50a

Browse files
committed
Add return type to dataclassreader
reimplement dfurtado/dataclass-csv#57
1 parent 5080b42 commit 6bbf50a

2 files changed

Lines changed: 8 additions & 6 deletions

File tree

dataclass_csv/dataclass_reader.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import csv
33

44
from datetime import date, datetime
5-
from typing import Union, Type, Optional, Sequence, Dict, Any, List
5+
from typing import Union, Type, Optional, Sequence, Dict, Any, List, Generic, TypeVar
66

77
import typing
88

@@ -12,6 +12,8 @@
1212
from collections import Counter
1313

1414

15+
T = TypeVar("T")
16+
1517
def _verify_duplicate_header_items(header):
1618
if header is not None and len(header) == 0:
1719
return
@@ -60,11 +62,11 @@ def get_args(t):
6062
return tuple()
6163

6264

63-
class DataclassReader:
65+
class DataclassReader(Generic[T]):
6466
def __init__(
6567
self,
6668
f: Any,
67-
cls: Type[object],
69+
cls: Type[T],
6870
fieldnames: Optional[Sequence[str]] = None,
6971
restkey: Optional[str] = None,
7072
restval: Optional[Any] = None,
@@ -198,7 +200,7 @@ def _parse_date_value(self, field, date_value, field_type):
198200
else:
199201
return datetime_obj
200202

201-
def _process_row(self, row):
203+
def _process_row(self, row) -> T:
202204
values = dict()
203205

204206
for field in dataclasses.fields(self._cls):
@@ -257,7 +259,7 @@ def _process_row(self, row):
257259
values[field.name] = transformed_value
258260
return self._cls(**values)
259261

260-
def __next__(self):
262+
def __next__(self) -> T:
261263
row = next(self._reader)
262264
return self._process_row(row)
263265

dataclass_csv/dataclass_writer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def __init__(
1111
data: List[Any],
1212
cls: Type[object],
1313
dialect: str = "excel",
14-
**fmtparams: Dict[str, Any],
14+
**fmtparams: Any,
1515
):
1616
if not f:
1717
raise ValueError("The f argument is required")

0 commit comments

Comments
 (0)