Skip to content

Commit

Permalink
Big integer support for Integer widget (django-import-export#788)
Browse files Browse the repository at this point in the history
Signed-off-by: José Luis Di Biase <josx@interorganic.com.ar>
  • Loading branch information
josx committed Nov 19, 2021
1 parent 27af318 commit 0a377f9
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 4 deletions.
1 change: 1 addition & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Changelog
2.7.0-dev (unreleased)
---------

- Big integer support for Integer widget (#788)
- Run compilemessages command to keep .mo files in sync (#1299)
- Add ability to rollback the import on validation error (#1339)
- Fix missing migration on example app (#1346)
Expand Down
2 changes: 1 addition & 1 deletion import_export/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ class IntegerWidget(NumberWidget):
def clean(self, value, row=None, *args, **kwargs):
if self.is_empty(value):
return None
return int(float(value))
return int(Decimal(value))


class DecimalWidget(NumberWidget):
Expand Down
5 changes: 3 additions & 2 deletions tests/core/tests/test_resources.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import json
import decimal
from collections import OrderedDict
from copy import deepcopy
from datetime import date
Expand Down Expand Up @@ -625,8 +626,8 @@ def test_import_data_error_saving_model(self):
self.assertTrue(result.has_errors())
self.assertTrue(result.rows[0].errors)
actual = result.rows[0].errors[0].error
self.assertIsInstance(actual, ValueError)
self.assertIn("could not convert string to float", str(actual))
self.assertIsInstance(actual, (ValueError, decimal.InvalidOperation))
self.assertIn(str(actual), {"could not convert string to float", "[<class 'decimal.ConversionSyntax'>]"})

def test_import_data_delete(self):

Expand Down
6 changes: 5 additions & 1 deletion tests/core/tests/test_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -255,10 +255,14 @@ class IntegerWidgetTest(TestCase):
def setUp(self):
self.value = 0
self.widget = widgets.IntegerWidget()
self.bigintvalue = 163371428940853127

def test_clean_integer_zero(self):
self.assertEqual(self.widget.clean(0), self.value)

def test_clean_big_integer(self):
self.assertEqual(self.widget.clean(163371428940853127), self.bigintvalue)

def test_clean_string_zero(self):
self.assertEqual(self.widget.clean("0"), self.value)
self.assertEqual(self.widget.clean("0.0"), self.value)
Expand Down Expand Up @@ -421,4 +425,4 @@ def test_clean_returns_empty_list_for_empty_arg(self):
def test_render(self):
v = ["a", "b", "c"]
s = "a,b,c"
self.assertEqual(s, self.widget.render(v))
self.assertEqual(s, self.widget.render(v))

0 comments on commit 0a377f9

Please sign in to comment.