Skip to content

Commit f23f476

Browse files
Removing unnecessary code
1 parent cba411e commit f23f476

File tree

3 files changed

+65
-34
lines changed

3 files changed

+65
-34
lines changed

aws_lambda_powertools/utilities/data_masking/base.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -450,9 +450,6 @@ def _call_action(
450450
return fields[field_name]
451451

452452
def _normalize_data_to_parse(self, fields: list, data: str | dict) -> dict:
453-
if not fields:
454-
raise ValueError("No fields specified.")
455-
456453
if isinstance(data, str):
457454
# Parse JSON string as dictionary
458455
data_parsed = self.json_deserializer(data)

aws_lambda_powertools/utilities/data_masking/provider/base.py

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def erase(
8989
return DATA_MASKING_STRING
9090

9191
if isinstance(data, (str, int, float)):
92-
result = self._mask_primitive(str(data), dynamic_mask, custom_mask, regex_pattern, mask_format, **kwargs)
92+
result = self._mask_primitive(str(data), dynamic_mask, custom_mask, regex_pattern, mask_format)
9393
elif isinstance(data, dict):
9494
result = self._mask_dict(
9595
data,
@@ -98,7 +98,6 @@ def erase(
9898
regex_pattern,
9999
mask_format,
100100
masking_rules,
101-
**kwargs,
102101
)
103102
elif isinstance(data, (list, tuple, set)):
104103
result = self._mask_iterable(
@@ -108,7 +107,6 @@ def erase(
108107
regex_pattern,
109108
mask_format,
110109
masking_rules,
111-
**kwargs,
112110
)
113111

114112
return result
@@ -120,14 +118,13 @@ def _mask_primitive(
120118
custom_mask: str | None,
121119
regex_pattern: str | None,
122120
mask_format: str | None,
123-
**kwargs,
124121
) -> str:
125122
if regex_pattern and mask_format:
126123
return self._regex_mask(data, regex_pattern, mask_format)
127124
elif custom_mask:
128125
return self._pattern_mask(data, custom_mask)
129-
elif dynamic_mask:
130-
return self._custom_erase(data)
126+
127+
return self._custom_erase(data)
131128

132129
def _mask_dict(
133130
self,
@@ -137,23 +134,18 @@ def _mask_dict(
137134
regex_pattern: str | None,
138135
mask_format: str | None,
139136
masking_rules: dict | None,
140-
**kwargs,
141137
) -> dict:
142-
if masking_rules:
143-
return self._apply_masking_rules(data, masking_rules)
144-
else:
145-
return {
146-
k: self.erase(
147-
v,
148-
dynamic_mask=dynamic_mask,
149-
custom_mask=custom_mask,
150-
regex_pattern=regex_pattern,
151-
mask_format=mask_format,
152-
masking_rules=masking_rules,
153-
**kwargs,
154-
)
155-
for k, v in data.items()
156-
}
138+
return {
139+
k: self.erase(
140+
v,
141+
dynamic_mask=dynamic_mask,
142+
custom_mask=custom_mask,
143+
regex_pattern=regex_pattern,
144+
mask_format=mask_format,
145+
masking_rules=masking_rules,
146+
)
147+
for k, v in data.items()
148+
}
157149

158150
def _mask_iterable(
159151
self,
@@ -163,7 +155,6 @@ def _mask_iterable(
163155
regex_pattern: str | None,
164156
mask_format: str | None,
165157
masking_rules: dict | None,
166-
**kwargs,
167158
) -> list | tuple | set:
168159
masked_data = [
169160
self.erase(
@@ -173,19 +164,11 @@ def _mask_iterable(
173164
regex_pattern=regex_pattern,
174165
mask_format=mask_format,
175166
masking_rules=masking_rules,
176-
**kwargs,
177167
)
178168
for item in data
179169
]
180170
return type(data)(masked_data)
181171

182-
def _apply_masking_rules(self, data: dict, masking_rules: dict) -> Any:
183-
"""Apply masking rules to dictionary data."""
184-
return {
185-
key: self.erase(str(value), **masking_rules[key]) if key in masking_rules else str(value)
186-
for key, value in data.items()
187-
}
188-
189172
def _pattern_mask(self, data: str, pattern: str) -> str:
190173
"""Apply pattern masking to string data."""
191174
return pattern[: len(data)] if len(pattern) >= len(data) else pattern

tests/functional/data_masking/required_dependencies/test_erase_data_masking.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,24 @@ def test_regex_mask(data_masker):
232232
assert result == "Hello! My name is XXXX XXXX"
233233

234234

235+
def test_regex_mask_with_cache(data_masker):
236+
# GIVEN a str data type
237+
data = "Hello! My name is John Doe"
238+
data1 = "Hello! My name is John Xix"
239+
240+
# WHEN erase is called with regex pattern and mask format
241+
regex_pattern = r"\b[A-Z][a-z]+ [A-Z][a-z]+\b"
242+
mask_format = "XXXX XXXX"
243+
244+
# WHEN erasing twice to check the regex compiled and stored in the cache
245+
result = data_masker.erase(data, regex_pattern=regex_pattern, mask_format=mask_format)
246+
result1 = data_masker.erase(data1, regex_pattern=regex_pattern, mask_format=mask_format)
247+
248+
# THEN the result is the regex part masked by the masked format
249+
assert result == "Hello! My name is XXXX XXXX"
250+
assert result1 == "Hello! My name is XXXX XXXX"
251+
252+
235253
def test_erase_json_dict_with_fields_and_masks(data_masker):
236254
# GIVEN the data type is a json representation of a dictionary
237255
data = json.dumps(
@@ -353,6 +371,39 @@ def test_erase_dictionary_with_masking_rules(data_masker):
353371
}
354372

355373

374+
def test_erase_dictionary_with_masking_rules_with_list(data_masker):
375+
# GIVEN a dictionary with nested sensitive data
376+
data = {"user": {"name": ["leandro", "powertools"]}}
377+
378+
# AND masking rules for specific fields
379+
masking_rules = {"user.name": {"custom_mask": "NO-NAME"}}
380+
381+
# WHEN erase is called with masking rules
382+
result = data_masker.erase(data, masking_rules=masking_rules)
383+
384+
# THEN only the specified fields should be masked
385+
assert result == {
386+
"user": {
387+
"name": "NO-NAME",
388+
},
389+
}
390+
391+
392+
def test_erase_list_with_custom_mask(data_masker):
393+
# GIVEN a dictionary with nested sensitive data
394+
data = {"user": {"name": ["leandro", "powertools"]}}
395+
396+
# WHEN erase is called with masking rules
397+
result = data_masker.erase(data, fields=["user.name"], dynamic_mask=True)
398+
399+
# THEN only the specified fields should be masked
400+
assert result == {
401+
"user": {
402+
"name": ["*******", "**********"],
403+
},
404+
}
405+
406+
356407
def test_erase_dictionary_with_global_mask(data_masker):
357408
# GIVEN a dictionary with sensitive data
358409
data = {"user": {"name": "John Doe", "ssn": "123-45-6789"}}

0 commit comments

Comments
 (0)