aws-lambda-powertools 3.10.1a2__py3-none-any.whl → 3.10.1a4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  """Exposes version constant to avoid circular dependencies."""
2
2
 
3
- VERSION = "3.10.1a2"
3
+ VERSION = "3.10.1a4"
@@ -6,6 +6,7 @@ Base class for Data Masking
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
+ import dataclasses
9
10
  import functools
10
11
  import logging
11
12
  import warnings
@@ -27,6 +28,51 @@ if TYPE_CHECKING:
27
28
  logger = logging.getLogger(__name__)
28
29
 
29
30
 
31
+ def prepare_data(data: Any, _visited: set[int] | None = None) -> Any:
32
+ """
33
+ Recursively convert complex objects into dictionaries or simple types.
34
+ Handles dataclasses, Pydantic models, and prevents circular references.
35
+ """
36
+ _visited = _visited or set()
37
+
38
+ # Handle circular references and primitive types
39
+ data_id = id(data)
40
+ if data_id in _visited or isinstance(data, (str, int, float, bool, type(None))):
41
+ return data
42
+
43
+ _visited.add(data_id)
44
+
45
+ # Define handlers as (condition, transformer) pairs
46
+ handlers: list[tuple[Callable[[Any], bool], Callable[[Any], Any]]] = [
47
+ # Dataclasses
48
+ (lambda x: hasattr(x, "__dataclass_fields__"), lambda x: prepare_data(dataclasses.asdict(x), _visited)),
49
+ # Pydantic models
50
+ (lambda x: callable(getattr(x, "model_dump", None)), lambda x: prepare_data(x.model_dump(), _visited)),
51
+ # Objects with dict() method
52
+ (
53
+ lambda x: callable(getattr(x, "dict", None)) and not isinstance(x, dict),
54
+ lambda x: prepare_data(x.dict(), _visited),
55
+ ),
56
+ # Dictionaries
57
+ (
58
+ lambda x: isinstance(x, dict),
59
+ lambda x: {prepare_data(k, _visited): prepare_data(v, _visited) for k, v in x.items()},
60
+ ),
61
+ # Lists, tuples, sets
62
+ (lambda x: isinstance(x, (list, tuple, set)), lambda x: type(x)(prepare_data(item, _visited) for item in x)),
63
+ # Objects with __dict__
64
+ (lambda x: hasattr(x, "__dict__"), lambda x: prepare_data(vars(x), _visited)),
65
+ ]
66
+
67
+ # Find and apply the first matching handler
68
+ for condition, transformer in handlers:
69
+ if condition(data):
70
+ return transformer(data)
71
+
72
+ # Default fallback
73
+ return data
74
+
75
+
30
76
  class DataMasking:
31
77
  """
32
78
  The DataMasking class orchestrates erasing, encrypting, and decrypting
@@ -93,6 +139,7 @@ class DataMasking:
93
139
  data_masker = DataMasking(provider=encryption_provider)
94
140
  encrypted = data_masker.encrypt({"secret": "value"})
95
141
  """
