oai-statsig-python-core 0.34.0rc4__tar.gz → 0.35.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of oai-statsig-python-core might be problematic. Click here for more details.

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