diff --git a/dataclass_csv/dataclass_reader.py b/dataclass_csv/dataclass_reader.py index 6467c21..8e8204e 100644 --- a/dataclass_csv/dataclass_reader.py +++ b/dataclass_csv/dataclass_reader.py @@ -2,7 +2,6 @@ import csv from datetime import date, datetime -from distutils.util import strtobool from typing import Union, Type, Optional, Sequence, Dict, Any, List import typing @@ -31,6 +30,23 @@ def _verify_duplicate_header_items(header): ) +# this is a port from distutils.util.strtobool +def _strtobool(val: str) -> bool: + """Convert a string representation of truth to true (1) or false (0). + + True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values + are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if + 'val' is anything else. + """ + val = val.lower() + if val in ('y', 'yes', 't', 'true', 'on', '1'): + return True + elif val in ('n', 'no', 'f', 'false', 'off', '0'): + return False + else: + raise ValueError(f"invalid truth value {val!r}") + + def is_union_type(t): if hasattr(t, "__origin__") and t.__origin__ is Union: return True @@ -220,7 +236,7 @@ def _process_row(self, row): transformed_value = ( value if isinstance(value, bool) - else strtobool(str(value).strip()) == 1 + else _strtobool(str(value).strip()) == 1 ) except ValueError as ex: raise CsvValueError(ex, line_number=self._reader.line_num) from None