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.
Files changed (498) hide show
  1. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/Cargo.lock +5 -5
  2. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/Cargo.toml +1 -1
  3. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/PKG-INFO +23 -11
  4. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/error_boundary.py +5 -1
  5. {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
  6. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/typed_config.py +1 -1
  7. {oai_statsig_python_core-0.34.0rc2/statsig-pyo3 → oai_statsig_python_core-0.35.0/statsig-grpc}/README.md +22 -10
  8. {oai_statsig_python_core-0.34.0rc2/statsig-grpc → oai_statsig_python_core-0.35.0/statsig-pyo3}/README.md +22 -10
  9. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_options_py.rs +1 -1
  10. oai_statsig_python_core-0.35.0/statsig-pyo3/tests/test_error_boundary.py +103 -0
  11. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_exposure_logging.py +130 -0
  12. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_typed_config.py +42 -1
  13. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/Cargo.toml +11 -1
  14. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/statsig_options_tests.rs +3 -3
  15. {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
  16. {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
  17. {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
  18. {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
  19. oai_statsig_python_core-0.35.0/statsig-rust/src/id_lists_adapter/id_list_range_tests.rs +269 -0
  20. {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
  21. oai_statsig_python_core-0.35.0/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +772 -0
  22. oai_statsig_python_core-0.35.0/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter_tests.rs +900 -0
  23. {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
  24. {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
  25. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/http2.rs +1 -1
  26. oai_statsig_python_core-0.35.0/statsig-rust/src/specs_adapter/__tests__/protobuf_hydration_budget_tests.rs +423 -0
  27. {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
  28. {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
  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
  30. {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
  31. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_options.rs +2 -2
  32. oai_statsig_python_core-0.35.0/statsig-rust/tests/fork_lifecycle.rs +71 -0
  33. oai_statsig_python_core-0.35.0/statsig-rust/tests/fork_pid_change.rs +59 -0
  34. oai_statsig_python_core-0.35.0/statsig-rust/tests/statsig_global_tests.rs +9 -0
  35. oai_statsig_python_core-0.35.0/statsig-rust/tests/utils/fork_runtime.rs +55 -0
  36. oai_statsig_python_core-0.34.0rc2/statsig-pyo3/tests/test_error_boundary.py +0 -22
  37. oai_statsig_python_core-0.34.0rc2/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -1750
  38. oai_statsig_python_core-0.34.0rc2/statsig-rust/tests/statsig_global_tests.rs +0 -80
  39. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/__init__.py +0 -0
  40. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/_frozen_json.py +0 -0
  41. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/data_store.py +0 -0
  42. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/evaluation_cache.py +0 -0
  43. {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
  44. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/observability_client.py +0 -0
  45. {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
  46. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/persistent_storage.py +0 -0
  47. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/py.typed +0 -0
  48. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/requirements.txt +0 -0
  49. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/statsig.py +0 -0
  50. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/py_src/statsig_python_core/statsig_types.py +0 -0
  51. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/pyproject.toml +0 -0
  52. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/Cargo.toml +0 -0
  53. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/build.rs +0 -0
  54. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/lib.rs +0 -0
  55. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
  56. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
  57. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
  58. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
  59. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
  60. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/.github/workflows/CI.yml +0 -0
  61. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/.gitignore +0 -0
  62. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/Cargo.toml +0 -0
  63. {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
  64. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/native_context_allocations.c +0 -0
  65. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/native_context_benchmark.py +0 -0
  66. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/summarize_native_context_allocations.py +0 -0
  67. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
  68. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
  69. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/benchmarks/wrapper_native_context_benchmark.py +0 -0
  70. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/requirements-typing.txt +0 -0
  71. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
  72. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/data_store_base_py.rs +0 -0
  73. {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
  74. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/interned_store_py.rs +0 -0
  75. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/lib.rs +0 -0
  76. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
  77. {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
  78. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/pyo_utils.rs +0 -0
  79. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
  80. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/safe_gil.rs +0 -0
  81. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_base_py.rs +0 -0
  82. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
  83. {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
  84. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_types_py.rs +0 -0
  85. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_user_context_py.rs +0 -0
  86. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/statsig_user_py.rs +0 -0
  87. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/typed_config_py/tests.rs +0 -0
  88. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/typed_config_py.rs +0 -0
  89. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/unit_id_py.rs +0 -0
  90. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
  91. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
  92. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/fork_callback_runner.py +0 -0
  93. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/fork_runner.py +0 -0
  94. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/mock_output_logger.py +0 -0
  95. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/mock_scrapi.py +0 -0
  96. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/profile_util.py +0 -0
  97. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
  98. {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
  99. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_data_store.py +0 -0
  100. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_evaluation_cache.py +0 -0
  101. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_evaluation_cache_integration.py +0 -0
  102. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_evaluation_cache_pyo3.py +0 -0
  103. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
  104. {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
  105. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
  106. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_feature_gate_parts.py +0 -0
  107. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
  108. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_fork_callback.py +0 -0
  109. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_forking.py +0 -0
  110. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_frozen_json.py +0 -0
  111. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
  112. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_id_list_updates.py +0 -0
  113. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
  114. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_interned_store_preload.py +0 -0
  115. {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
  116. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
  117. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_native_context_allocations.py +0 -0
  118. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_native_context_benchmark.py +0 -0
  119. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_native_user_context.py +0 -0
  120. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_observability_client.py +0 -0
  121. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_output_logger_gc.py +0 -0
  122. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
  123. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_override_adapter.py +0 -0
  124. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_partial_rollout_boost.py +0 -0
  125. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_performance.py +0 -0
  126. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
  127. {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
  128. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
  129. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_shutdown.py +0 -0
  130. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig.py +0 -0
  131. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_options.py +0 -0
  132. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_user.py +0 -0
  133. {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
  134. {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
  135. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
  136. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_typed_config_native.py +0 -0
  137. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
  138. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/tests/utils.py +0 -0
  139. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-pyo3/typing_tests/typed_config.py +0 -0
  140. {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
  141. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/build.rs +0 -0
  142. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/resources/ip_supalite.table +0 -0
  143. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
  144. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
  145. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
  146. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/mod.rs +0 -0
  147. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
  148. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
  149. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/compression/compression_helper.rs +0 -0
  150. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/compression/mod.rs +0 -0
  151. {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
  152. {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
  153. {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
  154. {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
  155. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/console_capture/mod.rs +0 -0
  156. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/data_store_interface.rs +0 -0
  157. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/dcs_str.rs +0 -0
  158. {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
  159. {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
  160. {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
  161. {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
  162. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
  163. {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
  164. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/cmab_evaluator.rs +0 -0
  165. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
  166. {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
  167. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
  168. {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
  169. {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
  170. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
  171. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
  172. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
  173. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
  174. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -0
  175. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
  176. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
  177. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_data.rs +0 -0
  178. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
  179. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_types.rs +0 -0
  180. {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
  181. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
  182. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator.rs +0 -0
  183. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator_context.rs +0 -0
  184. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator_result.rs +0 -0
  185. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
  186. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
  187. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/mod.rs +0 -0
  188. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/rkyv_value.rs +0 -0
  189. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
  190. {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
  191. {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
  192. {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
  193. {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
  194. {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
  195. {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
  196. {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
  197. {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
  198. {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
  199. {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
  200. {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
  201. {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
  202. {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
  203. {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
  204. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/evaluation_fixture_client.rs +0 -0
  205. {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
  206. {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
  207. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/event_logger.rs +0 -0
  208. {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
  209. {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
  210. {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
  211. {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
  212. {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
  213. {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
  214. {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
  215. {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
  216. {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
  217. {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
  218. {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
  219. {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
  220. {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
  221. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
  222. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
  223. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
  224. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/flush_type.rs +0 -0
  225. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/mod.rs +0 -0
  226. {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
  227. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
  228. {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
  229. {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
  230. {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
  231. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
  232. {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
  233. {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
  234. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/dynamic_configs_processor.rs +0 -0
  235. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/evaluation_plan.rs +0 -0
  236. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/feature_gates_processor.rs +0 -0
  237. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/gcir_formatter.rs +0 -0
  238. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/gcir_options.rs +0 -0
  239. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/gcir_process_iter.rs +0 -0
  240. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/layer_configs_processor.rs +0 -0
  241. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/mod.rs +0 -0
  242. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/param_stores_processor.rs +0 -0
  243. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/secondary_exposure_hashing.rs +0 -0
  244. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
  245. {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
  246. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/gcir/timing.rs +0 -0
  247. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/global_configs.rs +0 -0
  248. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/ahash.rs +0 -0
  249. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/djb2.rs +0 -0
  250. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/hash_util.rs +0 -0
  251. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
  252. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/hashing/mod.rs +0 -0
  253. {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
  254. {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
  255. {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
  256. {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
  257. {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
  258. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
  259. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/init_details.rs +0 -0
  260. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
  261. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/initialize_response.rs +0 -0
  262. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/initialize_v2_response.rs +0 -0
  263. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/instance_registry.rs +0 -0
  264. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_string.rs +0 -0
  265. {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
  266. {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
  267. {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
  268. {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
  269. {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
  270. {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
  271. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/__tests__/mod.rs +0 -0
  272. {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
  273. {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
  274. {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
  275. {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
  276. {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
  277. {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
  278. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/interned_store.rs +0 -0
  279. {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
  280. {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
  281. {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
  282. {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
  283. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mmap_sync.rs +0 -0
  284. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/interned_values/mod.rs +0 -0
  285. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/lib.rs +0 -0
  286. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/logging_utils.rs +0 -0
  287. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/macros.rs +0 -0
  288. {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
  289. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
  290. {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
  291. {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
  292. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/http_types.rs +0 -0
  293. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/mod.rs +0 -0
  294. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/network_client.rs +0 -0
  295. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/network_error.rs +0 -0
  296. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/providers/mod.rs +0 -0
  297. {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
  298. {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
  299. {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
  300. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/proxy_config.rs +0 -0
  301. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/networking/statsig_url.rs +0 -0
  302. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
  303. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
  304. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/mod.rs +0 -0
  305. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
  306. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/ops_stats.rs +0 -0
  307. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
  308. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/output_logger.rs +0 -0
  309. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/output_policy.rs +0 -0
  310. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/override_adapter/mod.rs +0 -0
  311. {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
  312. {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
  313. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
  314. {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
  315. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/persistent_storage/mod.rs +0 -0
  316. {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
  317. {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
  318. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/scoped_evaluation_request.rs +0 -0
  319. {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
  320. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/scoped_snapshot_registry.rs +0 -0
  321. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
  322. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
  323. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
  324. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
  325. {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
  326. {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
  327. {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
  328. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
  329. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/snapshot_evaluation_session.rs +0 -0
  330. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/spec_store.rs +0 -0
  331. {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
  332. {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
  333. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/mod.rs +0 -0
  334. {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
  335. {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
  336. {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
  337. {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
  338. {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
  339. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
  340. {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
  341. {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
  342. {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
  343. {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
  344. {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
  345. {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
  346. {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
  347. {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
  348. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
  349. {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
  350. {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
  351. {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
  352. {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
  353. {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
  354. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
  355. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/explicit_params.rs +0 -0
  356. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/mod.rs +0 -0
  357. {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
  358. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/parse_options.rs +0 -0
  359. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/proto_compression.rs +0 -0
  360. {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
  361. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/proto_specs.rs +0 -0
  362. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/specs_response/spec_types.rs +0 -0
  363. {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
  364. {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
  365. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig/typed_config_tests.rs +0 -0
  366. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig.rs +0 -0
  367. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_core_api_options.rs +0 -0
  368. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_err.rs +0 -0
  369. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_global.rs +0 -0
  370. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_metadata.rs +0 -0
  371. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_runtime.rs +0 -0
  372. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_type_factories.rs +0 -0
  373. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_types.rs +0 -0
  374. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/statsig_types_raw.rs +0 -0
  375. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/typed_config/tests.rs +0 -0
  376. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/typed_config.rs +0 -0
  377. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/fast_statsig_user.rs +0 -0
  378. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/into_optional.rs +0 -0
  379. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/mod.rs +0 -0
  380. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/prepared_user.rs +0 -0
  381. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/random_user_id.rs +0 -0
  382. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user.rs +0 -0
  383. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
  384. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
  385. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
  386. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/unit_id.rs +0 -0
  387. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/user_data.rs +0 -0
  388. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/user/user_value.rs +0 -0
  389. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/utils/mod.rs +0 -0
  390. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/utils/random.rs +0 -0
  391. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/src/value_parsing.rs +0 -0
  392. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/check_gate_tests.rs +0 -0
  393. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
  394. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/big_number_dcs.json +0 -0
  395. {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
  396. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/company_id_list +0 -0
  397. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_error.json +0 -0
  398. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
  399. {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
  400. {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
  401. {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
  402. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
  403. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
  404. {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
  405. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
  406. {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
  407. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
  408. {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
  409. {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
  410. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/get_id_lists.json +0 -0
  411. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
  412. {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
  413. {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
  414. {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
  415. {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
  416. {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
  417. {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
  418. {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
  419. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/test_user_agents.txt +0 -0
  420. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/ua_string_cases.json +0 -0
  421. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
  422. {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
  423. {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
  424. {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
  425. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
  426. {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
  427. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
  428. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
  429. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
  430. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
  431. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
  432. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
  433. {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
  434. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
  435. {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
  436. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
  437. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
  438. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
  439. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/exposure_tests.rs +0 -0
  440. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/flushing_tests.rs +0 -0
  441. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/fork_random.rs +0 -0
  442. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
  443. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/gcir_plan_expansion_bench.rs +0 -0
  444. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/gcir_tests.rs +0 -0
  445. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/global_configs_test.rs +0 -0
  446. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
  447. {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
  448. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
  449. {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
  450. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
  451. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/instance_registry_tests.rs +0 -0
  452. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/interner_contention_bench.rs +0 -0
  453. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
  454. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/list_methods_tests.rs +0 -0
  455. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
  456. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/network_client_tests.rs +0 -0
  457. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/network_failure_tests.rs +0 -0
  458. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
  459. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/output_logger_reentrancy_tests.rs +0 -0
  460. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/output_logger_tests.rs +0 -0
  461. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/override_adapter_tests.rs +0 -0
  462. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/perf_tests.rs +0 -0
  463. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
  464. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/protobuf_copy_bench.rs +0 -0
  465. {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
  466. {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
  467. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
  468. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/spec_types_tests.rs +0 -0
  469. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
  470. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
  471. {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
  472. {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
  473. {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
  474. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_options_tests.rs +0 -0
  475. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
  476. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_tests.rs +0 -0
  477. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
  478. {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
  479. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
  480. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
  481. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/statsig_user_tests.rs +0 -0
  482. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/substring_search_bench.rs +0 -0
  483. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
  484. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/typed_getters_tests.rs +0 -0
  485. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
  486. {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
  487. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/user_json_tests.rs +0 -0
  488. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
  489. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/helpers.rs +0 -0
  490. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
  491. {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
  492. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
  493. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
  494. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
  495. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
  496. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
  497. {oai_statsig_python_core-0.34.0rc2 → oai_statsig_python_core-0.35.0}/statsig-rust/tests/utils/mod.rs +0 -0
  498. {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.34.0-rc.2"
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.34.0-rc.2"
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.34.0-rc.2"
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.34.0-rc.2"
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.34.0-rc.2"
3135
+ version = "0.35.0"
3136
3136
  dependencies = [
3137
3137
  "async-trait",
3138
3138
  "cbindgen",
@@ -26,7 +26,7 @@ exclude = [
26
26
  [workspace.package]
27
27
  edition = "2021"
28
28
  license = "ISC"
29
- version = "0.34.0-rc.2"
29
+ version = "0.35.0"
30
30
  homepage = "https://statsig.com/"
31
31
  authors = ["Statsig", "Daniel Loomb <daniel@statsig.com>"]
32
32
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oai_statsig_python_core
3
- Version: 0.34.0rc2
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 exhausts its retries, provided that URL belongs to
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. Fallback preserves the URL's
70
- path and query, the file identity, and the byte offset for incremental updates.
71
- Each destination uses its own range protocol: a `range` query for the OpenAI CDN, or `Range` and
72
- `statsig-id-list-file-size` headers for other hosts.
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 second attempt when
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. An eligible failure can
82
- add one request to the trusted CDN URL using the existing network timeout and retry
83
- policy. The next synchronization starts with the configured override again.
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
- return ErrorBoundary._capture(method_name, lambda: orig_method(*args, **kwargs))
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. Unset enables it; False restores the existing transport.
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. Unset enables it; False restores the existing transport.
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 exhausts its retries, provided that URL belongs to
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. Fallback preserves the URL's
48
- path and query, the file identity, and the byte offset for incremental updates.
49
- Each destination uses its own range protocol: a `range` query for the OpenAI CDN, or `Range` and
50
- `statsig-id-list-file-size` headers for other hosts.
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 second attempt when
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. An eligible failure can
60
- add one request to the trusted CDN URL using the existing network timeout and retry
61
- policy. The next synchronization starts with the configured override again.
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 exhausts its retries, provided that URL belongs to
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. Fallback preserves the URL's
48
- path and query, the file identity, and the byte offset for incremental updates.
49
- Each destination uses its own range protocol: a `range` query for the OpenAI CDN, or `Range` and
50
- `statsig-id-list-file-size` headers for other hosts.
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 second attempt when
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. An eligible failure can
60
- add one request to the trusted CDN URL using the existing network timeout and retry
61
- policy. The next synchronization starts with the configured override again.
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. Unset enables it; False restores the existing transport.
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)
@@ -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.34.0-rc.2", optional = true }
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()