Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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