oai-statsig-python-core 0.32.0rc2__tar.gz → 0.32.0rc5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/Cargo.lock +5 -5
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/Cargo.toml +1 -1
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/PKG-INFO +1 -1
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/statsig.py +77 -2
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/statsig_python_core.pyi +11 -1
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/typed_config.py +5 -7
- oai_statsig_python_core-0.32.0rc5/statsig-pyo3/requirements-typing.txt +3 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/statsig_options_py.rs +7 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_feature_gate_parts.py +90 -19
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_statsig_options.py +11 -0
- oai_statsig_python_core-0.32.0rc5/statsig-pyo3/typing_tests/typed_config.py +39 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/Cargo.toml +1 -1
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/__tests__/statsig_options_tests.rs +50 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +21 -16
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/networking/__tests__/http2_test_helpers.rs +54 -0
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/networking/__tests__/mod.rs +3 -0
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/networking/__tests__/net_provider_reqwest_http2_tests.rs +718 -0
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/networking/__tests__/network_client_http2_tests.rs +347 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/__tests__/network_client_latency_tests.rs +2 -1
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/networking/http2.rs +7 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/http_types.rs +20 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/mod.rs +1 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/network_client.rs +17 -79
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +356 -5
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/specs_adapter/__tests__/hydration_phase_tests.rs +178 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/__tests__/remote_config_value_hydrator_tests.rs +15 -0
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/specs_adapter/remote_config_value_hydrator/download.rs +445 -0
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/specs_adapter/remote_config_value_hydrator/errors.rs +136 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/json.rs +11 -4
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/specs_adapter/remote_config_value_hydrator/metadata.rs +363 -0
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/specs_adapter/remote_config_value_hydrator/mod.rs +137 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/protobuf.rs +139 -110
- oai_statsig_python_core-0.32.0rc5/statsig-rust/src/specs_adapter/remote_config_value_hydrator/telemetry.rs +215 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/proto_specs.rs +6 -1
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig_options.rs +10 -0
- oai_statsig_python_core-0.32.0rc2/statsig-rust/src/__tests__/statsig_options_tests.rs +0 -20
- oai_statsig_python_core-0.32.0rc2/statsig-rust/src/networking/__tests__/mod.rs +0 -1
- oai_statsig_python_core-0.32.0rc2/statsig-rust/src/specs_adapter/remote_config_value_hydrator/mod.rs +0 -1138
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/__init__.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/_frozen_json.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/data_store.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/error_boundary.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/observability_client.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/persistent_storage.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/py.typed +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/requirements.txt +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/py_src/statsig_python_core/statsig_types.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/pyproject.toml +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-grpc/Cargo.toml +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-grpc/README.md +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-grpc/build.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-grpc/src/lib.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/.github/workflows/CI.yml +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/.gitignore +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/Cargo.toml +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/README.md +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/benchmarks/dynamic_config_value_cache_benchmark.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/benchmarks/native_context_allocations.c +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/benchmarks/native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/benchmarks/summarize_native_context_allocations.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/benchmarks/wrapper_native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/data_store_base_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/event_logging_adapter_base_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/interned_store_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/lib.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/pyo_utils.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/safe_gil.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/statsig_base_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/statsig_types_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/statsig_user_context_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/statsig_user_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/typed_config_py/tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/typed_config_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/unit_id_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/fork_callback_runner.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/fork_runner.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/mock_output_logger.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/mock_scrapi.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/profile_util.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_bulk_evaluate_gcir_parity.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_data_store.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_error_boundary.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_evaluation_cache_integration.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_evaluation_cache_pyo3.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_experiment_group_targeting_exposures.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_fork_callback.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_forking.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_frozen_json.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_interned_store_preload.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_layer_param_exposure_sampling.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_native_context_allocations.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_native_user_context.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_observability_client.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_override_adapter.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_partial_rollout_boost.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_performance.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_sec_expo_as_primary.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_shutdown.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_statsig.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_statsig_user.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_statsig_user_json_serialization.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_statsig_user_none_fields.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_typed_config.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_typed_config_native.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-pyo3/tests/utils.py +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/build.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/resources/ip_supalite.table +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/compression/compression_helper.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/compression/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/console_capture/console_capture_handler.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/console_capture/console_capture_instances.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/console_capture/console_capture_options.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/console_capture/console_log_line_levels.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/console_capture/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/data_store_interface.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/dcs_str.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/__tests__/rkyv_value_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/cmab_evaluator.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/evaluation_data.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/evaluation_types.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/evaluator.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/evaluator_context.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/evaluator_result.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/rkyv_value.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer_performance.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/evaluation_fixture_client.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/delayed_exposure_store.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_logger.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/queued_expo.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/event_queue/queued_secondary_expo.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/flush_type.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/sec_expo_as_primary_experiment.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/dynamic_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/evaluation_plan.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/feature_gates_processor.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/gcir_formatter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/gcir_options.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/gcir_process_iter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/layer_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/param_stores_processor.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/secondary_exposure_hashing.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/target_app_id_utils.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/gcir/timing.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/global_configs.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/hashing/ahash.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/hashing/djb2.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/hashing/hash_util.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/hashing/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/id_lists_adapter/id_list_download_concurrency_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/id_lists_adapter/id_list_propagation.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/id_lists_adapter/id_list_propagation_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/id_lists_adapter/id_lists_refresh_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/init_details.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/initialize_response.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/initialize_v2_response.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/instance_registry.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_string.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/__tests__/interned_store_eval_value_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_v2_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/__tests__/interned_store_preload_remote_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/__tests__/interned_store_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/__tests__/interned_store_string_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/interned_store/mmap_artifact.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/interned_store/mmap_manifest.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/interned_store/mmap_reader/materialize.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/interned_store/mmap_reader/memory.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/interned_store/mmap_reader.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/interned_store/mmap_writer.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/interned_store.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/mmap_data_v2/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/mmap_data_v2/spec.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/mmap_data_v2/spec_content_hash.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/mmap_data_v2.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/mmap_sync.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/interned_values/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/lib.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/logging_utils.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/macros.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/network_error.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/providers/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/proxy_config.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/networking/statsig_url.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/observability/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/observability/ops_stats.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/output_logger.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/output_policy.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/override_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/persistent_storage/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/scoped_evaluation_request.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/scoped_id_list_membership_service.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/scoped_snapshot_registry.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/sdk_event_emitter/event_types.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/snapshot_evaluation_session.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/spec_store.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/config_spec_background_sync_metrics.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/scoped_source_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/__tests__/proto_specs_syncing_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/__tests__/proto_specs_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/__tests__/proto_specs_unknown_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/__tests__/proto_specs_vs_json_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/__tests__/proto_stream_reader_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/explicit_params.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/parse_options.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/proto_compression.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/proto_specs/parser.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/proto_stream_reader.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/spec_types.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/specs_hash_map.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/specs_response/statsig_config_specs.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig/typed_config_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig_core_api_options.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig_err.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig_global.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig_metadata.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig_runtime.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig_type_factories.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig_types.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/statsig_types_raw.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/typed_config/tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/typed_config.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/fast_statsig_user.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/into_optional.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/prepared_user.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/random_user_id.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/statsig_user.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/unit_id.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/user_data.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/user/user_value.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/src/value_parsing.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/check_gate_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/big_number_dcs.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/company_id_list +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/dcs_error.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/dcs_non_case_sensitive.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/dcs_user_agent_versions.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/dcs_with_analytical_exposure_sampling.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/demo_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/eval_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/experiment_group_condition.pb.br +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/get_id_lists.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/perf_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/test_user_agents.txt +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/ua_string_cases.json +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data_store_bytes_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data_store_json_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data_store_json_only_no_bytes_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/data_store_proto_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/exposure_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/flushing_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/gcir_plan_expansion_bench.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/global_configs_test.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/instance_registry_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/interner_contention_bench.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/list_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/network_client_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/output_logger_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/override_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/perf_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/protobuf_copy_bench.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/remote_config_preload_hydration_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/remote_config_value_hydration_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/spec_types_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_global_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/statsig_user_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/substring_search_bench.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/typed_getters_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/user_json_tests.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/utils/helpers.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
- {oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/tests/utils/mod.rs +0 -0
|
@@ -1853,7 +1853,7 @@ dependencies = [
|
|
|
1853
1853
|
|
|
1854
1854
|
[[package]]
|
|
1855
1855
|
name = "oai-statsig-grpc"
|
|
1856
|
-
version = "0.32.0-rc.
|
|
1856
|
+
version = "0.32.0-rc.5"
|
|
1857
1857
|
dependencies = [
|
|
1858
1858
|
"async-trait",
|
|
1859
1859
|
"chrono",
|
|
@@ -1869,7 +1869,7 @@ dependencies = [
|
|
|
1869
1869
|
|
|
1870
1870
|
[[package]]
|
|
1871
1871
|
name = "oai-statsig-rust"
|
|
1872
|
-
version = "0.32.0-rc.
|
|
1872
|
+
version = "0.32.0-rc.5"
|
|
1873
1873
|
dependencies = [
|
|
1874
1874
|
"ahash",
|
|
1875
1875
|
"arc-swap",
|
|
@@ -3102,7 +3102,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
|
|
3102
3102
|
|
|
3103
3103
|
[[package]]
|
|
3104
3104
|
name = "statsig-node"
|
|
3105
|
-
version = "0.32.0-rc.
|
|
3105
|
+
version = "0.32.0-rc.5"
|
|
3106
3106
|
dependencies = [
|
|
3107
3107
|
"async-trait",
|
|
3108
3108
|
"napi",
|
|
@@ -3117,7 +3117,7 @@ dependencies = [
|
|
|
3117
3117
|
|
|
3118
3118
|
[[package]]
|
|
3119
3119
|
name = "statsig-pyo3"
|
|
3120
|
-
version = "0.32.0-rc.
|
|
3120
|
+
version = "0.32.0-rc.5"
|
|
3121
3121
|
dependencies = [
|
|
3122
3122
|
"async-trait",
|
|
3123
3123
|
"lazy_static",
|
|
@@ -3132,7 +3132,7 @@ dependencies = [
|
|
|
3132
3132
|
|
|
3133
3133
|
[[package]]
|
|
3134
3134
|
name = "statsig_ffi"
|
|
3135
|
-
version = "0.32.0-rc.
|
|
3135
|
+
version = "0.32.0-rc.5"
|
|
3136
3136
|
dependencies = [
|
|
3137
3137
|
"async-trait",
|
|
3138
3138
|
"cbindgen",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oai_statsig_python_core
|
|
3
|
-
Version: 0.32.
|
|
3
|
+
Version: 0.32.0rc5
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -27,10 +27,18 @@ from .evaluation_cache import (
|
|
|
27
27
|
_EvaluationCacheKeys,
|
|
28
28
|
_get_evaluation_cache,
|
|
29
29
|
)
|
|
30
|
-
from .statsig_types import
|
|
30
|
+
from .statsig_types import (
|
|
31
|
+
DynamicConfig,
|
|
32
|
+
Experiment,
|
|
33
|
+
FeatureGate,
|
|
34
|
+
Layer,
|
|
35
|
+
TypedDynamicConfig,
|
|
36
|
+
)
|
|
31
37
|
from .typed_config import _TypedConfigs
|
|
32
38
|
|
|
33
39
|
if TYPE_CHECKING:
|
|
40
|
+
from google.protobuf.message import Message
|
|
41
|
+
|
|
34
42
|
from .statsig_python_core import AttributesDict, CustomIdsDict
|
|
35
43
|
|
|
36
44
|
|
|
@@ -48,7 +56,7 @@ _DEFAULT_EXPOSURE_CALLSITE_IGNORED_MODULE_PREFIXES: tuple[str, ...] = (
|
|
|
48
56
|
)
|
|
49
57
|
_EXPERIMENT_EXPOSURE_CALLSITE_SDK_CONFIG_PREFIX = "expo_callsite_logging_experiment::"
|
|
50
58
|
_LAYER_EXPOSURE_CALLSITE_SDK_CONFIG_PREFIX = "expo_callsite_logging_layer::"
|
|
51
|
-
_TypedConfigValue = TypeVar("_TypedConfigValue")
|
|
59
|
+
_TypedConfigValue = TypeVar("_TypedConfigValue", bound="Message")
|
|
52
60
|
|
|
53
61
|
|
|
54
62
|
def handle_fork():
|
|
@@ -252,6 +260,39 @@ class Statsig(StatsigBasePy):
|
|
|
252
260
|
)
|
|
253
261
|
return FeatureGate._from_parts(name, parts)
|
|
254
262
|
|
|
263
|
+
def get_feature_gate_fields_anonymous(
|
|
264
|
+
self,
|
|
265
|
+
name: str,
|
|
266
|
+
id_options: StatsigRandomUserID,
|
|
267
|
+
*,
|
|
268
|
+
context: Optional[StatsigUserContext] = None,
|
|
269
|
+
custom: Optional["AttributesDict"] = None,
|
|
270
|
+
custom_ids: Optional["CustomIdsDict"] = None,
|
|
271
|
+
ip: Optional[str] = None,
|
|
272
|
+
country: Optional[str] = None,
|
|
273
|
+
locale: Optional[str] = None,
|
|
274
|
+
user_agent: Optional[str] = None,
|
|
275
|
+
options: Optional[FeatureGateEvaluationOptions] = None,
|
|
276
|
+
) -> Optional[tuple[bool, str]]:
|
|
277
|
+
"""Return (value, reason), with a fresh anonymous identity per call.
|
|
278
|
+
|
|
279
|
+
Options, callbacks and exposures match get_feature_gate_anonymous.
|
|
280
|
+
The SDK error boundary returns None if the call fails.
|
|
281
|
+
"""
|
|
282
|
+
parts = super()._INTERNAL_get_feature_gate_anonymous_parts(
|
|
283
|
+
name,
|
|
284
|
+
id_options,
|
|
285
|
+
context,
|
|
286
|
+
custom,
|
|
287
|
+
custom_ids,
|
|
288
|
+
ip,
|
|
289
|
+
country,
|
|
290
|
+
locale,
|
|
291
|
+
user_agent,
|
|
292
|
+
options,
|
|
293
|
+
)
|
|
294
|
+
return parts[0], parts[3]
|
|
295
|
+
|
|
255
296
|
def get_layer_anonymous(
|
|
256
297
|
self,
|
|
257
298
|
name: str,
|
|
@@ -307,6 +348,24 @@ class Statsig(StatsigBasePy):
|
|
|
307
348
|
)
|
|
308
349
|
return FeatureGate._from_parts(name, parts)
|
|
309
350
|
|
|
351
|
+
def get_feature_gate_fields_with_context(
|
|
352
|
+
self,
|
|
353
|
+
context: Optional[StatsigUserContext],
|
|
354
|
+
name: str,
|
|
355
|
+
user_id: Optional[str] = None,
|
|
356
|
+
custom: Optional["AttributesDict"] = None,
|
|
357
|
+
options: Optional[FeatureGateEvaluationOptions] = None,
|
|
358
|
+
) -> Optional[tuple[bool, str]]:
|
|
359
|
+
"""Return (value, reason) without constructing a FeatureGate.
|
|
360
|
+
|
|
361
|
+
Options, callbacks and exposures match get_feature_gate_with_context.
|
|
362
|
+
The SDK error boundary returns None if the call fails.
|
|
363
|
+
"""
|
|
364
|
+
parts = super()._INTERNAL_get_feature_gate_with_context_parts(
|
|
365
|
+
context, name, user_id, custom, options
|
|
366
|
+
)
|
|
367
|
+
return parts[0], parts[3]
|
|
368
|
+
|
|
310
369
|
def get_dynamic_config_with_context(
|
|
311
370
|
self,
|
|
312
371
|
context: Optional[StatsigUserContext],
|
|
@@ -357,6 +416,22 @@ class Statsig(StatsigBasePy):
|
|
|
357
416
|
parts = super()._INTERNAL_get_feature_gate_parts(user, name, options)
|
|
358
417
|
return FeatureGate._from_parts(name, parts)
|
|
359
418
|
|
|
419
|
+
def get_feature_gate_fields(
|
|
420
|
+
self,
|
|
421
|
+
user: StatsigUser,
|
|
422
|
+
name: str,
|
|
423
|
+
options: Optional[FeatureGateEvaluationOptions] = None,
|
|
424
|
+
) -> Optional[tuple[bool, str]]:
|
|
425
|
+
"""Return (value, reason) without constructing a FeatureGate.
|
|
426
|
+
|
|
427
|
+
The reason is identical to get_feature_gate(...).details.reason,
|
|
428
|
+
including uninitialized, unrecognized and local override results.
|
|
429
|
+
Options, callbacks and exposures are unchanged. The SDK error boundary
|
|
430
|
+
returns None if the call fails.
|
|
431
|
+
"""
|
|
432
|
+
parts = super()._INTERNAL_get_feature_gate_parts(user, name, options)
|
|
433
|
+
return parts[0], parts[3]
|
|
434
|
+
|
|
360
435
|
def get_dynamic_config(
|
|
361
436
|
self,
|
|
362
437
|
user: StatsigUser,
|
|
@@ -351,6 +351,16 @@ class StatsigOptions:
|
|
|
351
351
|
@log_event_connection_reuse.setter
|
|
352
352
|
def log_event_connection_reuse(self, value: typing.Optional[builtins.bool]) -> None: ...
|
|
353
353
|
@property
|
|
354
|
+
def prefer_http2(self) -> typing.Optional[builtins.bool]:
|
|
355
|
+
r"""
|
|
356
|
+
Prefer HTTP/2 while allowing HTTP/1.1. Unset enables it; False restores the existing transport.
|
|
357
|
+
"""
|
|
358
|
+
@prefer_http2.setter
|
|
359
|
+
def prefer_http2(self, value: typing.Optional[builtins.bool]) -> None:
|
|
360
|
+
r"""
|
|
361
|
+
Prefer HTTP/2 while allowing HTTP/1.1. Unset enables it; False restores the existing transport.
|
|
362
|
+
"""
|
|
363
|
+
@property
|
|
354
364
|
def event_logging_flush_interval_ms(self) -> typing.Optional[builtins.int]: ...
|
|
355
365
|
@event_logging_flush_interval_ms.setter
|
|
356
366
|
def event_logging_flush_interval_ms(self, value: typing.Optional[builtins.int]) -> None: ...
|
|
@@ -478,7 +488,7 @@ class StatsigOptions:
|
|
|
478
488
|
def evaluation_cache(self) -> typing.Optional[_statsig_python_core.evaluation_cache.EvaluationCache]: ...
|
|
479
489
|
@evaluation_cache.setter
|
|
480
490
|
def evaluation_cache(self, value: typing.Optional[_statsig_python_core.evaluation_cache.EvaluationCache]) -> None: ...
|
|
481
|
-
def __new__(cls, specs_url: typing.Optional[builtins.str] = None, specs_sync_interval_ms: typing.Optional[builtins.int] = None, init_timeout_ms: typing.Optional[builtins.int] = None, log_event_url: typing.Optional[builtins.str] = None, disable_all_logging: typing.Optional[builtins.bool] = None, disable_network: typing.Optional[builtins.bool] = None, log_event_connection_reuse: typing.Optional[builtins.bool] = None, event_logging_flush_interval_ms: typing.Optional[builtins.int] = None, event_logging_max_queue_size: typing.Optional[builtins.int] = None, event_logging_max_pending_batch_queue_size: typing.Optional[builtins.int] = None, enable_id_lists: typing.Optional[builtins.bool] = None, enable_dcs_deltas: typing.Optional[builtins.bool] = None, wait_for_user_agent_init: typing.Optional[builtins.bool] = None, wait_for_country_lookup_init: typing.Optional[builtins.bool] = None, disable_country_lookup: typing.Optional[builtins.bool] = None, id_lists_url: typing.Optional[builtins.str] = None, download_id_list_file_api: typing.Optional[builtins.str] = None, id_lists_sync_interval_ms: typing.Optional[builtins.int] = None, fallback_to_statsig_api: typing.Optional[builtins.bool] = None, environment: typing.Optional[builtins.str] = None, service_name: typing.Optional[builtins.str] = None, sdk_instance_id: typing.Optional[builtins.str] = None, sdk_runtime_thread_count: typing.Optional[builtins.int] = None, runtime_thread_start_callback: typing.Optional[typing.Callable[[], None]] = None, output_log_level: typing.Optional[builtins.str] = None, global_custom_fields: typing.Optional[typing.Mapping[builtins.str, typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool, typing.List[typing.Optional[typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool]]]]]] = None, observability_client: typing.Optional[ObservabilityClientBase] = None, data_store: typing.Optional[DataStoreBase] = None, data_store_key_schema_version: typing.Optional[builtins.str] = None, persistent_storage: typing.Optional[PersistentStorageBaseClass] = None, config_compression_mode: typing.Optional[builtins.str] = None, proxy_config: typing.Optional[ProxyConfig] = None, output_logger_provider: typing.Optional[OutputLoggerProviderBase] = None, spec_adapter_configs: typing.Optional[list] = None, use_third_party_ua_parser: typing.Optional[builtins.bool] = None, disable_disk_access: typing.Optional[builtins.bool] = None, experimental_flags: typing.Optional[builtins.set[builtins.str]] = None, event_logging_adapter: typing.Optional[EventLoggingAdapterBase] = None, evaluation_cache: typing.Optional[_statsig_python_core.evaluation_cache.EvaluationCache] = None) -> StatsigOptions: ...
|
|
491
|
+
def __new__(cls, specs_url: typing.Optional[builtins.str] = None, specs_sync_interval_ms: typing.Optional[builtins.int] = None, init_timeout_ms: typing.Optional[builtins.int] = None, log_event_url: typing.Optional[builtins.str] = None, disable_all_logging: typing.Optional[builtins.bool] = None, disable_network: typing.Optional[builtins.bool] = None, log_event_connection_reuse: typing.Optional[builtins.bool] = None, event_logging_flush_interval_ms: typing.Optional[builtins.int] = None, event_logging_max_queue_size: typing.Optional[builtins.int] = None, event_logging_max_pending_batch_queue_size: typing.Optional[builtins.int] = None, enable_id_lists: typing.Optional[builtins.bool] = None, enable_dcs_deltas: typing.Optional[builtins.bool] = None, wait_for_user_agent_init: typing.Optional[builtins.bool] = None, wait_for_country_lookup_init: typing.Optional[builtins.bool] = None, disable_country_lookup: typing.Optional[builtins.bool] = None, id_lists_url: typing.Optional[builtins.str] = None, download_id_list_file_api: typing.Optional[builtins.str] = None, id_lists_sync_interval_ms: typing.Optional[builtins.int] = None, fallback_to_statsig_api: typing.Optional[builtins.bool] = None, environment: typing.Optional[builtins.str] = None, service_name: typing.Optional[builtins.str] = None, sdk_instance_id: typing.Optional[builtins.str] = None, sdk_runtime_thread_count: typing.Optional[builtins.int] = None, runtime_thread_start_callback: typing.Optional[typing.Callable[[], None]] = None, output_log_level: typing.Optional[builtins.str] = None, global_custom_fields: typing.Optional[typing.Mapping[builtins.str, typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool, typing.List[typing.Optional[typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool]]]]]] = None, observability_client: typing.Optional[ObservabilityClientBase] = None, data_store: typing.Optional[DataStoreBase] = None, data_store_key_schema_version: typing.Optional[builtins.str] = None, persistent_storage: typing.Optional[PersistentStorageBaseClass] = None, config_compression_mode: typing.Optional[builtins.str] = None, proxy_config: typing.Optional[ProxyConfig] = None, output_logger_provider: typing.Optional[OutputLoggerProviderBase] = None, spec_adapter_configs: typing.Optional[list] = None, use_third_party_ua_parser: typing.Optional[builtins.bool] = None, disable_disk_access: typing.Optional[builtins.bool] = None, experimental_flags: typing.Optional[builtins.set[builtins.str]] = None, event_logging_adapter: typing.Optional[EventLoggingAdapterBase] = None, evaluation_cache: typing.Optional[_statsig_python_core.evaluation_cache.EvaluationCache] = None, prefer_http2: typing.Optional[builtins.bool] = None) -> StatsigOptions: ...
|
|
482
492
|
|
|
483
493
|
@typing.final
|
|
484
494
|
class StatsigRandomUserID:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
from dataclasses import dataclass
|
|
5
5
|
from threading import Condition, Lock, Thread, current_thread
|
|
6
|
-
from typing import TYPE_CHECKING, Any, Callable, Optional, TypeVar
|
|
6
|
+
from typing import TYPE_CHECKING, Any, Callable, Optional, TypeVar
|
|
7
7
|
from weakref import ref
|
|
8
8
|
|
|
9
9
|
from .evaluation_cache import _VALUE_CACHE_HIT_FIELD
|
|
@@ -13,7 +13,7 @@ if TYPE_CHECKING:
|
|
|
13
13
|
from google.protobuf.message import Message
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
T = TypeVar("T")
|
|
16
|
+
T = TypeVar("T", bound="Message")
|
|
17
17
|
_LOGGER = logging.getLogger(__name__)
|
|
18
18
|
|
|
19
19
|
|
|
@@ -36,7 +36,7 @@ def _validate_message_type(message_type: type[T]) -> None:
|
|
|
36
36
|
class _Observer:
|
|
37
37
|
name: str
|
|
38
38
|
native: Any
|
|
39
|
-
message_type: type
|
|
39
|
+
message_type: type["Message"]
|
|
40
40
|
callback: Callable
|
|
41
41
|
revision: Any = None
|
|
42
42
|
error: Optional[str] = None
|
|
@@ -122,9 +122,7 @@ class _TypedConfigs:
|
|
|
122
122
|
from google.protobuf.json_format import ParseDict
|
|
123
123
|
|
|
124
124
|
try:
|
|
125
|
-
value = message_type()
|
|
126
|
-
# Public entry points validate the protobuf class before conversion.
|
|
127
|
-
ParseDict(raw["value"], cast("Message", value))
|
|
125
|
+
value = ParseDict(raw["value"], message_type())
|
|
128
126
|
except Exception as error:
|
|
129
127
|
raise TypedConfigConversionError(
|
|
130
128
|
f"Failed to convert typed config {name!r}"
|
|
@@ -136,7 +134,7 @@ class _TypedConfigs:
|
|
|
136
134
|
if self._closed:
|
|
137
135
|
return
|
|
138
136
|
try:
|
|
139
|
-
result
|
|
137
|
+
result = self._convert(
|
|
140
138
|
observer.name,
|
|
141
139
|
observer.native.get_evaluation(),
|
|
142
140
|
observer.message_type,
|
|
@@ -128,6 +128,9 @@ pub struct StatsigOptionsPy {
|
|
|
128
128
|
pub disable_network: Option<bool>,
|
|
129
129
|
#[pyo3(get, set)]
|
|
130
130
|
pub log_event_connection_reuse: Option<bool>,
|
|
131
|
+
/// Prefer HTTP/2 while allowing HTTP/1.1. Unset enables it; False restores the existing transport.
|
|
132
|
+
#[pyo3(get, set)]
|
|
133
|
+
pub prefer_http2: Option<bool>,
|
|
131
134
|
#[pyo3(get, set)]
|
|
132
135
|
pub event_logging_flush_interval_ms: Option<u32>,
|
|
133
136
|
#[pyo3(get, set)]
|
|
@@ -237,6 +240,7 @@ impl StatsigOptionsPy {
|
|
|
237
240
|
experimental_flags=None,
|
|
238
241
|
event_logging_adapter=None,
|
|
239
242
|
evaluation_cache=None,
|
|
243
|
+
prefer_http2=None,
|
|
240
244
|
))]
|
|
241
245
|
#[allow(clippy::too_many_arguments)]
|
|
242
246
|
pub fn new(
|
|
@@ -289,6 +293,7 @@ impl StatsigOptionsPy {
|
|
|
289
293
|
imports = ("typing", "statsig_python_core as _statsig_python_core", "statsig_python_core.evaluation_cache")
|
|
290
294
|
))]
|
|
291
295
|
evaluation_cache: Option<Py<PyAny>>,
|
|
296
|
+
prefer_http2: Option<bool>,
|
|
292
297
|
) -> Self {
|
|
293
298
|
Self {
|
|
294
299
|
specs_url,
|
|
@@ -297,6 +302,7 @@ impl StatsigOptionsPy {
|
|
|
297
302
|
log_event_url,
|
|
298
303
|
disable_all_logging,
|
|
299
304
|
log_event_connection_reuse,
|
|
305
|
+
prefer_http2,
|
|
300
306
|
event_logging_flush_interval_ms,
|
|
301
307
|
event_logging_max_queue_size,
|
|
302
308
|
event_logging_max_pending_batch_queue_size,
|
|
@@ -487,6 +493,7 @@ fn create_inner_statsig_options(
|
|
|
487
493
|
global_custom_fields,
|
|
488
494
|
disable_network: opts.disable_network,
|
|
489
495
|
log_event_connection_reuse: opts.log_event_connection_reuse,
|
|
496
|
+
prefer_http2: opts.prefer_http2,
|
|
490
497
|
disable_country_lookup: opts.disable_country_lookup,
|
|
491
498
|
persistent_storage: opts.persistent_storage.as_ref().map(|s| {
|
|
492
499
|
Arc::new(StatsigPersistentStorageOverrideAdapter::new(
|
|
@@ -52,6 +52,13 @@ def _assert_gate(actual, expected):
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
|
|
55
|
+
def _assert_fields(actual, expected):
|
|
56
|
+
assert type(actual) is tuple
|
|
57
|
+
assert actual == (expected.value, expected.details.reason)
|
|
58
|
+
assert type(actual[0]) is bool
|
|
59
|
+
assert type(actual[1]) is str
|
|
60
|
+
|
|
61
|
+
|
|
55
62
|
def _assert_parts(name, parts, raw):
|
|
56
63
|
assert type(parts) is tuple
|
|
57
64
|
assert len(parts) == 7
|
|
@@ -133,6 +140,13 @@ def test_all_fixture_gates_match_dictionary_results(make_sdk, user_id, with_cont
|
|
|
133
140
|
),
|
|
134
141
|
expected,
|
|
135
142
|
)
|
|
143
|
+
_assert_fields(sdk.get_feature_gate_fields(user, name, options), expected)
|
|
144
|
+
_assert_fields(
|
|
145
|
+
sdk.get_feature_gate_fields_with_context(
|
|
146
|
+
context, name, user_id, overlay, options
|
|
147
|
+
),
|
|
148
|
+
expected,
|
|
149
|
+
)
|
|
136
150
|
|
|
137
151
|
|
|
138
152
|
def test_missing_and_uninitialized_results_preserve_optional_metadata(make_sdk):
|
|
@@ -174,6 +188,17 @@ def test_missing_and_uninitialized_results_preserve_optional_metadata(make_sdk):
|
|
|
174
188
|
_assert_gate(
|
|
175
189
|
sdk.get_feature_gate_anonymous(name, policy, options=options), expected
|
|
176
190
|
)
|
|
191
|
+
_assert_fields(sdk.get_feature_gate_fields(user, name, options), expected)
|
|
192
|
+
_assert_fields(
|
|
193
|
+
sdk.get_feature_gate_fields_with_context(
|
|
194
|
+
context, name, user.user_id, options=options
|
|
195
|
+
),
|
|
196
|
+
expected,
|
|
197
|
+
)
|
|
198
|
+
_assert_fields(
|
|
199
|
+
sdk.get_feature_gate_fields_anonymous(name, policy, options=options),
|
|
200
|
+
expected,
|
|
201
|
+
)
|
|
177
202
|
if not initialized:
|
|
178
203
|
assert expected.details.to_dict() == {
|
|
179
204
|
"reason": "Uninitialized",
|
|
@@ -244,6 +269,17 @@ def test_overrides_errors_and_zero_version_keep_native_metadata(make_sdk):
|
|
|
244
269
|
_assert_gate(
|
|
245
270
|
sdk.get_feature_gate_anonymous(name, policy, options=options), expected
|
|
246
271
|
)
|
|
272
|
+
_assert_fields(sdk.get_feature_gate_fields(user, name, options), expected)
|
|
273
|
+
_assert_fields(
|
|
274
|
+
sdk.get_feature_gate_fields_with_context(
|
|
275
|
+
context, name, user.user_id, options=options
|
|
276
|
+
),
|
|
277
|
+
expected,
|
|
278
|
+
)
|
|
279
|
+
_assert_fields(
|
|
280
|
+
sdk.get_feature_gate_fields_anonymous(name, policy, options=options),
|
|
281
|
+
expected,
|
|
282
|
+
)
|
|
247
283
|
if name == "parts_unsupported":
|
|
248
284
|
assert expected.details.reason.endswith(":Unsupported")
|
|
249
285
|
elif name == "parts_cycle":
|
|
@@ -325,7 +361,7 @@ def test_factory_preserves_defaults_and_ordinary_mutable_objects(parts):
|
|
|
325
361
|
_assert_gate(second, expected)
|
|
326
362
|
|
|
327
363
|
|
|
328
|
-
@pytest.mark.parametrize("entrypoint", ["parts", "public"])
|
|
364
|
+
@pytest.mark.parametrize("entrypoint", ["parts", "public", "fields"])
|
|
329
365
|
@pytest.mark.parametrize("with_request", [False, True])
|
|
330
366
|
def test_anonymous_results_replay_each_logged_identity(
|
|
331
367
|
make_sdk, entrypoint, with_request
|
|
@@ -369,9 +405,12 @@ def test_anonymous_results_replay_each_logged_identity(
|
|
|
369
405
|
name, policy, context=context, custom=custom, **request
|
|
370
406
|
)
|
|
371
407
|
else:
|
|
372
|
-
|
|
373
|
-
|
|
408
|
+
method = (
|
|
409
|
+
sdk.get_feature_gate_fields_anonymous
|
|
410
|
+
if entrypoint == "fields"
|
|
411
|
+
else sdk.get_feature_gate_anonymous
|
|
374
412
|
)
|
|
413
|
+
result = method(name, policy, context=context, custom=custom, **request)
|
|
375
414
|
saved.append((name, result, metadata))
|
|
376
415
|
custom["nested"].append("mutated-after-evaluation")
|
|
377
416
|
assert sdk.flush_events().wait(10)
|
|
@@ -392,6 +431,8 @@ def test_anonymous_results_replay_each_logged_identity(
|
|
|
392
431
|
raw = sdk._INTERNAL_get_feature_gate(user, name, _disabled())
|
|
393
432
|
if entrypoint == "parts":
|
|
394
433
|
_assert_parts(name, result, raw)
|
|
434
|
+
elif entrypoint == "fields":
|
|
435
|
+
_assert_fields(result, FeatureGate(name, raw))
|
|
395
436
|
else:
|
|
396
437
|
_assert_gate(result, FeatureGate(name, raw))
|
|
397
438
|
assert event["metadata"]["gateValue"] == str(raw["value"]).lower()
|
|
@@ -402,7 +443,7 @@ def test_anonymous_results_replay_each_logged_identity(
|
|
|
402
443
|
|
|
403
444
|
@pytest.mark.parametrize("anonymous", [False, True])
|
|
404
445
|
@pytest.mark.parametrize("with_context", [False, True])
|
|
405
|
-
@pytest.mark.parametrize("entrypoint", ["parts", "public"])
|
|
446
|
+
@pytest.mark.parametrize("entrypoint", ["parts", "public", "fields"])
|
|
406
447
|
def test_empty_custom_and_absent_custom_remain_distinct_in_exposures(
|
|
407
448
|
make_sdk, anonymous, with_context, entrypoint
|
|
408
449
|
):
|
|
@@ -410,11 +451,11 @@ def test_empty_custom_and_absent_custom_remain_distinct_in_exposures(
|
|
|
410
451
|
context = StatsigUserContext() if with_context else None
|
|
411
452
|
for label, custom in (("absent", None), ("empty", {})):
|
|
412
453
|
if anonymous:
|
|
413
|
-
method =
|
|
414
|
-
sdk._INTERNAL_get_feature_gate_anonymous_parts
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
454
|
+
method = {
|
|
455
|
+
"parts": sdk._INTERNAL_get_feature_gate_anonymous_parts,
|
|
456
|
+
"public": sdk.get_feature_gate_anonymous,
|
|
457
|
+
"fields": sdk.get_feature_gate_fields_anonymous,
|
|
458
|
+
}[entrypoint]
|
|
418
459
|
method(
|
|
419
460
|
"test_public",
|
|
420
461
|
StatsigRandomUserID(label, 16),
|
|
@@ -422,11 +463,11 @@ def test_empty_custom_and_absent_custom_remain_distinct_in_exposures(
|
|
|
422
463
|
custom=custom,
|
|
423
464
|
)
|
|
424
465
|
else:
|
|
425
|
-
method =
|
|
426
|
-
sdk._INTERNAL_get_feature_gate_with_context_parts
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
466
|
+
method = {
|
|
467
|
+
"parts": sdk._INTERNAL_get_feature_gate_with_context_parts,
|
|
468
|
+
"public": sdk.get_feature_gate_with_context,
|
|
469
|
+
"fields": sdk.get_feature_gate_fields_with_context,
|
|
470
|
+
}[entrypoint]
|
|
430
471
|
method(context, "test_public", user_id=label, custom=custom)
|
|
431
472
|
assert sdk.flush_events().wait(10)
|
|
432
473
|
events = _exposures(logs)
|
|
@@ -456,6 +497,7 @@ def test_callbacks_fire_once_per_call_and_exposures_keep_deduplication(make_sdk,
|
|
|
456
497
|
"raw": sdk._INTERNAL_get_feature_gate,
|
|
457
498
|
"parts": sdk._INTERNAL_get_feature_gate_parts,
|
|
458
499
|
"public": sdk.get_feature_gate,
|
|
500
|
+
"fields": sdk.get_feature_gate_fields,
|
|
459
501
|
}
|
|
460
502
|
return methods[entrypoint](user, name, options)
|
|
461
503
|
if kind == "context":
|
|
@@ -463,24 +505,26 @@ def test_callbacks_fire_once_per_call_and_exposures_keep_deduplication(make_sdk,
|
|
|
463
505
|
"raw": sdk._INTERNAL_get_feature_gate_with_context,
|
|
464
506
|
"parts": sdk._INTERNAL_get_feature_gate_with_context_parts,
|
|
465
507
|
"public": sdk.get_feature_gate_with_context,
|
|
508
|
+
"fields": sdk.get_feature_gate_fields_with_context,
|
|
466
509
|
}
|
|
467
510
|
return methods[entrypoint](context, name, user.user_id, options=options)
|
|
468
511
|
methods = {
|
|
469
512
|
"parts": sdk._INTERNAL_get_feature_gate_anonymous_parts,
|
|
470
513
|
"public": sdk.get_feature_gate_anonymous,
|
|
514
|
+
"fields": sdk.get_feature_gate_fields_anonymous,
|
|
471
515
|
}
|
|
472
516
|
return methods[entrypoint](name, policy, options=options)
|
|
473
517
|
|
|
474
|
-
for entrypoint in ("parts", "public"):
|
|
518
|
+
for entrypoint in ("parts", "public", "fields"):
|
|
475
519
|
evaluate(entrypoint, _disabled())
|
|
476
|
-
assert len(callbacks) ==
|
|
520
|
+
assert len(callbacks) == 3
|
|
477
521
|
assert sdk.flush_events().wait(10)
|
|
478
522
|
assert _exposures(logs) == []
|
|
479
523
|
if kind != "anonymous":
|
|
480
524
|
assert evaluate("raw") == raw
|
|
481
|
-
for entrypoint in ("parts", "public", "
|
|
525
|
+
for entrypoint in ("parts", "public", "fields") * 2:
|
|
482
526
|
evaluate(entrypoint)
|
|
483
|
-
assert len(callbacks) == (
|
|
527
|
+
assert len(callbacks) == (9 if kind == "anonymous" else 10)
|
|
484
528
|
for event in callbacks:
|
|
485
529
|
assert event["event_name"] == "gate_evaluated"
|
|
486
530
|
assert event["data"] == {
|
|
@@ -491,5 +535,32 @@ def test_callbacks_fire_once_per_call_and_exposures_keep_deduplication(make_sdk,
|
|
|
491
535
|
}
|
|
492
536
|
assert sdk.flush_events().wait(10)
|
|
493
537
|
events = _exposures(logs)
|
|
494
|
-
assert len(events) == (
|
|
538
|
+
assert len(events) == (6 if kind == "anonymous" else 1)
|
|
495
539
|
assert len({event["user"]["userID"] for event in events}) == len(events)
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
@pytest.mark.parametrize("kind", ["ordinary", "context", "anonymous"])
|
|
543
|
+
def test_fields_preserve_error_boundary_and_skip_rich_results(
|
|
544
|
+
make_sdk, monkeypatch, capsys, kind
|
|
545
|
+
):
|
|
546
|
+
sdk, _, _ = make_sdk()
|
|
547
|
+
|
|
548
|
+
def reject_rich_result(*args):
|
|
549
|
+
raise AssertionError("fields APIs must not construct rich gate results")
|
|
550
|
+
|
|
551
|
+
monkeypatch.setattr(FeatureGate, "_from_parts", reject_rich_result)
|
|
552
|
+
if kind == "ordinary":
|
|
553
|
+
method = sdk.get_feature_gate_fields
|
|
554
|
+
valid = (StatsigUser("fields-user"), "test_public")
|
|
555
|
+
invalid = (object(), "test_public")
|
|
556
|
+
elif kind == "context":
|
|
557
|
+
method = sdk.get_feature_gate_fields_with_context
|
|
558
|
+
valid = (StatsigUserContext(), "test_public", "fields-user")
|
|
559
|
+
invalid = (object(), "test_public", "fields-user")
|
|
560
|
+
else:
|
|
561
|
+
method = sdk.get_feature_gate_fields_anonymous
|
|
562
|
+
valid = ("test_public", StatsigRandomUserID("fields", 16))
|
|
563
|
+
invalid = ("test_public", object())
|
|
564
|
+
assert method(*valid, options=_disabled()) == (True, "Network:Recognized")
|
|
565
|
+
assert method(*invalid, options=_disabled()) is None
|
|
566
|
+
assert "Error" in capsys.readouterr().out
|
|
@@ -8,6 +8,17 @@ def test_default_statsig_options():
|
|
|
8
8
|
assert options.service_name is None
|
|
9
9
|
assert options.runtime_thread_start_callback is None
|
|
10
10
|
assert options.evaluation_cache is None
|
|
11
|
+
assert options.prefer_http2 is None
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_prefer_http2_supported_option():
|
|
15
|
+
options = StatsigOptions(prefer_http2=True)
|
|
16
|
+
assert options.prefer_http2 is True
|
|
17
|
+
assert options.experimental_flags is None
|
|
18
|
+
options.prefer_http2 = False
|
|
19
|
+
assert options.prefer_http2 is False
|
|
20
|
+
options.prefer_http2 = None
|
|
21
|
+
assert options.prefer_http2 is None
|
|
11
22
|
|
|
12
23
|
|
|
13
24
|
def test_initialize_partial_statsig_options():
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""Static-only API contracts; checked with mypy --warn-unused-ignores."""
|
|
2
|
+
|
|
3
|
+
from typing import TypeVar
|
|
4
|
+
|
|
5
|
+
from google.protobuf.message import Message
|
|
6
|
+
from google.protobuf.struct_pb2 import Struct
|
|
7
|
+
from typing_extensions import assert_type
|
|
8
|
+
|
|
9
|
+
from statsig_python_core import Statsig, StatsigUser, TypedDynamicConfig
|
|
10
|
+
|
|
11
|
+
M = TypeVar("M", bound=Message)
|
|
12
|
+
T = TypeVar("T")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def wrapper(sdk: Statsig, user: StatsigUser, cls: type[M]) -> TypedDynamicConfig[M]:
|
|
16
|
+
return sdk.get_typed_config("config", user, message_type=cls)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def valid_calls(sdk: Statsig, user: StatsigUser) -> None:
|
|
20
|
+
assert_type(wrapper(sdk, user, Struct), TypedDynamicConfig[Struct])
|
|
21
|
+
assert_type(
|
|
22
|
+
sdk.get_typed_config("config", user, message_type=Struct),
|
|
23
|
+
TypedDynamicConfig[Struct],
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
def callback(result: TypedDynamicConfig[Struct]) -> None:
|
|
27
|
+
assert_type(result.value, Struct)
|
|
28
|
+
|
|
29
|
+
sdk.register_typed_config_callback("config", user, callback, message_type=Struct)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def unbounded_wrapper(sdk: Statsig, user: StatsigUser, cls: type[T]) -> None:
|
|
33
|
+
# Removing the Message bound must make these ignores fail as unused.
|
|
34
|
+
sdk.get_typed_config("config", user, message_type=cls) # type: ignore[type-var]
|
|
35
|
+
sdk.register_typed_config_callback("config", user, lambda result: None, message_type=cls) # type: ignore[type-var]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def invalid_class(sdk: Statsig, user: StatsigUser) -> None:
|
|
39
|
+
sdk.get_typed_config("config", user, message_type=dict) # type: ignore[type-var]
|
{oai_statsig_python_core-0.32.0rc2 → oai_statsig_python_core-0.32.0rc5}/statsig-rust/Cargo.toml
RENAMED
|
@@ -47,7 +47,7 @@ serde_json = { version = "1.0.151", features = [
|
|
|
47
47
|
] }
|
|
48
48
|
serde_with = "3.23.0"
|
|
49
49
|
sha2 = "0.11.0"
|
|
50
|
-
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.32.0-rc.
|
|
50
|
+
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.32.0-rc.5", optional = true }
|
|
51
51
|
simple_logger = { version = "5.2.0" }
|
|
52
52
|
tempfile = "3.27.0"
|
|
53
53
|
tokio = { version = "1.53.1", features = ["full"] }
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
use crate::StatsigOptions;
|
|
2
|
+
|
|
3
|
+
#[test]
|
|
4
|
+
fn test_prefer_http2_supported_option() {
|
|
5
|
+
use crate::networking::http2::http2_enabled;
|
|
6
|
+
|
|
7
|
+
assert!(http2_enabled(None));
|
|
8
|
+
assert!(http2_enabled(Some(&StatsigOptions::default())));
|
|
9
|
+
for enabled in [true, false] {
|
|
10
|
+
let options = StatsigOptions::builder()
|
|
11
|
+
.prefer_http2(Some(enabled))
|
|
12
|
+
.build();
|
|
13
|
+
assert_eq!(http2_enabled(Some(&options)), enabled);
|
|
14
|
+
assert_eq!(
|
|
15
|
+
serde_json::to_value(&options).unwrap()["prefer_http2"],
|
|
16
|
+
enabled
|
|
17
|
+
);
|
|
18
|
+
assert!(options.experimental_flags.is_none());
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let old_flag_only = StatsigOptions {
|
|
22
|
+
experimental_flags: Some(["prefer_http2".to_string()].into()),
|
|
23
|
+
..Default::default()
|
|
24
|
+
};
|
|
25
|
+
assert!(http2_enabled(Some(&old_flag_only)));
|
|
26
|
+
let explicit_off = StatsigOptions {
|
|
27
|
+
prefer_http2: Some(false),
|
|
28
|
+
..old_flag_only
|
|
29
|
+
};
|
|
30
|
+
assert!(!http2_enabled(Some(&explicit_off)));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#[test]
|
|
34
|
+
fn test_sdk_instance_id_defaults_to_sdk_key() {
|
|
35
|
+
let options = StatsigOptions::new();
|
|
36
|
+
|
|
37
|
+
assert_eq!(options.get_sdk_instance_id("secret-key"), "secret-key");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
#[test]
|
|
41
|
+
fn test_sdk_instance_id_can_be_overridden() {
|
|
42
|
+
let options = StatsigOptions::builder()
|
|
43
|
+
.sdk_instance_id(Some("validator:route:target".to_string()))
|
|
44
|
+
.build();
|
|
45
|
+
|
|
46
|
+
assert_eq!(
|
|
47
|
+
options.get_sdk_instance_id("secret-key"),
|
|
48
|
+
"validator:route:target"
|
|
49
|
+
);
|
|
50
|
+
}
|