🐛 fix the conversion issue for long type on python 2. fix #67

This commit is contained in:
chfw 2019-03-19 07:35:45 +00:00
parent 29a7ffcbaa
commit 4034787f46
2 changed files with 21 additions and 3 deletions

View File

@ -180,7 +180,7 @@ ODS_WRITE_FORMAT_COVERSION = {
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 @@ ODS_VALUE_CONVERTERS = {
"boolean": ods_bool_value,
"timedelta": ods_timedelta_value,
"float": ods_float_value,
"throw_exception": throw_exception
"long": ods_float_value
}

View File

@ -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._compact import PY2
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)