Skip to content

Commit c33804e

Browse files
authored
Merge pull request dfurtado#25 from dfurtado/fixes/datetime-default-fields
Fix for datetime fields with default datetime val
2 parents 3545676 + 70d93b8 commit c33804e

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

dataclass_csv/dataclass_reader.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ def _get_value(self, row, field):
117117
def _parse_date_value(self, field, date_value):
118118
dateformat = self._get_metadata_option(field, 'dateformat')
119119

120+
if not isinstance(date_value, str):
121+
return date_value
122+
120123
if not dateformat:
121124
raise AttributeError(
122125
(
@@ -129,7 +132,6 @@ def _parse_date_value(self, field, date_value):
129132
'{\'dateformat\': <date_format>})`.'
130133
)
131134
)
132-
133135
return datetime.strptime(date_value, dateformat)
134136

135137
def _process_row(self, row):
@@ -203,7 +205,6 @@ def _process_row(self, row):
203205
) from None
204206
else:
205207
values.append(transformed_value)
206-
207208
return self.cls(*values)
208209

209210
def __next__(self):

tests/mocks.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,7 @@ class UserWithOptionalAge:
8787
name: str
8888
age: Optional[int]
8989

90+
@dataclasses.dataclass
91+
class UserWithDefaultDatetimeField:
92+
name: str
93+
birthday: datetime = datetime.now()

tests/test_dataclass_reader.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import pytest
22
import dataclasses
33

4+
from datetime import datetime
45
from dataclass_csv import DataclassReader, CsvValueError
56

67
from .mocks import (
@@ -10,6 +11,7 @@
1011
DataclassWithBooleanValueNoneDefault,
1112
UserWithInitFalse,
1213
UserWithInitFalseAndDefaultValue,
14+
UserWithDefaultDatetimeField,
1315
)
1416

1517

@@ -167,3 +169,12 @@ def test_reader_with_optional_types(create_csv):
167169
with csv_file.open() as f:
168170
reader = DataclassReader(f, UserWithOptionalAge)
169171
list(reader)
172+
173+
def test_reader_with_datetime_default_value(create_csv):
174+
csv_file = create_csv({'name': 'User', 'bithday': ''})
175+
176+
with csv_file.open() as f:
177+
reader = DataclassReader(f, UserWithDefaultDatetimeField)
178+
items = list(reader)
179+
assert len(items) > 0
180+
assert isinstance(items[0].birthday, datetime)

0 commit comments

Comments
 (0)