Skip to content

Commit 7b86983

Browse files
committed
fix: Allow string values for FlagEvaluationDetails.reason and `FlagResolutionDetails.reason
1 parent d1f27e3 commit 7b86983

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

openfeature/flag_evaluation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class FlagEvaluationDetails(typing.Generic[T_co]):
4040
value: T_co
4141
variant: typing.Optional[str] = None
4242
flag_metadata: FlagMetadata = field(default_factory=dict)
43-
reason: typing.Optional[Reason] = None
43+
reason: typing.Optional[typing.Union[str, Reason]] = None
4444
error_code: typing.Optional[ErrorCode] = None
4545
error_message: typing.Optional[str] = None
4646

@@ -59,6 +59,6 @@ class FlagResolutionDetails(typing.Generic[U_co]):
5959
value: U_co
6060
error_code: typing.Optional[ErrorCode] = None
6161
error_message: typing.Optional[str] = None
62-
reason: typing.Optional[Reason] = None
62+
reason: typing.Optional[typing.Union[str, Reason]] = None
6363
variant: typing.Optional[str] = None
6464
flag_metadata: FlagMetadata = field(default_factory=dict)

tests/test_flag_evaluation.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,32 @@ def test_evaluation_details_reason_should_be_a_string():
3030
assert error_code == flag_details.error_code
3131
assert error_message == flag_details.error_message
3232
assert reason == flag_details.reason
33+
assert isinstance(flag_details.reason, str)
34+
35+
36+
def test_evaluation_details_reason_can_be_arbitrary_string():
37+
# Given
38+
flag_key = "my-flag"
39+
flag_value = 100
40+
variant = "1-hundred"
41+
flag_metadata = {}
42+
reason = "Non-standard reason"
43+
error_code = ErrorCode.GENERAL
44+
error_message = "message"
45+
46+
# When
47+
flag_details = FlagEvaluationDetails(
48+
flag_key,
49+
flag_value,
50+
variant,
51+
flag_metadata,
52+
reason,
53+
error_code,
54+
error_message,
55+
)
56+
57+
# Then
58+
assert reason == flag_details.reason
3359

3460

3561
def test_evaluation_details_reason_should_be_a_string_when_set():
@@ -54,3 +80,4 @@ def test_evaluation_details_reason_should_be_a_string_when_set():
5480

5581
# Then
5682
assert Reason.STATIC == flag_details.reason # noqa: SIM300
83+
assert isinstance(flag_details.reason, str)

0 commit comments

Comments
 (0)