Skip to content

Commit 5bfd4b4

Browse files
committed
Validate list items individually, and use new min/max list len option
1 parent a488847 commit 5bfd4b4

File tree

3 files changed

+47
-37
lines changed

3 files changed

+47
-37
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ All parameters can have default values, and automatic validation.
5858
* default: any, Specifies the default value for the field.
5959
* min_length: int, Specifies the minimum character length for a string input
6060
* max_length: int, Specifies the maximum character length for a string input
61+
* min_list_length: int, Specifies the minimum number of elements in a list
62+
* max_list_length: int, Specifies the maximum number of elements in a list
6163
* min_int: int, Specifies the minimum number for an int input
6264
* max_int: int, Specifies the maximum number for an int input
6365
* whitelist: str, A string containing allowed characters for the value

flask_parameter_validation/parameter_types/parameter.py

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ def __init__(
1616
default=None, # any: default parameter value
1717
min_length=None, # int: min parameter length
1818
max_length=None, # int: max parameter length
19+
min_list_length=None, # int: min number of items in list
20+
max_list_length=None, # int: max number of items in list
1921
min_int=None, # int: min number (if val is int)
2022
max_int=None, # int: max number (if val is int)
2123
whitelist=None, # str: character whitelist
@@ -30,43 +32,49 @@ def __init__(
3032
self.blacklist = blacklist
3133

3234
# Validator
33-
def validate(self, value):
34-
# Min length
35-
if self.min_length is not None:
36-
if len(value) < self.min_length:
37-
raise ValidationError(
38-
f"must be at least {self.min_length} characters."
39-
)
40-
# Max length
41-
if self.max_length is not None:
42-
if len(value) > self.max_length:
43-
raise ValidationError(
44-
f"must be a maximum of {self.max_length} characters."
45-
)
46-
# Whitelist
47-
if self.whitelist is not None:
48-
for char in str(value):
49-
if char not in self.whitelist:
35+
def validate(self, values):
36+
# Turn value into list if not already
37+
if type(values) is not list:
38+
values = [values]
39+
40+
# Check all values are valid
41+
for value in values:
42+
# Min length
43+
if self.min_length is not None:
44+
if len(value) < self.min_length:
45+
raise ValidationError(
46+
f"must be at least {self.min_length} characters."
47+
)
48+
# Max length
49+
if self.max_length is not None:
50+
if len(value) > self.max_length:
51+
raise ValidationError(
52+
f"must be a maximum of {self.max_length} characters."
53+
)
54+
# Whitelist
55+
if self.whitelist is not None:
56+
for char in str(value):
57+
if char not in self.whitelist:
58+
raise ValidationError(
59+
f"must contain only characters: {self.whitelist}"
60+
)
61+
# Blacklist
62+
if self.blacklist is not None:
63+
for bad in self.blacklist:
64+
if bad in str(value):
65+
raise ValidationError(
66+
f"must not contain: {bad}"
67+
)
68+
# Min int
69+
if self.min_int is not None:
70+
if int(value) < self.min_int:
5071
raise ValidationError(
51-
f"must contain only characters: {self.whitelist}"
72+
f"must be larger than {self.min_int}."
5273
)
53-
# Blacklist
54-
if self.blacklist is not None:
55-
for bad in self.blacklist:
56-
if bad in str(value):
74+
# Max int
75+
if self.max_int is not None:
76+
if int(value) > self.max_int:
5777
raise ValidationError(
58-
f"must not contain: {bad}"
78+
f"must be smaller than {self.max_int}."
5979
)
60-
# Min int
61-
if self.min_int is not None:
62-
if int(value) < self.min_int:
63-
raise ValidationError(
64-
f"must be larger than {self.min_int}."
65-
)
66-
# Max int
67-
if self.max_int is not None:
68-
if int(value) > self.max_int:
69-
raise ValidationError(
70-
f"must be smaller than {self.max_int}."
71-
)
72-
return True
80+
return True

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
setup(
1313
name='Flask-Parameter-Validation',
14-
version='1.0.22',
14+
version='1.0.23',
1515
url='https://github.com/Ge0rg3/Flask-Parameter-Validation',
1616
license='MIT',
1717
author='George Omnet',

0 commit comments

Comments
 (0)