From fed58f3920d8d2cf9b3f4e337231054f8583253f Mon Sep 17 00:00:00 2001 From: Konstantin Gukov Date: Tue, 23 Feb 2016 22:59:20 +0500 Subject: [PATCH] Added support for long values in FloatFields --- mongoengine/fields.py | 10 +++++++--- tests/fields/fields.py | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index ba505fb5..edf6515b 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -260,10 +260,14 @@ class FloatField(BaseField): return value def validate(self, value): - if isinstance(value, int): - value = float(value) + if isinstance(value, (int, long)): + try: + value = float(value) + except OverflowError: + self.error('The value is too large to be converted to float') + if not isinstance(value, float): - self.error('FloatField only accepts float values') + self.error('FloatField only accepts float, int and long values') if self.min_value is not None and value < self.min_value: self.error('Float value is too small') diff --git a/tests/fields/fields.py b/tests/fields/fields.py index 757f66a8..3b048094 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -399,20 +399,36 @@ class FieldTest(unittest.TestCase): class Person(Document): height = FloatField(min_value=0.1, max_value=3.5) + class BigPerson(Document): + height = FloatField() + person = Person() person.height = 1.89 person.validate() person.height = '2.0' self.assertRaises(ValidationError, person.validate) + person.height = 0.01 self.assertRaises(ValidationError, person.validate) + person.height = 4.0 self.assertRaises(ValidationError, person.validate) person_2 = Person(height='something invalid') self.assertRaises(ValidationError, person_2.validate) + big_person = BigPerson() + + big_person.height = 1L + big_person.validate() + + big_person.height = 2 ** 500 + big_person.validate() + + big_person.height = 2 ** 100000 # Too big for a float value + self.assertRaises(ValidationError, big_person.validate) + def test_decimal_validation(self): """Ensure that invalid values cannot be assigned to decimal fields. """