Skip to content

Commit c94b7ca

Browse files
committed
Add basic template InputFilter
1 parent 0dc58e2 commit c94b7ca

File tree

6 files changed

+228
-0
lines changed

6 files changed

+228
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from .authentication import AuthenticationInputFilter
2+
from .contact_form import ContactFormInputFilter
3+
from .file_upload import FileUploadInputFilter
4+
from .pagination import PaginationInputFilter
5+
from .registration import RegistrationInputFilter
6+
7+
__all__ = [
8+
"AuthenticationInputFilter",
9+
"ContactFormInputFilter",
10+
"FileUploadInputFilter",
11+
"PaginationInputFilter",
12+
"RegistrationInputFilter",
13+
]
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from __future__ import annotations
2+
3+
from flask_inputfilter import InputFilter
4+
from flask_inputfilter.declarative import field
5+
from flask_inputfilter.enums import RegexEnum
6+
from flask_inputfilter.filters import (
7+
StringTrimFilter,
8+
ToBooleanFilter,
9+
ToLowerFilter,
10+
)
11+
from flask_inputfilter.validators import (
12+
IsBooleanValidator,
13+
IsStringValidator,
14+
LengthValidator,
15+
RegexValidator,
16+
)
17+
18+
19+
class AuthenticationInputFilter(InputFilter):
20+
email = field(
21+
required=True,
22+
filters=[StringTrimFilter(), ToLowerFilter()],
23+
validators=[
24+
IsStringValidator(),
25+
RegexValidator(RegexEnum.EMAIL.value),
26+
],
27+
)
28+
29+
password = field(
30+
required=True,
31+
validators=[IsStringValidator(), LengthValidator(min_length=8)],
32+
)
33+
34+
remember_me = field(
35+
required=False,
36+
default=False,
37+
filters=[ToBooleanFilter()],
38+
validators=[IsBooleanValidator()],
39+
)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from __future__ import annotations
2+
3+
from flask_inputfilter import InputFilter
4+
from flask_inputfilter.declarative import field
5+
from flask_inputfilter.enums import RegexEnum
6+
from flask_inputfilter.filters import StringTrimFilter, ToLowerFilter
7+
from flask_inputfilter.validators import (
8+
IsStringValidator,
9+
LengthValidator,
10+
RegexValidator,
11+
)
12+
13+
14+
class ContactFormInputFilter(InputFilter):
15+
name = field(
16+
required=True,
17+
filters=[StringTrimFilter()],
18+
validators=[
19+
IsStringValidator(),
20+
LengthValidator(min_length=2, max_length=100),
21+
],
22+
)
23+
24+
email = field(
25+
required=True,
26+
filters=[StringTrimFilter(), ToLowerFilter()],
27+
validators=[
28+
IsStringValidator(),
29+
RegexValidator(RegexEnum.EMAIL.value),
30+
],
31+
)
32+
33+
subject = field(
34+
required=True,
35+
filters=[StringTrimFilter()],
36+
validators=[
37+
IsStringValidator(),
38+
LengthValidator(min_length=5, max_length=200),
39+
],
40+
)
41+
42+
message = field(
43+
required=True,
44+
filters=[StringTrimFilter()],
45+
validators=[
46+
IsStringValidator(),
47+
LengthValidator(min_length=10, max_length=1000),
48+
],
49+
)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from __future__ import annotations
2+
3+
from flask_inputfilter import InputFilter
4+
from flask_inputfilter.declarative import field
5+
from flask_inputfilter.filters import StringTrimFilter
6+
from flask_inputfilter.validators import (
7+
IsBase64ImageValidator,
8+
IsStringValidator,
9+
LengthValidator,
10+
RegexValidator,
11+
)
12+
13+
14+
class FileUploadInputFilter(InputFilter):
15+
file = field(required=True, validators=[IsBase64ImageValidator()])
16+
17+
filename = field(
18+
required=True,
19+
filters=[StringTrimFilter()],
20+
validators=[
21+
IsStringValidator(),
22+
LengthValidator(min_length=1, max_length=255),
23+
RegexValidator(r"^[a-zA-Z0-9._-]+$"),
24+
],
25+
)
26+
27+
description = field(
28+
required=False,
29+
default="",
30+
filters=[StringTrimFilter()],
31+
validators=[IsStringValidator(), LengthValidator(max_length=500)],
32+
)
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from __future__ import annotations
2+
3+
from flask_inputfilter import InputFilter
4+
from flask_inputfilter.declarative import field
5+
from flask_inputfilter.filters import (
6+
StringTrimFilter,
7+
ToIntegerFilter,
8+
ToLowerFilter,
9+
)
10+
from flask_inputfilter.validators import (
11+
InArrayValidator,
12+
IsIntegerValidator,
13+
IsStringValidator,
14+
RangeValidator,
15+
)
16+
17+
18+
class PaginationInputFilter(InputFilter):
19+
page = field(
20+
required=False,
21+
default=1,
22+
filters=[ToIntegerFilter()],
23+
validators=[IsIntegerValidator(), RangeValidator(min_value=1)],
24+
)
25+
26+
per_page = field(
27+
required=False,
28+
default=20,
29+
filters=[ToIntegerFilter()],
30+
validators=[
31+
IsIntegerValidator(),
32+
RangeValidator(min_value=1, max_value=100),
33+
],
34+
)
35+
36+
sort_by = field(
37+
required=False,
38+
filters=[StringTrimFilter()],
39+
validators=[IsStringValidator()],
40+
)
41+
42+
order = field(
43+
required=False,
44+
default="asc",
45+
filters=[StringTrimFilter(), ToLowerFilter()],
46+
validators=[IsStringValidator(), InArrayValidator(["asc", "desc"])],
47+
)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from __future__ import annotations
2+
3+
from flask_inputfilter import InputFilter
4+
from flask_inputfilter.conditions import EqualCondition
5+
from flask_inputfilter.declarative import field
6+
from flask_inputfilter.enums import RegexEnum
7+
from flask_inputfilter.filters import (
8+
StringTrimFilter,
9+
ToBooleanFilter,
10+
ToLowerFilter,
11+
)
12+
from flask_inputfilter.validators import (
13+
IsBooleanValidator,
14+
IsStringValidator,
15+
LengthValidator,
16+
RegexValidator,
17+
)
18+
19+
20+
class RegistrationInputFilter(InputFilter):
21+
email = field(
22+
required=True,
23+
filters=[StringTrimFilter(), ToLowerFilter()],
24+
validators=[
25+
IsStringValidator(),
26+
RegexValidator(RegexEnum.EMAIL.value),
27+
],
28+
)
29+
30+
password = field(
31+
required=True,
32+
validators=[
33+
IsStringValidator(),
34+
LengthValidator(min_length=8, max_length=128),
35+
],
36+
)
37+
38+
password_confirmation = field(
39+
required=True, validators=[IsStringValidator()]
40+
)
41+
42+
terms_accepted = field(
43+
required=True,
44+
filters=[ToBooleanFilter()],
45+
validators=[IsBooleanValidator()],
46+
)
47+
48+
_conditions = [EqualCondition("password", "password_confirmation")]

0 commit comments

Comments
 (0)