devcycle-python-server-sdk 3.12.0__py3-none-any.whl → 3.13.1__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/local_bucketing.py +19 -4
- devcycle_python_sdk/bucketing-lib.release.wasm +0 -0
- devcycle_python_sdk/cloud_client.py +3 -3
- devcycle_python_sdk/local_client.py +13 -5
- 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/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 +0 -1
- devcycle_python_sdk/models/project_metadata.py +24 -0
- devcycle_python_sdk/models/user.py +3 -3
- devcycle_python_sdk/models/variable_metadata.py +22 -0
- devcycle_python_sdk/open_feature_provider/provider.py +7 -5
- devcycle_python_sdk/options.py +1 -1
- devcycle_python_sdk/protobuf/utils.py +9 -3
- devcycle_python_sdk/protobuf/variableForUserParams_pb2.py +34 -42
- devcycle_python_sdk/protobuf/variableForUserParams_pb2.pyi +11 -11
- {devcycle_python_server_sdk-3.12.0.dist-info → devcycle_python_server_sdk-3.13.1.dist-info}/METADATA +2 -2
- {devcycle_python_server_sdk-3.12.0.dist-info → devcycle_python_server_sdk-3.13.1.dist-info}/RECORD +32 -28
- {devcycle_python_server_sdk-3.12.0.dist-info → devcycle_python_server_sdk-3.13.1.dist-info}/licenses/LICENSE +1 -1
- example/openfeature_example.py +175 -14
- test/api/test_local_bucketing.py +6 -3
- test/models/test_user.py +0 -1
- test/openfeature_test/test_provider.py +0 -1
- test/test_cloud_client.py +41 -6
- test/test_local_client.py +53 -4
- {devcycle_python_server_sdk-3.12.0.dist-info → devcycle_python_server_sdk-3.13.1.dist-info}/WHEEL +0 -0
- {devcycle_python_server_sdk-3.12.0.dist-info → devcycle_python_server_sdk-3.13.1.dist-info}/top_level.txt +0 -0
test/test_local_client.py
CHANGED
|
@@ -392,10 +392,10 @@ class DevCycleLocalClientTest(unittest.TestCase):
|
|
|
392
392
|
hook_called["before"] = True
|
|
393
393
|
return context
|
|
394
394
|
|
|
395
|
-
def after_hook(context, variable):
|
|
395
|
+
def after_hook(context, variable, variable_metadata):
|
|
396
396
|
hook_called["after"] = True
|
|
397
397
|
|
|
398
|
-
def finally_hook(context, variable):
|
|
398
|
+
def finally_hook(context, variable, variable_metadata):
|
|
399
399
|
hook_called["finally"] = True
|
|
400
400
|
|
|
401
401
|
def error_hook(context, error):
|
|
@@ -432,10 +432,10 @@ class DevCycleLocalClientTest(unittest.TestCase):
|
|
|
432
432
|
hook_called["before"] = True
|
|
433
433
|
raise Exception("Before hook failed")
|
|
434
434
|
|
|
435
|
-
def after_hook(context, variable):
|
|
435
|
+
def after_hook(context, variable, variable_metadata):
|
|
436
436
|
hook_called["after"] = True
|
|
437
437
|
|
|
438
|
-
def finally_hook(context, variable):
|
|
438
|
+
def finally_hook(context, variable, variable_metadata):
|
|
439
439
|
hook_called["finally"] = True
|
|
440
440
|
|
|
441
441
|
def error_hook(context, error):
|
|
@@ -457,6 +457,55 @@ class DevCycleLocalClientTest(unittest.TestCase):
|
|
|
457
457
|
self.assertTrue(hook_called["finally"])
|
|
458
458
|
self.assertTrue(hook_called["error"])
|
|
459
459
|
|
|
460
|
+
@responses.activate
|
|
461
|
+
def test_context_has_config_metadata(self):
|
|
462
|
+
self.setup_client()
|
|
463
|
+
|
|
464
|
+
context_received = None
|
|
465
|
+
|
|
466
|
+
def before_hook(context):
|
|
467
|
+
nonlocal context_received
|
|
468
|
+
context_received = context
|
|
469
|
+
return context
|
|
470
|
+
|
|
471
|
+
def after_hook(context, variable, variable_metadata):
|
|
472
|
+
pass
|
|
473
|
+
|
|
474
|
+
def finally_hook(context, variable, variable_metadata):
|
|
475
|
+
pass
|
|
476
|
+
|
|
477
|
+
def error_hook(context, error):
|
|
478
|
+
pass
|
|
479
|
+
|
|
480
|
+
self.client.add_hook(
|
|
481
|
+
EvalHook(before_hook, after_hook, finally_hook, error_hook)
|
|
482
|
+
)
|
|
483
|
+
|
|
484
|
+
user = DevCycleUser(user_id="1234")
|
|
485
|
+
|
|
486
|
+
# Test that context has config_metadata field
|
|
487
|
+
variable = self.client.variable(user, "num-var", 42)
|
|
488
|
+
|
|
489
|
+
# Verify the variable evaluation worked
|
|
490
|
+
self.assertIsNotNone(variable)
|
|
491
|
+
self.assertIsNotNone(context_received)
|
|
492
|
+
self.assertTrue(hasattr(context_received, "config_metadata"))
|
|
493
|
+
# For local client, config_metadata should be populated
|
|
494
|
+
self.assertIsNotNone(context_received.config_metadata)
|
|
495
|
+
self.assertTrue(hasattr(context_received.config_metadata, "project"))
|
|
496
|
+
self.assertTrue(hasattr(context_received.config_metadata, "environment"))
|
|
497
|
+
# Verify the project and environment data
|
|
498
|
+
self.assertEqual(
|
|
499
|
+
context_received.config_metadata.project.id, "61f97628ff4afcb6d057dbf0"
|
|
500
|
+
)
|
|
501
|
+
self.assertEqual(context_received.config_metadata.project.key, "emma-project")
|
|
502
|
+
self.assertEqual(
|
|
503
|
+
context_received.config_metadata.environment.id, "61f97628ff4afcb6d057dbf2"
|
|
504
|
+
)
|
|
505
|
+
self.assertEqual(
|
|
506
|
+
context_received.config_metadata.environment.key, "development"
|
|
507
|
+
)
|
|
508
|
+
|
|
460
509
|
|
|
461
510
|
def _benchmark_variable_call(client: DevCycleLocalClient, user: DevCycleUser, key: str):
|
|
462
511
|
return client.variable(user, key, "default_value")
|
{devcycle_python_server_sdk-3.12.0.dist-info → devcycle_python_server_sdk-3.13.1.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|