4
4
5
5
from __future__ import annotations
6
6
7
- import base64
8
- import json
9
7
import os
10
8
from abc import ABC , abstractmethod
11
9
from datetime import datetime , timedelta
12
- from typing import (
13
- Any ,
14
- Callable ,
15
- Dict ,
16
- NamedTuple ,
17
- Optional ,
18
- Tuple ,
19
- Union ,
20
- cast ,
21
- overload ,
22
- )
10
+ from typing import TYPE_CHECKING , Any , Callable , NamedTuple , cast , overload
23
11
24
12
from aws_lambda_powertools .shared import constants , user_agent
25
13
from aws_lambda_powertools .shared .functions import resolve_max_age
26
- from aws_lambda_powertools .utilities .parameters .types import TransformOptions
27
-
28
- from .exceptions import GetParameterError , TransformParameterError
14
+ from aws_lambda_powertools .utilities .parameters .exceptions import GetParameterError , TransformParameterError
29
15
30
- DEFAULT_MAX_AGE_SECS = "300"
16
+ if TYPE_CHECKING :
17
+ from aws_lambda_powertools .utilities .parameters .types import TransformOptions
31
18
32
- # These providers will be dynamically initialized on first use of the helper functions
33
- DEFAULT_PROVIDERS : Dict [str , Any ] = {}
34
- TRANSFORM_METHOD_JSON = "json"
35
- TRANSFORM_METHOD_BINARY = "binary"
36
- SUPPORTED_TRANSFORM_METHODS = [TRANSFORM_METHOD_JSON , TRANSFORM_METHOD_BINARY ]
37
19
38
- TRANSFORM_METHOD_MAPPING = {
39
- TRANSFORM_METHOD_JSON : json .loads ,
40
- TRANSFORM_METHOD_BINARY : base64 .b64decode ,
41
- ".json" : json .loads ,
42
- ".binary" : base64 .b64decode ,
43
- None : lambda x : x ,
44
- }
20
+ from aws_lambda_powertools .utilities .parameters .constants import (
21
+ DEFAULT_MAX_AGE_SECS ,
22
+ DEFAULT_PROVIDERS ,
23
+ TRANSFORM_METHOD_MAPPING ,
24
+ )
45
25
46
26
47
27
class ExpirableValue (NamedTuple ):
48
- value : str | bytes | Dict [str , Any ]
28
+ value : str | bytes | dict [str , Any ]
49
29
ttl : datetime
50
30
51
31
@@ -54,7 +34,7 @@ class BaseProvider(ABC):
54
34
Abstract Base Class for Parameter providers
55
35
"""
56
36
57
- store : Dict [ Tuple , ExpirableValue ]
37
+ store : dict [ tuple , ExpirableValue ]
58
38
59
39
def __init__ (self , * , client = None , resource = None ):
60
40
"""
@@ -65,19 +45,19 @@ def __init__(self, *, client=None, resource=None):
65
45
if resource is not None :
66
46
user_agent .register_feature_to_resource (resource = resource , feature = "parameters" )
67
47
68
- self .store : Dict [ Tuple , ExpirableValue ] = {}
48
+ self .store : dict [ tuple , ExpirableValue ] = {}
69
49
70
- def has_not_expired_in_cache (self , key : Tuple ) -> bool :
50
+ def has_not_expired_in_cache (self , key : tuple ) -> bool :
71
51
return key in self .store and self .store [key ].ttl >= datetime .now ()
72
52
73
53
def get (
74
54
self ,
75
55
name : str ,
76
- max_age : Optional [ int ] = None ,
56
+ max_age : int | None = None ,
77
57
transform : TransformOptions = None ,
78
58
force_fetch : bool = False ,
79
59
** sdk_options ,
80
- ) -> Optional [ Union [ str , dict , bytes ]] :
60
+ ) -> str | bytes | dict | None :
81
61
"""
82
62
Retrieve a parameter value or return the cached value
83
63
@@ -114,7 +94,7 @@ def get(
114
94
# of supported transform is small and the probability that a given
115
95
# parameter will always be used in a specific transform, this should be
116
96
# an acceptable tradeoff.
117
- value : Optional [ Union [ str , bytes , dict ]] = None
97
+ value : str | bytes | dict | None = None
118
98
key = self ._build_cache_key (name = name , transform = transform )
119
99
120
100
# If max_age is not set, resolve it from the environment variable, defaulting to DEFAULT_MAX_AGE_SECS
@@ -139,7 +119,7 @@ def get(
139
119
return value
140
120
141
121
@abstractmethod
142
- def _get (self , name : str , ** sdk_options ) -> Union [ str , bytes , Dict [str , Any ] ]:
122
+ def _get (self , name : str , ** sdk_options ) -> str | bytes | dict [str , Any ]:
143
123
"""
144
124
Retrieve parameter value from the underlying parameter store
145
125
"""
@@ -154,12 +134,12 @@ def set(self, name: str, value: Any, *, overwrite: bool = False, **kwargs):
154
134
def get_multiple (
155
135
self ,
156
136
path : str ,
157
- max_age : Optional [ int ] = None ,
137
+ max_age : int | None = None ,
158
138
transform : TransformOptions = None ,
159
139
raise_on_transform_error : bool = False ,
160
140
force_fetch : bool = False ,
161
141
** sdk_options ,
162
- ) -> Union [ Dict [ str , str ], Dict [str , dict ], Dict [str , bytes ] ]:
142
+ ) -> dict [ str , str ] | dict [str , bytes ] | dict [str , dict ]:
163
143
"""
164
144
Retrieve multiple parameters based on a path prefix
165
145
@@ -211,7 +191,7 @@ def get_multiple(
211
191
return values
212
192
213
193
@abstractmethod
214
- def _get_multiple (self , path : str , ** sdk_options ) -> Dict [str , str ]:
194
+ def _get_multiple (self , path : str , ** sdk_options ) -> dict [str , str ]:
215
195
"""
216
196
Retrieve multiple parameter values from the underlying parameter store
217
197
"""
@@ -220,10 +200,10 @@ def _get_multiple(self, path: str, **sdk_options) -> Dict[str, str]:
220
200
def clear_cache (self ):
221
201
self .store .clear ()
222
202
223
- def fetch_from_cache (self , key : Tuple ):
203
+ def fetch_from_cache (self , key : tuple ):
224
204
return self .store [key ].value if key in self .store else {}
225
205
226
- def add_to_cache (self , key : Tuple , value : Any , max_age : int ):
206
+ def add_to_cache (self , key : tuple , value : Any , max_age : int ):
227
207
if max_age <= 0 :
228
208
return
229
209
@@ -248,7 +228,7 @@ def _build_cache_key(
248
228
249
229
Returns
250
230
-------
251
- Tuple [str, TransformOptions, bool]
231
+ tuple [str, TransformOptions, bool]
252
232
Cache key
253
233
"""
254
234
return (name , transform , is_nested )
@@ -294,28 +274,28 @@ def get_transform_method(value: str, transform: TransformOptions = None) -> Call
294
274
295
275
@overload
296
276
def transform_value (
297
- value : Dict [str , Any ],
277
+ value : dict [str , Any ],
298
278
transform : TransformOptions ,
299
279
raise_on_transform_error : bool = False ,
300
280
key : str = "" ,
301
- ) -> Dict [str , Any ]: ...
281
+ ) -> dict [str , Any ]: ...
302
282
303
283
304
284
@overload
305
285
def transform_value (
306
- value : Union [ str , bytes , Dict [str , Any ] ],
286
+ value : str | bytes | dict [str , Any ],
307
287
transform : TransformOptions ,
308
288
raise_on_transform_error : bool = False ,
309
289
key : str = "" ,
310
- ) -> Optional [ Union [ str , bytes , Dict [str , Any ]]] : ...
290
+ ) -> str | bytes | dict [str , Any ] | None : ...
311
291
312
292
313
293
def transform_value (
314
- value : Union [ str , bytes , Dict [str , Any ] ],
294
+ value : str | bytes | dict [str , Any ],
315
295
transform : TransformOptions ,
316
296
raise_on_transform_error : bool = True ,
317
297
key : str = "" ,
318
- ) -> Optional [ Union [ str , bytes , Dict [str , Any ]]] :
298
+ ) -> str | bytes | dict [str , Any ] | None :
319
299
"""
320
300
Transform a value using one of the available options.
321
301
@@ -348,7 +328,7 @@ def transform_value(
348
328
# where one of the keys might fail during transform, e.g. `{"a": "valid", "b": "{"}`
349
329
# expected: `{"a": "valid", "b": None}`
350
330
351
- transformed_values : Dict [str , Any ] = {}
331
+ transformed_values : dict [str , Any ] = {}
352
332
for dict_key , dict_value in value .items ():
353
333
transform_method = get_transform_method (value = dict_key , transform = transform )
354
334
try :
0 commit comments