flagsmith-flag-engine 10.1.0__tar.gz → 10.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flagsmith_flag_engine-10.1.0/flagsmith_flag_engine.egg-info → flagsmith_flag_engine-10.2.0}/PKG-INFO +1 -1
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/context/types.py +1 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/result/types.py +2 -1
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/segments/evaluator.py +17 -16
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0/flagsmith_flag_engine.egg-info}/PKG-INFO +1 -1
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/setup.py +1 -1
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/LICENSE.txt +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/README.md +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/__init__.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/context/__init__.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/context/mappers.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/engine.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/py.typed +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/result/__init__.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/segments/__init__.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/segments/constants.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/segments/types.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/segments/utils.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/utils/__init__.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/utils/hashing.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/utils/json/__init__.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/utils/json/encoders.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/utils/semver.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/utils/types.py +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flagsmith_flag_engine.egg-info/SOURCES.txt +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flagsmith_flag_engine.egg-info/dependency_links.txt +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flagsmith_flag_engine.egg-info/requires.txt +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flagsmith_flag_engine.egg-info/top_level.txt +0 -0
- {flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/setup.cfg +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from typing import Any, Dict, Generic, List
|
|
7
|
+
from typing import Any, Dict, Generic, List, Optional
|
|
8
8
|
|
|
9
9
|
from typing_extensions import NotRequired, TypedDict
|
|
10
10
|
|
|
@@ -16,6 +16,7 @@ class FlagResult(TypedDict, Generic[FeatureMetadataT]):
|
|
|
16
16
|
enabled: bool
|
|
17
17
|
value: Any
|
|
18
18
|
reason: str
|
|
19
|
+
variant: Optional[str]
|
|
19
20
|
metadata: NotRequired[FeatureMetadataT]
|
|
20
21
|
|
|
21
22
|
|
{flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/segments/evaluator.py
RENAMED
|
@@ -178,38 +178,39 @@ def get_flag_result_from_context(
|
|
|
178
178
|
"""
|
|
179
179
|
key = _get_identity_key(context)
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
value = feature_context["value"]
|
|
182
|
+
variant: typing.Optional[str] = None
|
|
182
183
|
|
|
183
184
|
if key is not None and (variants := feature_context.get("variants")):
|
|
185
|
+
# Default to the control bucket; a matched named variant overrides this.
|
|
186
|
+
variant = "control"
|
|
187
|
+
|
|
184
188
|
percentage_value = get_hashed_percentage_for_object_ids(
|
|
185
189
|
[feature_context["key"], key]
|
|
186
190
|
)
|
|
187
191
|
|
|
188
192
|
start_percentage = 0.0
|
|
189
193
|
|
|
190
|
-
for
|
|
194
|
+
for feature_value in sorted(
|
|
191
195
|
variants,
|
|
192
196
|
key=operator.itemgetter("priority"),
|
|
193
197
|
):
|
|
194
|
-
limit = (weight :=
|
|
198
|
+
limit = (weight := feature_value["weight"]) + start_percentage
|
|
195
199
|
if start_percentage <= percentage_value < limit:
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
"reason": f"SPLIT; weight={weight}",
|
|
200
|
-
"value": variant["value"],
|
|
201
|
-
}
|
|
200
|
+
reason = f"SPLIT; weight={weight}"
|
|
201
|
+
value = feature_value["value"]
|
|
202
|
+
variant = feature_value.get("key")
|
|
202
203
|
break
|
|
203
204
|
|
|
204
205
|
start_percentage = limit
|
|
205
206
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
207
|
+
flag_result: FlagResult[FeatureMetadataT] = {
|
|
208
|
+
"enabled": feature_context["enabled"],
|
|
209
|
+
"name": feature_context["name"],
|
|
210
|
+
"reason": reason,
|
|
211
|
+
"value": value,
|
|
212
|
+
"variant": variant,
|
|
213
|
+
}
|
|
213
214
|
|
|
214
215
|
if metadata := feature_context.get("metadata"):
|
|
215
216
|
flag_result["metadata"] = metadata
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/context/__init__.py
RENAMED
|
File without changes
|
{flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/context/mappers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/result/__init__.py
RENAMED
|
File without changes
|
{flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/segments/__init__.py
RENAMED
|
File without changes
|
{flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/segments/constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/utils/json/__init__.py
RENAMED
|
File without changes
|
{flagsmith_flag_engine-10.1.0 → flagsmith_flag_engine-10.2.0}/flag_engine/utils/json/encoders.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|