oai-statsig-python-core 0.31.0rc2__tar.gz → 0.31.0rc4__tar.gz

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