oai-statsig-python-core 0.34.0rc2__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.
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/Cargo.lock +5 -5
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/Cargo.toml +1 -1
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/PKG-INFO +23 -11
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/error_boundary.py +5 -1
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/statsig_python_core.pyi +2 -2
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/typed_config.py +1 -1
- {oai_statsig_python_core-0.34.0rc2/statsig-pyo3 → oai_statsig_python_core-0.35.0/statsig-grpc}/README.md +22 -10
- {oai_statsig_python_core-0.34.0rc2/statsig-grpc → oai_statsig_python_core-0.35.0/statsig-pyo3}/README.md +22 -10
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_options_py.rs +1 -1
- oai_statsig_python_core-0.35.0/statsig-pyo3/tests/test_error_boundary.py +103 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_exposure_logging.py +130 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_typed_config.py +42 -1
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/Cargo.toml +11 -1
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/statsig_options_tests.rs +3 -3
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_list_propagation.rs +8 -23
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/net_provider_reqwest_http2_tests.rs +13 -8
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/network_client_http2_tests.rs +3 -3
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/http2.rs +1 -1
- 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/proto_stream_reader.rs +7 -5
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_options.rs +2 -2
- 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.0rc2/statsig-pyo3/tests/test_error_boundary.py +0 -22
- oai_statsig_python_core-0.34.0rc2/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -1750
- oai_statsig_python_core-0.34.0rc2/statsig-rust/tests/statsig_global_tests.rs +0 -80
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/__init__.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/_frozen_json.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/data_store.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/observability_client.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/persistent_storage.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/py.typed +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/requirements.txt +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/statsig.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/statsig_types.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/pyproject.toml +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/Cargo.toml +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/build.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/lib.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/.github/workflows/CI.yml +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/.gitignore +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/Cargo.toml +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/dynamic_config_value_cache_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/native_context_allocations.c +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/summarize_native_context_allocations.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/wrapper_native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/requirements-typing.txt +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/data_store_base_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/event_logging_adapter_base_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/interned_store_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/lib.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/pyo_utils.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/safe_gil.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_base_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_types_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_user_context_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_user_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/typed_config_py/tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/typed_config_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/unit_id_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/fork_callback_runner.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/fork_runner.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/mock_output_logger.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/mock_scrapi.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/profile_util.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_bulk_evaluate_gcir_parity.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_data_store.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_evaluation_cache_integration.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_evaluation_cache_pyo3.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_experiment_group_targeting_exposures.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_feature_gate_parts.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_fork_callback.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_forking.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_frozen_json.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_id_list_updates.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_interned_store_preload.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_layer_param_exposure_sampling.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_native_context_allocations.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_native_user_context.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_observability_client.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_output_logger_gc.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_override_adapter.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_partial_rollout_boost.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_performance.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_sec_expo_as_primary.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_shutdown.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_options.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_user.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_user_json_serialization.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_user_none_fields.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_typed_config_native.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/utils.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/typing_tests/typed_config.py +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/benches/evaluation/case_sensitive_target_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/build.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/resources/ip_supalite.table +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/compression/compression_helper.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/compression/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/console_capture/console_capture_handler.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/console_capture/console_capture_instances.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/console_capture/console_capture_options.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/console_capture/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/data_store_interface.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/dcs_str.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/array_optimization_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/array_optimization_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/rkyv_value_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/cmab_evaluator.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_data.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator_context.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator_result.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/rkyv_value.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation_fixture_client.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/delayed_exposure_store.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_logger.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/flush_type.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/dynamic_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/evaluation_plan.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/feature_gates_processor.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/gcir_formatter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/gcir_options.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/gcir_process_iter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/layer_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/param_stores_processor.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/secondary_exposure_hashing.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/target_app_id_utils.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/timing.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/global_configs.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/ahash.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/djb2.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/hash_util.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/init_details.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/initialize_response.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/initialize_v2_response.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/instance_registry.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_string.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/interned_store.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mmap_data_v2.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mmap_sync.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/lib.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/logging_utils.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/macros.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/http2_test_helpers.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/http_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/network_client.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/network_error.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/providers/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/proxy_config.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/statsig_url.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/ops_stats.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/output_logger.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/output_policy.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/override_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/scoped_evaluation_request.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/scoped_id_list_membership_service.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/scoped_snapshot_registry.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_event_emitter/event_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/snapshot_evaluation_session.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/spec_store.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/explicit_params.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/parse_options.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/proto_compression.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/proto_specs/parser.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/proto_specs.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/spec_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/specs_hash_map.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/statsig_config_specs.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig/typed_config_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_core_api_options.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_err.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_global.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_metadata.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_runtime.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_type_factories.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_types.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_types_raw.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/typed_config/tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/typed_config.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/fast_statsig_user.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/into_optional.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/prepared_user.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/random_user_id.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/unit_id.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/user_data.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/user_value.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/utils/random.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/value_parsing.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/check_gate_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/big_number_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/company_id_list +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_error.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_non_case_sensitive.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_user_agent_versions.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/demo_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/eval_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/experiment_group_condition.pb.br +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/get_id_lists.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/perf_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/test_user_agents.txt +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/ua_string_cases.json +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data_store_bytes_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data_store_json_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data_store_proto_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/exposure_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/flushing_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/fork_random.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/gcir_plan_expansion_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/global_configs_test.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/id_list_storage_api_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/instance_registry_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/interner_contention_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/list_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/network_client_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/output_logger_reentrancy_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/output_logger_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/override_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/perf_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/protobuf_copy_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/remote_config_preload_hydration_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/remote_config_value_hydration_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/spec_types_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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.0rc2 → 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.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/substring_search_bench.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/typed_getters_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/user_json_tests.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/helpers.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.34.0rc2 → 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,21 +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
|
-
`
|
|
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`.
|
|
73
85
|
|
|
74
86
|
Set `fallback_to_statsig_api` to `Some(false)` or leave it unset to keep file
|
|
75
|
-
downloads strictly on the selected destination. There is no
|
|
87
|
+
downloads strictly on the selected destination. There is no fallback attempt when
|
|
76
88
|
the override resolves to the original URL, no override is set, or the request
|
|
77
89
|
fails with an authentication rejection (401/403) or another non-retryable error.
|
|
78
90
|
Response parsing failures do not trigger fallback. This uses the existing option
|
|
79
91
|
across language bindings; wrappers that disable it continue to opt out.
|
|
80
92
|
|
|
81
|
-
A successful proxy request makes no additional request.
|
|
82
|
-
|
|
83
|
-
|
|
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.
|
|
84
96
|
|
|
85
97
|
## Read-only data stores
|
|
86
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
|
|
@@ -359,12 +359,12 @@ class StatsigOptions:
|
|
|
359
359
|
@property
|
|
360
360
|
def prefer_http2(self) -> typing.Optional[builtins.bool]:
|
|
361
361
|
r"""
|
|
362
|
-
Prefer HTTP/2 while allowing HTTP/1.1.
|
|
362
|
+
Prefer HTTP/2 while allowing HTTP/1.1. Disabled by default; True opts in.
|
|
363
363
|
"""
|
|
364
364
|
@prefer_http2.setter
|
|
365
365
|
def prefer_http2(self, value: typing.Optional[builtins.bool]) -> None:
|
|
366
366
|
r"""
|
|
367
|
-
Prefer HTTP/2 while allowing HTTP/1.1.
|
|
367
|
+
Prefer HTTP/2 while allowing HTTP/1.1. Disabled by default; True opts in.
|
|
368
368
|
"""
|
|
369
369
|
@property
|
|
370
370
|
def event_logging_flush_interval_ms(self) -> typing.Optional[builtins.int]: ...
|
|
@@ -122,7 +122,7 @@ class _TypedConfigs:
|
|
|
122
122
|
from google.protobuf.json_format import ParseDict
|
|
123
123
|
|
|
124
124
|
try:
|
|
125
|
-
value = ParseDict(raw["value"], message_type())
|
|
125
|
+
value = ParseDict(raw["value"], message_type(), ignore_unknown_fields=True)
|
|
126
126
|
except Exception as error:
|
|
127
127
|
raise TypedConfigConversionError(
|
|
128
128
|
f"Failed to convert typed config {name!r}"
|
|
@@ -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,21 +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
|
-
`
|
|
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`.
|
|
51
63
|
|
|
52
64
|
Set `fallback_to_statsig_api` to `Some(false)` or leave it unset to keep file
|
|
53
|
-
downloads strictly on the selected destination. There is no
|
|
65
|
+
downloads strictly on the selected destination. There is no fallback attempt when
|
|
54
66
|
the override resolves to the original URL, no override is set, or the request
|
|
55
67
|
fails with an authentication rejection (401/403) or another non-retryable error.
|
|
56
68
|
Response parsing failures do not trigger fallback. This uses the existing option
|
|
57
69
|
across language bindings; wrappers that disable it continue to opt out.
|
|
58
70
|
|
|
59
|
-
A successful proxy request makes no additional request.
|
|
60
|
-
|
|
61
|
-
|
|
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.
|
|
62
74
|
|
|
63
75
|
## Read-only data stores
|
|
64
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,21 +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
|
-
`
|
|
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`.
|
|
51
63
|
|
|
52
64
|
Set `fallback_to_statsig_api` to `Some(false)` or leave it unset to keep file
|
|
53
|
-
downloads strictly on the selected destination. There is no
|
|
65
|
+
downloads strictly on the selected destination. There is no fallback attempt when
|
|
54
66
|
the override resolves to the original URL, no override is set, or the request
|
|
55
67
|
fails with an authentication rejection (401/403) or another non-retryable error.
|
|
56
68
|
Response parsing failures do not trigger fallback. This uses the existing option
|
|
57
69
|
across language bindings; wrappers that disable it continue to opt out.
|
|
58
70
|
|
|
59
|
-
A successful proxy request makes no additional request.
|
|
60
|
-
|
|
61
|
-
|
|
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.
|
|
62
74
|
|
|
63
75
|
## Read-only data stores
|
|
64
76
|
|
|
@@ -128,7 +128,7 @@ pub struct StatsigOptionsPy {
|
|
|
128
128
|
pub disable_network: Option<bool>,
|
|
129
129
|
#[pyo3(get, set)]
|
|
130
130
|
pub log_event_connection_reuse: Option<bool>,
|
|
131
|
-
/// Prefer HTTP/2 while allowing HTTP/1.1.
|
|
131
|
+
/// Prefer HTTP/2 while allowing HTTP/1.1. Disabled by default; True opts in.
|
|
132
132
|
#[pyo3(get, set)]
|
|
133
133
|
pub prefer_http2: Option<bool>,
|
|
134
134
|
#[pyo3(get, set)]
|
|
@@ -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
|
):
|
|
@@ -274,9 +274,50 @@ def test_unavailable_never_substitutes_previous_value(sdk, payload_state):
|
|
|
274
274
|
assert sdk.get().value == {}
|
|
275
275
|
|
|
276
276
|
|
|
277
|
+
def test_conversion_ignores_unknown_fields_and_enum_names(sdk):
|
|
278
|
+
sdk.raw = selected(
|
|
279
|
+
2,
|
|
280
|
+
{
|
|
281
|
+
"number": 7,
|
|
282
|
+
"type": "NEW_UNKNOWN_ENUM_VALUE",
|
|
283
|
+
"newField": {"enabled": True},
|
|
284
|
+
"options": {"deprecated": True, "newNestedField": 42},
|
|
285
|
+
},
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
result = sdk.get(message_type=FieldDescriptorProto)
|
|
289
|
+
|
|
290
|
+
assert result.value == FieldDescriptorProto(number=7, options={"deprecated": True})
|
|
291
|
+
assert result.details.version == 2
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def test_callback_conversion_ignores_unknown_fields(sdk):
|
|
295
|
+
callbacks = Queue()
|
|
296
|
+
sdk.raw = selected(1, {"number": 1, "newField": True})
|
|
297
|
+
sdk.register(callbacks.put, message_type=FieldDescriptorProto)
|
|
298
|
+
assert sdk._typed_configs.observers[0].revision == 1
|
|
299
|
+
assert callbacks.empty()
|
|
300
|
+
|
|
301
|
+
sdk.publish(
|
|
302
|
+
selected(
|
|
303
|
+
2,
|
|
304
|
+
{
|
|
305
|
+
"number": 2,
|
|
306
|
+
"newField": True,
|
|
307
|
+
"options": {"deprecated": True, "newNestedField": 42},
|
|
308
|
+
},
|
|
309
|
+
)
|
|
310
|
+
)
|
|
311
|
+
result = callbacks.get(timeout=5)
|
|
312
|
+
assert result.value == FieldDescriptorProto(number=2, options={"deprecated": True})
|
|
313
|
+
assert result.details.version == 2
|
|
314
|
+
sdk.wait_for_observation()
|
|
315
|
+
assert sdk._typed_configs.observers[0].error is None
|
|
316
|
+
|
|
317
|
+
|
|
277
318
|
def test_conversion_failure_is_explicit_with_cause_for_each_user(sdk):
|
|
278
319
|
sdk.get()
|
|
279
|
-
sdk.raw = selected(2, {"number": "invalid"})
|
|
320
|
+
sdk.raw = selected(2, {"number": "invalid", "newField": True})
|
|
280
321
|
for user in (sdk.user, StatsigUser("other")):
|
|
281
322
|
with pytest.raises(TypedConfigConversionError) as caught:
|
|
282
323
|
sdk.get(user=user, message_type=FieldDescriptorProto)
|
{oai_statsig_python_core-0.34.0rc2 → 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
|
|
@@ -4,8 +4,8 @@ use crate::StatsigOptions;
|
|
|
4
4
|
fn test_prefer_http2_supported_option() {
|
|
5
5
|
use crate::networking::http2::http2_enabled;
|
|
6
6
|
|
|
7
|
-
assert!(http2_enabled(None));
|
|
8
|
-
assert!(http2_enabled(Some(&StatsigOptions::default())));
|
|
7
|
+
assert!(!http2_enabled(None));
|
|
8
|
+
assert!(!http2_enabled(Some(&StatsigOptions::default())));
|
|
9
9
|
for enabled in [true, false] {
|
|
10
10
|
let options = StatsigOptions::builder()
|
|
11
11
|
.prefer_http2(Some(enabled))
|
|
@@ -22,7 +22,7 @@ fn test_prefer_http2_supported_option() {
|
|
|
22
22
|
experimental_flags: Some(["prefer_http2".to_string()].into()),
|
|
23
23
|
..Default::default()
|
|
24
24
|
};
|
|
25
|
-
assert!(http2_enabled(Some(&old_flag_only)));
|
|
25
|
+
assert!(!http2_enabled(Some(&old_flag_only)));
|
|
26
26
|
let explicit_off = StatsigOptions {
|
|
27
27
|
prefer_http2: Some(false),
|
|
28
28
|
..old_flag_only
|
|
@@ -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()
|