diff --git a/dataproperty/_property_extractor.py b/dataproperty/_property_extractor.py index b137558..7a104d3 100644 --- a/dataproperty/_property_extractor.py +++ b/dataproperty/_property_extractor.py @@ -14,6 +14,7 @@ class PropertyExtractor(object): def __init__(self): from ._data_property import default_bool_converter + from ._data_property import default_datetime_converter self.header_list = [] self.data_matrix = [] @@ -22,6 +23,7 @@ def __init__(self): self.inf_value = float("inf") self.nan_value = float("nan") self.bool_converter = default_bool_converter + self.datetime_converter = default_datetime_converter self.is_convert = True def extract_data_property_matrix(self): @@ -61,6 +63,7 @@ def __extract_data_property_list(self, data_list): inf_value=self.inf_value, nan_value=self.nan_value, bool_converter=self.bool_converter, + datetime_converter=self.datetime_converter, is_convert=self.is_convert) for data in data_list ] diff --git a/setup.py b/setup.py index 14d1f81..d758c42 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ setuptools.setup( name=project_name, - version="0.5.0", + version="0.5.1", url="https://github.com/thombashi/" + project_name, bugtrack_url="https://github.com/thombashi/%s/issues" % (project_name), diff --git a/test/test_property_extractor.py b/test/test_property_extractor.py index d4d28a7..d15bd39 100644 --- a/test/test_property_extractor.py +++ b/test/test_property_extractor.py @@ -20,23 +20,48 @@ def prop_extractor(): return PropertyExtractor() +def bool_converter_test(value): + return str(value).lower() + + +def datetime_converter_test(value): + return value.strftime("%Y%m%d %H%M%S") + + class Test_PropertyExtractor_extract_data_property_matrix: - @pytest.mark.parametrize(["value", "non_value"], [ + @pytest.mark.parametrize( + [ + "value", "none_value", "inf_value", "nan_value", + "bool_converter", "datetime_converter", + ], [ [ - [None, 1], - [1.1, "a"], + [ + [None, "1"], + ["1.1", "a"], + [nan, inf], + ["false", datetime.datetime(2017, 1, 1, 0, 0, 0)] + ], + "null", + "Infinity", + "NaN", + bool_converter_test, + datetime_converter_test, ], - "null", - ], - ]) - def test_normal(self, prop_extractor, value, non_value): + ]) + def test_normal( + self, prop_extractor, value, none_value, inf_value, nan_value, + bool_converter, datetime_converter): prop_extractor.data_matrix = value - prop_extractor.none_value = non_value + prop_extractor.none_value = none_value + prop_extractor.inf_value = inf_value + prop_extractor.nan_value = nan_value + prop_extractor.bool_converter = bool_converter_test + prop_extractor.datetime_converter = datetime_converter prop_matrix = prop_extractor.extract_data_property_matrix() - assert len(prop_matrix) == 2 + assert len(prop_matrix) == 4 prop = prop_matrix[0][0] assert prop.data == "null" @@ -48,6 +73,7 @@ def test_normal(self, prop_extractor, value, non_value): assert prop.format_str == "s" prop = prop_matrix[0][1] + assert prop.data == 1 assert prop.typecode == Typecode.INT assert prop.align.align_code == Align.RIGHT.align_code assert prop.align.align_string == Align.RIGHT.align_string @@ -56,6 +82,7 @@ def test_normal(self, prop_extractor, value, non_value): assert prop.format_str == "d" prop = prop_matrix[1][0] + assert prop.data == 1.1 assert prop.typecode == Typecode.FLOAT assert prop.align.align_code == Align.RIGHT.align_code assert prop.align.align_string == Align.RIGHT.align_string @@ -64,6 +91,7 @@ def test_normal(self, prop_extractor, value, non_value): assert prop.format_str == ".1f" prop = prop_matrix[1][1] + assert prop.data == "a" assert prop.typecode == Typecode.STRING assert prop.align.align_code == Align.LEFT.align_code assert prop.align.align_string == Align.LEFT.align_string @@ -71,6 +99,42 @@ def test_normal(self, prop_extractor, value, non_value): assert is_nan(prop.decimal_places) assert prop.format_str == "s" + prop = prop_matrix[2][0] + assert prop.data == "NaN" + assert prop.typecode == Typecode.NAN + assert prop.align.align_code == Align.LEFT.align_code + assert prop.align.align_string == Align.LEFT.align_string + assert prop.str_len == 3 + assert is_nan(prop.decimal_places) + assert prop.format_str == "s" + + prop = prop_matrix[2][1] + assert prop.data == "Infinity" + assert prop.typecode == Typecode.INFINITY + assert prop.align.align_code == Align.LEFT.align_code + assert prop.align.align_string == Align.LEFT.align_string + assert prop.str_len == 8 + assert is_nan(prop.decimal_places) + assert prop.format_str == "s" + + prop = prop_matrix[3][0] + assert prop.data == "false" + assert prop.typecode == Typecode.BOOL + assert prop.align.align_code == Align.LEFT.align_code + assert prop.align.align_string == Align.LEFT.align_string + assert prop.str_len == 5 + assert is_nan(prop.decimal_places) + assert prop.format_str == "s" + + prop = prop_matrix[3][1] + assert prop.data == "20170101 000000" + assert prop.typecode == Typecode.DATETIME + assert prop.align.align_code == Align.LEFT.align_code + assert prop.align.align_string == Align.LEFT.align_string + assert prop.str_len == 15 + assert is_nan(prop.decimal_places) + assert prop.format_str == "s" + @pytest.mark.parametrize(["value", "expected"], [ [None, TypeError], ])