From 4034787f46dfabf51bd8487add8b569df12234ac Mon Sep 17 00:00:00 2001 From: chfw Date: Tue, 19 Mar 2019 07:35:45 +0000 Subject: [PATCH] :bug: fix the conversion issue for long type on python 2. fix #67 --- pyexcel_io/service.py | 6 +++--- tests/test_service.py | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/pyexcel_io/service.py b/pyexcel_io/service.py index 2b7710c..d5ffc63 100644 --- a/pyexcel_io/service.py +++ b/pyexcel_io/service.py @@ -180,7 +180,7 @@ def boolean_value(value): if PY2: ODS_WRITE_FORMAT_COVERSION[unicode] = "string" # noqa: F821 - ODS_WRITE_FORMAT_COVERSION[long] = "throw_exception" # noqa: F821 + ODS_WRITE_FORMAT_COVERSION[long] = "long" # noqa: F821 VALUE_CONVERTERS = { @@ -198,7 +198,7 @@ def throw_exception(value): def ods_float_value(value): - if int(value) > int(constants.MAX_INTEGER): + if value > constants.MAX_INTEGER: raise exceptions.IntegerAccuracyLossError("%s is too big" % value) return value @@ -234,7 +234,7 @@ def ods_timedelta_value(cell): "boolean": ods_bool_value, "timedelta": ods_timedelta_value, "float": ods_float_value, - "throw_exception": throw_exception + "long": ods_float_value } diff --git a/tests/test_service.py b/tests/test_service.py index 10b486e..60e5f1b 100644 --- a/tests/test_service.py +++ b/tests/test_service.py @@ -1,3 +1,4 @@ +import sys from nose.tools import eq_, raises from pyexcel_io.service import date_value, time_value from pyexcel_io.service import detect_int_value @@ -9,6 +10,8 @@ from pyexcel_io.exceptions import IntegerAccuracyLossError from nose import SkipTest +PY2 = sys.version[0] == 2 + def test_date_util_parse(): value = "2015-08-17T19:20:00" @@ -110,6 +113,21 @@ def test_big_int_value(): ods_float_value(1000000000000000) +def test_max_value_on_python_2(): + if PY2: + ods_float_value(long(999999999999999)) + else: + raise SkipTest("No long in python 3") + + +@raises(IntegerAccuracyLossError) +def test_really_long_value_on_python2(): + if PY2: + ods_float_value(long(999999999999999+1)) + else: + raise SkipTest("No long in python 3") + + @raises(IntegerAccuracyLossError) def test_throw_exception(): throw_exception(1000000000000000)