python-sdk/tests/features/data.py

85 lines
2.6 KiB
Python

from openfeature.evaluation_context import EvaluationContext
from openfeature.flag_evaluation import FlagResolutionDetails, Reason
from openfeature.provider.in_memory_provider import InMemoryFlag
def context_func(flag: InMemoryFlag, evaluation_context: EvaluationContext):
expects = {"fn": "Sulisław", "ln": "Świętopełk", "age": 29, "customer": False}
if expects != evaluation_context.attributes:
return FlagResolutionDetails(
value=flag.variants[flag.default_variant],
reason=Reason.DEFAULT,
variant=flag.default_variant,
)
return FlagResolutionDetails(
value=flag.variants["internal"],
reason=Reason.TARGETING_MATCH,
variant="internal",
)
IN_MEMORY_FLAGS = {
"boolean-flag": InMemoryFlag(
state=InMemoryFlag.State.ENABLED,
default_variant="on",
variants={"on": True, "off": False},
context_evaluator=None,
),
"string-flag": InMemoryFlag(
state=InMemoryFlag.State.ENABLED,
default_variant="greeting",
variants={"greeting": "hi", "parting": "bye"},
context_evaluator=None,
),
"integer-flag": InMemoryFlag(
state=InMemoryFlag.State.ENABLED,
default_variant="ten",
variants={"one": 1, "ten": 10},
context_evaluator=None,
),
"float-flag": InMemoryFlag(
state=InMemoryFlag.State.ENABLED,
default_variant="half",
variants={"tenth": 0.1, "half": 0.5},
context_evaluator=None,
),
"object-flag": InMemoryFlag(
state=InMemoryFlag.State.ENABLED,
default_variant="template",
variants={
"empty": {},
"template": {
"showImages": True,
"title": "Check out these pics!",
"imagesPerPage": 100,
},
},
context_evaluator=None,
),
"context-aware": InMemoryFlag(
state=InMemoryFlag.State.ENABLED,
variants={"internal": "INTERNAL", "external": "EXTERNAL"},
default_variant="external",
context_evaluator=context_func,
),
"wrong-flag": InMemoryFlag(
state=InMemoryFlag.State.ENABLED,
variants={"one": "uno", "two": "dos"},
default_variant="one",
),
"metadata-flag": InMemoryFlag(
state=InMemoryFlag.State.ENABLED,
default_variant="on",
variants={"on": True, "off": False},
context_evaluator=None,
flag_metadata={
"string": "1.0.2",
"integer": 2,
"float": 0.1,
"boolean": True,
},
),
}