Skip to content

Commit 8e72038

Browse files
committed
12 | Increase test coverage for InputFilter
1 parent 92f42bd commit 8e72038

File tree

3 files changed

+284
-72
lines changed

3 files changed

+284
-72
lines changed

CHAGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ All notable changes to this project will be documented in this file.
99

1010
- Workflow to run tests on all supported python versions. [Check it out](.github/workflows/test_env.yaml)
1111
- Added more test coverage for validators and filters.
12-
- Added tracking of coverage in tests.
12+
- Added tracking of coverage in tests. [Check it out](https://coveralls.io/github/LeanderCS/flask-inputfilter)
13+
- New functionality for global filters and validators in InputFilters.
14+
- New functionality to define custom supported methods.
1315

1416
### Validator
1517

flask_inputfilter/InputFilter.py

Lines changed: 13 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ class InputFilter:
1616
Base class for input filters.
1717
"""
1818

19-
def __init__(self) -> None:
19+
def __init__(self, methods: Optional[List[str]]=None) -> None:
20+
self.methods = methods or ["GET", "POST", "PATCH", "PUT", "DELETE"]
2021
self.fields = {}
2122
self.conditions = []
2223
self.global_filters = []
@@ -82,9 +83,6 @@ def _applyFilters(self, field_name: str, value: Any) -> Any:
8283

8384
field = self.fields.get(field_name)
8485

85-
if not field:
86-
return value
87-
8886
for filter_ in field["filters"]:
8987
value = filter_.apply(value)
9088

@@ -100,9 +98,6 @@ def _validateField(self, field_name: str, value: Any) -> None:
10098

10199
field = self.fields.get(field_name)
102100

103-
if not field:
104-
return
105-
106101
for validator in field["validators"]:
107102
validator.validate(value)
108103

@@ -154,38 +149,27 @@ def _callExternalApi(
154149
return result
155150

156151
@staticmethod
157-
def __replacePlaceholders(url: str, validated_data: dict) -> str:
152+
def __replacePlaceholders(value: str, validated_data: dict) -> str:
158153
"""
159-
Ersetzt alle Platzhalter in der URL, die mit {{}} definiert sind,
160-
durch die entsprechenden Werte aus den Parametern.
154+
Replace all placeholders, marked with '{{ }}' in value with the corresponding
155+
values from validated_data.
161156
"""
162157

163158
return re.sub(
164159
r"{{(.*?)}}",
165160
lambda match: str(validated_data.get(match.group(1))),
166-
url,
161+
value,
167162
)
168163

169-
@staticmethod
170164
def __replacePlaceholdersInParams(
171-
params: dict, validated_data: dict
165+
self, params: dict, validated_data: dict
172166
) -> dict:
173167
"""
174168
Replace all placeholders in params with the
175169
corresponding values from validated_data.
176170
"""
177-
replaced_params = {}
178-
for key, value in params.items():
179-
if isinstance(value, str):
180-
replaced_value = re.sub(
181-
r"{{(.*?)}}",
182-
lambda match: str(validated_data.get(match.group(1), "")),
183-
value,
184-
)
185-
replaced_params[key] = replaced_value
186-
else:
187-
replaced_params[key] = value
188-
return replaced_params
171+
return {key: self.__replacePlaceholders(value, validated_data) if isinstance(value, str) else value
172+
for key, value in params.items()}
189173

190174
def validateData(
191175
self, data: Dict[str, Any], kwargs: Dict[str, Any] = None
@@ -295,31 +279,19 @@ def decorator(
295279
def wrapper(
296280
*args, **kwargs
297281
) -> Union[Response, Tuple[Any, Dict[str, Any]]]:
298-
if request.method == "GET":
299-
data = request.args
300-
301-
elif request.method in ["POST", "PUT", "DELETE"]:
302-
if not request.is_json:
303-
data = request.args
304-
305-
else:
306-
data = request.json
307-
308-
else:
282+
if request.method not in cls().methods:
309283
return Response(
310-
status=415, response="Unsupported method Type"
284+
status=405, response="Method Not Allowed"
311285
)
312286

313-
inputFilter = cls()
287+
data = request.json if request.is_json else request.args
314288

315289
try:
316-
g.validated_data = inputFilter.validateData(data, kwargs)
290+
g.validated_data = cls().validateData(data, kwargs)
317291

318292
except ValidationError as e:
319293
return Response(status=400, response=str(e))
320294

321295
return f(*args, **kwargs)
322-
323296
return wrapper
324-
325297
return decorator

0 commit comments

Comments
 (0)