oai-statsig-python-core 0.31.0rc2__tar.gz → 0.31.0rc4__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.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/Cargo.lock +5 -5
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/Cargo.toml +1 -1
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/PKG-INFO +1 -1
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/interned_store_py.rs +18 -5
- oai_statsig_python_core-0.31.0rc4/statsig-pyo3/tests/test_experiment_group_targeting_exposures.py +292 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_interned_store_preload.py +28 -4
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/Cargo.toml +1 -1
- oai_statsig_python_core-0.31.0rc4/statsig-rust/src/interned_values/__tests__/interned_store_preload_remote_tests.rs +311 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/__tests__/mod.rs +1 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/interned_store.rs +15 -5
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/__tests__/remote_config_value_hydrator_tests.rs +126 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/scoped_source_specs_adapter.rs +342 -10
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +10 -57
- oai_statsig_python_core-0.31.0rc4/statsig-rust/src/specs_response/__tests__/proto_specs_tests.rs +1103 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/parse_options.rs +25 -1
- oai_statsig_python_core-0.31.0rc4/statsig-rust/src/specs_response/proto_specs/parser.rs +322 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/proto_specs.rs +267 -1505
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/proto_stream_reader.rs +92 -11
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/spec_types.rs +2 -1
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/specs_hash_map.rs +91 -65
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/statsig.rs +4 -13
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/gcir_tests.rs +63 -15
- oai_statsig_python_core-0.31.0rc4/statsig-rust/tests/remote_config_preload_hydration_tests.rs +132 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/__init__.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/_frozen_json.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/data_store.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/error_boundary.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/observability_client.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/persistent_storage.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/py.typed +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/requirements.txt +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/statsig.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/statsig_python_core.pyi +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/py_src/statsig_python_core/statsig_types.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/pyproject.toml +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-grpc/Cargo.toml +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-grpc/README.md +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-grpc/build.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-grpc/src/lib.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/.github/workflows/CI.yml +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/.gitignore +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/Cargo.toml +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/README.md +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/benchmarks/dynamic_config_value_cache_benchmark.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/data_store_base_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/event_logging_adapter_base_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/lib.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/pyo_utils.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/safe_gil.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/statsig_base_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/statsig_options_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/statsig_types_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/statsig_user_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/unit_id_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/fork_runner.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/mock_output_logger.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/mock_scrapi.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/profile_util.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_bulk_evaluate_gcir_parity.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_data_store.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_error_boundary.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_evaluation_cache_integration.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_evaluation_cache_pyo3.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_forking.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_frozen_json.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_layer_param_exposure_sampling.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_observability_client.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_override_adapter.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_partial_rollout_boost.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_performance.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_sec_expo_as_primary.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_shutdown.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_statsig.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_statsig_options.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_statsig_user.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_statsig_user_json_serialization.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_statsig_user_none_fields.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-pyo3/tests/utils.py +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/build.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/resources/ip_supalite.table +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/__tests__/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/compression/compression_helper.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/compression/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/console_capture/console_capture_handler.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/console_capture/console_capture_instances.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/console_capture/console_capture_options.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/console_capture/console_log_line_levels.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/console_capture/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/data_store_interface.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/dcs_str.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/__tests__/rkyv_value_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/cmab_evaluator.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/evaluation_data.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/evaluation_types.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/evaluator.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/evaluator_context.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/evaluator_result.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/rkyv_value.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer_performance.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/evaluation_fixture_client.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/delayed_exposure_store.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_logger.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/queued_expo.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/event_queue/queued_secondary_expo.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/flush_type.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/sec_expo_as_primary_experiment.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/dynamic_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/evaluation_plan.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/feature_gates_processor.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/gcir_formatter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/gcir_options.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/gcir_process_iter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/layer_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/param_stores_processor.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/secondary_exposure_hashing.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/target_app_id_utils.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/gcir/timing.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/global_configs.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/hashing/ahash.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/hashing/djb2.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/hashing/hash_util.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/hashing/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/init_details.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/initialize_response.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/initialize_v2_response.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/instance_registry.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_string.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/__tests__/interned_store_eval_value_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_v2_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/__tests__/interned_store_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/__tests__/interned_store_string_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/interned_store/mmap_artifact.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/interned_store/mmap_manifest.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/interned_store/mmap_reader/materialize.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/interned_store/mmap_reader/memory.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/interned_store/mmap_reader.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/interned_store/mmap_writer.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/mmap_data_v2/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/mmap_data_v2/spec.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/mmap_data_v2/spec_content_hash.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/mmap_data_v2.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/mmap_sync.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/interned_values/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/lib.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/logging_utils.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/macros.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/http_types.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/network_client.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/network_error.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/providers/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/proxy_config.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/networking/statsig_url.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/observability/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/observability/ops_stats.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/output_logger.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/override_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/persistent_storage/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/scoped_evaluation_request.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/scoped_id_list_membership_service.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/scoped_snapshot_registry.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/sdk_event_emitter/event_types.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/snapshot_evaluation_session.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/spec_store.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/config_spec_background_sync_metrics.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/json.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/protobuf.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/__tests__/proto_specs_syncing_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/__tests__/proto_specs_unknown_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/__tests__/proto_specs_vs_json_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/__tests__/proto_stream_reader_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/explicit_params.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/proto_compression.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/specs_response/statsig_config_specs.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/statsig_core_api_options.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/statsig_err.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/statsig_global.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/statsig_metadata.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/statsig_options.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/statsig_runtime.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/statsig_type_factories.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/statsig_types.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/statsig_types_raw.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/user/fast_statsig_user.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/user/into_optional.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/user/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/user/statsig_user.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/user/unit_id.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/user/user_data.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/user/user_value.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/src/value_parsing.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/check_gate_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/big_number_dcs.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/company_id_list +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/dcs_error.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/dcs_non_case_sensitive.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/dcs_user_agent_versions.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/dcs_with_analytical_exposure_sampling.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/demo_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/eval_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/experiment_group_condition.pb.br +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/get_id_lists.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/perf_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/test_user_agents.txt +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/ua_string_cases.json +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data_store_bytes_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data_store_json_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data_store_json_only_no_bytes_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/data_store_proto_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/exposure_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/flushing_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/gcir_plan_expansion_bench.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/global_configs_test.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/instance_registry_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/interner_contention_bench.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/list_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/network_client_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/output_logger_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/override_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/perf_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/protobuf_copy_bench.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/remote_config_value_hydration_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/spec_types_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_global_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/statsig_user_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/substring_search_bench.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/typed_getters_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/user_json_tests.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/utils/helpers.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
- {oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/tests/utils/mod.rs +0 -0
|
@@ -1730,7 +1730,7 @@ dependencies = [
|
|
|
1730
1730
|
|
|
1731
1731
|
[[package]]
|
|
1732
1732
|
name = "oai-statsig-grpc"
|
|
1733
|
-
version = "0.31.0-rc.
|
|
1733
|
+
version = "0.31.0-rc.4"
|
|
1734
1734
|
dependencies = [
|
|
1735
1735
|
"async-trait",
|
|
1736
1736
|
"chrono",
|
|
@@ -1745,7 +1745,7 @@ dependencies = [
|
|
|
1745
1745
|
|
|
1746
1746
|
[[package]]
|
|
1747
1747
|
name = "oai-statsig-rust"
|
|
1748
|
-
version = "0.31.0-rc.
|
|
1748
|
+
version = "0.31.0-rc.4"
|
|
1749
1749
|
dependencies = [
|
|
1750
1750
|
"ahash",
|
|
1751
1751
|
"arc-swap",
|
|
@@ -3004,7 +3004,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
|
|
3004
3004
|
|
|
3005
3005
|
[[package]]
|
|
3006
3006
|
name = "statsig-node"
|
|
3007
|
-
version = "0.31.0-rc.
|
|
3007
|
+
version = "0.31.0-rc.4"
|
|
3008
3008
|
dependencies = [
|
|
3009
3009
|
"async-trait",
|
|
3010
3010
|
"napi",
|
|
@@ -3019,7 +3019,7 @@ dependencies = [
|
|
|
3019
3019
|
|
|
3020
3020
|
[[package]]
|
|
3021
3021
|
name = "statsig-pyo3"
|
|
3022
|
-
version = "0.31.0-rc.
|
|
3022
|
+
version = "0.31.0-rc.4"
|
|
3023
3023
|
dependencies = [
|
|
3024
3024
|
"async-trait",
|
|
3025
3025
|
"lazy_static",
|
|
@@ -3034,7 +3034,7 @@ dependencies = [
|
|
|
3034
3034
|
|
|
3035
3035
|
[[package]]
|
|
3036
3036
|
name = "statsig_ffi"
|
|
3037
|
-
version = "0.31.0-rc.
|
|
3037
|
+
version = "0.31.0-rc.4"
|
|
3038
3038
|
dependencies = [
|
|
3039
3039
|
"async-trait",
|
|
3040
3040
|
"cbindgen",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oai_statsig_python_core
|
|
3
|
-
Version: 0.31.
|
|
3
|
+
Version: 0.31.0rc4
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -8,11 +8,11 @@ use pyo3::types::PyModule;
|
|
|
8
8
|
use pyo3::types::PyType;
|
|
9
9
|
use pyo3_stub_gen::derive::*;
|
|
10
10
|
|
|
11
|
-
use statsig_rust::StatsigRuntime;
|
|
12
11
|
use statsig_rust::interned_values::{
|
|
13
12
|
InternedStore, MmapPreloadReport as RustMmapPreloadReport, MmapReaderMemorySnapshot,
|
|
14
13
|
};
|
|
15
14
|
use statsig_rust::log_e;
|
|
15
|
+
use statsig_rust::{StatsigErr, StatsigRuntime};
|
|
16
16
|
|
|
17
17
|
const TAG: &str = stringify!(InternStorePy);
|
|
18
18
|
|
|
@@ -152,10 +152,10 @@ impl InternedStorePy {
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
#[classmethod]
|
|
155
|
-
pub fn preload_mmap(
|
|
155
|
+
pub fn preload_mmap(cls: &Bound<'_, PyType>, sdk_key: &str) -> PyResult<()> {
|
|
156
156
|
if let Err(e) = InternedStore::preload_mmap(sdk_key) {
|
|
157
157
|
log_e!(TAG, "Failed to load mmap data: {}", e);
|
|
158
|
-
return Err(
|
|
158
|
+
return Err(to_python_error(cls.py(), &e));
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
Ok(())
|
|
@@ -178,7 +178,7 @@ impl InternedStorePy {
|
|
|
178
178
|
#[classmethod]
|
|
179
179
|
#[pyo3(signature = (required_sdk_keys, optional_sdk_keys=None))]
|
|
180
180
|
pub fn preload_mmap_multi(
|
|
181
|
-
|
|
181
|
+
cls: &Bound<'_, PyType>,
|
|
182
182
|
required_sdk_keys: Vec<String>,
|
|
183
183
|
optional_sdk_keys: Option<Vec<String>>,
|
|
184
184
|
) -> PyResult<MmapPreloadReportPy> {
|
|
@@ -196,7 +196,7 @@ impl InternedStorePy {
|
|
|
196
196
|
Ok(report) => Ok(report.into()),
|
|
197
197
|
Err(error) => {
|
|
198
198
|
log_e!(TAG, "Failed to load mmap data: {}", error);
|
|
199
|
-
Err(
|
|
199
|
+
Err(to_python_error(cls.py(), &error))
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
}
|
|
@@ -215,3 +215,16 @@ fn call_completion_event(event: &Py<PyAny>, py: Python) {
|
|
|
215
215
|
log_e!(TAG, "Failed to set mmap completion event: {}", e);
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
|
+
|
|
219
|
+
fn to_python_error(py: Python, error: &StatsigErr) -> PyErr {
|
|
220
|
+
let message = error.to_string();
|
|
221
|
+
let exception = PyRuntimeError::new_err(message.clone());
|
|
222
|
+
let value = exception.value(py);
|
|
223
|
+
let result = value
|
|
224
|
+
.setattr("error_name", error.name())
|
|
225
|
+
.and_then(|_| value.setattr("error_message", message));
|
|
226
|
+
if let Err(e) = result {
|
|
227
|
+
log_e!(TAG, "Failed to set interned store error details: {}", e);
|
|
228
|
+
}
|
|
229
|
+
exception
|
|
230
|
+
}
|
oai_statsig_python_core-0.31.0rc4/statsig-pyo3/tests/test_experiment_group_targeting_exposures.py
ADDED
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import copy
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
from mock_scrapi import MockScrapi
|
|
6
|
+
from statsig_python_core import (
|
|
7
|
+
BulkEvaluationOptions,
|
|
8
|
+
DynamicConfigEvaluationOptions,
|
|
9
|
+
ExperimentEvaluationOptions,
|
|
10
|
+
FeatureGateEvaluationOptions,
|
|
11
|
+
LayerEvaluationOptions,
|
|
12
|
+
Statsig,
|
|
13
|
+
StatsigOptions,
|
|
14
|
+
StatsigUser,
|
|
15
|
+
)
|
|
16
|
+
from utils import get_test_data_resource
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@pytest.fixture
|
|
20
|
+
def targeting_setup(httpserver, request):
|
|
21
|
+
target, percentage, id_type, disable_all = getattr(
|
|
22
|
+
request, "param", ("Treatment", 100, "userID", False)
|
|
23
|
+
)
|
|
24
|
+
specs = json.loads(get_test_data_resource("eval_proj_dcs.json"))
|
|
25
|
+
public_gate = copy.deepcopy(specs["feature_gates"]["test_public"])
|
|
26
|
+
gate = copy.deepcopy(public_gate)
|
|
27
|
+
gate["rules"][0].update(
|
|
28
|
+
conditions=["experiment_target"], passPercentage=percentage
|
|
29
|
+
)
|
|
30
|
+
nested_gate = copy.deepcopy(public_gate)
|
|
31
|
+
nested_gate["rules"][0]["conditions"] = ["parent_gate_target"]
|
|
32
|
+
|
|
33
|
+
source = copy.deepcopy(specs["dynamic_configs"]["test_experiment_no_targeting"])
|
|
34
|
+
source["idType"] = id_type
|
|
35
|
+
source["rules"] = [
|
|
36
|
+
{
|
|
37
|
+
"name": "treatment",
|
|
38
|
+
"id": "treatment",
|
|
39
|
+
"groupName": "Treatment",
|
|
40
|
+
"salt": "treatment",
|
|
41
|
+
"passPercentage": 100,
|
|
42
|
+
"conditions": ["source_gate_target"],
|
|
43
|
+
"returnValue": {"value": "treatment"},
|
|
44
|
+
"idType": id_type,
|
|
45
|
+
"isExperimentGroup": True,
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
experiment = copy.deepcopy(source)
|
|
49
|
+
experiment["rules"][0]["conditions"] = ["experiment_target"]
|
|
50
|
+
config = copy.deepcopy(experiment)
|
|
51
|
+
config["entity"] = "dynamic_config"
|
|
52
|
+
config["rules"][0]["isExperimentGroup"] = False
|
|
53
|
+
layer = copy.deepcopy(config)
|
|
54
|
+
layer.update(type="layer", entity="layer", explicitParameters=["value"])
|
|
55
|
+
|
|
56
|
+
specs["feature_gates"] = {
|
|
57
|
+
"source_gate": public_gate,
|
|
58
|
+
"parent_gate": gate,
|
|
59
|
+
"nested_parent_gate": nested_gate,
|
|
60
|
+
}
|
|
61
|
+
specs["dynamic_configs"] = {
|
|
62
|
+
"source_experiment": source,
|
|
63
|
+
"parent_experiment": experiment,
|
|
64
|
+
"parent_config": config,
|
|
65
|
+
}
|
|
66
|
+
specs["layer_configs"] = {"parent_layer": layer}
|
|
67
|
+
specs["experiment_to_layer"] = {}
|
|
68
|
+
specs["condition_map"]["experiment_target"] = {
|
|
69
|
+
"type": "experiment_group",
|
|
70
|
+
"targetValue": [target],
|
|
71
|
+
"operator": "any",
|
|
72
|
+
"field": "source_experiment",
|
|
73
|
+
"additionalValues": {"experiment_name": "source_experiment"},
|
|
74
|
+
"idType": id_type,
|
|
75
|
+
}
|
|
76
|
+
for condition, name in (
|
|
77
|
+
("source_gate_target", "source_gate"),
|
|
78
|
+
("parent_gate_target", "parent_gate"),
|
|
79
|
+
):
|
|
80
|
+
specs["condition_map"][condition] = {
|
|
81
|
+
"type": "pass_gate",
|
|
82
|
+
"targetValue": name,
|
|
83
|
+
"operator": None,
|
|
84
|
+
"field": None,
|
|
85
|
+
"additionalValues": {},
|
|
86
|
+
"idType": id_type,
|
|
87
|
+
}
|
|
88
|
+
specs.pop("checksum", None)
|
|
89
|
+
mock = MockScrapi(httpserver)
|
|
90
|
+
mock.stub("/v2/download_config_specs", response=json.dumps(specs), method="GET")
|
|
91
|
+
mock.stub("/v1/log_event", response='{"success":true}', method="POST")
|
|
92
|
+
sdk = Statsig(
|
|
93
|
+
"secret-test-key",
|
|
94
|
+
StatsigOptions(
|
|
95
|
+
specs_url=mock.url_for_endpoint("/v2/download_config_specs"),
|
|
96
|
+
log_event_url=mock.url_for_endpoint("/v1/log_event"),
|
|
97
|
+
fallback_to_statsig_api=False,
|
|
98
|
+
enable_id_lists=False,
|
|
99
|
+
disable_all_logging=disable_all,
|
|
100
|
+
output_log_level="none",
|
|
101
|
+
),
|
|
102
|
+
)
|
|
103
|
+
sdk.initialize().wait()
|
|
104
|
+
user = StatsigUser(
|
|
105
|
+
"targeting-user" if id_type == "userID" else "",
|
|
106
|
+
custom_ids={"stableID": "targeting-stable-id"},
|
|
107
|
+
)
|
|
108
|
+
yield sdk, mock, user
|
|
109
|
+
sdk.shutdown().wait()
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def exposure_events(mock):
|
|
113
|
+
return [
|
|
114
|
+
event
|
|
115
|
+
for event in mock.get_logged_events()
|
|
116
|
+
if event["eventName"]
|
|
117
|
+
in {
|
|
118
|
+
"statsig::gate_exposure",
|
|
119
|
+
"statsig::config_exposure",
|
|
120
|
+
"statsig::layer_exposure",
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def assert_direct_experiment_logs(sdk, mock, user):
|
|
126
|
+
before = len(exposure_events(mock))
|
|
127
|
+
experiment = sdk.get_experiment(user, "source_experiment")
|
|
128
|
+
assert experiment.get_string("value", "missing") == "treatment"
|
|
129
|
+
sdk.flush_events().wait()
|
|
130
|
+
events = exposure_events(mock)
|
|
131
|
+
assert len(events) == before + 1
|
|
132
|
+
event = events[-1]
|
|
133
|
+
assert event["eventName"] == "statsig::config_exposure"
|
|
134
|
+
assert event["metadata"]["config"] == "source_experiment"
|
|
135
|
+
assert event["metadata"]["ruleID"] == "treatment"
|
|
136
|
+
assert any(item["gate"] == "source_gate" for item in event["secondaryExposures"])
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
@pytest.mark.parametrize(
|
|
140
|
+
"targeting_setup,method,name,disabled,expected",
|
|
141
|
+
[
|
|
142
|
+
(
|
|
143
|
+
("Treatment", 100, "userID", False),
|
|
144
|
+
"get_feature_gate", "parent_gate", False, True,
|
|
145
|
+
),
|
|
146
|
+
(
|
|
147
|
+
("Treatment", 100, "userID", False),
|
|
148
|
+
"get_feature_gate", "parent_gate", True, True,
|
|
149
|
+
),
|
|
150
|
+
(("Treatment", 100, "userID", False), "check_gate", "parent_gate", True, True),
|
|
151
|
+
(("Treatment", 0, "userID", False), "check_gate", "parent_gate", False, False),
|
|
152
|
+
(
|
|
153
|
+
("Other", 100, "stableID", False),
|
|
154
|
+
"get_feature_gate", "parent_gate", False, False,
|
|
155
|
+
),
|
|
156
|
+
(
|
|
157
|
+
("Treatment", 100, "stableID", False),
|
|
158
|
+
"check_gate", "nested_parent_gate", False, True,
|
|
159
|
+
),
|
|
160
|
+
],
|
|
161
|
+
indirect=["targeting_setup"],
|
|
162
|
+
)
|
|
163
|
+
def test_gate_targeting_is_not_experiment_participation(
|
|
164
|
+
targeting_setup, method, name, disabled, expected
|
|
165
|
+
):
|
|
166
|
+
sdk, mock, user = targeting_setup
|
|
167
|
+
result = getattr(sdk, method)(
|
|
168
|
+
user, name, FeatureGateEvaluationOptions(disable_exposure_logging=disabled)
|
|
169
|
+
)
|
|
170
|
+
assert (result if method == "check_gate" else result.value) is expected
|
|
171
|
+
sdk.flush_events().wait()
|
|
172
|
+
events = exposure_events(mock)
|
|
173
|
+
assert len(events) == (0 if disabled else 1)
|
|
174
|
+
if not disabled:
|
|
175
|
+
assert events[0]["eventName"] == "statsig::gate_exposure"
|
|
176
|
+
assert events[0]["metadata"]["gate"] == name
|
|
177
|
+
assert_direct_experiment_logs(sdk, mock, user)
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
@pytest.mark.parametrize("kind", ["config", "experiment", "layer"])
|
|
181
|
+
@pytest.mark.parametrize("disabled", [False, True])
|
|
182
|
+
def test_other_parent_targeting_is_not_experiment_participation(
|
|
183
|
+
targeting_setup, kind, disabled
|
|
184
|
+
):
|
|
185
|
+
sdk, mock, user = targeting_setup
|
|
186
|
+
method, options = {
|
|
187
|
+
"config": (sdk.get_dynamic_config, DynamicConfigEvaluationOptions),
|
|
188
|
+
"experiment": (sdk.get_experiment, ExperimentEvaluationOptions),
|
|
189
|
+
"layer": (sdk.get_layer, LayerEvaluationOptions),
|
|
190
|
+
}[kind]
|
|
191
|
+
parent = method(
|
|
192
|
+
user, f"parent_{kind}", options(disable_exposure_logging=disabled)
|
|
193
|
+
)
|
|
194
|
+
if kind == "layer":
|
|
195
|
+
sdk.flush_events().wait()
|
|
196
|
+
assert exposure_events(mock) == []
|
|
197
|
+
assert parent.get_string("value", "missing") == "treatment"
|
|
198
|
+
sdk.flush_events().wait()
|
|
199
|
+
events = exposure_events(mock)
|
|
200
|
+
assert len(events) == (0 if disabled else 1)
|
|
201
|
+
if not disabled:
|
|
202
|
+
assert events[0]["metadata"]["config"] == f"parent_{kind}"
|
|
203
|
+
assert events[0]["eventName"] == (
|
|
204
|
+
"statsig::layer_exposure" if kind == "layer" else "statsig::config_exposure"
|
|
205
|
+
)
|
|
206
|
+
assert_direct_experiment_logs(sdk, mock, user)
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
@pytest.mark.parametrize("kind", ["gate", "config", "experiment", "layer"])
|
|
210
|
+
@pytest.mark.parametrize("release", [False, True])
|
|
211
|
+
def test_bulk_targeting_does_not_log_or_reserve_source_exposure(
|
|
212
|
+
targeting_setup, kind, release
|
|
213
|
+
):
|
|
214
|
+
sdk, mock, user = targeting_setup
|
|
215
|
+
filters = {
|
|
216
|
+
"feature_gate_filter": [],
|
|
217
|
+
"dynamic_config_filter": [],
|
|
218
|
+
"experiment_filter": [],
|
|
219
|
+
"layer_filter": [],
|
|
220
|
+
}
|
|
221
|
+
filter_name, section = {
|
|
222
|
+
"gate": ("feature_gate_filter", "feature_gates"),
|
|
223
|
+
"config": ("dynamic_config_filter", "dynamic_configs"),
|
|
224
|
+
"experiment": ("experiment_filter", "experiments"),
|
|
225
|
+
"layer": ("layer_filter", "layer_configs"),
|
|
226
|
+
}[kind]
|
|
227
|
+
filters[filter_name] = [f"parent_{kind}"]
|
|
228
|
+
parent = sdk.bulk_evaluate(user, BulkEvaluationOptions(**filters))[section][
|
|
229
|
+
f"parent_{kind}"
|
|
230
|
+
]
|
|
231
|
+
assert parent["value"] == (True if kind == "gate" else {"value": "treatment"})
|
|
232
|
+
token = parent["exposureToken"]
|
|
233
|
+
assert token is not None
|
|
234
|
+
sdk.flush_events().wait()
|
|
235
|
+
assert exposure_events(mock) == []
|
|
236
|
+
|
|
237
|
+
if release:
|
|
238
|
+
assert sdk.release_delayed_exposure(token)
|
|
239
|
+
elif kind == "layer":
|
|
240
|
+
assert sdk.log_delayed_layer_parameter_exposure(token, "value")
|
|
241
|
+
assert sdk.log_delayed_layer_parameter_exposure(token, "value")
|
|
242
|
+
else:
|
|
243
|
+
assert sdk.log_delayed_exposure(token)
|
|
244
|
+
assert not sdk.log_delayed_exposure(token)
|
|
245
|
+
sdk.flush_events().wait()
|
|
246
|
+
events = exposure_events(mock)
|
|
247
|
+
assert len(events) == (0 if release else 1)
|
|
248
|
+
if not release:
|
|
249
|
+
key = "gate" if kind == "gate" else "config"
|
|
250
|
+
assert events[0]["metadata"][key] == f"parent_{kind}"
|
|
251
|
+
assert_direct_experiment_logs(sdk, mock, user)
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
@pytest.mark.parametrize(
|
|
255
|
+
"targeting_setup",
|
|
256
|
+
[("Treatment", 100, "userID", False), ("Treatment", 100, "stableID", False)],
|
|
257
|
+
indirect=True,
|
|
258
|
+
)
|
|
259
|
+
def test_unfiltered_bulk_retains_explicit_experiment_token(targeting_setup):
|
|
260
|
+
sdk, mock, user = targeting_setup
|
|
261
|
+
result = sdk.bulk_evaluate(user, BulkEvaluationOptions())
|
|
262
|
+
sdk.flush_events().wait()
|
|
263
|
+
assert exposure_events(mock) == []
|
|
264
|
+
source = result["experiments"]["source_experiment"]
|
|
265
|
+
assert source["value"] == {"value": "treatment"}
|
|
266
|
+
assert source["exposureToken"] is not None
|
|
267
|
+
parent_token = result["feature_gates"]["parent_gate"]["exposureToken"]
|
|
268
|
+
assert sdk.log_delayed_exposure(parent_token)
|
|
269
|
+
sdk.flush_events().wait()
|
|
270
|
+
assert [event["eventName"] for event in exposure_events(mock)] == [
|
|
271
|
+
"statsig::gate_exposure"
|
|
272
|
+
]
|
|
273
|
+
assert sdk.log_delayed_exposure(source["exposureToken"])
|
|
274
|
+
sdk.flush_events().wait()
|
|
275
|
+
events = exposure_events(mock)
|
|
276
|
+
assert len(events) == 2
|
|
277
|
+
assert events[-1]["eventName"] == "statsig::config_exposure"
|
|
278
|
+
assert events[-1]["metadata"]["config"] == "source_experiment"
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
@pytest.mark.parametrize(
|
|
282
|
+
"targeting_setup", [("Treatment", 100, "stableID", True)], indirect=True
|
|
283
|
+
)
|
|
284
|
+
def test_disabled_logging_bulk_keeps_values_without_exposure_tokens(targeting_setup):
|
|
285
|
+
sdk, mock, user = targeting_setup
|
|
286
|
+
result = sdk.bulk_evaluate(user, BulkEvaluationOptions())
|
|
287
|
+
assert result["feature_gates"]["parent_gate"]["value"] is True
|
|
288
|
+
assert result["experiments"]["source_experiment"]["value"] == {"value": "treatment"}
|
|
289
|
+
for section in ("feature_gates", "dynamic_configs", "experiments", "layer_configs"):
|
|
290
|
+
assert all(item["exposureToken"] is None for item in result[section].values())
|
|
291
|
+
sdk.flush_events().wait()
|
|
292
|
+
assert mock.get_logged_events() == []
|
|
@@ -60,6 +60,10 @@ def test_interned_store_preload(server_setup):
|
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
def test_interned_store_mmap_preload(server_setup):
|
|
63
|
+
_run_isolated("_assert_interned_store_mmap_preload", *server_setup)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _run_isolated(function_name, *args):
|
|
63
67
|
subprocess.run(
|
|
64
68
|
[
|
|
65
69
|
sys.executable,
|
|
@@ -67,11 +71,11 @@ def test_interned_store_mmap_preload(server_setup):
|
|
|
67
71
|
(
|
|
68
72
|
"import sys; "
|
|
69
73
|
"sys.path.insert(0, '.'); "
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"_assert_interned_store_mmap_preload(*sys.argv[1:])"
|
|
74
|
+
"import test_interned_store_preload as tests; "
|
|
75
|
+
"getattr(tests, sys.argv[1])(*sys.argv[2:])"
|
|
73
76
|
),
|
|
74
|
-
|
|
77
|
+
function_name,
|
|
78
|
+
*args,
|
|
75
79
|
],
|
|
76
80
|
cwd=Path(__file__).parent,
|
|
77
81
|
check=True,
|
|
@@ -129,3 +133,23 @@ def _assert_interned_store_mmap_preload(specs_url, log_event_url):
|
|
|
129
133
|
assert config.value["foo"] == 1e21
|
|
130
134
|
assert isinstance(config.value["foo"], float)
|
|
131
135
|
assert log_provider.error_count == 0
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def test_interned_store_mmap_missing_required():
|
|
139
|
+
_run_isolated("_assert_mmap_missing_required")
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def _assert_mmap_missing_required():
|
|
143
|
+
sdk_key = f"missing-{uuid.uuid4()}"
|
|
144
|
+
message = "Invalid operation: No committed interned mmap V2 artifact was found"
|
|
145
|
+
for preload, argument in (
|
|
146
|
+
(InternedStore.preload_mmap, sdk_key),
|
|
147
|
+
(InternedStore.preload_mmap_multi, [sdk_key]),
|
|
148
|
+
):
|
|
149
|
+
with pytest.raises(RuntimeError) as raised:
|
|
150
|
+
preload(argument)
|
|
151
|
+
assert type(raised.value) is RuntimeError
|
|
152
|
+
assert str(raised.value) == message
|
|
153
|
+
assert raised.value.args == (message,)
|
|
154
|
+
assert raised.value.error_name == "InvalidOperation"
|
|
155
|
+
assert raised.value.error_message == message
|
{oai_statsig_python_core-0.31.0rc2 → oai_statsig_python_core-0.31.0rc4}/statsig-rust/Cargo.toml
RENAMED
|
@@ -46,7 +46,7 @@ serde_json = { version = "1.0.143", features = [
|
|
|
46
46
|
] }
|
|
47
47
|
serde_with = "3.4.0"
|
|
48
48
|
sha2 = "0.10.8"
|
|
49
|
-
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.31.0-rc.
|
|
49
|
+
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.31.0-rc.4", optional = true }
|
|
50
50
|
simple_logger = { version = "5.0.0" }
|
|
51
51
|
tempfile = "3.8.1"
|
|
52
52
|
tokio = { version = "1.39.1", features = ["full"] }
|