Skip to content

Commit

Permalink
Fix required support for false and 0 (#32)
Browse files Browse the repository at this point in the history
  • Loading branch information
codingedward authored Mar 1, 2021
1 parent 936cafd commit d9aa948
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 48 deletions.
18 changes: 9 additions & 9 deletions flask_sieve/rules_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,10 +246,6 @@ def validate_extension(self, value, params, **kwargs):
def validate_file(value, **kwargs):
return isinstance(value, FileStorage)

@staticmethod
def validate_empty(value, **kwargs):
return value == ''

def validate_filled(self, value, attribute, nullable, **kwargs):
if self.validate_present(attribute):
return self.validate_required(value, attribute, nullable)
Expand Down Expand Up @@ -368,23 +364,23 @@ def validate_json(self, value, **kwargs):

def validate_lt(self, value, params, **kwargs):
self._assert_params_size(size=1, params=params, rule='lt')
if value == '':
if self._is_value_empty(value):
return False
value = self._get_size(value)
lower = self._get_size(self._attribute_value(params[0]))
return value < lower

def validate_lte(self, value, params, **kwargs):
self._assert_params_size(size=1, params=params, rule='lte')
if value == '':
if self._is_value_empty(value):
return False
value = self._get_size(value)
lower = self._get_size(self._attribute_value(params[0]))
return value <= lower

def validate_max(self, value, params, **kwargs):
self._assert_params_size(size=1, params=params, rule='max')
if value == '':
if self._is_value_empty(value):
return False
value = self._get_size(value)
upper = self._get_size(params[0])
Expand Down Expand Up @@ -437,7 +433,7 @@ def validate_regex(self, value, params, **kwargs):
return re.match(params[0], value)

def validate_required(self, value, attribute, nullable, **kwargs):
if not value and not nullable:
if (not value and value != False and value != 0) and not nullable:
return False
return self.validate_present(attribute)

Expand Down Expand Up @@ -636,7 +632,7 @@ def _get_type_from_value(self, value):
return 'array'
elif self.validate_file(value):
return 'file'
elif self.validate_empty(value):
elif self._is_value_empty(value):
return 'empty'
return 'string'

Expand All @@ -655,6 +651,10 @@ def _attribute_value(self, attribute):
request_param = request_param[accessor]
return request_param

@staticmethod
def _is_value_empty(value, **kwargs):
return (not value and value != 0)

@staticmethod
def _assert_params_size(size, params, rule):
if size > len(params):
Expand Down
67 changes: 28 additions & 39 deletions tests/test_rules_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,14 @@ def test_validates_lt(self):
rules={'field': ['lt:field_2']},
request={'field': 10, 'field_2': 1}
)
self.assert_fails(
rules={'field': ['lt:field_2']},
request={'field': None, 'field_2': 1}
)
self.assert_fails(
rules={'field': ['lt:field_2']},
request={'field': '', 'field_2': 1}
)

def test_validates_lte(self):
self.assert_passes(
Expand All @@ -563,6 +571,10 @@ def test_validates_lte(self):
rules={'field': ['lte:field_2']},
request={'field': 10, 'field_2': 1}
)
self.assert_fails(
rules={'field': ['lte:field_2']},
request={'field': None, 'field_2': 1}
)

def test_validates_max(self):
self.assert_passes(
Expand All @@ -573,6 +585,14 @@ def test_validates_max(self):
rules={'field': ['max:10']},
request={'field': 30}
)
self.assert_passes(
rules={'field': ['max:10']},
request={'field': 0}
)
self.assert_fails(
rules={'field': ['max:10']},
request={'field': None}
)

def test_validates_mime_types(self):
self.assert_passes(
Expand Down Expand Up @@ -685,6 +705,14 @@ def test_validates_required(self):
rules={'field': ['required']},
request={'field': None}
)
self.assert_passes(
rules={'field': ['required']},
request={'field': False}
)
self.assert_passes(
rules={'field': ['required']},
request={'field': 0}
)

def test_validates_required_if(self):
self.assert_passes(
Expand Down Expand Up @@ -935,45 +963,6 @@ def test_allows_nullable_fields(self):
request={}
)

def test_validates_sometimes(self):
self.assert_passes(
rules={'number': ['sometimes', 'max:5']},
request={}
)
self.assert_passes(
rules={'number': ['sometimes', 'max:5']},
request={'number': 2}
)
self.assert_fails(
rules={'number': ['sometimes', 'max:5']},
request={'number': ''}
)
self.assert_fails(
rules={'number': ['sometimes', 'max:5']},
request={'number': 10}
)
self.assert_passes(
rules={
'zipCode': ['sometimes', 'numeric'],
'website': ['sometimes', 'url']
},
request={}
)
self.assert_passes(
rules={
'zipCode': ['sometimes', 'numeric'],
'website': ['sometimes', 'url']
},
request={'website': 'https://google.com'}
)
self.assert_fails(
rules={
'zipCode': ['sometimes', 'numeric'],
'website': ['sometimes', 'url']
},
request={'website': 'ogle.com'}
)


def test_validates_uuid(self):
self.assert_passes(
Expand Down

0 comments on commit d9aa948

Please sign in to comment.