Skip to content

Commit 543340c

Browse files
authored
Merge pull request #50 from jackcvr/master
refix issue #48: field_attribute validation
2 parents 436cdf5 + 0960e7f commit 543340c

File tree

4 files changed

+29
-12
lines changed

4 files changed

+29
-12
lines changed

src/fireo/fields/base_field.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,9 @@ def get_value(self, val, ignore_required=False, ignore_default=False):
117117
-------
118118
DB value
119119
"""
120-
v = self.field_attribute.parse(val, ignore_required, ignore_default)
121-
return self.db_value(v)
120+
if val is not None or not ignore_required or self.field_attribute.default:
121+
val = self.field_attribute.parse(val, ignore_required, ignore_default)
122+
return self.db_value(val)
122123

123124
def db_value(self, val):
124125
"""How the value is going to save in firestore

src/fireo/fields/number_field.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@ def attr_range(self, attr_val, field_val):
3838

3939
def attr_int_only(self, attr_val, field_val):
4040
"""Method for attribute int_only"""
41-
if attr_val and field_val is not None and type(field_val) is not int:
41+
if attr_val and type(field_val) is not int:
4242
raise errors.InvalidFieldType(f'Invalid field type. Field "{self.name}" expected {int} type, '
4343
f'got {type(field_val)}')
4444
return field_val
4545

4646
def attr_float_only(self, attr_val, field_val):
4747
"""Method for attribute float_only"""
48-
if attr_val and field_val is not None and type(field_val) is not float:
48+
if attr_val and type(field_val) is not float:
4949
raise errors.InvalidFieldType(f'Invalid field type. Field "{self.name}" expected {float} type, '
5050
f'got {type(field_val)}')
5151
return field_val

src/fireo/fields/text_field.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ def attr_format(self, attr_val, field_val):
3131

3232
def attr_max_length(self, attr_val, field_val):
3333
"""Method for attribute max_length"""
34-
if field_val is None:
35-
return field_val
36-
3734
return field_val[:attr_val]
3835

3936
def attr_to_lowercase(self, attr_val, field_val):
Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,40 @@
1+
import pytest
2+
13
from fireo.models import Model
24
from fireo.fields.text_field import TextField
35
from fireo.fields.number_field import NumberField
6+
from fireo.fields.errors import NumberRangeError
47

58

69
def test_fix_issue_48():
710
class Person(Model):
811
name = TextField(required=True, max_length=10)
9-
type = NumberField(required=True, int_only=True)
10-
12+
type = NumberField(required=True, int_only=True, range=(1, 2))
1113

12-
person = Person.collection.create(name="test", type=1)
14+
# test TextField
15+
person = Person.collection.create(name='test', type=1)
1316

1417
assert person.name == 'test'
1518
assert person.type == 1
1619

17-
person.type = 123
20+
person.type = 2
1821
person.update()
1922

2023
assert person.name == 'test'
21-
assert person.type == 123
24+
assert person.type == 2
25+
26+
# test NumberField
27+
person = Person.collection.create(name='test', type=1)
28+
29+
assert person.name == 'test'
30+
assert person.type == 1
31+
32+
person.name = 'test2'
33+
person.update()
34+
35+
assert person.name == 'test2'
36+
assert person.type == 1
37+
38+
person.type = 3
39+
with pytest.raises(NumberRangeError):
40+
person.update()

0 commit comments

Comments
 (0)