Skip to content

Commit 7bf48ae

Browse files
authored
Merge pull request #56 from LeanderCS/48
48 | Update ArrayElementValidator and IsDataclassValidator
2 parents acb4629 + f85ccd0 commit 7bf48ae

30 files changed

+775
-73
lines changed

.github/workflows/publish-to-pypi.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,5 @@ jobs:
137137
path: dist
138138
merge-multiple: true
139139

140-
- run: ls -la dist
141-
142140
- name: Publish package to PyPI
143141
uses: pypa/gh-action-pypi-publish@release/v1

docs/source/changelog.rst

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,19 @@ Changelog
33

44
All notable changes to this project will be documented in this file.
55

6+
[0.5.4] - 2025-05-24
7+
--------------------
8+
9+
Added
10+
^^^^^
11+
- Added ``ArrayElementFilter`` to filter elements in an array against specific filter.
12+
13+
Changed
14+
^^^^^^^
15+
- Updated ``ArrayElementValidator`` to support validators directly.
16+
- Updated ``IsDataclassValidator`` to also check against their types, including nested dataclasses, lists, and dictionaries.
17+
18+
619
[0.5.3] - 2025-04-28
720
--------------------
821

docs/source/guides/frontend_validation.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@ Example implementation
1414
.. code-block:: python
1515
1616
from flask import Response, Flask
17-
from flask_inputfilter import InputFilter
18-
from flask_inputfilter.conditions import ExactlyOneOfCondition
19-
from flask_inputfilter.enums import RegexEnum
20-
from flask_inputfilter.filters import StringTrimFilter, ToIntegerFilter, ToNullFilter
21-
from flask_inputfilter.validators import IsIntegerValidator, IsStringValidator, RegexValidator
2217
2318
app = Flask(__name__)
2419

docs/source/index.rst

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,6 @@ Definition
5555

5656
.. code-block:: python
5757
58-
from flask_inputfilter import InputFilter
59-
from flask_inputfilter.conditions import ExactlyOneOfCondition
60-
from flask_inputfilter.enums import RegexEnum
61-
from flask_inputfilter.filters import StringTrimFilter, ToIntegerFilter, ToNullFilter
62-
from flask_inputfilter.validators import IsIntegerValidator, IsStringValidator, RegexValidator
63-
6458
class UpdateZipcodeInputFilter(InputFilter):
6559
def __init__(self):
6660
super().__init__()

docs/source/options/condition.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@ Example
1313

1414
.. code-block:: python
1515
16-
from flask_inputfilter import InputFilter
17-
from flask_inputfilter.conditions import OneOfCondition
18-
from flask_inputfilter.filters import StringTrimFilter
19-
from flask_inputfilter.validators import IsStringValidator
20-
2116
class TestInputFilter(InputFilter):
2217
def __init__(self):
2318
super().__init__()

docs/source/options/copy.rst

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ Basic Copy Integration
1919

2020
.. code-block:: python
2121
22-
from flask_inputfilter import InputFilter
23-
from flask_inputfilter.filters import StringSlugifyFilter
24-
2522
class MyInputFilter(InputFilter):
2623
def __init__(self):
2724
super().__init__()
2825
2926
self.add(
30-
"username"
27+
"username",
28+
validator=[
29+
IsStringValidator()
30+
]
3131
)
3232
3333
self.add(
@@ -52,9 +52,6 @@ The coping can also be used as a chain.
5252

5353
.. code-block:: python
5454
55-
from flask_inputfilter import InputFilter
56-
from flask_inputfilter.filters import StringSlugifyFilter, ToUpperFilter, ToLowerFilter
57-
5855
class MyInputFilter(InputFilter):
5956
def __init__(self):
6057
super().__init__()
@@ -80,3 +77,15 @@ The coping can also be used as a chain.
8077
copy="escapedUsername"
8178
filters=[ToLowerFilter()]
8279
)
80+
81+
# Example usage
82+
# Body: {"username": "Very Important User"}
83+
84+
@app.route("/test", methods=["GET"])
85+
@MyInputFilter.validate()
86+
def test_route():
87+
validated_data = g.validated_data
88+
89+
# Contains the same value as username but escaped eg. "very-important-user"
90+
# and in upper-case eg. "VERY-IMPORTANT-USER"
91+
print(validated_data["upperEscapedUsername"])

docs/source/options/deserialization.rst

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ into an instance of the model class, if there is a model class set.
2323

2424
.. code-block:: python
2525
26-
from flask_inputfilter import InputFilter
2726
from dataclasses import dataclass
2827
2928
@@ -50,7 +49,6 @@ You can also use deserialization in your Flask routes:
5049
.. code-block:: python
5150
5251
from flask import Flask, jsonify, g
53-
from flask_inputfilter import InputFilter
5452
5553
5654
class User:
@@ -82,7 +80,6 @@ You can also use deserialization outside of Flask routes:
8280
.. code-block:: python
8381
8482
from flask import Flask, jsonify, g
85-
from flask_inputfilter import InputFilter
8683
8784
8885
class User:

docs/source/options/external_api.rst

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ Basic External API Integration
5353

5454
.. code-block:: python
5555
56-
from flask_inputfilter import InputFilter
57-
5856
class MyInputFilter(InputFilter):
5957
def __init__(self):
6058
super().__init__()

docs/source/options/filter.rst

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ Example
1515

1616
.. code-block:: python
1717
18-
from flask_inputfilter import InputFilter
19-
from flask_inputfilter.filters import StringTrimFilter, ToLowerFilter
20-
2118
class TestInputFilter(InputFilter):
2219
def __init__(self):
2320
super().__init__()
@@ -39,6 +36,7 @@ Example
3936
Available Filters
4037
-----------------
4138

39+
- `ArrayElementFilter <#flask_inputfilter.filters.ArrayElementFilter>`_
4240
- `ArrayExplodeFilter <#flask_inputfilter.filters.ArrayExplodeFilter>`_
4341
- `Base64ImageDownscaleFilter <#flask_inputfilter.filters.Base64ImageDownscaleFilter>`_
4442
- `Base64ImageResizeFilter <#flask_inputfilter.filters.Base64ImageResizeFilter>`_

docs/source/options/special_validator.rst

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ Example
1212

1313
.. code-block:: python
1414
15-
from flask_inputfilter import InputFilter
16-
from flask_inputfilter.validators import NotValidator, IsIntegerValidator
17-
1815
class NotIntegerInputFilter(InputFilter):
1916
def __init__(self):
2017
super().__init__()

0 commit comments

Comments
 (0)