Skip to content

Commit cfe2d3e

Browse files
committed
adjust method name, visibility, and tests for casting
1 parent 0fbbaa4 commit cfe2d3e

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

ld_openfeature/provider.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -138,20 +138,6 @@ def resolve_object_details(
138138
) -> FlagResolutionDetails[Union[dict, list]]:
139139
"""Resolves the flag value for the provided flag key as a list or dictionary"""
140140
return self.__resolve_value(FlagType(FlagType.OBJECT), flag_key, default_value, evaluation_context)
141-
142-
def serialize_value(self, flag_type: FlagType, value: Any):
143-
"""Serializes the raw flag value to the expected type based on flag_type."""
144-
if flag_type == FlagType.BOOLEAN and isinstance(value, bool):
145-
return value
146-
elif flag_type == FlagType.STRING and isinstance(value, str):
147-
return value
148-
elif flag_type == FlagType.INTEGER and isinstance(value, (int, float)) and not isinstance(value, bool):
149-
return int(value)
150-
elif flag_type == FlagType.FLOAT and isinstance(value, (int, float)) and not isinstance(value, bool):
151-
return float(value)
152-
elif flag_type == FlagType.OBJECT and isinstance(value, (dict, list)):
153-
return value
154-
return None
155141

156142
def __resolve_value(self, flag_type: FlagType, flag_key: str, default_value: Any,
157143
evaluation_context: Optional[EvaluationContext] = None) -> FlagResolutionDetails:
@@ -165,7 +151,7 @@ def __resolve_value(self, flag_type: FlagType, flag_key: str, default_value: Any
165151
ld_context = self.__context_converter.to_ld_context(evaluation_context)
166152
result = self.__client.variation_detail(flag_key, ld_context, default_value)
167153

168-
resolved_value = self.serialize_value(flag_type, result.value)
154+
resolved_value = self.__validate_and_cast_value(flag_type, result.value)
169155
if resolved_value is None:
170156
return self.__mismatched_type_details(default_value)
171157

@@ -176,6 +162,20 @@ def __resolve_value(self, flag_type: FlagType, flag_key: str, default_value: Any
176162
)
177163

178164
return self.__details_converter.to_resolution_details(resolved_detail)
165+
166+
def __validate_and_cast_value(self, flag_type: FlagType, value: Any):
167+
"""Serializes the raw flag value to the expected type based on flag_type."""
168+
if flag_type == FlagType.BOOLEAN and isinstance(value, bool):
169+
return value
170+
elif flag_type == FlagType.STRING and isinstance(value, str):
171+
return value
172+
elif flag_type == FlagType.INTEGER and isinstance(value, (int, float)) and not isinstance(value, bool):
173+
return int(value) # Float decimals are truncated to int
174+
elif flag_type == FlagType.FLOAT and isinstance(value, (int, float)) and not isinstance(value, bool):
175+
return float(value)
176+
elif flag_type == FlagType.OBJECT and isinstance(value, (dict, list)):
177+
return value
178+
return None
179179

180180
@staticmethod
181181
def __mismatched_type_details(default_value: Any) -> FlagResolutionDetails:

tests/test_provider.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,14 @@ def test_invalid_types_generate_type_mismatch_results(provider: LaunchDarklyProv
104104
pytest.param(1, True, 1, int, 'resolve_integer_details'),
105105
pytest.param(1, False, 1, int, 'resolve_integer_details'),
106106
pytest.param(1, "", 1, int, 'resolve_integer_details'),
107+
pytest.param(1, 2.0, 2, int, 'resolve_integer_details'),
108+
pytest.param(1, 2.9, 2, int, 'resolve_integer_details'),
107109
108110
pytest.param(1.0, 2.0, 2.0, float, 'resolve_float_details'),
109111
pytest.param(1.0, 2, 2.0, float, 'resolve_float_details'),
110112
pytest.param(1.0, True, 1.0, float, 'resolve_float_details'),
111113
pytest.param(1.0, 'return-string', 1.0, float, 'resolve_float_details'),
114+
pytest.param(1.0, 2, 2.0, float, 'resolve_float_details'),
112115
113116
pytest.param(['default-value'], ['return-string'], ['return-string'], list, 'resolve_object_details'),
114117
pytest.param(['default-value'], True, ['default-value'], list, 'resolve_object_details'),

0 commit comments

Comments
 (0)