142
+ data = prepare_data(data)
96
143
  return self._apply_action(
97
144
  data=data,
98
145
  fields=None,
@@ -135,7 +182,7 @@ class DataMasking:
135
182
  data_masker = DataMasking(provider=encryption_provider)
136
183
  encrypted = data_masker.decrypt(encrypted_data)
137
184
  """
138
-
185
+ data = prepare_data(data)
139
186
  return self._apply_action(
140
187
  data=data,
141
188
  fields=None,
@@ -184,6 +231,7 @@ class DataMasking:
184
231
  Any
185
232
  The data with sensitive information erased or masked.
186
233
  """
234
+ data = prepare_data(data)
187
235
  if masking_rules:
188
236
  return self._apply_masking_rules(data=data, masking_rules=masking_rules)
189
237
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: aws_lambda_powertools
3
- Version: 3.10.1a2
3
+ Version: 3.10.1a4
4
4
  Summary: Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.
5
5
  License: MIT
6
6
  Keywords: aws_lambda_powertools,aws,tracing,logging,lambda,powertools,feature_flags,idempotency,middleware
@@ -88,7 +88,7 @@ aws_lambda_powertools/shared/json_encoder.py,sha256=JQeWNu-4M7_xI_hqYExrxsb3OcEH
88
88
  aws_lambda_powertools/shared/lazy_import.py,sha256=TbXQm2bcwXdZrYdBaJJXIswyLlumM85RJ_A_0w-h-GU,2019
89
89
  aws_lambda_powertools/shared/types.py,sha256=APkI38HbiTpSF19NSNii8Ydx73vmVUVotgEQ9jHruEI,124
90
90
  aws_lambda_powertools/shared/user_agent.py,sha256=DrCMFQuT4a4iIrpcWpAIjY37EFqR9-QxlxDGD-Nn9Gg,7081
91
- aws_lambda_powertools/shared/version.py,sha256=5hYGxRSShhvON_hMWaLIQa6We3FWztE3q__RgIXVLrg,85
91
+ aws_lambda_powertools/shared/version.py,sha256=rsIBlvYBVzDn9F76coRytlIyNqBqYjG6bFhKwvhhjwg,85
92
92
  aws_lambda_powertools/tracing/__init__.py,sha256=f4bMThOPBPWTPVcYqcAIErAJPerMsf3H_Z4gCXCsK9I,141
93
93
  aws_lambda_powertools/tracing/base.py,sha256=DbLD8OSK05KLdSV36oNA5wDSGv8KbcOD19qMUqoXh58,4513
94
94
  aws_lambda_powertools/tracing/extensions.py,sha256=APOfXOq-hRBKaK5WyfIyrd_6M1_9SWJZ3zxLA9jDZzU,492
@@ -141,7 +141,7 @@ aws_lambda_powertools/utilities/data_classes/sqs_event.py,sha256=seWIKCpPbzKpPdX
141
141
  aws_lambda_powertools/utilities/data_classes/transfer_family_event.py,sha256=gfPvQeur8bBXl5gq46sc_z3Oz3JTnRlM7iXUK5cbjic,6856
142
142
  aws_lambda_powertools/utilities/data_classes/vpc_lattice.py,sha256=SEZUvRTMsI-iQi7hcpqaKqYtJLYqIxX5ijqmeTSrf9E,6363
143
143
  aws_lambda_powertools/utilities/data_masking/__init__.py,sha256=Ez0MABo8ARkgWKSu8Dog4uFSkkZuHkW7DoWcexJGeyU,108
144
- aws_lambda_powertools/utilities/data_masking/base.py,sha256=66zN6M9B0gEEdoGqp9MKnORv_RMQdEeW8W_IrwfHa1I,16707
144
+ aws_lambda_powertools/utilities/data_masking/base.py,sha256=Ny0fZNcLu0Qs6h40CCrMCy1J6C0Q0Zen8j0rtUT_Pyk,18571
145
145
  aws_lambda_powertools/utilities/data_masking/constants.py,sha256=hKeeWDE4g53zxCq6fOD0D1vUTjuqVXNrr9oXCv-7mGg,752
146
146
  aws_lambda_powertools/utilities/data_masking/exceptions.py,sha256=MGg6t5K9smOPcydmxMI3a_9D20u_zC3JCdd_eQpBisg,621
147
147
  aws_lambda_powertools/utilities/data_masking/provider/__init__.py,sha256=83eP8qT3OpY99T--QUIV9K37MmAIi8cbAMmkHyIGVHI,119
@@ -258,7 +258,7 @@ aws_lambda_powertools/utilities/validation/envelopes.py,sha256=YD5HOFx6IClQgii0n
258
258
  aws_lambda_powertools/utilities/validation/exceptions.py,sha256=PKy_19zQMBJGCMMFl-sMkcm-cc0v3zZBn_bhGE4wKNo,2084
259
259
  aws_lambda_powertools/utilities/validation/validator.py,sha256=x_1qpuKJBuWpgNU-zCD3Di-vXrZfyUu7oA5RmjZjr84,10034
260
260
  aws_lambda_powertools/warnings/__init__.py,sha256=vqDVeZz8wGtD8WGYNSkQE7AHwqtIrPGRxuoJR_BBnSs,1193
261
- aws_lambda_powertools-3.10.1a2.dist-info/LICENSE,sha256=vMHS2eBgmwPUIMPb7LQ4p7ib_FPVQXarVjAasflrTwo,951
262
- aws_lambda_powertools-3.10.1a2.dist-info/METADATA,sha256=tDj1QqTFhGJ8C4AW3UgeLYe5wz3rFQZ94gPUWJc79N0,11187
263
- aws_lambda_powertools-3.10.1a2.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
264
- aws_lambda_powertools-3.10.1a2.dist-info/RECORD,,
261
+ aws_lambda_powertools-3.10.1a4.dist-info/LICENSE,sha256=vMHS2eBgmwPUIMPb7LQ4p7ib_FPVQXarVjAasflrTwo,951
262
+ aws_lambda_powertools-3.10.1a4.dist-info/METADATA,sha256=AC17X83vjp1E9D9QIU__AlMj_LArrHgRRsvBU_pt-cQ,11187
263
+ aws_lambda_powertools-3.10.1a4.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
264
+ aws_lambda_powertools-3.10.1a4.dist-info/RECORD,,