Skip to content

Commit

Permalink
Merge pull request #29 from thombashi/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
thombashi authored Jul 3, 2016
2 parents 7afa332 + b8336cb commit 5326f3b
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 11 deletions.
20 changes: 14 additions & 6 deletions dataproperty/_data_property.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ def default_bool_converter(value):
return value


def default_datetime_converter(value):
return value.strftime("%Y-%m-%dT%H:%M:%S%z")


class DataProperty(DataPeropertyInterface):
__slots__ = (
"__data",
Expand Down Expand Up @@ -129,12 +133,13 @@ def __init__(
self, data,
none_value=None, inf_value=float("inf"), nan_value=float("nan"),
bool_converter=default_bool_converter,
datetime_converter=default_datetime_converter,
is_convert=True,
replace_tabs_with_spaces=True, tab_length=2):
super(DataProperty, self).__init__()

self.__set_data(
data, none_value, inf_value, nan_value, bool_converter, is_convert)
self.__set_data(data, none_value, inf_value, nan_value, is_convert)
self.__convert_data(bool_converter, datetime_converter)
self.__replace_tabs(replace_tabs_with_spaces, tab_length)
self.__align = align_getter.get_align_from_typecode(self.typecode)

Expand Down Expand Up @@ -192,7 +197,7 @@ def __get_str_len(self):
return get_text_len(self.data)

def __set_data(
self, data, none_value, inf_value, nan_value, bool_converter, is_convert):
self, data, none_value, inf_value, nan_value, is_convert):
special_value_table = {
Typecode.NONE: none_value,
Typecode.INFINITY: inf_value,
Expand All @@ -215,14 +220,17 @@ def __set_data(
self.__data = type_factory.value_converter_factory.create(
data).convert()

if self.typecode == Typecode.BOOL:
self.__data = bool_converter(self.__data)

return

self.__typecode = Typecode.STRING
self.__data = str(data)

def __convert_data(self, bool_converter, datetime_converter):
if self.typecode == Typecode.BOOL:
self.__data = bool_converter(self.__data)
elif self.typecode == Typecode.DATETIME:
self.__data = datetime_converter(self.__data)

def __replace_tabs(self, replace_tabs_with_spaces, tab_length):
if not replace_tabs_with_spaces:
return
Expand Down
2 changes: 1 addition & 1 deletion requirements/test_requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
pytest
pytest-cov
pytest
tox
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

setuptools.setup(
name=project_name,
version="0.4.1",
version="0.5.0",
url="https://github.com/thombashi/" + project_name,
bugtrack_url="https://github.com/thombashi/%s/issues" % (project_name),

Expand Down
30 changes: 28 additions & 2 deletions test/test_column_property.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def test_normal_typecode(self, value_list, expected):

assert col_prop.typecode == expected

def test_normal_0(self):
def test_normal_number_0(self):
col_prop = ColumnDataProperty()
col_prop.update_header(DataProperty("abc"))

Expand All @@ -113,7 +113,33 @@ def test_normal_0(self):
"integer_digits=(min=1, max=2), decimal_places=(min=2, max=3), "
"additional_format_len=(min=0, max=1)")

def test_normal_1(self):
def test_normal_number_1(self):
col_prop = ColumnDataProperty()
col_prop.update_header(DataProperty("abc"))

for value in [0, inf, nan]:
col_prop.update_body(DataProperty(value))

assert col_prop.align == Align.RIGHT
assert is_nan(col_prop.decimal_places)
assert col_prop.typecode == Typecode.FLOAT
assert col_prop.padding_len == 3

assert col_prop.minmax_integer_digits.min_value == 1
assert col_prop.minmax_integer_digits.max_value == 1

assert col_prop.minmax_decimal_places.min_value is None
assert col_prop.minmax_decimal_places.max_value is None

assert col_prop.minmax_additional_format_len.min_value == 0
assert col_prop.minmax_additional_format_len.max_value == 0

assert str(col_prop) == (
"typename=FLOAT, align=right, padding_len=3, "
"integer_digits=(min=1, max=1), decimal_places=(min=None, max=None), "
"additional_format_len=(min=0, max=0)")

def test_normal_mix_0(self):
col_prop = ColumnDataProperty()
col_prop.update_header(DataProperty("abc"))

Expand Down
35 changes: 35 additions & 0 deletions test/test_property.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,16 @@ def bool_converter_test(value):
return "false value"


def datetime_converter_test_0(value):
return value.strftime("%Y-%m-%d %H:%M:%S%z")


def datetime_converter_test_1(value):
return value.strftime("%Y/%m/%d %H:%M:%S")


class Test_DataPeroperty_set_data:
DATATIME_DATA = datetime.datetime(2017, 1, 1, 0, 0, 0)

@pytest.mark.parametrize(
[
Expand Down Expand Up @@ -143,6 +152,32 @@ def test_special_bool(

assert dp.data == expected

@pytest.mark.parametrize(
["value", "datetime_converter", "is_convert", "expected"],
[
[
DATATIME_DATA, datetime_converter_test_0,
True, "2017-01-01 00:00:00",
],
[
"2017-01-01 00:00:00", datetime_converter_test_1,
True, "2017/01/01 00:00:00",
],
[
"2017-01-01", datetime_converter_test_0,
False, "2017-01-01",
],
]
)
def test_special_datetime(
self, value, datetime_converter, is_convert, expected):
dp = DataProperty(
value,
datetime_converter=datetime_converter,
is_convert=is_convert)

assert dp.data == expected

@pytest.mark.parametrize(
["value", "inf_value", "is_convert", "expected"],
[
Expand Down
2 changes: 1 addition & 1 deletion test/test_property_extractor.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ def test_normal(self, prop_extractor, header_list, value):
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.padding_len == 25
assert prop.padding_len == 24
assert is_nan(prop.decimal_places)
assert prop.format_str == "s"

Expand Down

0 comments on commit 5326f3b

Please sign in to comment.