devcycle-python-server-sdk 3.11.4__py3-none-any.whl → 3.13.0__py3-none-any.whl
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.
- devcycle_python_sdk/VERSION.txt +1 -1
- devcycle_python_sdk/api/bucketing_client.py +12 -0
- devcycle_python_sdk/api/local_bucketing.py +19 -12
- devcycle_python_sdk/bucketing-lib.release.wasm +0 -0
- devcycle_python_sdk/cloud_client.py +14 -5
- devcycle_python_sdk/local_client.py +41 -18
- devcycle_python_sdk/managers/config_manager.py +4 -0
- devcycle_python_sdk/managers/eval_hooks_manager.py +15 -4
- devcycle_python_sdk/managers/event_queue_manager.py +0 -1
- devcycle_python_sdk/managers/sse_manager.py +1 -1
- devcycle_python_sdk/models/config_metadata.py +40 -0
- devcycle_python_sdk/models/environment_metadata.py +26 -0
- devcycle_python_sdk/models/eval_hook.py +5 -2
- devcycle_python_sdk/models/eval_hook_context.py +23 -5
- devcycle_python_sdk/models/eval_reason.py +39 -0
- devcycle_python_sdk/models/project_metadata.py +24 -0
- devcycle_python_sdk/models/variable.py +44 -6
- devcycle_python_sdk/models/variable_metadata.py +22 -0
- devcycle_python_sdk/open_feature_provider/provider.py +10 -5
- devcycle_python_sdk/options.py +1 -1
- devcycle_python_sdk/protobuf/utils.py +27 -3
- devcycle_python_sdk/protobuf/variableForUserParams_pb2.py +36 -31
- devcycle_python_sdk/protobuf/variableForUserParams_pb2.pyi +99 -77
- {devcycle_python_server_sdk-3.11.4.dist-info → devcycle_python_server_sdk-3.13.0.dist-info}/METADATA +2 -2
- {devcycle_python_server_sdk-3.11.4.dist-info → devcycle_python_server_sdk-3.13.0.dist-info}/RECORD +34 -29
- test/api/test_local_bucketing.py +17 -3
- test/models/test_user.py +0 -1
- test/openfeature_test/test_provider.py +79 -3
- test/openfeature_test/test_provider_local_sdk.py +25 -0
- test/test_cloud_client.py +46 -4
- test/test_local_client.py +69 -5
- {devcycle_python_server_sdk-3.11.4.dist-info → devcycle_python_server_sdk-3.13.0.dist-info}/WHEEL +0 -0
- {devcycle_python_server_sdk-3.11.4.dist-info → devcycle_python_server_sdk-3.13.0.dist-info}/licenses/LICENSE +0 -0
- {devcycle_python_server_sdk-3.11.4.dist-info → devcycle_python_server_sdk-3.13.0.dist-info}/top_level.txt +0 -0
|
@@ -80,13 +80,18 @@ class DevCycleProvider(AbstractProvider):
|
|
|
80
80
|
reason=Reason.DEFAULT,
|
|
81
81
|
)
|
|
82
82
|
else:
|
|
83
|
+
# TODO: once eval enabled from cloud bucketing, eval reason won't be null unless defaulted
|
|
84
|
+
if variable.eval and variable.eval.reason:
|
|
85
|
+
reason = variable.eval.reason
|
|
86
|
+
elif variable.isDefaulted:
|
|
87
|
+
reason = Reason.DEFAULT
|
|
88
|
+
else:
|
|
89
|
+
reason = Reason.TARGETING_MATCH
|
|
90
|
+
|
|
83
91
|
return FlagResolutionDetails(
|
|
84
92
|
value=variable.value,
|
|
85
|
-
reason=
|
|
86
|
-
|
|
87
|
-
if variable.isDefaulted
|
|
88
|
-
else Reason.TARGETING_MATCH
|
|
89
|
-
),
|
|
93
|
+
reason=reason,
|
|
94
|
+
flag_metadata=variable.get_flag_meta_data(),
|
|
90
95
|
)
|
|
91
96
|
except ValueError as e:
|
|
92
97
|
# occurs if the key or default value is None
|
devcycle_python_sdk/options.py
CHANGED
|
@@ -90,7 +90,7 @@ class DevCycleLocalOptions:
|
|
|
90
90
|
|
|
91
91
|
if self.event_request_chunk_size > self.max_event_queue_size:
|
|
92
92
|
logger.warning(
|
|
93
|
-
f"DevCycle: event_request_chunk_size: {self.event_request_chunk_size} must be smaller than max_event_queue_size: {
|
|
93
|
+
f"DevCycle: event_request_chunk_size: {self.event_request_chunk_size} must be smaller than max_event_queue_size: {self.max_event_queue_size}"
|
|
94
94
|
)
|
|
95
95
|
self.event_request_chunk_size = 100
|
|
96
96
|
|
|
@@ -5,6 +5,7 @@ import math
|
|
|
5
5
|
from typing import Any, Optional
|
|
6
6
|
|
|
7
7
|
from devcycle_python_sdk.models.variable import TypeEnum, Variable
|
|
8
|
+
from devcycle_python_sdk.models.eval_reason import EvalReason
|
|
8
9
|
from devcycle_python_sdk.models.user import DevCycleUser
|
|
9
10
|
|
|
10
11
|
import devcycle_python_sdk.protobuf.variableForUserParams_pb2 as pb2
|
|
@@ -33,11 +34,17 @@ def create_nullable_custom_data(val: Optional[dict]) -> pb2.NullableCustomData:
|
|
|
33
34
|
if value is None:
|
|
34
35
|
values[key] = pb2.CustomDataValue(type=pb2.CustomDataType.Null) # type: ignore
|
|
35
36
|
elif isinstance(value, bool):
|
|
36
|
-
values[key] = pb2.CustomDataValue(
|
|
37
|
+
values[key] = pb2.CustomDataValue(
|
|
38
|
+
type=pb2.CustomDataType.Bool, boolValue=value
|
|
39
|
+
) # type: ignore
|
|
37
40
|
elif isinstance(value, str):
|
|
38
|
-
values[key] = pb2.CustomDataValue(
|
|
41
|
+
values[key] = pb2.CustomDataValue(
|
|
42
|
+
type=pb2.CustomDataType.Str, stringValue=value
|
|
43
|
+
) # type: ignore
|
|
39
44
|
elif isinstance(value, (int, float)):
|
|
40
|
-
values[key] = pb2.CustomDataValue(
|
|
45
|
+
values[key] = pb2.CustomDataValue(
|
|
46
|
+
type=pb2.CustomDataType.Num, doubleValue=value
|
|
47
|
+
) # type: ignore
|
|
41
48
|
else:
|
|
42
49
|
logger.warning(
|
|
43
50
|
f"Custom Data contains data type that can't be written, will be ignored. Key: {key}, Type: {str(type(value))}"
|
|
@@ -82,7 +89,20 @@ def create_dvcuser_pb(user: DevCycleUser) -> pb2.DVCUser_PB: # type: ignore
|
|
|
82
89
|
)
|
|
83
90
|
|
|
84
91
|
|
|
92
|
+
def create_eval_reason_from_pb(eval_reason_pb: pb2.EvalReason_PB) -> EvalReason: # type: ignore
|
|
93
|
+
"""Convert EvalReason_PB protobuf message to EvalReason object"""
|
|
94
|
+
return EvalReason(
|
|
95
|
+
reason=eval_reason_pb.reason,
|
|
96
|
+
details=eval_reason_pb.details if eval_reason_pb.details else None,
|
|
97
|
+
target_id=eval_reason_pb.target_id if eval_reason_pb.target_id else None,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
|
|
85
101
|
def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Variable: # type: ignore
|
|
102
|
+
eval_reason_obj = None
|
|
103
|
+
if sdk_variable.HasField("eval"):
|
|
104
|
+
eval_reason_obj = create_eval_reason_from_pb(sdk_variable.eval)
|
|
105
|
+
|
|
86
106
|
if sdk_variable.type == pb2.VariableType_PB.Boolean: # type: ignore
|
|
87
107
|
return Variable(
|
|
88
108
|
_id=None,
|
|
@@ -91,6 +111,7 @@ def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Var
|
|
|
91
111
|
type=TypeEnum.BOOLEAN,
|
|
92
112
|
isDefaulted=False,
|
|
93
113
|
defaultValue=default_value,
|
|
114
|
+
eval=eval_reason_obj,
|
|
94
115
|
)
|
|
95
116
|
|
|
96
117
|
elif sdk_variable.type == pb2.VariableType_PB.String: # type: ignore
|
|
@@ -101,6 +122,7 @@ def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Var
|
|
|
101
122
|
type=TypeEnum.STRING,
|
|
102
123
|
isDefaulted=False,
|
|
103
124
|
defaultValue=default_value,
|
|
125
|
+
eval=eval_reason_obj,
|
|
104
126
|
)
|
|
105
127
|
|
|
106
128
|
elif sdk_variable.type == pb2.VariableType_PB.Number: # type: ignore
|
|
@@ -111,6 +133,7 @@ def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Var
|
|
|
111
133
|
type=TypeEnum.NUMBER,
|
|
112
134
|
isDefaulted=False,
|
|
113
135
|
defaultValue=default_value,
|
|
136
|
+
eval=eval_reason_obj,
|
|
114
137
|
)
|
|
115
138
|
|
|
116
139
|
elif sdk_variable.type == pb2.VariableType_PB.JSON: # type: ignore
|
|
@@ -123,6 +146,7 @@ def create_variable(sdk_variable: pb2.SDKVariable_PB, default_value: Any) -> Var
|
|
|
123
146
|
type=TypeEnum.JSON,
|
|
124
147
|
isDefaulted=False,
|
|
125
148
|
defaultValue=default_value,
|
|
149
|
+
eval=eval_reason_obj,
|
|
126
150
|
)
|
|
127
151
|
|
|
128
152
|
else:
|
|
@@ -2,45 +2,50 @@
|
|
|
2
2
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
3
|
# source: variableForUserParams.proto
|
|
4
4
|
"""Generated protocol buffer code."""
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
from google.protobuf import descriptor as _descriptor
|
|
7
7
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
8
|
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
from google.protobuf.internal import builder as _builder
|
|
9
10
|
# @@protoc_insertion_point(imports)
|
|
10
11
|
|
|
11
12
|
_sym_db = _symbol_database.Default()
|
|
12
13
|
|
|
13
14
|
|
|
15
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
|
|
16
|
+
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'
|
|
17
|
+
)
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
_globals = globals()
|
|
20
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
21
|
+
_builder.BuildTopDescriptorsAndMessages(
|
|
22
|
+
DESCRIPTOR, "variableForUserParams_pb2", _globals
|
|
23
|
+
)
|
|
20
24
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
25
|
+
DESCRIPTOR._options = None
|
|
26
|
+
DESCRIPTOR._serialized_options = b'\n&com.devcycle.sdk.server.local.protobufP\001Z\007./proto\252\002"DevCycle.SDK.Server.Local.Protobuf'
|
|
27
|
+
_NULLABLECUSTOMDATA_VALUEENTRY._options = None
|
|
28
|
+
_NULLABLECUSTOMDATA_VALUEENTRY._serialized_options = b"8\001"
|
|
29
|
+
_globals["_VARIABLETYPE_PB"]._serialized_start = 1221
|
|
30
|
+
_globals["_VARIABLETYPE_PB"]._serialized_end = 1285
|
|
31
|
+
_globals["_CUSTOMDATATYPE"]._serialized_start = 1287
|
|
32
|
+
_globals["_CUSTOMDATATYPE"]._serialized_end = 1341
|
|
33
|
+
_globals["_NULLABLESTRING"]._serialized_start = 31
|
|
34
|
+
_globals["_NULLABLESTRING"]._serialized_end = 78
|
|
35
|
+
_globals["_NULLABLEDOUBLE"]._serialized_start = 80
|
|
36
|
+
_globals["_NULLABLEDOUBLE"]._serialized_end = 127
|
|
37
|
+
_globals["_CUSTOMDATAVALUE"]._serialized_start = 129
|
|
38
|
+
_globals["_CUSTOMDATAVALUE"]._serialized_end = 238
|
|
39
|
+
_globals["_NULLABLECUSTOMDATA"]._serialized_start = 241
|
|
40
|
+
_globals["_NULLABLECUSTOMDATA"]._serialized_end = 388
|
|
41
|
+
_globals["_NULLABLECUSTOMDATA_VALUEENTRY"]._serialized_start = 326
|
|
42
|
+
_globals["_NULLABLECUSTOMDATA_VALUEENTRY"]._serialized_end = 388
|
|
43
|
+
_globals["_VARIABLEFORUSERPARAMS_PB"]._serialized_start = 391
|
|
44
|
+
_globals["_VARIABLEFORUSERPARAMS_PB"]._serialized_end = 547
|
|
45
|
+
_globals["_DVCUSER_PB"]._serialized_start = 550
|
|
46
|
+
_globals["_DVCUSER_PB"]._serialized_end = 910
|
|
47
|
+
_globals["_SDKVARIABLE_PB"]._serialized_start = 913
|
|
48
|
+
_globals["_SDKVARIABLE_PB"]._serialized_end = 1150
|
|
49
|
+
_globals["_EVALREASON_PB"]._serialized_start = 1152
|
|
50
|
+
_globals["_EVALREASON_PB"]._serialized_end = 1219
|
|
46
51
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -4,54 +4,60 @@ from google.protobuf import descriptor as _descriptor
|
|
|
4
4
|
from google.protobuf import message as _message
|
|
5
5
|
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
|
6
6
|
|
|
7
|
-
Bool: CustomDataType
|
|
8
|
-
Boolean: VariableType_PB
|
|
9
7
|
DESCRIPTOR: _descriptor.FileDescriptor
|
|
8
|
+
|
|
9
|
+
class VariableType_PB(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
10
|
+
__slots__ = []
|
|
11
|
+
Boolean: _ClassVar[VariableType_PB]
|
|
12
|
+
Number: _ClassVar[VariableType_PB]
|
|
13
|
+
String: _ClassVar[VariableType_PB]
|
|
14
|
+
JSON: _ClassVar[VariableType_PB]
|
|
15
|
+
|
|
16
|
+
class CustomDataType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
17
|
+
__slots__ = []
|
|
18
|
+
Bool: _ClassVar[CustomDataType]
|
|
19
|
+
Num: _ClassVar[CustomDataType]
|
|
20
|
+
Str: _ClassVar[CustomDataType]
|
|
21
|
+
Null: _ClassVar[CustomDataType]
|
|
22
|
+
Boolean: VariableType_PB
|
|
23
|
+
Number: VariableType_PB
|
|
24
|
+
String: VariableType_PB
|
|
10
25
|
JSON: VariableType_PB
|
|
11
|
-
|
|
26
|
+
Bool: CustomDataType
|
|
12
27
|
Num: CustomDataType
|
|
13
|
-
Number: VariableType_PB
|
|
14
28
|
Str: CustomDataType
|
|
15
|
-
|
|
29
|
+
Null: CustomDataType
|
|
30
|
+
|
|
31
|
+
class NullableString(_message.Message):
|
|
32
|
+
__slots__ = ["value", "isNull"]
|
|
33
|
+
VALUE_FIELD_NUMBER: _ClassVar[int]
|
|
34
|
+
ISNULL_FIELD_NUMBER: _ClassVar[int]
|
|
35
|
+
value: str
|
|
36
|
+
isNull: bool
|
|
37
|
+
def __init__(self, value: _Optional[str] = ..., isNull: bool = ...) -> None: ...
|
|
38
|
+
|
|
39
|
+
class NullableDouble(_message.Message):
|
|
40
|
+
__slots__ = ["value", "isNull"]
|
|
41
|
+
VALUE_FIELD_NUMBER: _ClassVar[int]
|
|
42
|
+
ISNULL_FIELD_NUMBER: _ClassVar[int]
|
|
43
|
+
value: float
|
|
44
|
+
isNull: bool
|
|
45
|
+
def __init__(self, value: _Optional[float] = ..., isNull: bool = ...) -> None: ...
|
|
16
46
|
|
|
17
47
|
class CustomDataValue(_message.Message):
|
|
18
|
-
__slots__ = ["
|
|
48
|
+
__slots__ = ["type", "boolValue", "doubleValue", "stringValue"]
|
|
49
|
+
TYPE_FIELD_NUMBER: _ClassVar[int]
|
|
19
50
|
BOOLVALUE_FIELD_NUMBER: _ClassVar[int]
|
|
20
51
|
DOUBLEVALUE_FIELD_NUMBER: _ClassVar[int]
|
|
21
52
|
STRINGVALUE_FIELD_NUMBER: _ClassVar[int]
|
|
22
|
-
|
|
53
|
+
type: CustomDataType
|
|
23
54
|
boolValue: bool
|
|
24
55
|
doubleValue: float
|
|
25
56
|
stringValue: str
|
|
26
|
-
type: CustomDataType
|
|
27
57
|
def __init__(self, type: _Optional[_Union[CustomDataType, str]] = ..., boolValue: bool = ..., doubleValue: _Optional[float] = ..., stringValue: _Optional[str] = ...) -> None: ...
|
|
28
58
|
|
|
29
|
-
class DVCUser_PB(_message.Message):
|
|
30
|
-
__slots__ = ["appBuild", "appVersion", "country", "customData", "deviceModel", "email", "language", "name", "privateCustomData", "user_id"]
|
|
31
|
-
APPBUILD_FIELD_NUMBER: _ClassVar[int]
|
|
32
|
-
APPVERSION_FIELD_NUMBER: _ClassVar[int]
|
|
33
|
-
COUNTRY_FIELD_NUMBER: _ClassVar[int]
|
|
34
|
-
CUSTOMDATA_FIELD_NUMBER: _ClassVar[int]
|
|
35
|
-
DEVICEMODEL_FIELD_NUMBER: _ClassVar[int]
|
|
36
|
-
EMAIL_FIELD_NUMBER: _ClassVar[int]
|
|
37
|
-
LANGUAGE_FIELD_NUMBER: _ClassVar[int]
|
|
38
|
-
NAME_FIELD_NUMBER: _ClassVar[int]
|
|
39
|
-
PRIVATECUSTOMDATA_FIELD_NUMBER: _ClassVar[int]
|
|
40
|
-
USER_ID_FIELD_NUMBER: _ClassVar[int]
|
|
41
|
-
appBuild: NullableDouble
|
|
42
|
-
appVersion: NullableString
|
|
43
|
-
country: NullableString
|
|
44
|
-
customData: NullableCustomData
|
|
45
|
-
deviceModel: NullableString
|
|
46
|
-
email: NullableString
|
|
47
|
-
language: NullableString
|
|
48
|
-
name: NullableString
|
|
49
|
-
privateCustomData: NullableCustomData
|
|
50
|
-
user_id: str
|
|
51
|
-
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: ...
|
|
52
|
-
|
|
53
59
|
class NullableCustomData(_message.Message):
|
|
54
|
-
__slots__ = ["
|
|
60
|
+
__slots__ = ["value", "isNull"]
|
|
55
61
|
class ValueEntry(_message.Message):
|
|
56
62
|
__slots__ = ["key", "value"]
|
|
57
63
|
KEY_FIELD_NUMBER: _ClassVar[int]
|
|
@@ -59,62 +65,78 @@ class NullableCustomData(_message.Message):
|
|
|
59
65
|
key: str
|
|
60
66
|
value: CustomDataValue
|
|
61
67
|
def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomDataValue, _Mapping]] = ...) -> None: ...
|
|
62
|
-
ISNULL_FIELD_NUMBER: _ClassVar[int]
|
|
63
68
|
VALUE_FIELD_NUMBER: _ClassVar[int]
|
|
64
|
-
|
|
69
|
+
ISNULL_FIELD_NUMBER: _ClassVar[int]
|
|
65
70
|
value: _containers.MessageMap[str, CustomDataValue]
|
|
71
|
+
isNull: bool
|
|
66
72
|
def __init__(self, value: _Optional[_Mapping[str, CustomDataValue]] = ..., isNull: bool = ...) -> None: ...
|
|
67
73
|
|
|
68
|
-
class
|
|
69
|
-
__slots__ = ["
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
class VariableForUserParams_PB(_message.Message):
|
|
75
|
+
__slots__ = ["sdkKey", "variableKey", "variableType", "user", "shouldTrackEvent"]
|
|
76
|
+
SDKKEY_FIELD_NUMBER: _ClassVar[int]
|
|
77
|
+
VARIABLEKEY_FIELD_NUMBER: _ClassVar[int]
|
|
78
|
+
VARIABLETYPE_FIELD_NUMBER: _ClassVar[int]
|
|
79
|
+
USER_FIELD_NUMBER: _ClassVar[int]
|
|
80
|
+
SHOULDTRACKEVENT_FIELD_NUMBER: _ClassVar[int]
|
|
81
|
+
sdkKey: str
|
|
82
|
+
variableKey: str
|
|
83
|
+
variableType: VariableType_PB
|
|
84
|
+
user: DVCUser_PB
|
|
85
|
+
shouldTrackEvent: bool
|
|
86
|
+
def __init__(self, sdkKey: _Optional[str] = ..., variableKey: _Optional[str] = ..., variableType: _Optional[_Union[VariableType_PB, str]] = ..., user: _Optional[_Union[DVCUser_PB, _Mapping]] = ..., shouldTrackEvent: bool = ...) -> None: ...
|
|
75
87
|
|
|
76
|
-
class
|
|
77
|
-
__slots__ = ["
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
88
|
+
class DVCUser_PB(_message.Message):
|
|
89
|
+
__slots__ = ["user_id", "email", "name", "language", "country", "appBuild", "appVersion", "deviceModel", "customData", "privateCustomData"]
|
|
90
|
+
USER_ID_FIELD_NUMBER: _ClassVar[int]
|
|
91
|
+
EMAIL_FIELD_NUMBER: _ClassVar[int]
|
|
92
|
+
NAME_FIELD_NUMBER: _ClassVar[int]
|
|
93
|
+
LANGUAGE_FIELD_NUMBER: _ClassVar[int]
|
|
94
|
+
COUNTRY_FIELD_NUMBER: _ClassVar[int]
|
|
95
|
+
APPBUILD_FIELD_NUMBER: _ClassVar[int]
|
|
96
|
+
APPVERSION_FIELD_NUMBER: _ClassVar[int]
|
|
97
|
+
DEVICEMODEL_FIELD_NUMBER: _ClassVar[int]
|
|
98
|
+
CUSTOMDATA_FIELD_NUMBER: _ClassVar[int]
|
|
99
|
+
PRIVATECUSTOMDATA_FIELD_NUMBER: _ClassVar[int]
|
|
100
|
+
user_id: str
|
|
101
|
+
email: NullableString
|
|
102
|
+
name: NullableString
|
|
103
|
+
language: NullableString
|
|
104
|
+
country: NullableString
|
|
105
|
+
appBuild: NullableDouble
|
|
106
|
+
appVersion: NullableString
|
|
107
|
+
deviceModel: NullableString
|
|
108
|
+
customData: NullableCustomData
|
|
109
|
+
privateCustomData: NullableCustomData
|
|
110
|
+
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: ...
|
|
83
111
|
|
|
84
112
|
class SDKVariable_PB(_message.Message):
|
|
85
|
-
__slots__ = ["_id", "boolValue", "doubleValue", "
|
|
113
|
+
__slots__ = ["_id", "type", "key", "boolValue", "doubleValue", "stringValue", "evalReason", "_feature", "eval"]
|
|
114
|
+
_ID_FIELD_NUMBER: _ClassVar[int]
|
|
115
|
+
TYPE_FIELD_NUMBER: _ClassVar[int]
|
|
116
|
+
KEY_FIELD_NUMBER: _ClassVar[int]
|
|
86
117
|
BOOLVALUE_FIELD_NUMBER: _ClassVar[int]
|
|
87
118
|
DOUBLEVALUE_FIELD_NUMBER: _ClassVar[int]
|
|
88
|
-
EVALREASON_FIELD_NUMBER: _ClassVar[int]
|
|
89
|
-
KEY_FIELD_NUMBER: _ClassVar[int]
|
|
90
119
|
STRINGVALUE_FIELD_NUMBER: _ClassVar[int]
|
|
91
|
-
|
|
92
|
-
|
|
120
|
+
EVALREASON_FIELD_NUMBER: _ClassVar[int]
|
|
121
|
+
_FEATURE_FIELD_NUMBER: _ClassVar[int]
|
|
122
|
+
EVAL_FIELD_NUMBER: _ClassVar[int]
|
|
93
123
|
_id: str
|
|
124
|
+
type: VariableType_PB
|
|
125
|
+
key: str
|
|
94
126
|
boolValue: bool
|
|
95
127
|
doubleValue: float
|
|
96
|
-
evalReason: NullableString
|
|
97
|
-
key: str
|
|
98
128
|
stringValue: str
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
__slots__ = ["sdkKey", "shouldTrackEvent", "user", "variableKey", "variableType"]
|
|
104
|
-
SDKKEY_FIELD_NUMBER: _ClassVar[int]
|
|
105
|
-
SHOULDTRACKEVENT_FIELD_NUMBER: _ClassVar[int]
|
|
106
|
-
USER_FIELD_NUMBER: _ClassVar[int]
|
|
107
|
-
VARIABLEKEY_FIELD_NUMBER: _ClassVar[int]
|
|
108
|
-
VARIABLETYPE_FIELD_NUMBER: _ClassVar[int]
|
|
109
|
-
sdkKey: str
|
|
110
|
-
shouldTrackEvent: bool
|
|
111
|
-
user: DVCUser_PB
|
|
112
|
-
variableKey: str
|
|
113
|
-
variableType: VariableType_PB
|
|
114
|
-
def __init__(self, sdkKey: _Optional[str] = ..., variableKey: _Optional[str] = ..., variableType: _Optional[_Union[VariableType_PB, str]] = ..., user: _Optional[_Union[DVCUser_PB, _Mapping]] = ..., shouldTrackEvent: bool = ...) -> None: ...
|
|
115
|
-
|
|
116
|
-
class VariableType_PB(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
117
|
-
__slots__ = []
|
|
129
|
+
evalReason: NullableString
|
|
130
|
+
_feature: NullableString
|
|
131
|
+
eval: EvalReason_PB
|
|
132
|
+
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: ...
|
|
118
133
|
|
|
119
|
-
class
|
|
120
|
-
__slots__ = []
|
|
134
|
+
class EvalReason_PB(_message.Message):
|
|
135
|
+
__slots__ = ["reason", "details", "target_id"]
|
|
136
|
+
REASON_FIELD_NUMBER: _ClassVar[int]
|
|
137
|
+
DETAILS_FIELD_NUMBER: _ClassVar[int]
|
|
138
|
+
TARGET_ID_FIELD_NUMBER: _ClassVar[int]
|
|
139
|
+
reason: str
|
|
140
|
+
details: str
|
|
141
|
+
target_id: str
|
|
142
|
+
def __init__(self, reason: _Optional[str] = ..., details: _Optional[str] = ..., target_id: _Optional[str] = ...) -> None: ...
|
{devcycle_python_server_sdk-3.11.4.dist-info → devcycle_python_server_sdk-3.13.0.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devcycle-python-server-sdk
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.13.0
|
|
4
4
|
Summary: DevCycle Python SDK
|
|
5
5
|
Home-page: https://github.com/devcycleHQ/python-server-sdk
|
|
6
6
|
Author-email:
|
|
@@ -12,7 +12,7 @@ Requires-Dist: urllib3>=1.15.1
|
|
|
12
12
|
Requires-Dist: requests>=2.32
|
|
13
13
|
Requires-Dist: wasmtime~=30.0.0
|
|
14
14
|
Requires-Dist: protobuf>=4.23.3
|
|
15
|
-
Requires-Dist: openfeature-sdk
|
|
15
|
+
Requires-Dist: openfeature-sdk==0.8.0
|
|
16
16
|
Requires-Dist: launchdarkly-eventsource>=1.2.1
|
|
17
17
|
Requires-Dist: responses>=0.23.1
|
|
18
18
|
Dynamic: description
|
{devcycle_python_server_sdk-3.11.4.dist-info → devcycle_python_server_sdk-3.13.0.dist-info}/RECORD
RENAMED
|
@@ -1,55 +1,60 @@
|
|
|
1
|
-
devcycle_python_sdk/VERSION.txt,sha256=
|
|
1
|
+
devcycle_python_sdk/VERSION.txt,sha256=NxOs_9lT1XG8y-FjlRru-YinX5RcBJt_ulPwgDESZ_o,7
|
|
2
2
|
devcycle_python_sdk/__init__.py,sha256=30TcYb9PbvVi97gwk16omCGG1UoUI9lmmU7xpvxNMvc,336
|
|
3
|
-
devcycle_python_sdk/bucketing-lib.release.wasm,sha256=
|
|
4
|
-
devcycle_python_sdk/cloud_client.py,sha256=
|
|
3
|
+
devcycle_python_sdk/bucketing-lib.release.wasm,sha256=6iooyHRR-GBfrBH0_mleWyaNHr9uM_nVPS-IXGROGCY,224670
|
|
4
|
+
devcycle_python_sdk/cloud_client.py,sha256=dR2ye29Up699hO1cdrAWeoXIOBPVoSvQ4aKe2gSBRno,9414
|
|
5
5
|
devcycle_python_sdk/devcycle_client.py,sha256=OqNza7OXOSRmMQq2kmyivljmH1GyN4dTiz0EhvDvt8w,1069
|
|
6
6
|
devcycle_python_sdk/exceptions.py,sha256=Et7fS8pEFbHkFY86T2pJoEUstwjh4_rzhJxVH8fzAns,1053
|
|
7
|
-
devcycle_python_sdk/local_client.py,sha256=
|
|
8
|
-
devcycle_python_sdk/options.py,sha256=
|
|
7
|
+
devcycle_python_sdk/local_client.py,sha256=HbHIGLeIw9fHOSwp7RJ8ozIO_IqQ23bzSoGoGFLp0Kk,12083
|
|
8
|
+
devcycle_python_sdk/options.py,sha256=DRvr1IQRW3BDHl81TvORfCtt0qVW42c8PoYjMMPkzwQ,5252
|
|
9
9
|
devcycle_python_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
10
|
devcycle_python_sdk/api/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
11
11
|
devcycle_python_sdk/api/backoff.py,sha256=F6WYCloaZD9CjNu6mKBMq7K20S8-i2WVU6X05ZRoawE,303
|
|
12
|
-
devcycle_python_sdk/api/bucketing_client.py,sha256
|
|
12
|
+
devcycle_python_sdk/api/bucketing_client.py,sha256=BRQWtTnIyLdWoFT7sPHPGg8kstDtW-jx1N4og3_SEgI,5565
|
|
13
13
|
devcycle_python_sdk/api/config_client.py,sha256=73aQAq130rTHpQrVDX6n_DwFKz0WuKxRoLDiE3vSoAM,5077
|
|
14
14
|
devcycle_python_sdk/api/event_client.py,sha256=WxkuV6geEC9MgG4FN36HeEQQa22ilq2mkOVMZkpiEk4,3356
|
|
15
|
-
devcycle_python_sdk/api/local_bucketing.py,sha256=
|
|
15
|
+
devcycle_python_sdk/api/local_bucketing.py,sha256=kXggXhv2PDQxDoLseuJwWbge8EgeqL0FWTmEIn8TUQc,16704
|
|
16
16
|
devcycle_python_sdk/managers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
-
devcycle_python_sdk/managers/config_manager.py,sha256=
|
|
18
|
-
devcycle_python_sdk/managers/eval_hooks_manager.py,sha256=
|
|
19
|
-
devcycle_python_sdk/managers/event_queue_manager.py,sha256=
|
|
20
|
-
devcycle_python_sdk/managers/sse_manager.py,sha256=
|
|
17
|
+
devcycle_python_sdk/managers/config_manager.py,sha256=QsJPMnf0wgNND3Yqhv125ckta_YFOMUb8I8pFq64tOE,5827
|
|
18
|
+
devcycle_python_sdk/managers/eval_hooks_manager.py,sha256=YOLj0IvNFqDbWvPA2aOqT15yKkwsdnZT9MQ7MHTv6M4,2963
|
|
19
|
+
devcycle_python_sdk/managers/event_queue_manager.py,sha256=8tqPZDD0-AWmz_NcWJBb80OIMzNBpDgbafpFefiOOmk,8109
|
|
20
|
+
devcycle_python_sdk/managers/sse_manager.py,sha256=hSGpnZ6gNbQXGotqNxjogoB82znAyMMFhqdlqeCc5bI,2586
|
|
21
21
|
devcycle_python_sdk/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
devcycle_python_sdk/models/bucketed_config.py,sha256=qTfhIViX7m2WS2oDBBCmKKzPsJG6DEav3zCEXwP27nA,3980
|
|
23
|
+
devcycle_python_sdk/models/config_metadata.py,sha256=HHhw2ncHOUAC3SH-IokVP4GrNLbflcGE9p7a2ZSuksA,1413
|
|
24
|
+
devcycle_python_sdk/models/environment_metadata.py,sha256=Zal9Ly15GaMcUBcD7CujNvtl5w_qfL8TQtLSRBpTHMo,629
|
|
23
25
|
devcycle_python_sdk/models/error_response.py,sha256=r_dRUDAbral9UGaMYcnBsZOr9Hmkyi1SQbhGmZilgpA,442
|
|
24
|
-
devcycle_python_sdk/models/eval_hook.py,sha256=
|
|
25
|
-
devcycle_python_sdk/models/eval_hook_context.py,sha256=
|
|
26
|
+
devcycle_python_sdk/models/eval_hook.py,sha256=k9w-AafvR-X7i8uf5nVuNEbD_PRS8QQmxW_90KVgGHA,742
|
|
27
|
+
devcycle_python_sdk/models/eval_hook_context.py,sha256=FYfMfXgtlW1O70khIcWF87yie2SWW4iWH2ehPex9paM,928
|
|
28
|
+
devcycle_python_sdk/models/eval_reason.py,sha256=obBjIWt8ZUh6knpVGsmCfWOCj4c7DXdH7K-FY-pchsU,901
|
|
26
29
|
devcycle_python_sdk/models/event.py,sha256=Sj3eEopuPp8QwQl_Oz8E6Y9Ph6nLG0HxU7eR7xSbA7g,3722
|
|
27
30
|
devcycle_python_sdk/models/feature.py,sha256=m3wxxIjC5jxhKpPLI4RcsBaNLuy-zsMqoAgc8ySPe0I,852
|
|
28
31
|
devcycle_python_sdk/models/platform_data.py,sha256=nyQsgI6pcTd1FL3Y2ACmpvTYb08R_UtWul25OWZstps,849
|
|
32
|
+
devcycle_python_sdk/models/project_metadata.py,sha256=zRoE_oy_N3isqfrA5hAZ7S-7i5QBTSu9OGigFAvTqi8,602
|
|
29
33
|
devcycle_python_sdk/models/user.py,sha256=mhEk-mnKJRg_tydpBlAVhGDj9rDCacJ-jNwiGeSpZiE,7027
|
|
30
|
-
devcycle_python_sdk/models/variable.py,sha256=
|
|
34
|
+
devcycle_python_sdk/models/variable.py,sha256=NXubhYWXYRAUEh4kDe2Tu9T5QnZmQ3roYVPbP-u2H3s,3030
|
|
35
|
+
devcycle_python_sdk/models/variable_metadata.py,sha256=oeH5fxDFLgAyc_B1RuOYRp4w68lTaBxTPvNgnXz7alE,583
|
|
31
36
|
devcycle_python_sdk/open_feature_provider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
-
devcycle_python_sdk/open_feature_provider/provider.py,sha256=
|
|
37
|
+
devcycle_python_sdk/open_feature_provider/provider.py,sha256=l-psKU5m6jSBE53VwX3fBBas-TztekFDlfYTyTJQm6c,5558
|
|
33
38
|
devcycle_python_sdk/protobuf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
-
devcycle_python_sdk/protobuf/utils.py,sha256=
|
|
35
|
-
devcycle_python_sdk/protobuf/variableForUserParams_pb2.py,sha256=
|
|
36
|
-
devcycle_python_sdk/protobuf/variableForUserParams_pb2.pyi,sha256=
|
|
39
|
+
devcycle_python_sdk/protobuf/utils.py,sha256=SwsXH5QGAfbSn1FvgwO3x4W8uTYLsL1r3E-P5nDD4Nw,5528
|
|
40
|
+
devcycle_python_sdk/protobuf/variableForUserParams_pb2.py,sha256=SIFCo4AbjtlWQh2DYxkrWCR85PQajA4PIofXoRe4Gds,4956
|
|
41
|
+
devcycle_python_sdk/protobuf/variableForUserParams_pb2.pyi,sha256=OU4ORhjnbXy0AqdkxyARxg4JXGTPDuDzBW2W9RGdcMs,6623
|
|
37
42
|
devcycle_python_sdk/util/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
38
43
|
devcycle_python_sdk/util/strings.py,sha256=gH0Xm3gIXNqn6hczKPk10Jn5_9knuD7OB5MrB7bqztw,252
|
|
39
44
|
devcycle_python_sdk/util/version.py,sha256=Cz7Us_EuXP-T8GI47g2WHYdBJj_zKo-5y545IDHJAjI,253
|
|
40
|
-
devcycle_python_server_sdk-3.
|
|
45
|
+
devcycle_python_server_sdk-3.13.0.dist-info/licenses/LICENSE,sha256=tHQMqu-Jic2UpMGqb-vNFbGygysl8IG4l1clnnh0OFo,1071
|
|
41
46
|
example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
47
|
example/cloud_client_example.py,sha256=YD8ZsTv3dPYfbFUKraRpRT0VsJGrPwjm8ZCuA5H54yI,2463
|
|
43
48
|
example/local_bucketing_client_example.py,sha256=TaIfy3VnW9fXii9NPYs5UOuP4fLKruXMjnZApveqzl4,2796
|
|
44
49
|
example/openfeature_example.py,sha256=kO6F-Xk20l6CPiMfIxSRreshEGmHMFHRg3zbeLXa3AI,2410
|
|
45
50
|
test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
-
test/test_cloud_client.py,sha256=
|
|
47
|
-
test/test_local_client.py,sha256=
|
|
51
|
+
test/test_cloud_client.py,sha256=CoK4xfHPMGyJ4hXrdI98e5f4zEL51vx31u_xmC3FEtc,15957
|
|
52
|
+
test/test_local_client.py,sha256=yg19ddGmg9t1TfjT-4EgHp0cjfxHjfJZOGIFM8mSNX8,18078
|
|
48
53
|
test/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
54
|
test/api/test_bucketing_client.py,sha256=M2mjACowLvbsIjXdP-w8-fwY02xqv1X1r_h9v-pXa7A,7739
|
|
50
55
|
test/api/test_config_client.py,sha256=3BwMm4y-4NQcdW2DDGppoJLIF-ffgjlUJti2Qjw1D1M,5129
|
|
51
56
|
test/api/test_event_client.py,sha256=v4Xoum-PdywfczrfMV1llM5vrIJoqHybzxPLVokh09g,3310
|
|
52
|
-
test/api/test_local_bucketing.py,sha256=
|
|
57
|
+
test/api/test_local_bucketing.py,sha256=ECouaWpgWrlfEBtTK5OavmYX87XiXKg-9epmzTOCMdE,16126
|
|
53
58
|
test/fixture/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
59
|
test/fixture/data.py,sha256=6ReLxWPMhCDbJ5Ex24_iR0PJNjKzPFV1I9j_v0FVbBU,1462
|
|
55
60
|
test/managers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -57,15 +62,15 @@ test/managers/test_config_manager.py,sha256=2TUnt8501KM7UlJNH7srIhvC-izehD7nOfqZ
|
|
|
57
62
|
test/managers/test_event_queue_manager.py,sha256=z850atk8zAlD7sYaA1OJwgCFcfC0ps4NEk4XUnNCq1U,11629
|
|
58
63
|
test/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
64
|
test/models/test_bucketed_config.py,sha256=8wCEyxaHxY21nl7ZbiFzp-IzZQBZIPIVPPzeREjumQk,858
|
|
60
|
-
test/models/test_user.py,sha256=
|
|
65
|
+
test/models/test_user.py,sha256=nuGJvR2KHilRlx5DDEzh1F-lpZ7qT7H88kqPvfcFfM8,10539
|
|
61
66
|
test/openfeature_test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
|
-
test/openfeature_test/test_provider.py,sha256=
|
|
63
|
-
test/openfeature_test/test_provider_local_sdk.py,sha256=
|
|
67
|
+
test/openfeature_test/test_provider.py,sha256=vj8eKprkF-psRdy54AtitYoEqBJKhDpfEzEDdhM-3FE,10931
|
|
68
|
+
test/openfeature_test/test_provider_local_sdk.py,sha256=ExkA1LYLuvW-dD4Bw2BKggzDQ8GpnIp3WyNK4rUZgJQ,5696
|
|
64
69
|
test/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
70
|
test/util/test_strings.py,sha256=T5H5U0af7_ld1yJC8IdDmay_Mx-iJQ5Fi5fbvKcAc7A,862
|
|
66
71
|
test/util/test_utils.py,sha256=tVBJm_qnqg-4PssLpXIxqlk0JehuiAIPs4zpi2oNVnY,6671
|
|
67
72
|
test/util/test_version.py,sha256=3Xg0_84m0bdHXz6pxd2Z85Oz9DoUC1T0Ol_WqEH_jac,335
|
|
68
|
-
devcycle_python_server_sdk-3.
|
|
69
|
-
devcycle_python_server_sdk-3.
|
|
70
|
-
devcycle_python_server_sdk-3.
|
|
71
|
-
devcycle_python_server_sdk-3.
|
|
73
|
+
devcycle_python_server_sdk-3.13.0.dist-info/METADATA,sha256=4RisdQtReQqBoSXMquKU0Ui47Z5bbnmAVmrdOLt4hsI,723
|
|
74
|
+
devcycle_python_server_sdk-3.13.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
75
|
+
devcycle_python_server_sdk-3.13.0.dist-info/top_level.txt,sha256=34f8zDzihAHoH7siAFlmscyO_QLNWWq9HApFlwtYL4k,33
|
|
76
|
+
devcycle_python_server_sdk-3.13.0.dist-info/RECORD,,
|