oai-statsig-python-core 0.34.0rc4__tar.gz → 0.35.0__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.
Potentially problematic release.
This version of oai-statsig-python-core might be problematic. Click here for more details.
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/Cargo.lock +5 -5
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/Cargo.toml +1 -1
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/PKG-INFO +23 -16
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/error_boundary.py +5 -1
- {oai_statsig_python_core-0.34.0rc4/statsig-pyo3 → oai_statsig_python_core-0.35.0/statsig-grpc}/README.md +22 -15
- {oai_statsig_python_core-0.34.0rc4/statsig-grpc → oai_statsig_python_core-0.35.0/statsig-pyo3}/README.md +22 -15
- oai_statsig_python_core-0.35.0/statsig-pyo3/tests/test_error_boundary.py +103 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_exposure_logging.py +130 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/Cargo.toml +11 -1
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_list_cursor_tests.rs +13 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_list_download_concurrency_tests.rs +3 -1
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_list_propagation.rs +8 -24
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_list_propagation_tests.rs +97 -29
- oai_statsig_python_core-0.35.0/statsig-rust/src/id_lists_adapter/id_list_range_tests.rs +269 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_lists_refresh_tests.rs +18 -17
- oai_statsig_python_core-0.35.0/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +772 -0
- oai_statsig_python_core-0.35.0/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter_tests.rs +900 -0
- oai_statsig_python_core-0.35.0/statsig-rust/src/specs_adapter/__tests__/protobuf_hydration_budget_tests.rs +423 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/__tests__/remote_config_value_hydrator_tests.rs +3 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/metadata.rs +47 -29
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/protobuf.rs +128 -89
- oai_statsig_python_core-0.35.0/statsig-rust/tests/fork_lifecycle.rs +71 -0
- oai_statsig_python_core-0.35.0/statsig-rust/tests/fork_pid_change.rs +59 -0
- oai_statsig_python_core-0.35.0/statsig-rust/tests/statsig_global_tests.rs +9 -0
- oai_statsig_python_core-0.35.0/statsig-rust/tests/utils/fork_runtime.rs +55 -0
- oai_statsig_python_core-0.34.0rc4/statsig-pyo3/tests/test_error_boundary.py +0 -22
- oai_statsig_python_core-0.34.0rc4/statsig-rust/src/id_lists_adapter/id_list_fallback_range_tests.rs +0 -252
- oai_statsig_python_core-0.34.0rc4/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -1848
- oai_statsig_python_core-0.34.0rc4/statsig-rust/tests/statsig_global_tests.rs +0 -80
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/__init__.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/_frozen_json.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/data_store.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/observability_client.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/persistent_storage.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/py.typed +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/requirements.txt +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/statsig.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/statsig_python_core.pyi +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/statsig_types.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/typed_config.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/pyproject.toml +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-grpc/Cargo.toml +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-grpc/build.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/lib.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/.github/workflows/CI.yml +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/.gitignore +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/Cargo.toml +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/dynamic_config_value_cache_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/native_context_allocations.c +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/summarize_native_context_allocations.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/wrapper_native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/requirements-typing.txt +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/data_store_base_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/event_logging_adapter_base_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/interned_store_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/lib.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/pyo_utils.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/safe_gil.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_base_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_options_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_types_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_user_context_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_user_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/typed_config_py/tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/typed_config_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/unit_id_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/fork_callback_runner.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/fork_runner.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/mock_output_logger.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/mock_scrapi.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/profile_util.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_bulk_evaluate_gcir_parity.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_data_store.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_evaluation_cache_integration.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_evaluation_cache_pyo3.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_experiment_group_targeting_exposures.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_feature_gate_parts.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_fork_callback.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_forking.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_frozen_json.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_id_list_updates.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_interned_store_preload.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_layer_param_exposure_sampling.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_native_context_allocations.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_native_user_context.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_observability_client.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_output_logger_gc.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_override_adapter.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_partial_rollout_boost.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_performance.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_sec_expo_as_primary.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_shutdown.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_options.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_user.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_user_json_serialization.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_user_none_fields.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_typed_config.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_typed_config_native.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/utils.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-pyo3/typing_tests/typed_config.py +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/benches/evaluation/case_sensitive_target_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/build.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/resources/ip_supalite.table +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/compression/compression_helper.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/compression/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/console_capture/console_capture_handler.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/console_capture/console_capture_instances.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/console_capture/console_capture_options.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/console_capture/console_log_line_levels.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/console_capture/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/data_store_interface.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/dcs_str.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/array_optimization_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/array_optimization_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/case_sensitive_target_spellings_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/rkyv_value_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/cmab_evaluator.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_case_sensitive_strings_in_array.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_data.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator_context.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator_result.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/rkyv_value.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer_performance.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation_fixture_client.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/delayed_exposure_store.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_logger.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/queued_expo.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/queued_secondary_expo.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/flush_type.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/sec_expo_as_primary_experiment.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/dynamic_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/evaluation_plan.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/feature_gates_processor.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/gcir_formatter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/gcir_options.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/gcir_process_iter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/layer_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/param_stores_processor.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/secondary_exposure_hashing.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/target_app_id_utils.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/timing.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/global_configs.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/ahash.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/djb2.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/hash_util.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/compact_id_list_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_list_ids.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_lists_memory_benchmark.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/init_details.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/initialize_response.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/initialize_v2_response.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/instance_registry.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_string.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/__tests__/interned_store_eval_value_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_v2_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/__tests__/interned_store_preload_remote_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/__tests__/interned_store_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/__tests__/interned_store_string_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/interned_store/mmap_artifact.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/interned_store/mmap_manifest.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/interned_store/mmap_reader/materialize.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/interned_store/mmap_reader/memory.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/interned_store/mmap_reader.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/interned_store/mmap_writer.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/interned_store.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mmap_data_v2/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mmap_data_v2/spec.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mmap_data_v2/spec_content_hash.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mmap_data_v2.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mmap_sync.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/lib.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/logging_utils.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/macros.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/http2_test_helpers.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/net_provider_reqwest_http2_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/network_client_http2_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/network_client_latency_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/http2.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/http_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/network_client.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/network_error.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/providers/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/proxy_config.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/statsig_url.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/ops_stats.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/output_logger.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/output_policy.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/override_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/scoped_evaluation_request.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/scoped_id_list_membership_service.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/scoped_snapshot_registry.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_event_emitter/event_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/snapshot_evaluation_session.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/spec_store.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/__tests__/hydration_phase_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/config_spec_background_sync_metrics.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/download.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/errors.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/json.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/telemetry.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/scoped_source_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/__tests__/proto_specs_syncing_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/__tests__/proto_specs_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/__tests__/proto_specs_unknown_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/__tests__/proto_specs_vs_json_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/__tests__/proto_stream_reader_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/explicit_params.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/parse_options.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/proto_compression.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/proto_specs/parser.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/proto_specs.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/proto_stream_reader.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/spec_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/specs_hash_map.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/statsig_config_specs.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig/typed_config_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_core_api_options.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_err.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_global.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_metadata.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_options.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_runtime.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_type_factories.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_types_raw.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/typed_config/tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/typed_config.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/fast_statsig_user.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/into_optional.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/prepared_user.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/random_user_id.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/unit_id.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/user_data.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/user_value.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/utils/random.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/src/value_parsing.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/check_gate_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/big_number_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/company_id_list +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_error.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_non_case_sensitive.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_user_agent_versions.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_with_analytical_exposure_sampling.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/demo_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/eval_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/experiment_group_condition.pb.br +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/get_id_lists.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/perf_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/test_user_agents.txt +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/ua_string_cases.json +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data_store_bytes_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data_store_json_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data_store_json_only_no_bytes_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data_store_proto_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/exposure_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/flushing_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/fork_random.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/gcir_plan_expansion_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/global_configs_test.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/id_list_storage_api_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/instance_registry_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/interner_contention_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/list_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/network_client_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/output_logger_reentrancy_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/output_logger_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/override_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/perf_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/protobuf_copy_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/remote_config_preload_hydration_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/remote_config_value_hydration_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/spec_types_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/substring_search_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/typed_getters_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/user_json_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/helpers.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/verified_remote_value_reuse_tests.rs +0 -0
|
@@ -1853,7 +1853,7 @@ dependencies = [
|
|
|
1853
1853
|
|
|
1854
1854
|
[[package]]
|
|
1855
1855
|
name = "oai-statsig-grpc"
|
|
1856
|
-
version = "0.
|
|
1856
|
+
version = "0.35.0"
|
|
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.
|
|
1872
|
+
version = "0.35.0"
|
|
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.
|
|
3105
|
+
version = "0.35.0"
|
|
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.
|
|
3120
|
+
version = "0.35.0"
|
|
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.
|
|
3135
|
+
version = "0.35.0"
|
|
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.
|
|
3
|
+
Version: 0.35.0
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -51,8 +51,8 @@ Read through the [Documentation](https://docs.statsig.com/server-core?ref=gh_ser
|
|
|
51
51
|
|
|
52
52
|
`download_id_list_file_api` selects the preferred base URL for file downloads.
|
|
53
53
|
Enable `fallback_to_statsig_api` to try the original file URL from the manifest
|
|
54
|
-
after an overridden request
|
|
55
|
-
the trusted HTTPS OpenAI CDN origin:
|
|
54
|
+
after an overridden request fails with a retryable network error, provided that
|
|
55
|
+
URL belongs to the trusted HTTPS OpenAI CDN origin:
|
|
56
56
|
|
|
57
57
|
```rust
|
|
58
58
|
let options = statsig_rust::StatsigOptions {
|
|
@@ -66,26 +66,33 @@ Fallback accepts only `https://statsigcdn.openai.com` with the default port or
|
|
|
66
66
|
explicit `:443`. Fallback sends no request or SDK credentials to other manifest
|
|
67
67
|
origins; the original request error is returned. Fallback does not follow redirects.
|
|
68
68
|
Custom network providers must implement `send_without_redirects`; otherwise the
|
|
69
|
-
fallback returns an error without sending a request.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
the
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
69
|
+
fallback returns an error without sending a request.
|
|
70
|
+
|
|
71
|
+
All ID-list file downloads, including direct CDN, proxy, and fallback requests,
|
|
72
|
+
preserve the URL's path and query except for legacy `range` parameters, which are
|
|
73
|
+
removed. Every request sends `Range`, `statsig-id-list-file-size`, and
|
|
74
|
+
`Accept-Encoding: identity` headers, preserving the file identity and byte offset
|
|
75
|
+
for incremental updates. Partial responses require a valid `Content-Range`
|
|
76
|
+
matching the requested offset and received body length. They may use `206` or,
|
|
77
|
+
for compatibility, `200`. A `200` without `Content-Range` means the complete
|
|
78
|
+
available file from byte zero; the SDK applies only bytes after the requested
|
|
79
|
+
offset. Available bytes may be behind or ahead of the manifest: the SDK advances
|
|
80
|
+
by bytes actually applied and keeps polling while below the advertised size.
|
|
81
|
+
Responses that make no progress or have inconsistent ranges use the remaining
|
|
82
|
+
retry budget without publishing the refresh. Partial bodies without
|
|
83
|
+
`Content-Range` are unsupported; a malformed header is rejected even when the
|
|
84
|
+
status is `200`.
|
|
78
85
|
|
|
79
86
|
Set `fallback_to_statsig_api` to `Some(false)` or leave it unset to keep file
|
|
80
|
-
downloads strictly on the selected destination. There is no
|
|
87
|
+
downloads strictly on the selected destination. There is no fallback attempt when
|
|
81
88
|
the override resolves to the original URL, no override is set, or the request
|
|
82
89
|
fails with an authentication rejection (401/403) or another non-retryable error.
|
|
83
90
|
Response parsing failures do not trigger fallback. This uses the existing option
|
|
84
91
|
across language bindings; wrappers that disable it continue to opt out.
|
|
85
92
|
|
|
86
|
-
A successful proxy request makes no additional request.
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
A successful proxy request makes no additional request. Primary and fallback
|
|
94
|
+
requests share the same per-file attempt budget (three attempts by default).
|
|
95
|
+
The next synchronization starts with the configured override again.
|
|
89
96
|
|
|
90
97
|
## Read-only data stores
|
|
91
98
|
|
|
@@ -18,7 +18,11 @@ class ErrorBoundary:
|
|
|
18
18
|
|
|
19
19
|
def create_wrapped(method_name, orig_method):
|
|
20
20
|
def wrapped(*args, **kwargs):
|
|
21
|
-
|
|
21
|
+
try:
|
|
22
|
+
return orig_method(*args, **kwargs)
|
|
23
|
+
except Exception as error:
|
|
24
|
+
ErrorBoundary._on_error(method_name, error)
|
|
25
|
+
return None
|
|
22
26
|
|
|
23
27
|
wrapped._error_boundary_wrapped = True
|
|
24
28
|
return wrapped
|
|
@@ -29,8 +29,8 @@ Read through the [Documentation](https://docs.statsig.com/server-core?ref=gh_ser
|
|
|
29
29
|
|
|
30
30
|
`download_id_list_file_api` selects the preferred base URL for file downloads.
|
|
31
31
|
Enable `fallback_to_statsig_api` to try the original file URL from the manifest
|
|
32
|
-
after an overridden request
|
|
33
|
-
the trusted HTTPS OpenAI CDN origin:
|
|
32
|
+
after an overridden request fails with a retryable network error, provided that
|
|
33
|
+
URL belongs to the trusted HTTPS OpenAI CDN origin:
|
|
34
34
|
|
|
35
35
|
```rust
|
|
36
36
|
let options = statsig_rust::StatsigOptions {
|
|
@@ -44,26 +44,33 @@ Fallback accepts only `https://statsigcdn.openai.com` with the default port or
|
|
|
44
44
|
explicit `:443`. Fallback sends no request or SDK credentials to other manifest
|
|
45
45
|
origins; the original request error is returned. Fallback does not follow redirects.
|
|
46
46
|
Custom network providers must implement `send_without_redirects`; otherwise the
|
|
47
|
-
fallback returns an error without sending a request.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
the
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
47
|
+
fallback returns an error without sending a request.
|
|
48
|
+
|
|
49
|
+
All ID-list file downloads, including direct CDN, proxy, and fallback requests,
|
|
50
|
+
preserve the URL's path and query except for legacy `range` parameters, which are
|
|
51
|
+
removed. Every request sends `Range`, `statsig-id-list-file-size`, and
|
|
52
|
+
`Accept-Encoding: identity` headers, preserving the file identity and byte offset
|
|
53
|
+
for incremental updates. Partial responses require a valid `Content-Range`
|
|
54
|
+
matching the requested offset and received body length. They may use `206` or,
|
|
55
|
+
for compatibility, `200`. A `200` without `Content-Range` means the complete
|
|
56
|
+
available file from byte zero; the SDK applies only bytes after the requested
|
|
57
|
+
offset. Available bytes may be behind or ahead of the manifest: the SDK advances
|
|
58
|
+
by bytes actually applied and keeps polling while below the advertised size.
|
|
59
|
+
Responses that make no progress or have inconsistent ranges use the remaining
|
|
60
|
+
retry budget without publishing the refresh. Partial bodies without
|
|
61
|
+
`Content-Range` are unsupported; a malformed header is rejected even when the
|
|
62
|
+
status is `200`.
|
|
56
63
|
|
|
57
64
|
Set `fallback_to_statsig_api` to `Some(false)` or leave it unset to keep file
|
|
58
|
-
downloads strictly on the selected destination. There is no
|
|
65
|
+
downloads strictly on the selected destination. There is no fallback attempt when
|
|
59
66
|
the override resolves to the original URL, no override is set, or the request
|
|
60
67
|
fails with an authentication rejection (401/403) or another non-retryable error.
|
|
61
68
|
Response parsing failures do not trigger fallback. This uses the existing option
|
|
62
69
|
across language bindings; wrappers that disable it continue to opt out.
|
|
63
70
|
|
|
64
|
-
A successful proxy request makes no additional request.
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
A successful proxy request makes no additional request. Primary and fallback
|
|
72
|
+
requests share the same per-file attempt budget (three attempts by default).
|
|
73
|
+
The next synchronization starts with the configured override again.
|
|
67
74
|
|
|
68
75
|
## Read-only data stores
|
|
69
76
|
|
|
@@ -29,8 +29,8 @@ Read through the [Documentation](https://docs.statsig.com/server-core?ref=gh_ser
|
|
|
29
29
|
|
|
30
30
|
`download_id_list_file_api` selects the preferred base URL for file downloads.
|
|
31
31
|
Enable `fallback_to_statsig_api` to try the original file URL from the manifest
|
|
32
|
-
after an overridden request
|
|
33
|
-
the trusted HTTPS OpenAI CDN origin:
|
|
32
|
+
after an overridden request fails with a retryable network error, provided that
|
|
33
|
+
URL belongs to the trusted HTTPS OpenAI CDN origin:
|
|
34
34
|
|
|
35
35
|
```rust
|
|
36
36
|
let options = statsig_rust::StatsigOptions {
|
|
@@ -44,26 +44,33 @@ Fallback accepts only `https://statsigcdn.openai.com` with the default port or
|
|
|
44
44
|
explicit `:443`. Fallback sends no request or SDK credentials to other manifest
|
|
45
45
|
origins; the original request error is returned. Fallback does not follow redirects.
|
|
46
46
|
Custom network providers must implement `send_without_redirects`; otherwise the
|
|
47
|
-
fallback returns an error without sending a request.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
the
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
47
|
+
fallback returns an error without sending a request.
|
|
48
|
+
|
|
49
|
+
All ID-list file downloads, including direct CDN, proxy, and fallback requests,
|
|
50
|
+
preserve the URL's path and query except for legacy `range` parameters, which are
|
|
51
|
+
removed. Every request sends `Range`, `statsig-id-list-file-size`, and
|
|
52
|
+
`Accept-Encoding: identity` headers, preserving the file identity and byte offset
|
|
53
|
+
for incremental updates. Partial responses require a valid `Content-Range`
|
|
54
|
+
matching the requested offset and received body length. They may use `206` or,
|
|
55
|
+
for compatibility, `200`. A `200` without `Content-Range` means the complete
|
|
56
|
+
available file from byte zero; the SDK applies only bytes after the requested
|
|
57
|
+
offset. Available bytes may be behind or ahead of the manifest: the SDK advances
|
|
58
|
+
by bytes actually applied and keeps polling while below the advertised size.
|
|
59
|
+
Responses that make no progress or have inconsistent ranges use the remaining
|
|
60
|
+
retry budget without publishing the refresh. Partial bodies without
|
|
61
|
+
`Content-Range` are unsupported; a malformed header is rejected even when the
|
|
62
|
+
status is `200`.
|
|
56
63
|
|
|
57
64
|
Set `fallback_to_statsig_api` to `Some(false)` or leave it unset to keep file
|
|
58
|
-
downloads strictly on the selected destination. There is no
|
|
65
|
+
downloads strictly on the selected destination. There is no fallback attempt when
|
|
59
66
|
the override resolves to the original URL, no override is set, or the request
|
|
60
67
|
fails with an authentication rejection (401/403) or another non-retryable error.
|
|
61
68
|
Response parsing failures do not trigger fallback. This uses the existing option
|
|
62
69
|
across language bindings; wrappers that disable it continue to opt out.
|
|
63
70
|
|
|
64
|
-
A successful proxy request makes no additional request.
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
A successful proxy request makes no additional request. Primary and fallback
|
|
72
|
+
requests share the same per-file attempt budget (three attempts by default).
|
|
73
|
+
The next synchronization starts with the configured override again.
|
|
67
74
|
|
|
68
75
|
## Read-only data stores
|
|
69
76
|
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
from statsig_python_core import Statsig, StatsigUser
|
|
3
|
+
from statsig_python_core.error_boundary import ErrorBoundary
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def test_error_boundary_handles_wrong_types():
|
|
7
|
+
statsig = Statsig("secret-test-key")
|
|
8
|
+
|
|
9
|
+
result = statsig.check_gate(123, "gate_name") # Invalid user type
|
|
10
|
+
assert result is None
|
|
11
|
+
|
|
12
|
+
user = StatsigUser("user_123")
|
|
13
|
+
result = statsig.check_gate(user, 123) # Invalid gate name type
|
|
14
|
+
assert result is None
|
|
15
|
+
|
|
16
|
+
result = statsig.get_dynamic_config(123, "config_name")
|
|
17
|
+
assert result is None
|
|
18
|
+
|
|
19
|
+
result = statsig.get_experiment(user, 123)
|
|
20
|
+
assert result is None
|
|
21
|
+
|
|
22
|
+
statsig.log_event(123, "event_name") # Should not raise
|
|
23
|
+
statsig.log_event(user, 123) # Should not raise
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class _BoundaryTarget:
|
|
27
|
+
def __init__(self):
|
|
28
|
+
self.calls = []
|
|
29
|
+
self.result = object()
|
|
30
|
+
self.error = None
|
|
31
|
+
|
|
32
|
+
def first(self, *args, **kwargs):
|
|
33
|
+
self.calls.append(("first", args, kwargs))
|
|
34
|
+
if self.error is not None:
|
|
35
|
+
raise self.error
|
|
36
|
+
return self.result
|
|
37
|
+
|
|
38
|
+
def second(self, *args, **kwargs):
|
|
39
|
+
self.calls.append(("second", args, kwargs))
|
|
40
|
+
if self.error is not None:
|
|
41
|
+
raise self.error
|
|
42
|
+
return self.result
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@pytest.mark.parametrize("method_name", ["first", "second"])
|
|
46
|
+
def test_error_boundary_forwards_arguments_and_return_identity(method_name):
|
|
47
|
+
target = _BoundaryTarget()
|
|
48
|
+
ErrorBoundary.wrap(target)
|
|
49
|
+
token = object()
|
|
50
|
+
|
|
51
|
+
result = getattr(target, method_name)(token, 17, flag=True)
|
|
52
|
+
|
|
53
|
+
assert result is target.result
|
|
54
|
+
assert target.calls == [(method_name, (token, 17), {"flag": True})]
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@pytest.mark.parametrize("method_name", ["first", "second"])
|
|
58
|
+
def test_error_boundary_reports_the_failing_method(method_name, monkeypatch):
|
|
59
|
+
target = _BoundaryTarget()
|
|
60
|
+
error = RuntimeError("failed call")
|
|
61
|
+
target.error = error
|
|
62
|
+
failures = []
|
|
63
|
+
monkeypatch.setattr(
|
|
64
|
+
ErrorBoundary, "_on_error", lambda tag, caught: failures.append((tag, caught))
|
|
65
|
+
)
|
|
66
|
+
ErrorBoundary.wrap(target)
|
|
67
|
+
|
|
68
|
+
assert getattr(target, method_name)() is None
|
|
69
|
+
assert failures == [(method_name, error)]
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@pytest.mark.parametrize("method_name", ["first", "second"])
|
|
73
|
+
def test_error_boundary_propagates_base_exceptions(method_name, monkeypatch):
|
|
74
|
+
class Abort(BaseException):
|
|
75
|
+
pass
|
|
76
|
+
|
|
77
|
+
target = _BoundaryTarget()
|
|
78
|
+
target.error = Abort("abort call")
|
|
79
|
+
failures = []
|
|
80
|
+
monkeypatch.setattr(
|
|
81
|
+
ErrorBoundary, "_on_error", lambda tag, caught: failures.append((tag, caught))
|
|
82
|
+
)
|
|
83
|
+
ErrorBoundary.wrap(target)
|
|
84
|
+
|
|
85
|
+
with pytest.raises(Abort) as caught:
|
|
86
|
+
getattr(target, method_name)()
|
|
87
|
+
|
|
88
|
+
assert caught.value is target.error
|
|
89
|
+
assert failures == []
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def test_error_boundary_wrapping_twice_is_idempotent():
|
|
93
|
+
target = _BoundaryTarget()
|
|
94
|
+
ErrorBoundary.wrap(target)
|
|
95
|
+
first = target.first
|
|
96
|
+
second = target.second
|
|
97
|
+
|
|
98
|
+
ErrorBoundary.wrap(target)
|
|
99
|
+
|
|
100
|
+
assert target.first is first
|
|
101
|
+
assert target.second is second
|
|
102
|
+
assert target.first() is target.result
|
|
103
|
+
assert target.calls == [("first", (), {})]
|
|
@@ -6,6 +6,7 @@ from statsig_python_core import (
|
|
|
6
6
|
BulkEvaluationOptions,
|
|
7
7
|
Statsig,
|
|
8
8
|
StatsigOptions,
|
|
9
|
+
StatsigRandomUserID,
|
|
9
10
|
StatsigUser,
|
|
10
11
|
)
|
|
11
12
|
from mock_scrapi import MockScrapi, decode_log_event_request
|
|
@@ -143,6 +144,135 @@ def test_sdk_configs_attach_callsite_metadata_to_experiment_and_layer_exposures(
|
|
|
143
144
|
)
|
|
144
145
|
|
|
145
146
|
|
|
147
|
+
@pytest.mark.parametrize("api", ["ordinary", "context", "anonymous"])
|
|
148
|
+
def test_layer_callsite_opt_in_tracks_refreshes_and_current_parameter_caller(
|
|
149
|
+
statsig_setup, monkeypatch, api
|
|
150
|
+
):
|
|
151
|
+
statsig, mock_scrapi = statsig_setup
|
|
152
|
+
if api == "ordinary":
|
|
153
|
+
layer = statsig.get_layer(StatsigUser("refresh-user"), "layer_with_many_params")
|
|
154
|
+
elif api == "context":
|
|
155
|
+
layer = statsig.get_layer_with_context(
|
|
156
|
+
None, "layer_with_many_params", "refresh-user"
|
|
157
|
+
)
|
|
158
|
+
else:
|
|
159
|
+
layer = statsig.get_layer_anonymous(
|
|
160
|
+
"layer_with_many_params", StatsigRandomUserID("refresh", 16)
|
|
161
|
+
)
|
|
162
|
+
metadata = []
|
|
163
|
+
log_exposure = statsig._INTERNAL_log_layer_param_exposure
|
|
164
|
+
|
|
165
|
+
def record_exposure(exposure, param, callsite):
|
|
166
|
+
metadata.append(callsite)
|
|
167
|
+
return log_exposure(exposure, param, callsite)
|
|
168
|
+
|
|
169
|
+
monkeypatch.setattr(statsig, "_INTERNAL_log_layer_param_exposure", record_exposure)
|
|
170
|
+
layer.get_object("an_object", {})
|
|
171
|
+
assert metadata[-1] is None
|
|
172
|
+
|
|
173
|
+
key = "expo_callsite_logging_layer::layer_with_many_params"
|
|
174
|
+
statsig._internal_sdk_configs = {key: 1}
|
|
175
|
+
|
|
176
|
+
def first_caller():
|
|
177
|
+
return layer.get_string("a_string", "ERR")
|
|
178
|
+
|
|
179
|
+
def second_caller():
|
|
180
|
+
return layer.get_string("a_string", "ERR")
|
|
181
|
+
|
|
182
|
+
assert first_caller() != "ERR"
|
|
183
|
+
assert second_caller() != "ERR"
|
|
184
|
+
assert metadata[-2]["exposure_source_function"].endswith("first_caller")
|
|
185
|
+
assert metadata[-1]["exposure_source_function"].endswith("second_caller")
|
|
186
|
+
assert metadata[-2]["exposure_source_line"] != metadata[-1]["exposure_source_line"]
|
|
187
|
+
|
|
188
|
+
statsig._internal_sdk_configs.clear()
|
|
189
|
+
layer.get_array("an_array", [])
|
|
190
|
+
assert metadata[-1] is None
|
|
191
|
+
statsig.flush_events().wait()
|
|
192
|
+
events = [
|
|
193
|
+
event
|
|
194
|
+
for event in mock_scrapi.get_logged_events()
|
|
195
|
+
if event["eventName"] == "statsig::layer_exposure"
|
|
196
|
+
]
|
|
197
|
+
assert len(events) == 3
|
|
198
|
+
string_event = next(
|
|
199
|
+
event for event in events if event["metadata"]["parameterName"] == "a_string"
|
|
200
|
+
)
|
|
201
|
+
assert string_event["metadata"]["exposure_source_function"].endswith("first_caller")
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def test_layer_parameter_reads_honor_live_private_metadata_overrides(
|
|
205
|
+
statsig_setup, monkeypatch
|
|
206
|
+
):
|
|
207
|
+
statsig, mock_scrapi = statsig_setup
|
|
208
|
+
layer = statsig.get_layer(StatsigUser("override-user"), "layer_with_many_params")
|
|
209
|
+
original_metadata = statsig._get_layer_exposure_metadata
|
|
210
|
+
override = {
|
|
211
|
+
"exposure_source_file": "private-layer.py",
|
|
212
|
+
"exposure_source_function": "layer_override",
|
|
213
|
+
"exposure_source_line": 42,
|
|
214
|
+
}
|
|
215
|
+
names = []
|
|
216
|
+
|
|
217
|
+
def layer_metadata(name):
|
|
218
|
+
names.append(name)
|
|
219
|
+
return override
|
|
220
|
+
|
|
221
|
+
monkeypatch.setattr(statsig, "_get_layer_exposure_metadata", layer_metadata)
|
|
222
|
+
assert layer.get_string("a_string", "ERR") != "ERR"
|
|
223
|
+
assert names == ["layer_with_many_params"]
|
|
224
|
+
|
|
225
|
+
monkeypatch.setattr(statsig, "_get_layer_exposure_metadata", original_metadata)
|
|
226
|
+
config_keys = []
|
|
227
|
+
|
|
228
|
+
def config_enabled(key):
|
|
229
|
+
config_keys.append(key)
|
|
230
|
+
return True
|
|
231
|
+
|
|
232
|
+
monkeypatch.setattr(statsig, "_sdk_config_enabled", config_enabled)
|
|
233
|
+
monkeypatch.setattr(
|
|
234
|
+
statsig,
|
|
235
|
+
"_get_exposure_callsite_metadata",
|
|
236
|
+
lambda: dict(override, exposure_source_function="config_override"),
|
|
237
|
+
)
|
|
238
|
+
assert layer.get_object("an_object", {}) != {}
|
|
239
|
+
assert config_keys == ["expo_callsite_logging_layer::layer_with_many_params"]
|
|
240
|
+
statsig.flush_events().wait()
|
|
241
|
+
events = {
|
|
242
|
+
event["metadata"]["parameterName"]: event["metadata"]
|
|
243
|
+
for event in mock_scrapi.get_logged_events()
|
|
244
|
+
if event["eventName"] == "statsig::layer_exposure"
|
|
245
|
+
}
|
|
246
|
+
assert len(events) == 2
|
|
247
|
+
assert events["a_string"]["exposure_source_function"] == "layer_override"
|
|
248
|
+
assert events["an_object"]["exposure_source_function"] == "config_override"
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def test_layer_callsite_config_errors_still_return_value_and_log_exposure(
|
|
252
|
+
statsig_setup, capsys
|
|
253
|
+
):
|
|
254
|
+
statsig, mock_scrapi = statsig_setup
|
|
255
|
+
layer = statsig.get_layer(
|
|
256
|
+
StatsigUser("broken-config-user"), "layer_with_many_params"
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
class BrokenConfigs(dict):
|
|
260
|
+
def get(self, key):
|
|
261
|
+
raise RuntimeError("broken callsite config")
|
|
262
|
+
|
|
263
|
+
statsig._internal_sdk_configs = BrokenConfigs()
|
|
264
|
+
assert layer.get_string("a_string", "ERR") != "ERR"
|
|
265
|
+
statsig.flush_events().wait()
|
|
266
|
+
assert "broken callsite config" in capsys.readouterr().out
|
|
267
|
+
events = [
|
|
268
|
+
event
|
|
269
|
+
for event in mock_scrapi.get_logged_events()
|
|
270
|
+
if event["eventName"] == "statsig::layer_exposure"
|
|
271
|
+
]
|
|
272
|
+
assert len(events) == 1
|
|
273
|
+
assert "exposure_source_file" not in events[0]["metadata"]
|
|
274
|
+
|
|
275
|
+
|
|
146
276
|
def test_sdk_configs_attach_callsite_metadata_to_manual_exposures(
|
|
147
277
|
callsite_logging_setup,
|
|
148
278
|
):
|
{oai_statsig_python_core-0.34.0rc4 → oai_statsig_python_core-0.35.0}/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.
|
|
50
|
+
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.35.0", 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"] }
|
|
@@ -104,3 +104,13 @@ ordered_user_data_maps = ["dep:indexmap"]
|
|
|
104
104
|
name = "fork_random"
|
|
105
105
|
path = "tests/fork_random.rs"
|
|
106
106
|
harness = false
|
|
107
|
+
|
|
108
|
+
[[test]]
|
|
109
|
+
name = "fork_lifecycle"
|
|
110
|
+
path = "tests/fork_lifecycle.rs"
|
|
111
|
+
harness = false
|
|
112
|
+
|
|
113
|
+
[[test]]
|
|
114
|
+
name = "fork_pid_change"
|
|
115
|
+
path = "tests/fork_pid_change.rs"
|
|
116
|
+
harness = false
|
|
@@ -159,6 +159,10 @@ async fn test_same_file_full_replay_updates_cursor_and_only_downloads_once() {
|
|
|
159
159
|
.mock("GET", "/employees")
|
|
160
160
|
.match_header("range", "bytes=0-")
|
|
161
161
|
.with_status(206)
|
|
162
|
+
.with_header(
|
|
163
|
+
"content-range",
|
|
164
|
+
&format!("bytes 0-{}/{}", full_body.len() - 1, full_body.len()),
|
|
165
|
+
)
|
|
162
166
|
.with_body(full_body)
|
|
163
167
|
.expect(1)
|
|
164
168
|
.create_async()
|
|
@@ -202,6 +206,15 @@ async fn test_same_file_full_replay_updates_cursor_and_only_downloads_once() {
|
|
|
202
206
|
.mock("GET", "/employees")
|
|
203
207
|
.match_header("range", format!("bytes={}-", full_body.len()).as_str())
|
|
204
208
|
.with_status(206)
|
|
209
|
+
.with_header(
|
|
210
|
+
"content-range",
|
|
211
|
+
&format!(
|
|
212
|
+
"bytes {}-{}/{}",
|
|
213
|
+
full_body.len(),
|
|
214
|
+
metadata.size - 1,
|
|
215
|
+
metadata.size
|
|
216
|
+
),
|
|
217
|
+
)
|
|
205
218
|
.with_body(appended_body)
|
|
206
219
|
.expect(1)
|
|
207
220
|
.create_async()
|
|
@@ -293,7 +293,7 @@ async fn id_list_concurrency_preserves_ranges_generations_unchanged_and_removal(
|
|
|
293
293
|
],
|
|
294
294
|
);
|
|
295
295
|
provider.manifest.lock().get_mut("grow").unwrap().size = 6;
|
|
296
|
-
provider.set("grow", Outcome::Body(b"+b\n".to_vec()));
|
|
296
|
+
provider.set("grow", Outcome::Body(b"+a\n+b\n".to_vec()));
|
|
297
297
|
provider.set("replace", Outcome::Body(b"+b\n".to_vec()));
|
|
298
298
|
let before = store.load_data();
|
|
299
299
|
adapter.sync_id_lists().await.unwrap();
|
|
@@ -338,6 +338,7 @@ async fn id_list_concurrency_freezes_manifest_until_the_next_refresh() {
|
|
|
338
338
|
.manifest
|
|
339
339
|
.lock()
|
|
340
340
|
.insert("a".into(), metadata("a", 8, 1));
|
|
341
|
+
provider.set("a", Outcome::Body(b"+old\n+a\n".to_vec()));
|
|
341
342
|
let gate = provider.gate(&file_url("a"));
|
|
342
343
|
let task = start(adapter.clone());
|
|
343
344
|
until(|| provider.attempts("a") == 1).await;
|
|
@@ -356,6 +357,7 @@ async fn id_list_concurrency_freezes_manifest_until_the_next_refresh() {
|
|
|
356
357
|
);
|
|
357
358
|
assert!(store.load_data().id_lists["a"].ids.contains("old"));
|
|
358
359
|
|
|
360
|
+
provider.set("a", Outcome::Body(b"+a\n".to_vec()));
|
|
359
361
|
gate.add_permits(1);
|
|
360
362
|
adapter.sync_id_lists().await.unwrap();
|
|
361
363
|
let second = provider.file_requests()[1].clone();
|
|
@@ -103,29 +103,13 @@ impl IdListPropagationState {
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
pub(super) fn downloaded_range(
|
|
109
|
-
status: Option<u16>,
|
|
110
|
-
content_range: Option<&str>,
|
|
111
|
-
requested_start: u64,
|
|
112
|
-
body_len: usize,
|
|
113
|
-
cdn_query_range: bool,
|
|
114
|
-
) -> Option<Range<u64>> {
|
|
106
|
+
// Validate the received interval before applying bytes or recording propagation.
|
|
107
|
+
pub(super) fn downloaded_range(content_range: &str, body_len: usize) -> Option<Range<u64>> {
|
|
115
108
|
let len = u64::try_from(body_len).ok()?;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return (end <= total && end.checked_sub(start) == Some(len)).then_some(start..end);
|
|
123
|
-
}
|
|
124
|
-
// The default CDN implements ranges through a query parameter and returns HTTP 200.
|
|
125
|
-
// A normal HTTP server may ignore Range and return the entire file instead.
|
|
126
|
-
if status != Some(200) {
|
|
127
|
-
return None;
|
|
128
|
-
}
|
|
129
|
-
let start = if cdn_query_range { requested_start } else { 0 };
|
|
130
|
-
Some(start..start.checked_add(len)?)
|
|
109
|
+
let (range, total) = content_range.strip_prefix("bytes ")?.split_once('/')?;
|
|
110
|
+
let (start, end) = range.split_once('-')?;
|
|
111
|
+
let start = start.parse::<u64>().ok()?;
|
|
112
|
+
let end = end.parse::<u64>().ok()?.checked_add(1)?;
|
|
113
|
+
let total = total.parse::<u64>().ok()?;
|
|
114
|
+
(end <= total && end.checked_sub(start) == Some(len)).then_some(start..end)
|
|
131
115
|
}
|