@@ -60,7 +60,10 @@ def __init__(
6060 mode : Modes = Modes .DEFAULT ,
6161 url : Optional [str ] = None ,
6262 tags : Optional [List [str ]] = None ,
63- blacklisted_keys : Optional [List [str ]] = None ,
63+ blacklist_keys : List [str ] = [],
64+ blacklist_fn : Optional [
65+ Callable [[List [str ], Dict [str , Any ]], Dict [str , Any ]]
66+ ] = None ,
6467 ):
6568 if url is None :
6669 url = DEFAULT_URL
@@ -94,9 +97,8 @@ def __init__(
9497 if tags is not None :
9598 self .tags = tags
9699
97- self .blacklisted_keys : List [str ] = []
98- if blacklisted_keys is not None :
99- self .blacklisted_keys = blacklisted_keys
100+ self .blacklist_keys = blacklist_keys
101+ self .blacklist_fn = blacklist_fn
100102
101103 def wait (self ) -> None :
102104 concurrent .futures .wait (
@@ -124,44 +126,6 @@ def system_tags(self) -> List[str]:
124126
125127 return tags
126128
127- def _apply_blacklist_to_parameters (
128- self , parameters : Dict [str , Any ]
129- ) -> Dict [str , Any ]:
130- """
131- Applies blacklist filter to provided parameters and to 2nd layer of
132- inner dictionary parameter if exists.
133- """
134- whitelisted_parameters : Dict [str , Any ] = {}
135-
136- for key in parameters .keys ():
137- if key in self .blacklisted_keys :
138- continue
139-
140- key_as_dict : Optional [Dict [str , Any ]] = None
141- for d in dir (parameters [key ]):
142- if d == "keys" :
143- key_as_dict = parameters [key ]
144- break
145- elif d == "dict" : # Pydantic models support
146- key_as_dict = parameters [key ].dict ()
147- break
148-
149- if key_as_dict is not None :
150- try :
151- inner_dict : Dict [str , str ] = {}
152- for inner_key in key_as_dict .keys ():
153- if inner_key in self .blacklisted_keys :
154- continue
155- inner_dict [inner_key ] = str (key_as_dict [inner_key ])
156- whitelisted_parameters [key ] = inner_dict
157- continue
158- except Exception :
159- pass
160-
161- whitelisted_parameters [key ] = str (parameters [key ])
162-
163- return whitelisted_parameters
164-
165129 def _post_body (self , report : Report ) -> Dict [str , Any ]:
166130 return {
167131 "title" : report .title ,
@@ -429,12 +393,12 @@ def feature_report(
429393 tags : Optional [List [str ]] = None ,
430394 publish : bool = True ,
431395 wait : bool = False ,
432- blacklist_apply : bool = True ,
396+ apply_blacklist : bool = True ,
433397 ) -> Report :
434398 title = "Feature used: {name}" .format (name = feature_name )
435399
436- if blacklist_apply :
437- parameters = self ._apply_blacklist_to_parameters ( parameters )
400+ if apply_blacklist and self . blacklist_fn is not None :
401+ parameters = self .blacklist_fn ( self . blacklist_keys , parameters )
438402
439403 parameters_content = "\n " .join (
440404 [
0 commit comments