|
1 | 1 | """ |
2 | 2 | Various implementations of the blacklist functionality. |
3 | 3 | """ |
4 | | -from typing import Any, Dict, List, Optional |
| 4 | +from typing import Any, Callable, Dict, List, Optional |
5 | 5 |
|
6 | 6 |
|
7 | | -def filter_parameters_by_key( |
| 7 | +def generate_filter_parameters_by_key_fn( |
8 | 8 | blacklist_keys: List[str], |
9 | | - parameters: Dict[str, Any], |
10 | | -) -> Dict[str, Any]: |
| 9 | +) -> Callable[[Dict[str, Any]], Dict[str, Any]]: |
11 | 10 | """ |
12 | | - Applies blacklist filter to provided parameters and to 2nd layer of |
13 | | - inner dictionary parameter if exists. |
| 11 | + Generates a parameter filter function which filters out the parameters whose names are in the given |
| 12 | + list of blacklist_keys. |
| 13 | +
|
| 14 | + The comparison to blacklist_keys is case insensitive. |
14 | 15 | """ |
15 | | - whitelisted_parameters: Dict[str, Any] = {} |
16 | | - |
17 | | - for key in parameters.keys(): |
18 | | - if key.lower() in blacklist_keys: |
19 | | - continue |
20 | | - |
21 | | - key_as_dict: Optional[Dict[str, Any]] = None |
22 | | - for d in dir(parameters[key]): |
23 | | - if d == "keys": |
24 | | - key_as_dict = parameters[key] |
25 | | - break |
26 | | - elif d == "dict": # Pydantic models support |
27 | | - key_as_dict = parameters[key].dict() |
28 | | - break |
29 | | - |
30 | | - if key_as_dict is not None: |
31 | | - try: |
32 | | - inner_dict: Dict[str, str] = {} |
33 | | - for inner_key in key_as_dict.keys(): |
34 | | - if inner_key.lower() in blacklist_keys: |
35 | | - continue |
36 | | - inner_dict[inner_key] = str(key_as_dict[inner_key]) |
37 | | - whitelisted_parameters[key] = inner_dict |
| 16 | + |
| 17 | + lowercase_blacklist_keys = [key.lower() for key in blacklist_keys] |
| 18 | + |
| 19 | + def filter_parameters_by_key( |
| 20 | + parameters: Dict[str, Any], |
| 21 | + ) -> Dict[str, Any]: |
| 22 | + """ |
| 23 | + Applies blacklist filter to provided parameters and to 2nd layer of |
| 24 | + inner dictionary parameter if exists. |
| 25 | + """ |
| 26 | + whitelisted_parameters: Dict[str, Any] = {} |
| 27 | + |
| 28 | + for key in parameters.keys(): |
| 29 | + if key.lower() in lowercase_blacklist_keys: |
38 | 30 | continue |
39 | | - except Exception: |
40 | | - pass |
41 | 31 |
|
42 | | - whitelisted_parameters[key] = str(parameters[key]) |
| 32 | + key_as_dict: Optional[Dict[str, Any]] = None |
| 33 | + for d in dir(parameters[key]): |
| 34 | + if d == "keys": |
| 35 | + key_as_dict = parameters[key] |
| 36 | + break |
| 37 | + elif d == "dict": # Pydantic models support |
| 38 | + key_as_dict = parameters[key].dict() |
| 39 | + break |
| 40 | + |
| 41 | + if key_as_dict is not None: |
| 42 | + try: |
| 43 | + inner_dict: Dict[str, str] = {} |
| 44 | + for inner_key in key_as_dict.keys(): |
| 45 | + if inner_key.lower() in lowercase_blacklist_keys: |
| 46 | + continue |
| 47 | + inner_dict[inner_key] = str(key_as_dict[inner_key]) |
| 48 | + whitelisted_parameters[key] = inner_dict |
| 49 | + continue |
| 50 | + except Exception: |
| 51 | + pass |
| 52 | + |
| 53 | + whitelisted_parameters[key] = str(parameters[key]) |
| 54 | + |
| 55 | + return whitelisted_parameters |
43 | 56 |
|
44 | | - return whitelisted_parameters |
| 57 | + return filter_parameters_by_key |
0 commit comments