15
15
ExpirableValue = namedtuple ("ExpirableValue" , ["value" , "ttl" ])
16
16
# These providers will be dynamically initialized on first use of the helper functions
17
17
DEFAULT_PROVIDERS : Dict [str , Any ] = {}
18
+ MULTIPLE_VALUES_TYPE : Union [Dict [str , str ], Dict [str , dict ], Dict [str , bytes ], Dict [str , None ]]
18
19
TRANSFORM_METHOD_JSON = "json"
19
20
TRANSFORM_METHOD_BINARY = "binary"
20
21
SUPPORTED_TRANSFORM_METHODS = [TRANSFORM_METHOD_JSON , TRANSFORM_METHOD_BINARY ]
@@ -44,7 +45,7 @@ def get(
44
45
transform : Optional [str ] = None ,
45
46
force_fetch : bool = False ,
46
47
** sdk_options ,
47
- ) -> Union [str , list , dict , bytes ]:
48
+ ) -> Optional [ Union [str , dict , bytes ] ]:
48
49
"""
49
50
Retrieve a parameter value or return the cached value
50
51
@@ -81,6 +82,7 @@ def get(
81
82
# of supported transform is small and the probability that a given
82
83
# parameter will always be used in a specific transform, this should be
83
84
# an acceptable tradeoff.
85
+ value : Optional [Union [str , bytes , dict ]] = None
84
86
key = (name , transform )
85
87
86
88
if not force_fetch and self ._has_not_expired (key ):
@@ -92,12 +94,12 @@ def get(
92
94
except Exception as exc :
93
95
raise GetParameterError (str (exc ))
94
96
95
- if transform is not None :
97
+ if transform :
96
98
if isinstance (value , bytes ):
97
99
value = value .decode ("utf-8" )
98
100
value = transform_value (value , transform )
99
-
100
- self .store [key ] = ExpirableValue (value , datetime .now () + timedelta (seconds = max_age ))
101
+ if value :
102
+ self .store [key ] = ExpirableValue (value , datetime .now () + timedelta (seconds = max_age ))
101
103
102
104
return value
103
105
@@ -146,26 +148,25 @@ def get_multiple(
146
148
TransformParameterError
147
149
When the parameter provider fails to transform a parameter value.
148
150
"""
149
-
150
151
key = (path , transform )
151
152
152
153
if not force_fetch and self ._has_not_expired (key ):
153
154
return self .store [key ].value
154
155
155
156
try :
156
- values : Dict [ str , Union [ str , bytes , dict , None ]] = self ._get_multiple (path , ** sdk_options )
157
+ values = self ._get_multiple (path , ** sdk_options )
157
158
# Encapsulate all errors into a generic GetParameterError
158
159
except Exception as exc :
159
160
raise GetParameterError (str (exc ))
160
161
161
- if transform is not None :
162
- for (key , value ) in values .items ():
163
- _transform = get_transform_method (key , transform )
164
- if _transform is None :
162
+ if transform :
163
+ transformed_values : dict = {}
164
+ for (item , value ) in values .items ():
165
+ _transform = get_transform_method (item , transform )
166
+ if not _transform :
165
167
continue
166
-
167
- values [key ] = transform_value (value , _transform , raise_on_transform_error )
168
-
168
+ transformed_values [item ] = transform_value (value , _transform , raise_on_transform_error )
169
+ values .update (transformed_values )
169
170
self .store [key ] = ExpirableValue (values , datetime .now () + timedelta (seconds = max_age ))
170
171
171
172
return values
@@ -217,7 +218,9 @@ def get_transform_method(key: str, transform: Optional[str] = None) -> Optional[
217
218
return None
218
219
219
220
220
- def transform_value (value : str , transform : str , raise_on_transform_error : bool = True ) -> Union [dict , bytes , None ]:
221
+ def transform_value (
222
+ value : str , transform : str , raise_on_transform_error : Optional [bool ] = True
223
+ ) -> Optional [Union [dict , bytes ]]:
221
224
"""
222
225
Apply a transform to a value
223
226
0 commit comments