#!/usr/bin/env python3
from dataclasses import dataclass
from dataclass_csv import DataclassReader
@dataclass
class User:
firstname: str
email: str
age: int
def main() -> None:
with open('test.csv') as users_csv:
reader = DataclassReader(users_csv, User)
for row in reader:
print(row)
if __name__ == '__main__':
main()
But using __future__.annotations, which will be mandatory in Python 4.0 and is useful in Python 3.7+, breaks DataclassReader:
#!/usr/bin/env python3
from __future__ import annotations
from dataclasses import dataclass
from dataclass_csv import DataclassReader
@dataclass
class User:
firstname: str
email: str
age: int
def main() -> None:
with open('test.csv') as users_csv:
reader = DataclassReader(users_csv, User)
for row in reader:
print(row)
if __name__ == '__main__':
main()
Traceback (most recent call last):
File "test.py", line 25, in <module>
main()
File "test.py", line 20, in main
for row in reader:
File "venv/lib/python3.7/site-packages/dataclass_csv/dataclass_reader.py", line 211, in __next__
return self._process_row(row)
File "venv/lib/python3.7/site-packages/dataclass_csv/dataclass_reader.py", line 159, in _process_row
or '__origin__' in field_type.__dict__
This code:
Runs correctly:
With the following
test.csv
:But using
__future__.annotations
, which will be mandatory in Python 4.0 and is useful in Python 3.7+, breaksDataclassReader
: