From 012a4bca94cd6607d34e0da5978ddbc7710693c3 Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Mon, 28 Jul 2025 12:49:02 -0400 Subject: [PATCH 01/12] update wasm --- .../bucketing-lib.release.wasm | Bin 215612 -> 221800 bytes .../protobuf/variableForUserParams_pb2.py | 73 ++++--- .../protobuf/variableForUserParams_pb2.pyi | 178 ++++++++++-------- protobuf/variableForUserParams.proto | 8 + update_wasm_lib.sh | 2 +- 5 files changed, 152 insertions(+), 109 deletions(-) diff --git a/devcycle_python_sdk/bucketing-lib.release.wasm b/devcycle_python_sdk/bucketing-lib.release.wasm index f3c33d6a7c6e51c40b6b48d90c106cded59f9595..3e4843f09f8fc54cfb8f4d852f88f3c32a39d3e2 100644 GIT binary patch literal 221800 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%0AcHF|BAoVrc_ebH$d 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�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 literal 215612 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 REI;_trEAVV`23}-{x7~vs%HQI diff --git a/devcycle_python_sdk/protobuf/variableForUserParams_pb2.py b/devcycle_python_sdk/protobuf/variableForUserParams_pb2.py index fdd0257..289f5b9 100644 --- a/devcycle_python_sdk/protobuf/variableForUserParams_pb2.py +++ b/devcycle_python_sdk/protobuf/variableForUserParams_pb2.py @@ -1,11 +1,22 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: variableForUserParams.proto +# Protobuf Python Version: 5.29.3 """Generated protocol buffer code.""" -from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 29, + 3, + '', + 'variableForUserParams.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -13,34 +24,36 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bvariableForUserParams.proto\"/\n\x0eNullableString\x12\r\n\x05value\x18\x01 \x01(\t\x12\x0e\n\x06isNull\x18\x02 \x01(\x08\"/\n\x0eNullableDouble\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x0e\n\x06isNull\x18\x02 \x01(\x08\"m\n\x0f\x43ustomDataValue\x12\x1d\n\x04type\x18\x01 \x01(\x0e\x32\x0f.CustomDataType\x12\x11\n\tboolValue\x18\x02 \x01(\x08\x12\x13\n\x0b\x64oubleValue\x18\x03 \x01(\x01\x12\x13\n\x0bstringValue\x18\x04 \x01(\t\"\x93\x01\n\x12NullableCustomData\x12-\n\x05value\x18\x01 \x03(\x0b\x32\x1e.NullableCustomData.ValueEntry\x12\x0e\n\x06isNull\x18\x02 \x01(\x08\x1a>\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.CustomDataValue:\x02\x38\x01\"\x9c\x01\n\x18VariableForUserParams_PB\x12\x0e\n\x06sdkKey\x18\x01 \x01(\t\x12\x13\n\x0bvariableKey\x18\x02 \x01(\t\x12&\n\x0cvariableType\x18\x03 \x01(\x0e\x32\x10.VariableType_PB\x12\x19\n\x04user\x18\x04 \x01(\x0b\x32\x0b.DVCUser_PB\x12\x18\n\x10shouldTrackEvent\x18\x05 \x01(\x08\"\xe8\x02\n\nDVCUser_PB\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x1e\n\x05\x65mail\x18\x02 \x01(\x0b\x32\x0f.NullableString\x12\x1d\n\x04name\x18\x03 \x01(\x0b\x32\x0f.NullableString\x12!\n\x08language\x18\x04 \x01(\x0b\x32\x0f.NullableString\x12 \n\x07\x63ountry\x18\x05 \x01(\x0b\x32\x0f.NullableString\x12!\n\x08\x61ppBuild\x18\x06 \x01(\x0b\x32\x0f.NullableDouble\x12#\n\nappVersion\x18\x07 \x01(\x0b\x32\x0f.NullableString\x12$\n\x0b\x64\x65viceModel\x18\x08 \x01(\x0b\x32\x0f.NullableString\x12\'\n\ncustomData\x18\t \x01(\x0b\x32\x13.NullableCustomData\x12.\n\x11privateCustomData\x18\n \x01(\x0b\x32\x13.NullableCustomData\"\xac\x01\n\x0eSDKVariable_PB\x12\x0b\n\x03_id\x18\x01 \x01(\t\x12\x1e\n\x04type\x18\x02 \x01(\x0e\x32\x10.VariableType_PB\x12\x0b\n\x03key\x18\x03 \x01(\t\x12\x11\n\tboolValue\x18\x04 \x01(\x08\x12\x13\n\x0b\x64oubleValue\x18\x05 \x01(\x01\x12\x13\n\x0bstringValue\x18\x06 \x01(\t\x12#\n\nevalReason\x18\x07 \x01(\x0b\x32\x0f.NullableString*@\n\x0fVariableType_PB\x12\x0b\n\x07\x42oolean\x10\x00\x12\n\n\x06Number\x10\x01\x12\n\n\x06String\x10\x02\x12\x08\n\x04JSON\x10\x03*6\n\x0e\x43ustomDataType\x12\x08\n\x04\x42ool\x10\x00\x12\x07\n\x03Num\x10\x01\x12\x07\n\x03Str\x10\x02\x12\x08\n\x04Null\x10\x03\x42X\n&com.devcycle.sdk.server.local.protobufP\x01Z\x07./proto\xaa\x02\"DevCycle.SDK.Server.Local.Protobufb\x06proto3') - -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'variableForUserParams_pb2', globals()) -if _descriptor._USE_C_DESCRIPTORS == False: +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bvariableForUserParams.proto\"/\n\x0eNullableString\x12\r\n\x05value\x18\x01 \x01(\t\x12\x0e\n\x06isNull\x18\x02 \x01(\x08\"/\n\x0eNullableDouble\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x0e\n\x06isNull\x18\x02 \x01(\x08\"m\n\x0f\x43ustomDataValue\x12\x1d\n\x04type\x18\x01 \x01(\x0e\x32\x0f.CustomDataType\x12\x11\n\tboolValue\x18\x02 \x01(\x08\x12\x13\n\x0b\x64oubleValue\x18\x03 \x01(\x01\x12\x13\n\x0bstringValue\x18\x04 \x01(\t\"\x93\x01\n\x12NullableCustomData\x12-\n\x05value\x18\x01 \x03(\x0b\x32\x1e.NullableCustomData.ValueEntry\x12\x0e\n\x06isNull\x18\x02 \x01(\x08\x1a>\n\nValueEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.CustomDataValue:\x02\x38\x01\"\x9c\x01\n\x18VariableForUserParams_PB\x12\x0e\n\x06sdkKey\x18\x01 \x01(\t\x12\x13\n\x0bvariableKey\x18\x02 \x01(\t\x12&\n\x0cvariableType\x18\x03 \x01(\x0e\x32\x10.VariableType_PB\x12\x19\n\x04user\x18\x04 \x01(\x0b\x32\x0b.DVCUser_PB\x12\x18\n\x10shouldTrackEvent\x18\x05 \x01(\x08\"\xe8\x02\n\nDVCUser_PB\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x1e\n\x05\x65mail\x18\x02 \x01(\x0b\x32\x0f.NullableString\x12\x1d\n\x04name\x18\x03 \x01(\x0b\x32\x0f.NullableString\x12!\n\x08language\x18\x04 \x01(\x0b\x32\x0f.NullableString\x12 \n\x07\x63ountry\x18\x05 \x01(\x0b\x32\x0f.NullableString\x12!\n\x08\x61ppBuild\x18\x06 \x01(\x0b\x32\x0f.NullableDouble\x12#\n\nappVersion\x18\x07 \x01(\x0b\x32\x0f.NullableString\x12$\n\x0b\x64\x65viceModel\x18\x08 \x01(\x0b\x32\x0f.NullableString\x12\'\n\ncustomData\x18\t \x01(\x0b\x32\x13.NullableCustomData\x12.\n\x11privateCustomData\x18\n \x01(\x0b\x32\x13.NullableCustomData\"\xed\x01\n\x0eSDKVariable_PB\x12\x0b\n\x03_id\x18\x01 \x01(\t\x12\x1e\n\x04type\x18\x02 \x01(\x0e\x32\x10.VariableType_PB\x12\x0b\n\x03key\x18\x03 \x01(\t\x12\x11\n\tboolValue\x18\x04 \x01(\x08\x12\x13\n\x0b\x64oubleValue\x18\x05 \x01(\x01\x12\x13\n\x0bstringValue\x18\x06 \x01(\t\x12#\n\nevalReason\x18\x07 \x01(\x0b\x32\x0f.NullableString\x12!\n\x08_feature\x18\x08 \x01(\x0b\x32\x0f.NullableString\x12\x1c\n\x04\x65val\x18\t \x01(\x0b\x32\x0e.EvalReason_PB\"C\n\rEvalReason_PB\x12\x0e\n\x06reason\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x02 \x01(\t\x12\x11\n\ttarget_id\x18\x03 \x01(\t*@\n\x0fVariableType_PB\x12\x0b\n\x07\x42oolean\x10\x00\x12\n\n\x06Number\x10\x01\x12\n\n\x06String\x10\x02\x12\x08\n\x04JSON\x10\x03*6\n\x0e\x43ustomDataType\x12\x08\n\x04\x42ool\x10\x00\x12\x07\n\x03Num\x10\x01\x12\x07\n\x03Str\x10\x02\x12\x08\n\x04Null\x10\x03\x42X\n&com.devcycle.sdk.server.local.protobufP\x01Z\x07./proto\xaa\x02\"DevCycle.SDK.Server.Local.Protobufb\x06proto3') - DESCRIPTOR._options = None - DESCRIPTOR._serialized_options = b'\n&com.devcycle.sdk.server.local.protobufP\001Z\007./proto\252\002\"DevCycle.SDK.Server.Local.Protobuf' - _NULLABLECUSTOMDATA_VALUEENTRY._options = None - _NULLABLECUSTOMDATA_VALUEENTRY._serialized_options = b'8\001' - _VARIABLETYPE_PB._serialized_start=1087 - _VARIABLETYPE_PB._serialized_end=1151 - _CUSTOMDATATYPE._serialized_start=1153 - _CUSTOMDATATYPE._serialized_end=1207 - _NULLABLESTRING._serialized_start=31 - _NULLABLESTRING._serialized_end=78 - _NULLABLEDOUBLE._serialized_start=80 - _NULLABLEDOUBLE._serialized_end=127 - _CUSTOMDATAVALUE._serialized_start=129 - _CUSTOMDATAVALUE._serialized_end=238 - _NULLABLECUSTOMDATA._serialized_start=241 - _NULLABLECUSTOMDATA._serialized_end=388 - _NULLABLECUSTOMDATA_VALUEENTRY._serialized_start=326 - _NULLABLECUSTOMDATA_VALUEENTRY._serialized_end=388 - _VARIABLEFORUSERPARAMS_PB._serialized_start=391 - _VARIABLEFORUSERPARAMS_PB._serialized_end=547 - _DVCUSER_PB._serialized_start=550 - _DVCUSER_PB._serialized_end=910 - _SDKVARIABLE_PB._serialized_start=913 - _SDKVARIABLE_PB._serialized_end=1085 +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'variableForUserParams_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n&com.devcycle.sdk.server.local.protobufP\001Z\007./proto\252\002\"DevCycle.SDK.Server.Local.Protobuf' + _globals['_NULLABLECUSTOMDATA_VALUEENTRY']._loaded_options = None + _globals['_NULLABLECUSTOMDATA_VALUEENTRY']._serialized_options = b'8\001' + _globals['_VARIABLETYPE_PB']._serialized_start=1221 + _globals['_VARIABLETYPE_PB']._serialized_end=1285 + _globals['_CUSTOMDATATYPE']._serialized_start=1287 + _globals['_CUSTOMDATATYPE']._serialized_end=1341 + _globals['_NULLABLESTRING']._serialized_start=31 + _globals['_NULLABLESTRING']._serialized_end=78 + _globals['_NULLABLEDOUBLE']._serialized_start=80 + _globals['_NULLABLEDOUBLE']._serialized_end=127 + _globals['_CUSTOMDATAVALUE']._serialized_start=129 + _globals['_CUSTOMDATAVALUE']._serialized_end=238 + _globals['_NULLABLECUSTOMDATA']._serialized_start=241 + _globals['_NULLABLECUSTOMDATA']._serialized_end=388 + _globals['_NULLABLECUSTOMDATA_VALUEENTRY']._serialized_start=326 + _globals['_NULLABLECUSTOMDATA_VALUEENTRY']._serialized_end=388 + _globals['_VARIABLEFORUSERPARAMS_PB']._serialized_start=391 + _globals['_VARIABLEFORUSERPARAMS_PB']._serialized_end=547 + _globals['_DVCUSER_PB']._serialized_start=550 + _globals['_DVCUSER_PB']._serialized_end=910 + _globals['_SDKVARIABLE_PB']._serialized_start=913 + _globals['_SDKVARIABLE_PB']._serialized_end=1150 + _globals['_EVALREASON_PB']._serialized_start=1152 + _globals['_EVALREASON_PB']._serialized_end=1219 # @@protoc_insertion_point(module_scope) diff --git a/devcycle_python_sdk/protobuf/variableForUserParams_pb2.pyi b/devcycle_python_sdk/protobuf/variableForUserParams_pb2.pyi index abfd89c..175eee2 100644 --- a/devcycle_python_sdk/protobuf/variableForUserParams_pb2.pyi +++ b/devcycle_python_sdk/protobuf/variableForUserParams_pb2.pyi @@ -4,117 +4,139 @@ from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union -Bool: CustomDataType -Boolean: VariableType_PB DESCRIPTOR: _descriptor.FileDescriptor + +class VariableType_PB(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Boolean: _ClassVar[VariableType_PB] + Number: _ClassVar[VariableType_PB] + String: _ClassVar[VariableType_PB] + JSON: _ClassVar[VariableType_PB] + +class CustomDataType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Bool: _ClassVar[CustomDataType] + Num: _ClassVar[CustomDataType] + Str: _ClassVar[CustomDataType] + Null: _ClassVar[CustomDataType] +Boolean: VariableType_PB +Number: VariableType_PB +String: VariableType_PB JSON: VariableType_PB -Null: CustomDataType +Bool: CustomDataType Num: CustomDataType -Number: VariableType_PB Str: CustomDataType -String: VariableType_PB +Null: CustomDataType + +class NullableString(_message.Message): + __slots__ = ("value", "isNull") + VALUE_FIELD_NUMBER: _ClassVar[int] + ISNULL_FIELD_NUMBER: _ClassVar[int] + value: str + isNull: bool + def __init__(self, value: _Optional[str] = ..., isNull: bool = ...) -> None: ... + +class NullableDouble(_message.Message): + __slots__ = ("value", "isNull") + VALUE_FIELD_NUMBER: _ClassVar[int] + ISNULL_FIELD_NUMBER: _ClassVar[int] + value: float + isNull: bool + def __init__(self, value: _Optional[float] = ..., isNull: bool = ...) -> None: ... class CustomDataValue(_message.Message): - __slots__ = ["boolValue", "doubleValue", "stringValue", "type"] + __slots__ = ("type", "boolValue", "doubleValue", "stringValue") + TYPE_FIELD_NUMBER: _ClassVar[int] BOOLVALUE_FIELD_NUMBER: _ClassVar[int] DOUBLEVALUE_FIELD_NUMBER: _ClassVar[int] STRINGVALUE_FIELD_NUMBER: _ClassVar[int] - TYPE_FIELD_NUMBER: _ClassVar[int] + type: CustomDataType boolValue: bool doubleValue: float stringValue: str - type: CustomDataType def __init__(self, type: _Optional[_Union[CustomDataType, str]] = ..., boolValue: bool = ..., doubleValue: _Optional[float] = ..., stringValue: _Optional[str] = ...) -> None: ... -class DVCUser_PB(_message.Message): - __slots__ = ["appBuild", "appVersion", "country", "customData", "deviceModel", "email", "language", "name", "privateCustomData", "user_id"] - APPBUILD_FIELD_NUMBER: _ClassVar[int] - APPVERSION_FIELD_NUMBER: _ClassVar[int] - COUNTRY_FIELD_NUMBER: _ClassVar[int] - CUSTOMDATA_FIELD_NUMBER: _ClassVar[int] - DEVICEMODEL_FIELD_NUMBER: _ClassVar[int] - EMAIL_FIELD_NUMBER: _ClassVar[int] - LANGUAGE_FIELD_NUMBER: _ClassVar[int] - NAME_FIELD_NUMBER: _ClassVar[int] - PRIVATECUSTOMDATA_FIELD_NUMBER: _ClassVar[int] - USER_ID_FIELD_NUMBER: _ClassVar[int] - appBuild: NullableDouble - appVersion: NullableString - country: NullableString - customData: NullableCustomData - deviceModel: NullableString - email: NullableString - language: NullableString - name: NullableString - privateCustomData: NullableCustomData - user_id: str - def __init__(self, user_id: _Optional[str] = ..., email: _Optional[_Union[NullableString, _Mapping]] = ..., name: _Optional[_Union[NullableString, _Mapping]] = ..., language: _Optional[_Union[NullableString, _Mapping]] = ..., country: _Optional[_Union[NullableString, _Mapping]] = ..., appBuild: _Optional[_Union[NullableDouble, _Mapping]] = ..., appVersion: _Optional[_Union[NullableString, _Mapping]] = ..., deviceModel: _Optional[_Union[NullableString, _Mapping]] = ..., customData: _Optional[_Union[NullableCustomData, _Mapping]] = ..., privateCustomData: _Optional[_Union[NullableCustomData, _Mapping]] = ...) -> None: ... - class NullableCustomData(_message.Message): - __slots__ = ["isNull", "value"] + __slots__ = ("value", "isNull") class ValueEntry(_message.Message): - __slots__ = ["key", "value"] + __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] VALUE_FIELD_NUMBER: _ClassVar[int] key: str value: CustomDataValue def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomDataValue, _Mapping]] = ...) -> None: ... - ISNULL_FIELD_NUMBER: _ClassVar[int] VALUE_FIELD_NUMBER: _ClassVar[int] - isNull: bool + ISNULL_FIELD_NUMBER: _ClassVar[int] value: _containers.MessageMap[str, CustomDataValue] + isNull: bool def __init__(self, value: _Optional[_Mapping[str, CustomDataValue]] = ..., isNull: bool = ...) -> None: ... -class NullableDouble(_message.Message): - __slots__ = ["isNull", "value"] - ISNULL_FIELD_NUMBER: _ClassVar[int] - VALUE_FIELD_NUMBER: _ClassVar[int] - isNull: bool - value: float - def __init__(self, value: _Optional[float] = ..., isNull: bool = ...) -> None: ... +class VariableForUserParams_PB(_message.Message): + __slots__ = ("sdkKey", "variableKey", "variableType", "user", "shouldTrackEvent") + SDKKEY_FIELD_NUMBER: _ClassVar[int] + VARIABLEKEY_FIELD_NUMBER: _ClassVar[int] + VARIABLETYPE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + SHOULDTRACKEVENT_FIELD_NUMBER: _ClassVar[int] + sdkKey: str + variableKey: str + variableType: VariableType_PB + user: DVCUser_PB + shouldTrackEvent: bool + def __init__(self, sdkKey: _Optional[str] = ..., variableKey: _Optional[str] = ..., variableType: _Optional[_Union[VariableType_PB, str]] = ..., user: _Optional[_Union[DVCUser_PB, _Mapping]] = ..., shouldTrackEvent: bool = ...) -> None: ... -class NullableString(_message.Message): - __slots__ = ["isNull", "value"] - ISNULL_FIELD_NUMBER: _ClassVar[int] - VALUE_FIELD_NUMBER: _ClassVar[int] - isNull: bool - value: str - def __init__(self, value: _Optional[str] = ..., isNull: bool = ...) -> None: ... +class DVCUser_PB(_message.Message): + __slots__ = ("user_id", "email", "name", "language", "country", "appBuild", "appVersion", "deviceModel", "customData", "privateCustomData") + USER_ID_FIELD_NUMBER: _ClassVar[int] + EMAIL_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + LANGUAGE_FIELD_NUMBER: _ClassVar[int] + COUNTRY_FIELD_NUMBER: _ClassVar[int] + APPBUILD_FIELD_NUMBER: _ClassVar[int] + APPVERSION_FIELD_NUMBER: _ClassVar[int] + DEVICEMODEL_FIELD_NUMBER: _ClassVar[int] + CUSTOMDATA_FIELD_NUMBER: _ClassVar[int] + PRIVATECUSTOMDATA_FIELD_NUMBER: _ClassVar[int] + user_id: str + email: NullableString + name: NullableString + language: NullableString + country: NullableString + appBuild: NullableDouble + appVersion: NullableString + deviceModel: NullableString + customData: NullableCustomData + privateCustomData: NullableCustomData + def __init__(self, user_id: _Optional[str] = ..., email: _Optional[_Union[NullableString, _Mapping]] = ..., name: _Optional[_Union[NullableString, _Mapping]] = ..., language: _Optional[_Union[NullableString, _Mapping]] = ..., country: _Optional[_Union[NullableString, _Mapping]] = ..., appBuild: _Optional[_Union[NullableDouble, _Mapping]] = ..., appVersion: _Optional[_Union[NullableString, _Mapping]] = ..., deviceModel: _Optional[_Union[NullableString, _Mapping]] = ..., customData: _Optional[_Union[NullableCustomData, _Mapping]] = ..., privateCustomData: _Optional[_Union[NullableCustomData, _Mapping]] = ...) -> None: ... class SDKVariable_PB(_message.Message): - __slots__ = ["_id", "boolValue", "doubleValue", "evalReason", "key", "stringValue", "type"] + __slots__ = ("_id", "type", "key", "boolValue", "doubleValue", "stringValue", "evalReason", "_feature", "eval") + _ID_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_FIELD_NUMBER: _ClassVar[int] BOOLVALUE_FIELD_NUMBER: _ClassVar[int] DOUBLEVALUE_FIELD_NUMBER: _ClassVar[int] - EVALREASON_FIELD_NUMBER: _ClassVar[int] - KEY_FIELD_NUMBER: _ClassVar[int] STRINGVALUE_FIELD_NUMBER: _ClassVar[int] - TYPE_FIELD_NUMBER: _ClassVar[int] - _ID_FIELD_NUMBER: _ClassVar[int] + EVALREASON_FIELD_NUMBER: _ClassVar[int] + _FEATURE_FIELD_NUMBER: _ClassVar[int] + EVAL_FIELD_NUMBER: _ClassVar[int] _id: str + type: VariableType_PB + key: str boolValue: bool doubleValue: float - evalReason: NullableString - key: str stringValue: str - type: VariableType_PB - def __init__(self, _id: _Optional[str] = ..., type: _Optional[_Union[VariableType_PB, str]] = ..., key: _Optional[str] = ..., boolValue: bool = ..., doubleValue: _Optional[float] = ..., stringValue: _Optional[str] = ..., evalReason: _Optional[_Union[NullableString, _Mapping]] = ...) -> None: ... - -class VariableForUserParams_PB(_message.Message): - __slots__ = ["sdkKey", "shouldTrackEvent", "user", "variableKey", "variableType"] - SDKKEY_FIELD_NUMBER: _ClassVar[int] - SHOULDTRACKEVENT_FIELD_NUMBER: _ClassVar[int] - USER_FIELD_NUMBER: _ClassVar[int] - VARIABLEKEY_FIELD_NUMBER: _ClassVar[int] - VARIABLETYPE_FIELD_NUMBER: _ClassVar[int] - sdkKey: str - shouldTrackEvent: bool - user: DVCUser_PB - variableKey: str - variableType: VariableType_PB - def __init__(self, sdkKey: _Optional[str] = ..., variableKey: _Optional[str] = ..., variableType: _Optional[_Union[VariableType_PB, str]] = ..., user: _Optional[_Union[DVCUser_PB, _Mapping]] = ..., shouldTrackEvent: bool = ...) -> None: ... - -class VariableType_PB(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] + evalReason: NullableString + _feature: NullableString + eval: EvalReason_PB + def __init__(self, _id: _Optional[str] = ..., type: _Optional[_Union[VariableType_PB, str]] = ..., key: _Optional[str] = ..., boolValue: bool = ..., doubleValue: _Optional[float] = ..., stringValue: _Optional[str] = ..., evalReason: _Optional[_Union[NullableString, _Mapping]] = ..., _feature: _Optional[_Union[NullableString, _Mapping]] = ..., eval: _Optional[_Union[EvalReason_PB, _Mapping]] = ...) -> None: ... -class CustomDataType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] +class EvalReason_PB(_message.Message): + __slots__ = ("reason", "details", "target_id") + REASON_FIELD_NUMBER: _ClassVar[int] + DETAILS_FIELD_NUMBER: _ClassVar[int] + TARGET_ID_FIELD_NUMBER: _ClassVar[int] + reason: str + details: str + target_id: str + def __init__(self, reason: _Optional[str] = ..., details: _Optional[str] = ..., target_id: _Optional[str] = ...) -> None: ... diff --git a/protobuf/variableForUserParams.proto b/protobuf/variableForUserParams.proto index f1f31d2..5320095 100644 --- a/protobuf/variableForUserParams.proto +++ b/protobuf/variableForUserParams.proto @@ -70,4 +70,12 @@ message SDKVariable_PB { double doubleValue = 5; string stringValue = 6; NullableString evalReason = 7; + NullableString _feature = 8; + EvalReason_PB eval = 9; +} + +message EvalReason_PB { + string reason = 1; + string details = 2; + string target_id = 3; } diff --git a/update_wasm_lib.sh b/update_wasm_lib.sh index 40a363b..93b0472 100755 --- a/update_wasm_lib.sh +++ b/update_wasm_lib.sh @@ -1,6 +1,6 @@ #!/bin/bash -BUCKETING_LIB_VERSION="1.35.1" +BUCKETING_LIB_VERSION="1.40.2" if [[ -n "$1" ]]; then BUCKETING_LIB_VERSION="$1" From 0b18ac83384f813112ad3a0624b936c5f8df52e6 Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Mon, 28 Jul 2025 14:26:32 -0400 Subject: [PATCH 02/12] handle local bucketing eval reason --- devcycle_python_sdk/api/local_bucketing.py | 9 +----- devcycle_python_sdk/local_client.py | 31 +++++++++++------- devcycle_python_sdk/models/eval_reason.py | 37 ++++++++++++++++++++++ devcycle_python_sdk/models/variable.py | 33 +++++++++++++++---- devcycle_python_sdk/protobuf/utils.py | 18 +++++++++++ 5 files changed, 103 insertions(+), 25 deletions(-) create mode 100644 devcycle_python_sdk/models/eval_reason.py diff --git a/devcycle_python_sdk/api/local_bucketing.py b/devcycle_python_sdk/api/local_bucketing.py index 4a26b01..69f15c3 100644 --- a/devcycle_python_sdk/api/local_bucketing.py +++ b/devcycle_python_sdk/api/local_bucketing.py @@ -323,14 +323,7 @@ def get_variable_for_user_protobuf( var_bytes = self._read_assembly_script_byte_array(variable_addr) sdk_variable = pb2.SDKVariable_PB() sdk_variable.ParseFromString(var_bytes) - - if sdk_variable.type != pb_variable_type: - # this situation should never actually happen because the WASM handles - # it internally and returns a null value from the WASM function - # This check is here just in case that logic changes in the future - raise VariableTypeMismatchError( - f"Variable returned does not match requested type: {pb_variable_type}" - ) + return pb_utils.create_variable(sdk_variable, default_value) def generate_bucketed_config(self, user: DevCycleUser) -> BucketedConfig: diff --git a/devcycle_python_sdk/local_client.py b/devcycle_python_sdk/local_client.py index cacaac2..ed18ba9 100644 --- a/devcycle_python_sdk/local_client.py +++ b/devcycle_python_sdk/local_client.py @@ -17,6 +17,7 @@ from devcycle_python_sdk.models.bucketed_config import BucketedConfig from devcycle_python_sdk.models.eval_hook import EvalHook from devcycle_python_sdk.models.eval_hook_context import HookContext +from devcycle_python_sdk.models.eval_reason import DefaultReasonDetails, EvalReason, EvalReasons from devcycle_python_sdk.models.event import DevCycleEvent, EventType from devcycle_python_sdk.models.feature import Feature from devcycle_python_sdk.models.platform_data import default_platform_data @@ -139,7 +140,7 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable logger.warning( f"DevCycle: Unable to track AggVariableDefaulted event for Variable {key}: {e}" ) - return Variable.create_default_variable(key, default_value) + return Variable.create_default_variable(key, default_value, DefaultReasonDetails.MISSING_CONFIG) context = HookContext(key, user, default_value) variable = Variable.create_default_variable( @@ -159,22 +160,30 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable ) if bucketed_variable is not None: variable = bucketed_variable + else: + variable.eval = EvalReason( + reason=EvalReasons.DEFAULT, + details=DefaultReasonDetails.USER_NOT_TARGETED + ) if before_hook_error is None: self.eval_hooks_manager.run_after(context, variable) else: raise before_hook_error - except VariableTypeMismatchError: - logger.debug("DevCycle: Variable type mismatch, returning default value") - return variable - except BeforeHookError as e: - self.eval_hooks_manager.run_error(context, e) - return variable - except AfterHookError as e: - self.eval_hooks_manager.run_error(context, e) - return variable except Exception as e: - logger.warning(f"DevCycle: Error retrieving variable for user: {e}") + variable.eval = EvalReason( + reason=EvalReasons.DEFAULT, + details=DefaultReasonDetails.ERROR + ) + + if isinstance(e, BeforeHookError): + self.eval_hooks_manager.run_error(context, e) + elif isinstance(e, AfterHookError): + self.eval_hooks_manager.run_error(context, e) + else: + logger.warning( + f"DevCycle: Error retrieving variable for user: {e}") + return variable finally: self.eval_hooks_manager.run_finally(context, variable) diff --git a/devcycle_python_sdk/models/eval_reason.py b/devcycle_python_sdk/models/eval_reason.py new file mode 100644 index 0000000..8648fd3 --- /dev/null +++ b/devcycle_python_sdk/models/eval_reason.py @@ -0,0 +1,37 @@ +from dataclasses import dataclass +from typing import Optional + + +class EvalReasons: + """Evaluation reasons constants""" + DEFAULT = "DEFAULT" + + +class DefaultReasonDetails: + """Default reason details constants""" + MISSING_CONFIG = "Missing Config" + USER_NOT_TARGETED = "User Not Targeted" + TYPE_MISMATCH = "Variable Type Mismatch" + ERROR = "Error" + + +@dataclass(order=False) +class EvalReason: + reason: str + details: Optional[str] = None + target_id: Optional[str] = None + + def to_json(self): + return { + key: getattr(self, key) + for key in self.__dataclass_fields__ + if getattr(self, key) is not None + } + + @classmethod + def from_json(cls, data: dict) -> "EvalReason": + return cls( + reason=data["reason"], + details=data.get("details"), + target_id=data.get("target_id"), + ) \ No newline at end of file diff --git a/devcycle_python_sdk/models/variable.py b/devcycle_python_sdk/models/variable.py index bce1268..273a5c1 100644 --- a/devcycle_python_sdk/models/variable.py +++ b/devcycle_python_sdk/models/variable.py @@ -2,6 +2,8 @@ from dataclasses import dataclass from typing import Optional, Any +from .eval_reason import EvalReason, EvalReasons, DefaultReasonDetails + class TypeEnum: BOOLEAN = "Boolean" @@ -32,16 +34,26 @@ class Variable: isDefaulted: Optional[bool] = False defaultValue: Any = None evalReason: Optional[str] = None + eval: Optional[EvalReason] = None def to_json(self): - return { - key: getattr(self, key) - for key in self.__dataclass_fields__ - if getattr(self, key) is not None - } + result = {} + for key in self.__dataclass_fields__: + value = getattr(self, key) + if value is not None: + if key == "eval" and isinstance(value, EvalReason): + result[key] = value.to_json() + else: + result[key] = value + return result @classmethod def from_json(cls, data: dict) -> "Variable": + eval_data = data.get("eval") + eval_reason = None + if eval_data: + eval_reason = EvalReason.from_json(eval_data) + return cls( _id=data["_id"], key=data["key"], @@ -50,11 +62,19 @@ def from_json(cls, data: dict) -> "Variable": isDefaulted=data.get("isDefaulted", None), defaultValue=data.get("defaultValue"), evalReason=data.get("evalReason"), + eval=eval_reason, ) @staticmethod - def create_default_variable(key: str, default_value: Any) -> "Variable": + def create_default_variable(key: str, default_value: Any, default_reason_detail: str = None) -> "Variable": var_type = determine_variable_type(default_value) + if default_reason_detail is not None: + eval_reason = EvalReason( + reason=EvalReasons.DEFAULT, + details=default_reason_detail + ) + else: + eval_reason = None return Variable( _id=None, key=key, @@ -62,4 +82,5 @@ def create_default_variable(key: str, default_value: Any) -> "Variable": value=default_value, defaultValue=default_value, isDefaulted=True, + eval=eval_reason, ) diff --git a/devcycle_python_sdk/protobuf/utils.py b/devcycle_python_sdk/protobuf/utils.py index da6e821..2c28d06 100644 --- a/devcycle_python_sdk/protobuf/utils.py +++ b/devcycle_python_sdk/protobuf/utils.py @@ -5,6 +5,7 @@ from typing import Any, Optional from devcycle_python_sdk.models.variable import TypeEnum, Variable +from devcycle_python_sdk.models.eval_reason import EvalReason from devcycle_python_sdk.models.user import DevCycleUser import devcycle_python_sdk.protobuf.variableForUserParams_pb2 as pb2 @@ -82,7 +83,20 @@ def create_dvcuser_pb(user: DevCycleUser) -> pb2.DVCUser_PB: # type: ignore ) +def create_eval_reason_from_pb(eval_reason_pb: pb2.EvalReason_PB) -> EvalReason: # type: ignore + """Convert EvalReason_PB protobuf message to EvalReason object""" + return EvalReason( + reason=eval_reason_pb.reason, + details=eval_reason_pb.details if eval_reason_pb.details else None, + target_id=eval_reason_pb.target_id if eval_reason_pb.target_id else None, + ) + + def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Variable: # type: ignore + eval_reason_obj = None + if sdk_variable.HasField('eval'): + eval_reason_obj = create_eval_reason_from_pb(sdk_variable.eval) + if sdk_variable.type == pb2.VariableType_PB.Boolean: # type: ignore return Variable( _id=None, @@ -91,6 +105,7 @@ def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Var type=TypeEnum.BOOLEAN, isDefaulted=False, defaultValue=default_value, + eval=eval_reason_obj, ) elif sdk_variable.type == pb2.VariableType_PB.String: # type: ignore @@ -101,6 +116,7 @@ def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Var type=TypeEnum.STRING, isDefaulted=False, defaultValue=default_value, + eval=eval_reason_obj, ) elif sdk_variable.type == pb2.VariableType_PB.Number: # type: ignore @@ -111,6 +127,7 @@ def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Var type=TypeEnum.NUMBER, isDefaulted=False, defaultValue=default_value, + eval=eval_reason_obj, ) elif sdk_variable.type == pb2.VariableType_PB.JSON: # type: ignore @@ -123,6 +140,7 @@ def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Var type=TypeEnum.JSON, isDefaulted=False, defaultValue=default_value, + eval=eval_reason_obj, ) else: From 8d5dabd285207f374166b12c532c0cbb01a863fe Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Mon, 28 Jul 2025 14:37:09 -0400 Subject: [PATCH 03/12] update test harness --- .github/workflows/run-test-harness.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run-test-harness.yml b/.github/workflows/run-test-harness.yml index cbdb732..8e94194 100644 --- a/.github/workflows/run-test-harness.yml +++ b/.github/workflows/run-test-harness.yml @@ -14,7 +14,8 @@ jobs: steps: - uses: DevCycleHQ/test-harness@main env: - SDK_CAPABILITIES: '["clientCustomData","v2Config","EdgeDB","CloudBucketing"]' + SDK_CAPABILITIES: with: sdks-to-test: python sdk-github-sha: ${{github.event.pull_request.head.sha}} + sdk-capabilities: '["cloud", "edgeDB", "clientCustomData","v2Config", "allVariables", "allFeatures", "evalReason"]' From e7c2c4807db0a7a9ee2f6975784915ed1c13fb21 Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Mon, 28 Jul 2025 14:42:46 -0400 Subject: [PATCH 04/12] fix lint --- devcycle_python_sdk/api/local_bucketing.py | 3 +-- devcycle_python_sdk/local_client.py | 1 - devcycle_python_sdk/models/eval_reason.py | 2 +- devcycle_python_sdk/models/variable.py | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/devcycle_python_sdk/api/local_bucketing.py b/devcycle_python_sdk/api/local_bucketing.py index 69f15c3..5786bf2 100644 --- a/devcycle_python_sdk/api/local_bucketing.py +++ b/devcycle_python_sdk/api/local_bucketing.py @@ -22,7 +22,6 @@ import devcycle_python_sdk.protobuf.utils as pb_utils import devcycle_python_sdk.protobuf.variableForUserParams_pb2 as pb2 from devcycle_python_sdk.exceptions import ( - VariableTypeMismatchError, MalformedConfigError, ) from devcycle_python_sdk.models.bucketed_config import BucketedConfig @@ -323,7 +322,7 @@ def get_variable_for_user_protobuf( var_bytes = self._read_assembly_script_byte_array(variable_addr) sdk_variable = pb2.SDKVariable_PB() sdk_variable.ParseFromString(var_bytes) - + return pb_utils.create_variable(sdk_variable, default_value) def generate_bucketed_config(self, user: DevCycleUser) -> BucketedConfig: diff --git a/devcycle_python_sdk/local_client.py b/devcycle_python_sdk/local_client.py index ed18ba9..84575b2 100644 --- a/devcycle_python_sdk/local_client.py +++ b/devcycle_python_sdk/local_client.py @@ -6,7 +6,6 @@ from devcycle_python_sdk import DevCycleLocalOptions, AbstractDevCycleClient from devcycle_python_sdk.api.local_bucketing import LocalBucketing -from devcycle_python_sdk.exceptions import VariableTypeMismatchError from devcycle_python_sdk.managers.config_manager import EnvironmentConfigManager from devcycle_python_sdk.managers.eval_hooks_manager import ( EvalHooksManager, diff --git a/devcycle_python_sdk/models/eval_reason.py b/devcycle_python_sdk/models/eval_reason.py index 8648fd3..b563aef 100644 --- a/devcycle_python_sdk/models/eval_reason.py +++ b/devcycle_python_sdk/models/eval_reason.py @@ -34,4 +34,4 @@ def from_json(cls, data: dict) -> "EvalReason": reason=data["reason"], details=data.get("details"), target_id=data.get("target_id"), - ) \ No newline at end of file + ) diff --git a/devcycle_python_sdk/models/variable.py b/devcycle_python_sdk/models/variable.py index 273a5c1..0d7923c 100644 --- a/devcycle_python_sdk/models/variable.py +++ b/devcycle_python_sdk/models/variable.py @@ -2,7 +2,7 @@ from dataclasses import dataclass from typing import Optional, Any -from .eval_reason import EvalReason, EvalReasons, DefaultReasonDetails +from .eval_reason import EvalReason, EvalReasons class TypeEnum: From 3abf2eec56e8c6b0b7cf29de3ffd48883ceb5f6d Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Mon, 28 Jul 2025 15:01:22 -0400 Subject: [PATCH 05/12] update unit tests --- test/api/test_local_bucketing.py | 11 +++++++++++ test/test_local_client.py | 12 +++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/test/api/test_local_bucketing.py b/test/api/test_local_bucketing.py index a01f9f4..e016e61 100644 --- a/test/api/test_local_bucketing.py +++ b/test/api/test_local_bucketing.py @@ -10,6 +10,7 @@ Project, ProjectSettings, ) +from devcycle_python_sdk.models.eval_reason import EvalReason from devcycle_python_sdk.models.feature import Feature from devcycle_python_sdk.models.variable import Variable from devcycle_python_sdk.models.platform_data import default_platform_data @@ -155,6 +156,11 @@ def test_generate_bucketed_config(self): evalReason=None, ) } + expected_eval = EvalReason( + reason='TARGETING_MATCH', + details='All Users', + target_id='63125321d31c601f992288bc' + ) expected_variables = { "a-cool-new-feature": Variable( _id="62fbf6566f1ba302829f9e34", @@ -164,6 +170,7 @@ def test_generate_bucketed_config(self): isDefaulted=None, defaultValue=None, evalReason=None, + eval=expected_eval, ), "string-var": Variable( _id="63125320a4719939fd57cb2b", @@ -173,6 +180,7 @@ def test_generate_bucketed_config(self): isDefaulted=None, defaultValue=None, evalReason=None, + eval=expected_eval, ), "json-var": Variable( _id="64372363125123fca69d3f7b", @@ -186,6 +194,7 @@ def test_generate_bucketed_config(self): isDefaulted=None, defaultValue=None, evalReason=None, + eval=expected_eval, ), "num-var": Variable( _id="65272363125123fca69d3a7d", @@ -195,6 +204,7 @@ def test_generate_bucketed_config(self): isDefaulted=None, defaultValue=None, evalReason=None, + eval=expected_eval, ), "float-var": Variable( _id="61200363125123fca69d3a7a", @@ -204,6 +214,7 @@ def test_generate_bucketed_config(self): isDefaulted=None, defaultValue=None, evalReason=None, + eval=expected_eval, ), } diff --git a/test/test_local_client.py b/test/test_local_client.py index 2e033e1..0a8143d 100644 --- a/test/test_local_client.py +++ b/test/test_local_client.py @@ -10,6 +10,7 @@ from devcycle_python_sdk.local_client import _validate_user, _validate_sdk_key from devcycle_python_sdk.exceptions import MalformedConfigError from devcycle_python_sdk.models.eval_hook import EvalHook +from devcycle_python_sdk.models.eval_reason import EvalReason from devcycle_python_sdk.models.event import DevCycleEvent from devcycle_python_sdk.models.feature import Feature from devcycle_python_sdk.api.local_bucketing import LocalBucketing @@ -294,7 +295,11 @@ def test_all_variables(self): user = DevCycleUser(user_id="1234") result = self.client.all_variables(user) - + expected_eval = EvalReason( + reason='TARGETING_MATCH', + details='All Users', + target_id='63125321d31c601f992288bc' + ) expected_variables = { "a-cool-new-feature": Variable( _id="62fbf6566f1ba302829f9e34", @@ -304,6 +309,7 @@ def test_all_variables(self): isDefaulted=None, defaultValue=None, evalReason=None, + eval=expected_eval, ), "string-var": Variable( _id="63125320a4719939fd57cb2b", @@ -313,6 +319,7 @@ def test_all_variables(self): isDefaulted=None, defaultValue=None, evalReason=None, + eval=expected_eval, ), "json-var": Variable( _id="64372363125123fca69d3f7b", @@ -326,6 +333,7 @@ def test_all_variables(self): isDefaulted=None, defaultValue=None, evalReason=None, + eval=expected_eval, ), "num-var": Variable( _id="65272363125123fca69d3a7d", @@ -335,6 +343,7 @@ def test_all_variables(self): isDefaulted=None, defaultValue=None, evalReason=None, + eval=expected_eval, ), "float-var": Variable( _id="61200363125123fca69d3a7a", @@ -344,6 +353,7 @@ def test_all_variables(self): isDefaulted=None, defaultValue=None, evalReason=None, + eval=expected_eval, ), } self.assertEqual(result, expected_variables) From 28b21cd950ca962a9d70c834530c2170a1625d92 Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Mon, 28 Jul 2025 15:10:52 -0400 Subject: [PATCH 06/12] run black formatter --- devcycle_python_sdk/local_client.py | 18 +++++++++++------- devcycle_python_sdk/models/eval_reason.py | 2 ++ devcycle_python_sdk/models/variable.py | 7 ++++--- devcycle_python_sdk/protobuf/utils.py | 2 +- test/api/test_local_bucketing.py | 6 +++--- test/test_local_client.py | 6 +++--- 6 files changed, 24 insertions(+), 17 deletions(-) diff --git a/devcycle_python_sdk/local_client.py b/devcycle_python_sdk/local_client.py index 84575b2..dbf97b5 100644 --- a/devcycle_python_sdk/local_client.py +++ b/devcycle_python_sdk/local_client.py @@ -16,7 +16,11 @@ from devcycle_python_sdk.models.bucketed_config import BucketedConfig from devcycle_python_sdk.models.eval_hook import EvalHook from devcycle_python_sdk.models.eval_hook_context import HookContext -from devcycle_python_sdk.models.eval_reason import DefaultReasonDetails, EvalReason, EvalReasons +from devcycle_python_sdk.models.eval_reason import ( + DefaultReasonDetails, + EvalReason, + EvalReasons, +) from devcycle_python_sdk.models.event import DevCycleEvent, EventType from devcycle_python_sdk.models.feature import Feature from devcycle_python_sdk.models.platform_data import default_platform_data @@ -139,7 +143,9 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable logger.warning( f"DevCycle: Unable to track AggVariableDefaulted event for Variable {key}: {e}" ) - return Variable.create_default_variable(key, default_value, DefaultReasonDetails.MISSING_CONFIG) + return Variable.create_default_variable( + key, default_value, DefaultReasonDetails.MISSING_CONFIG + ) context = HookContext(key, user, default_value) variable = Variable.create_default_variable( @@ -162,7 +168,7 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable else: variable.eval = EvalReason( reason=EvalReasons.DEFAULT, - details=DefaultReasonDetails.USER_NOT_TARGETED + details=DefaultReasonDetails.USER_NOT_TARGETED, ) if before_hook_error is None: @@ -171,8 +177,7 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable raise before_hook_error except Exception as e: variable.eval = EvalReason( - reason=EvalReasons.DEFAULT, - details=DefaultReasonDetails.ERROR + reason=EvalReasons.DEFAULT, details=DefaultReasonDetails.ERROR ) if isinstance(e, BeforeHookError): @@ -180,8 +185,7 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable elif isinstance(e, AfterHookError): self.eval_hooks_manager.run_error(context, e) else: - logger.warning( - f"DevCycle: Error retrieving variable for user: {e}") + logger.warning(f"DevCycle: Error retrieving variable for user: {e}") return variable finally: diff --git a/devcycle_python_sdk/models/eval_reason.py b/devcycle_python_sdk/models/eval_reason.py index b563aef..0ce422f 100644 --- a/devcycle_python_sdk/models/eval_reason.py +++ b/devcycle_python_sdk/models/eval_reason.py @@ -4,11 +4,13 @@ class EvalReasons: """Evaluation reasons constants""" + DEFAULT = "DEFAULT" class DefaultReasonDetails: """Default reason details constants""" + MISSING_CONFIG = "Missing Config" USER_NOT_TARGETED = "User Not Targeted" TYPE_MISMATCH = "Variable Type Mismatch" diff --git a/devcycle_python_sdk/models/variable.py b/devcycle_python_sdk/models/variable.py index 0d7923c..c78b059 100644 --- a/devcycle_python_sdk/models/variable.py +++ b/devcycle_python_sdk/models/variable.py @@ -66,12 +66,13 @@ def from_json(cls, data: dict) -> "Variable": ) @staticmethod - def create_default_variable(key: str, default_value: Any, default_reason_detail: str = None) -> "Variable": + def create_default_variable( + key: str, default_value: Any, default_reason_detail: str = None + ) -> "Variable": var_type = determine_variable_type(default_value) if default_reason_detail is not None: eval_reason = EvalReason( - reason=EvalReasons.DEFAULT, - details=default_reason_detail + reason=EvalReasons.DEFAULT, details=default_reason_detail ) else: eval_reason = None diff --git a/devcycle_python_sdk/protobuf/utils.py b/devcycle_python_sdk/protobuf/utils.py index 2c28d06..c433bf6 100644 --- a/devcycle_python_sdk/protobuf/utils.py +++ b/devcycle_python_sdk/protobuf/utils.py @@ -94,7 +94,7 @@ def create_eval_reason_from_pb(eval_reason_pb: pb2.EvalReason_PB) -> EvalReason: def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Variable: # type: ignore eval_reason_obj = None - if sdk_variable.HasField('eval'): + if sdk_variable.HasField("eval"): eval_reason_obj = create_eval_reason_from_pb(sdk_variable.eval) if sdk_variable.type == pb2.VariableType_PB.Boolean: # type: ignore diff --git a/test/api/test_local_bucketing.py b/test/api/test_local_bucketing.py index e016e61..207f10c 100644 --- a/test/api/test_local_bucketing.py +++ b/test/api/test_local_bucketing.py @@ -157,9 +157,9 @@ def test_generate_bucketed_config(self): ) } expected_eval = EvalReason( - reason='TARGETING_MATCH', - details='All Users', - target_id='63125321d31c601f992288bc' + reason="TARGETING_MATCH", + details="All Users", + target_id="63125321d31c601f992288bc", ) expected_variables = { "a-cool-new-feature": Variable( diff --git a/test/test_local_client.py b/test/test_local_client.py index 0a8143d..2832da8 100644 --- a/test/test_local_client.py +++ b/test/test_local_client.py @@ -296,9 +296,9 @@ def test_all_variables(self): result = self.client.all_variables(user) expected_eval = EvalReason( - reason='TARGETING_MATCH', - details='All Users', - target_id='63125321d31c601f992288bc' + reason="TARGETING_MATCH", + details="All Users", + target_id="63125321d31c601f992288bc", ) expected_variables = { "a-cool-new-feature": Variable( From 60310142cd266d2f0c781e1ecefbad7e98bf4d66 Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Mon, 28 Jul 2025 15:35:55 -0400 Subject: [PATCH 07/12] cloud eval reason --- .github/workflows/run-test-harness.yml | 2 +- devcycle_python_sdk/api/bucketing_client.py | 2 ++ devcycle_python_sdk/cloud_client.py | 17 ++++++++++++++--- devcycle_python_sdk/models/eval_reason.py | 1 + 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/.github/workflows/run-test-harness.yml b/.github/workflows/run-test-harness.yml index 8e94194..7e02b1b 100644 --- a/.github/workflows/run-test-harness.yml +++ b/.github/workflows/run-test-harness.yml @@ -18,4 +18,4 @@ jobs: with: sdks-to-test: python sdk-github-sha: ${{github.event.pull_request.head.sha}} - sdk-capabilities: '["cloud", "edgeDB", "clientCustomData","v2Config", "allVariables", "allFeatures", "evalReason"]' + sdk-capabilities: '["cloud", "edgeDB", "clientCustomData","v2Config", "allVariables", "allFeatures", "evalReason", "cloudEvalReason"]' diff --git a/devcycle_python_sdk/api/bucketing_client.py b/devcycle_python_sdk/api/bucketing_client.py index 1fc9254..2540ee7 100644 --- a/devcycle_python_sdk/api/bucketing_client.py +++ b/devcycle_python_sdk/api/bucketing_client.py @@ -15,6 +15,7 @@ from devcycle_python_sdk.models.feature import Feature from devcycle_python_sdk.models.user import DevCycleUser from devcycle_python_sdk.models.variable import Variable +from devcycle_python_sdk.models.eval_reason import EvalReason from devcycle_python_sdk.util.strings import slash_join logger = logging.getLogger(__name__) @@ -96,6 +97,7 @@ def variable(self, key: str, user: DevCycleUser) -> Variable: key=data.get("key", ""), type=data.get("type", ""), value=data.get("value"), + eval=EvalReason.from_json(data.get("eval")) if data.get("eval") else None, ) def variables(self, user: DevCycleUser) -> Dict[str, Variable]: diff --git a/devcycle_python_sdk/cloud_client.py b/devcycle_python_sdk/cloud_client.py index dd21e63..fcdd6dd 100644 --- a/devcycle_python_sdk/cloud_client.py +++ b/devcycle_python_sdk/cloud_client.py @@ -14,6 +14,11 @@ BeforeHookError, AfterHookError, ) +from devcycle_python_sdk.models.eval_reason import ( + DefaultReasonDetails, + EvalReason, + EvalReasons, +) from devcycle_python_sdk.models.eval_hook import EvalHook from devcycle_python_sdk.models.eval_hook_context import HookContext from devcycle_python_sdk.models.user import DevCycleUser @@ -121,7 +126,9 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable except NotFoundError: logger.warning(f"DevCycle: Variable not found: {key}") return Variable.create_default_variable( - key=key, default_value=default_value + key=key, + default_value=default_value, + default_reason_detail=DefaultReasonDetails.MISSING_VARIABLE, ) except BeforeHookError as e: self.eval_hooks_manager.run_error(context, e) @@ -130,7 +137,9 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable except Exception as e: logger.error(f"DevCycle: Error evaluating variable: {e}") return Variable.create_default_variable( - key=key, default_value=default_value + key=key, + default_value=default_value, + default_reason_detail=DefaultReasonDetails.ERROR, ) finally: self.eval_hooks_manager.run_finally(context, variable) @@ -143,7 +152,9 @@ def variable(self, user: DevCycleUser, key: str, default_value: Any) -> Variable f"DevCycle: Variable {key} is type {type(variable.value)}, but default value is type {type(default_value)}", ) return Variable.create_default_variable( - key=key, default_value=default_value + key=key, + default_value=default_value, + default_reason_detail=DefaultReasonDetails.TYPE_MISMATCH, ) return variable diff --git a/devcycle_python_sdk/models/eval_reason.py b/devcycle_python_sdk/models/eval_reason.py index 0ce422f..ae93984 100644 --- a/devcycle_python_sdk/models/eval_reason.py +++ b/devcycle_python_sdk/models/eval_reason.py @@ -14,6 +14,7 @@ class DefaultReasonDetails: MISSING_CONFIG = "Missing Config" USER_NOT_TARGETED = "User Not Targeted" TYPE_MISMATCH = "Variable Type Mismatch" + MISSING_VARIABLE = "Missing Variable" ERROR = "Error" From 02ce1d0926ed5ee4d7190997d4584ae804bb5317 Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Mon, 28 Jul 2025 15:40:04 -0400 Subject: [PATCH 08/12] fix lint --- devcycle_python_sdk/api/bucketing_client.py | 5 +++++ devcycle_python_sdk/cloud_client.py | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/devcycle_python_sdk/api/bucketing_client.py b/devcycle_python_sdk/api/bucketing_client.py index 2540ee7..8a4dc90 100644 --- a/devcycle_python_sdk/api/bucketing_client.py +++ b/devcycle_python_sdk/api/bucketing_client.py @@ -111,6 +111,11 @@ def variables(self, user: DevCycleUser) -> Dict[str, Variable]: type=str(value.get("type")), value=value.get("value"), isDefaulted=None, + eval=( + EvalReason.from_json(value.get("eval")) + if value.get("eval") + else None + ), ) return result diff --git a/devcycle_python_sdk/cloud_client.py b/devcycle_python_sdk/cloud_client.py index fcdd6dd..0a78e97 100644 --- a/devcycle_python_sdk/cloud_client.py +++ b/devcycle_python_sdk/cloud_client.py @@ -16,8 +16,6 @@ ) from devcycle_python_sdk.models.eval_reason import ( DefaultReasonDetails, - EvalReason, - EvalReasons, ) from devcycle_python_sdk.models.eval_hook import EvalHook from devcycle_python_sdk.models.eval_hook_context import HookContext From ae4dfef4cd890a836a1744821077e85393a1cda8 Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Mon, 28 Jul 2025 15:57:55 -0400 Subject: [PATCH 09/12] fix mypy lint --- devcycle_python_sdk/api/bucketing_client.py | 7 ++++++- devcycle_python_sdk/models/variable.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/devcycle_python_sdk/api/bucketing_client.py b/devcycle_python_sdk/api/bucketing_client.py index 8a4dc90..698c0fd 100644 --- a/devcycle_python_sdk/api/bucketing_client.py +++ b/devcycle_python_sdk/api/bucketing_client.py @@ -92,12 +92,17 @@ def request(self, method: str, url: str, **kwargs) -> dict: def variable(self, key: str, user: DevCycleUser) -> Variable: data = self.request("POST", self._url("variables", key), json=user.to_json()) + eval_data = data.get("eval") + eval_reason = None + if eval_data is not None and isinstance(eval_data, dict): + eval_reason = EvalReason.from_json(eval_data) + return Variable( _id=data.get("_id"), key=data.get("key", ""), type=data.get("type", ""), value=data.get("value"), - eval=EvalReason.from_json(data.get("eval")) if data.get("eval") else None, + eval=eval_reason, ) def variables(self, user: DevCycleUser) -> Dict[str, Variable]: diff --git a/devcycle_python_sdk/models/variable.py b/devcycle_python_sdk/models/variable.py index c78b059..3bace9b 100644 --- a/devcycle_python_sdk/models/variable.py +++ b/devcycle_python_sdk/models/variable.py @@ -67,7 +67,7 @@ def from_json(cls, data: dict) -> "Variable": @staticmethod def create_default_variable( - key: str, default_value: Any, default_reason_detail: str = None + key: str, default_value: Any, default_reason_detail: Optional[str] = None ) -> "Variable": var_type = determine_variable_type(default_value) if default_reason_detail is not None: From fd37a0a2e37fdba99d03a0db98029e2a17330a20 Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:11:13 -0400 Subject: [PATCH 10/12] fix capability --- .github/workflows/run-test-harness.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/run-test-harness.yml b/.github/workflows/run-test-harness.yml index 7e02b1b..b2b1cb1 100644 --- a/.github/workflows/run-test-harness.yml +++ b/.github/workflows/run-test-harness.yml @@ -13,8 +13,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: DevCycleHQ/test-harness@main - env: - SDK_CAPABILITIES: with: sdks-to-test: python sdk-github-sha: ${{github.event.pull_request.head.sha}} From ab582aade476f89b7ce1e7589499deceab076ea1 Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Tue, 29 Jul 2025 09:15:13 -0400 Subject: [PATCH 11/12] add some tests --- test/test_cloud_client.py | 8 ++++++++ test/test_local_client.py | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/test/test_cloud_client.py b/test/test_cloud_client.py index 5a1c24e..bf960e9 100644 --- a/test/test_cloud_client.py +++ b/test/test_cloud_client.py @@ -5,6 +5,8 @@ from time import time from unittest.mock import patch +from openfeature.flag_evaluation import Reason + from devcycle_python_sdk import DevCycleCloudClient, DevCycleCloudOptions from devcycle_python_sdk.models.eval_hook import EvalHook from devcycle_python_sdk.models.user import DevCycleUser @@ -97,6 +99,8 @@ def test_variable_exceptions(self, mock_variable_call): self.assertIsNotNone(result) self.assertEqual(result.value, "default_value") self.assertTrue(result.isDefaulted) + self.assertEqual(result.eval.reason, "DEFAULT") + self.assertEqual(result.eval.details, "Missing Variable") # other exception - return default mock_variable_call.reset_mock() @@ -105,6 +109,8 @@ def test_variable_exceptions(self, mock_variable_call): self.assertIsNotNone(result) self.assertEqual(result.value, "default_value") self.assertTrue(result.isDefaulted) + self.assertEqual(result.eval.reason, "DEFAULT") + self.assertEqual(result.eval.details, "Error") @patch("devcycle_python_sdk.api.bucketing_client.BucketingAPIClient.variable") def test_variable_type_mismatch(self, mock_variable_call): @@ -116,6 +122,8 @@ def test_variable_type_mismatch(self, mock_variable_call): self.assertIsNotNone(result) self.assertEqual(result.value, "default_value") self.assertTrue(result.isDefaulted) + self.assertEqual(result.eval.reason, "DEFAULT") + self.assertEqual(result.eval.details, "Variable Type Mismatch") @patch("devcycle_python_sdk.api.bucketing_client.BucketingAPIClient.variable") def test_variable_value_defaults(self, mock_variable_call): diff --git a/test/test_local_client.py b/test/test_local_client.py index 2832da8..7764bd7 100644 --- a/test/test_local_client.py +++ b/test/test_local_client.py @@ -209,6 +209,8 @@ def test_variable_default(self): self.assertEqual(result.defaultValue, test_value) self.assertEqual(result.value, test_value) self.assertEqual(result.type, value_type) + self.assertEqual(result.eval.reason, "DEFAULT") + self.assertEqual(result.eval.details, "User Not Targeted") @responses.activate def test_variable_with_bucketing(self): @@ -242,6 +244,9 @@ def test_variable_with_bucketing(self): self.assertDictEqual(result.value, expected, msg="Test key: " + key) else: self.assertEqual(result.value, expected, msg="Test key: " + key) + self.assertEqual(result.eval.reason, "TARGETING_MATCH") + self.assertEqual(result.eval.details, "All Users") + self.assertEqual(result.eval.target_id, "63125321d31c601f992288bc") @responses.activate def test_variable_with_events(self): From 67b4cdae5ca2e2855e18a20cb2ac3ea115d0a29f Mon Sep 17 00:00:00 2001 From: phaym <1431593+phaym@users.noreply.github.com> Date: Tue, 29 Jul 2025 09:16:16 -0400 Subject: [PATCH 12/12] fix lint --- test/test_cloud_client.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_cloud_client.py b/test/test_cloud_client.py index bf960e9..e9e863b 100644 --- a/test/test_cloud_client.py +++ b/test/test_cloud_client.py @@ -5,7 +5,6 @@ from time import time from unittest.mock import patch -from openfeature.flag_evaluation import Reason from devcycle_python_sdk import DevCycleCloudClient, DevCycleCloudOptions from devcycle_python_sdk.models.eval_hook import EvalHook