statsig-python-core 0.8.3__tar.gz → 0.12.1rc2511121816__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 (336) hide show
  1. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/Cargo.lock +11 -8
  2. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/Cargo.toml +1 -1
  3. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/PKG-INFO +1 -1
  4. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/py_src/statsig_python_core/statsig_python_core.pyi +5 -5
  5. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/src/statsig_grpc_client.rs +5 -14
  6. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/py_src/statsig_python_core/statsig_python_core.pyi +5 -5
  7. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/statsig_base_py.rs +0 -31
  8. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/statsig_options_py.rs +12 -7
  9. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +7 -8
  10. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/statsig_types_py.rs +17 -3
  11. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/fork_runner.py +0 -1
  12. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_data_store.py +17 -10
  13. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_forking.py +18 -1
  14. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_shutdown.py +0 -1
  15. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/Cargo.toml +7 -3
  16. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/__tests__/interned_string_tests.rs +147 -0
  17. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/__tests__/mod.rs +2 -0
  18. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/__tests__/spec_store_tests.rs +134 -0
  19. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/compression/mod.rs +1 -0
  20. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/data_store_interface.rs +2 -0
  21. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +5 -5
  22. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/cmab_evaluator.rs +17 -17
  23. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +7 -5
  24. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +6 -2
  25. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +5 -2
  26. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +10 -7
  27. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/comparisons/compare_time.rs +17 -7
  28. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +6 -2
  29. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/evaluation/dynamic_returnable.rs +114 -0
  30. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/dynamic_string.rs +5 -5
  31. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/dynamic_value.rs +13 -2
  32. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/evaluation/evaluation_details.rs +113 -0
  33. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/evaluation_types.rs +31 -21
  34. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +95 -0
  35. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/evaluation_types_v2.rs +17 -20
  36. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/evaluator.rs +122 -90
  37. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/evaluator_context.rs +29 -13
  38. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/evaluator_result.rs +246 -48
  39. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/evaluator_value.rs +113 -36
  40. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/get_unit_id.rs +2 -2
  41. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/mod.rs +2 -0
  42. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/evaluation/secondary_exposure_key.rs +16 -0
  43. statsig_python_core-0.8.3/statsig-rust/src/evaluation/user_agent_parsing/experimental_ua_parser.rs → statsig_python_core-0.12.1rc2511121816/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +11 -5
  44. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +17 -0
  45. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +1 -1
  46. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +90 -11
  47. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +41 -9
  48. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +2 -2
  49. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +98 -0
  50. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +7 -7
  51. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +11 -5
  52. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/exposure_sampling.rs +3 -3
  53. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/mod.rs +0 -1
  54. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/statsig_event_internal.rs +53 -2
  55. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging_adapter/mod.rs +5 -1
  56. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +3 -2
  57. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/gcir/dynamic_configs_processor.rs +297 -0
  58. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/gcir/feature_gates_processor.rs +104 -0
  59. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/gcir/gcir_formatter.rs +105 -159
  60. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/gcir/gcir_options.rs +21 -1
  61. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/gcir/gcir_process_iter.rs +22 -6
  62. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/gcir/layer_configs_processor.rs +63 -7
  63. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/gcir/mod.rs +1 -1
  64. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/gcir/param_stores_processor.rs +2 -2
  65. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/gcir/target_app_id_utils.rs +5 -4
  66. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/global_configs.rs +25 -0
  67. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/hashing/ahash.rs +1 -1
  68. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/hashing/hash_util.rs +16 -6
  69. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/hashing/memo_sha_256.rs +4 -5
  70. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/hashing/mod.rs +1 -1
  71. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/id_lists_adapter/id_list.rs +9 -6
  72. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +48 -20
  73. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/init_details.rs +111 -0
  74. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/initialize_evaluations_response.rs +2 -1
  75. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/initialize_response.rs +3 -3
  76. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/initialize_v2_response.rs +68 -0
  77. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/interned_string.rs +202 -0
  78. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/interned_value_store.rs +104 -0
  79. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/lib.rs +9 -3
  80. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/networking/__tests__/mod.rs +1 -0
  81. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/networking/__tests__/response_data_tests.rs +104 -0
  82. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/networking/http_types.rs +76 -2
  83. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/networking/mod.rs +3 -0
  84. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/networking/network_client.rs +45 -15
  85. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/networking/network_error.rs +21 -6
  86. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/networking/providers/mod.rs +1 -1
  87. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/networking/providers/net_provider_noop.rs +2 -1
  88. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +72 -8
  89. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +4 -4
  90. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/persistent_storage/__tests__/mod.rs +1 -0
  91. statsig_python_core-0.12.1rc2511121816/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +129 -0
  92. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/persistent_storage/mod.rs +3 -0
  93. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +27 -7
  94. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +34 -20
  95. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/sdk_event_emitter/event_types.rs +25 -2
  96. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/spec_store.rs +68 -68
  97. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +2 -4
  98. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +18 -11
  99. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +4 -3
  100. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +3 -18
  101. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +28 -29
  102. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +7 -9
  103. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_response/cmab_types.rs +4 -4
  104. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_response/mod.rs +0 -2
  105. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_response/param_store_types.rs +3 -1
  106. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_response/spec_directory.rs +8 -6
  107. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_response/spec_types.rs +28 -26
  108. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/statsig.rs +820 -741
  109. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/statsig_global.rs +11 -2
  110. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/statsig_metadata.rs +1 -1
  111. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/statsig_options.rs +8 -8
  112. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/statsig_runtime.rs +29 -4
  113. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/statsig_type_factories.rs +39 -13
  114. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/statsig_types.rs +36 -0
  115. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/user/statsig_user.rs +2 -2
  116. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/user/statsig_user_builder.rs +14 -0
  117. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/user/statsig_user_internal.rs +22 -22
  118. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/user/user_data.rs +1 -0
  119. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/customized_specs_adapter_tests.rs +18 -9
  120. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/big_number_dcs.json +2 -1
  121. statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/data/dcs_missing_gates.json +142 -0
  122. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/dcs_with_sdk_configs.json +3 -0
  123. statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/data/ua_string_cases.json +122 -0
  124. statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/direct_gcir_tests.rs +145 -0
  125. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/dynamic_value_tests.rs +30 -1
  126. statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/evaluation_details_tests.rs +30 -0
  127. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/event_logger_flush_tests.rs +6 -4
  128. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -1
  129. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/event_logger_usage_tests.rs +0 -1
  130. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/flushing_tests.rs +0 -1
  131. statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/gate_inversion_eval_tests.rs +118 -0
  132. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/gcir_tests.rs +2 -7
  133. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/global_configs_test.rs +62 -16
  134. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/grpc_specs_adapter_tests.rs +3 -3
  135. statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +20 -0
  136. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/initialize_timeout_test.rs +32 -6
  137. statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/network_client_streaming_tests.rs +106 -0
  138. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/perf_tests.rs +30 -0
  139. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/spec_types_tests.rs +19 -0
  140. statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/statsig_environment_tests.rs +203 -0
  141. statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/statsig_event_emitter_usage_test.rs +156 -0
  142. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_tests.rs +38 -23
  143. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_user_loggable_tests.rs +4 -0
  144. statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/ua_parser_util_test.rs +64 -0
  145. statsig_python_core-0.8.3/statsig-rust/tests/user_agent_tests_experimental.rs → statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/user_agent_tests_first_party.rs +9 -8
  146. statsig_python_core-0.8.3/statsig-rust/tests/user_agent_tests.rs → statsig_python_core-0.12.1rc2511121816/statsig-rust/tests/user_agent_tests_third_party.rs +9 -8
  147. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/utils/mock_specs_adapter.rs +2 -1
  148. statsig_python_core-0.8.3/statsig-rust/src/compression/mod.rs +0 -2
  149. statsig_python_core-0.8.3/statsig-rust/src/compression/zstd_decompression_dict.rs +0 -88
  150. statsig_python_core-0.8.3/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -234
  151. statsig_python_core-0.8.3/statsig-rust/src/evaluation/evaluation_details.rs +0 -82
  152. statsig_python_core-0.8.3/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -6
  153. statsig_python_core-0.8.3/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -61
  154. statsig_python_core-0.8.3/statsig-rust/src/event_logging/exposable_string.rs +0 -114
  155. statsig_python_core-0.8.3/statsig-rust/src/gcir/dynamic_configs_processor.rs +0 -185
  156. statsig_python_core-0.8.3/statsig-rust/src/gcir/feature_gates_processor.rs +0 -61
  157. statsig_python_core-0.8.3/statsig-rust/src/specs_response/condition_key.rs +0 -52
  158. statsig_python_core-0.8.3/statsig-rust/src/specs_response/spec_types_encoded.rs +0 -100
  159. statsig_python_core-0.8.3/statsig-rust/tests/dict_tests.rs +0 -78
  160. statsig_python_core-0.8.3/statsig-rust/tests/exposable_string_tests.rs +0 -108
  161. statsig_python_core-0.8.3/statsig-rust/tests/spec_types_encoded_tests.rs +0 -104
  162. statsig_python_core-0.8.3/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -107
  163. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/py_src/statsig_python_core/__init__.py +0 -0
  164. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/py_src/statsig_python_core/data_store.py +0 -0
  165. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/py_src/statsig_python_core/error_boundary.py +0 -0
  166. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/py_src/statsig_python_core/observability_client.py +0 -0
  167. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/py_src/statsig_python_core/output_logger_provider.py +0 -0
  168. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/py_src/statsig_python_core/persistent_storage.py +0 -0
  169. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/py_src/statsig_python_core/py.typed +0 -0
  170. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/py_src/statsig_python_core/requirements.txt +0 -0
  171. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/py_src/statsig_python_core/statsig.py +0 -0
  172. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/pyproject.toml +0 -0
  173. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/Cargo.toml +0 -0
  174. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/README.md +0 -0
  175. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/api-interface-definitions/README.md +0 -0
  176. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/api-interface-definitions/protos/data_adapter.proto +0 -0
  177. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/api-interface-definitions/protos/grpc_health.proto +0 -0
  178. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/api-interface-definitions/protos/statsig_forward_proxy.proto +0 -0
  179. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/build.rs +0 -0
  180. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/src/lib.rs +0 -0
  181. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
  182. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
  183. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
  184. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/.github/workflows/CI.yml +0 -0
  185. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/.gitignore +0 -0
  186. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/Cargo.toml +0 -0
  187. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/README.md +0 -0
  188. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/py_src/statsig_python_core/__init__.py +0 -0
  189. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/py_src/statsig_python_core/data_store.py +0 -0
  190. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/py_src/statsig_python_core/error_boundary.py +0 -0
  191. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/py_src/statsig_python_core/observability_client.py +0 -0
  192. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/py_src/statsig_python_core/output_logger_provider.py +0 -0
  193. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/py_src/statsig_python_core/persistent_storage.py +0 -0
  194. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/py_src/statsig_python_core/py.typed +0 -0
  195. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/py_src/statsig_python_core/requirements.txt +0 -0
  196. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/py_src/statsig_python_core/statsig.py +0 -0
  197. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
  198. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/data_store_base_py.rs +0 -0
  199. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/lib.rs +0 -0
  200. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
  201. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
  202. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/pyo_utils.rs +0 -0
  203. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/safe_gil.rs +0 -0
  204. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
  205. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/statsig_user_py.rs +0 -0
  206. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/unit_id_py.rs +0 -0
  207. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
  208. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/mock_scrapi.py +0 -0
  209. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
  210. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_error_boundary.py +0 -0
  211. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
  212. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
  213. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_observability_client.py +0 -0
  214. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
  215. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_override_adapter.py +0 -0
  216. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
  217. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_statsig.py +0 -0
  218. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_statsig_options.py +0 -0
  219. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_statsig_user.py +0 -0
  220. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
  221. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-pyo3/tests/utils.py +0 -0
  222. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/resources/ip_supalite.table +0 -0
  223. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
  224. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
  225. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/compression/compression_helper.rs +0 -0
  226. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/dcs_str.rs +0 -0
  227. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
  228. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
  229. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
  230. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
  231. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
  232. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
  233. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
  234. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
  235. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
  236. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
  237. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_logger.rs +0 -0
  238. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
  239. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
  240. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
  241. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
  242. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
  243. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
  244. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
  245. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
  246. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
  247. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
  248. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
  249. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/flush_type.rs +0 -0
  250. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
  251. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
  252. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
  253. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
  254. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
  255. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/hashing/djb2.rs +0 -0
  256. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
  257. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
  258. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/instance_registry.rs +0 -0
  259. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/macros.rs +0 -0
  260. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
  261. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/networking/proxy_config.rs +0 -0
  262. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
  263. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/observability/mod.rs +0 -0
  264. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
  265. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/observability/ops_stats.rs +0 -0
  266. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
  267. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/output_logger.rs +0 -0
  268. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/override_adapter/mod.rs +0 -0
  269. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
  270. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
  271. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
  272. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
  273. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
  274. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
  275. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
  276. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
  277. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_adapter/mod.rs +0 -0
  278. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
  279. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/statsig_core_api_options.rs +0 -0
  280. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/statsig_err.rs +0 -0
  281. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/user/into_optional.rs +0 -0
  282. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/user/mod.rs +0 -0
  283. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
  284. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/user/unit_id.rs +0 -0
  285. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/src/utils/mod.rs +0 -0
  286. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/check_gate_tests.rs +0 -0
  287. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
  288. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/company_id_list +0 -0
  289. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
  290. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
  291. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
  292. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/get_id_lists.json +0 -0
  293. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
  294. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
  295. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
  296. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
  297. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
  298. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
  299. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data/test_user_agents.txt +0 -0
  300. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
  301. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
  302. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
  303. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
  304. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
  305. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
  306. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/exposure_tests.rs +0 -0
  307. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
  308. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/instance_registry_tests.rs +0 -0
  309. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
  310. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/list_methods_tests.rs +0 -0
  311. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/network_client_tests.rs +0 -0
  312. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/network_failure_tests.rs +0 -0
  313. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
  314. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/output_logger_tests.rs +0 -0
  315. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/override_adapter_tests.rs +0 -0
  316. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
  317. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_global_tests.rs +0 -0
  318. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
  319. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
  320. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_options_tests.rs +0 -0
  321. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
  322. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
  323. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
  324. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
  325. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/statsig_user_tests.rs +0 -0
  326. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
  327. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/typed_getters_tests.rs +0 -0
  328. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/user_json_tests.rs +0 -0
  329. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/utils/helpers.rs +0 -0
  330. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
  331. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
  332. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
  333. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
  334. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
  335. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
  336. {statsig_python_core-0.8.3 → statsig_python_core-0.12.1rc2511121816}/statsig-rust/tests/utils/mod.rs +0 -0
@@ -2117,6 +2117,7 @@ dependencies = [
2117
2117
  "libloading",
2118
2118
  "regex-lite",
2119
2119
  "rustler_codegen",
2120
+ "serde",
2120
2121
  ]
2121
2122
 
2122
2123
  [[package]]
@@ -2246,9 +2247,9 @@ dependencies = [
2246
2247
 
2247
2248
  [[package]]
2248
2249
  name = "serde_json"
2249
- version = "1.0.138"
2250
+ version = "1.0.143"
2250
2251
  source = "registry+https://github.com/rust-lang/crates.io-index"
2251
- checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949"
2252
+ checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
2252
2253
  dependencies = [
2253
2254
  "itoa",
2254
2255
  "memchr",
@@ -2373,7 +2374,7 @@ dependencies = [
2373
2374
 
2374
2375
  [[package]]
2375
2376
  name = "sigstat-grpc"
2376
- version = "0.8.3"
2377
+ version = "0.12.1-rc.2511121816"
2377
2378
  dependencies = [
2378
2379
  "async-trait",
2379
2380
  "chrono",
@@ -2437,20 +2438,21 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
2437
2438
 
2438
2439
  [[package]]
2439
2440
  name = "statsig-node"
2440
- version = "0.8.3"
2441
+ version = "0.12.1-rc.2511121816"
2441
2442
  dependencies = [
2442
2443
  "async-trait",
2443
2444
  "napi",
2444
2445
  "napi-build",
2445
2446
  "napi-derive",
2446
2447
  "parking_lot",
2448
+ "serde",
2447
2449
  "serde_json",
2448
2450
  "statsig-rust",
2449
2451
  ]
2450
2452
 
2451
2453
  [[package]]
2452
2454
  name = "statsig-pyo3"
2453
- version = "0.8.3"
2455
+ version = "0.12.1-rc.2511121816"
2454
2456
  dependencies = [
2455
2457
  "async-trait",
2456
2458
  "lazy_static",
@@ -2464,7 +2466,7 @@ dependencies = [
2464
2466
 
2465
2467
  [[package]]
2466
2468
  name = "statsig-rust"
2467
- version = "0.8.3"
2469
+ version = "0.12.1-rc.2511121816"
2468
2470
  dependencies = [
2469
2471
  "ahash",
2470
2472
  "arc-swap",
@@ -2495,6 +2497,7 @@ dependencies = [
2495
2497
  "sha2",
2496
2498
  "sigstat-grpc",
2497
2499
  "simple_logger",
2500
+ "tempfile",
2498
2501
  "tokio",
2499
2502
  "uaparser",
2500
2503
  "uuid",
@@ -2504,7 +2507,7 @@ dependencies = [
2504
2507
 
2505
2508
  [[package]]
2506
2509
  name = "statsig_elixir"
2507
- version = "0.8.3"
2510
+ version = "0.12.1-rc.2511121816"
2508
2511
  dependencies = [
2509
2512
  "parking_lot",
2510
2513
  "rustler",
@@ -2516,7 +2519,7 @@ dependencies = [
2516
2519
 
2517
2520
  [[package]]
2518
2521
  name = "statsig_ffi"
2519
- version = "0.8.3"
2522
+ version = "0.12.1-rc.2511121816"
2520
2523
  dependencies = [
2521
2524
  "async-trait",
2522
2525
  "cbindgen",
@@ -18,7 +18,7 @@ exclude = [
18
18
  [workspace.package]
19
19
  edition = "2021"
20
20
  license = "ISC"
21
- version = "0.8.3"
21
+ version = "0.12.1-rc.2511121816"
22
22
  homepage = "https://statsig.com/"
23
23
  authors = ["Statsig", "Daniel Loomb <daniel@statsig.com>"]
24
24
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: statsig_python_core
3
- Version: 0.8.3
3
+ Version: 0.12.1rc2511121816
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -41,6 +41,7 @@ class EvaluationDetails:
41
41
  reason: builtins.str
42
42
  lcut: typing.Optional[builtins.int]
43
43
  received_at: typing.Optional[builtins.int]
44
+ version: typing.Optional[builtins.int]
44
45
 
45
46
  class Experiment:
46
47
  name: builtins.str
@@ -90,6 +91,7 @@ class FeatureGateEvaluationOptions:
90
91
 
91
92
  class InitializeDetails:
92
93
  duration: builtins.float
94
+ duration_ms: builtins.int
93
95
  init_success: builtins.bool
94
96
  is_config_spec_ready: builtins.bool
95
97
  is_id_list_ready: typing.Optional[builtins.bool]
@@ -223,9 +225,6 @@ class StatsigBasePy:
223
225
  def get_layer(self, user:StatsigUser, name:builtins.str, options:typing.Optional[LayerEvaluationOptions]=None) -> Layer:
224
226
  ...
225
227
 
226
- def get_prompt(self, user:StatsigUser, name:builtins.str, options:typing.Optional[LayerEvaluationOptions]=None) -> Layer:
227
- ...
228
-
229
228
  def manually_log_layer_parameter_exposure(self, user:StatsigUser, name:builtins.str, param_name:builtins.str) -> None:
230
229
  ...
231
230
 
@@ -294,7 +293,6 @@ class StatsigOptions:
294
293
  enable_id_lists: typing.Optional[builtins.bool]
295
294
  wait_for_user_agent_init: typing.Optional[builtins.bool]
296
295
  wait_for_country_lookup_init: typing.Optional[builtins.bool]
297
- disable_user_agent_parsing: typing.Optional[builtins.bool]
298
296
  disable_country_lookup: typing.Optional[builtins.bool]
299
297
  id_lists_url: typing.Optional[builtins.str]
300
298
  id_lists_sync_interval_ms: typing.Optional[builtins.int]
@@ -309,7 +307,9 @@ class StatsigOptions:
309
307
  config_compression_mode: typing.Optional[builtins.str]
310
308
  proxy_config: typing.Optional[ProxyConfig]
311
309
  spec_adapter_configs: typing.Optional[list]
312
- def __new__(cls,specs_url:typing.Optional[builtins.str]=None, specs_sync_interval_ms:typing.Optional[builtins.int]=None, init_timeout_ms:typing.Optional[builtins.int]=None, log_event_url:typing.Optional[builtins.str]=None, disable_all_logging:typing.Optional[builtins.bool]=None, disable_network:typing.Optional[builtins.bool]=None, event_logging_flush_interval_ms:typing.Optional[builtins.int]=None, event_logging_max_queue_size:typing.Optional[builtins.int]=None, event_logging_max_pending_batch_queue_size:typing.Optional[builtins.int]=None, enable_id_lists:typing.Optional[builtins.bool]=None, wait_for_user_agent_init:typing.Optional[builtins.bool]=None, wait_for_country_lookup_init:typing.Optional[builtins.bool]=None, disable_user_agent_parsing:typing.Optional[builtins.bool]=None, disable_country_lookup:typing.Optional[builtins.bool]=None, id_lists_url:typing.Optional[builtins.str]=None, id_lists_sync_interval_ms:typing.Optional[builtins.int]=None, fallback_to_statsig_api:typing.Optional[builtins.bool]=None, environment:typing.Optional[builtins.str]=None, output_log_level:typing.Optional[builtins.str]=None, global_custom_fields:typing.Optional[typing.Mapping[builtins.str, typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool, typing.List[typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool]]]]]=None, observability_client:typing.Optional[ObservabilityClientBase]=None, data_store:typing.Optional[DataStoreBase]=None, persistent_storage:typing.Optional[PersistentStorageBaseClass]=None, config_compression_mode:typing.Optional[builtins.str]=None, proxy_config:typing.Optional[ProxyConfig]=None, output_logger_provider:typing.Optional[OutputLoggerProviderBase]=None, spec_adapter_configs:typing.Optional[list]=None): ...
310
+ use_third_party_ua_parser: typing.Optional[builtins.bool]
311
+ disable_disk_access: typing.Optional[builtins.bool]
312
+ def __new__(cls,specs_url:typing.Optional[builtins.str]=None, specs_sync_interval_ms:typing.Optional[builtins.int]=None, init_timeout_ms:typing.Optional[builtins.int]=None, log_event_url:typing.Optional[builtins.str]=None, disable_all_logging:typing.Optional[builtins.bool]=None, disable_network:typing.Optional[builtins.bool]=None, event_logging_flush_interval_ms:typing.Optional[builtins.int]=None, event_logging_max_queue_size:typing.Optional[builtins.int]=None, event_logging_max_pending_batch_queue_size:typing.Optional[builtins.int]=None, enable_id_lists:typing.Optional[builtins.bool]=None, wait_for_user_agent_init:typing.Optional[builtins.bool]=None, wait_for_country_lookup_init:typing.Optional[builtins.bool]=None, disable_country_lookup:typing.Optional[builtins.bool]=None, id_lists_url:typing.Optional[builtins.str]=None, id_lists_sync_interval_ms:typing.Optional[builtins.int]=None, fallback_to_statsig_api:typing.Optional[builtins.bool]=None, environment:typing.Optional[builtins.str]=None, output_log_level:typing.Optional[builtins.str]=None, global_custom_fields:typing.Optional[typing.Mapping[builtins.str, typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool, typing.List[typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool]]]]]=None, observability_client:typing.Optional[ObservabilityClientBase]=None, data_store:typing.Optional[DataStoreBase]=None, persistent_storage:typing.Optional[PersistentStorageBaseClass]=None, config_compression_mode:typing.Optional[builtins.str]=None, proxy_config:typing.Optional[ProxyConfig]=None, output_logger_provider:typing.Optional[OutputLoggerProviderBase]=None, spec_adapter_configs:typing.Optional[list]=None, use_third_party_ua_parser:typing.Optional[builtins.bool]=None, disable_disk_access:typing.Optional[builtins.bool]=None): ...
313
313
 
314
314
  class StatsigUser:
315
315
  user_id: builtins.str
@@ -54,12 +54,8 @@ impl StatsigGrpcClient {
54
54
  };
55
55
  }
56
56
 
57
- pub async fn get_specs(
58
- &self,
59
- lcut: Option<u64>,
60
- zstd_dict_id: Option<String>,
61
- ) -> Result<ConfigSpecResponse, StatsigGrpcErr> {
62
- let request = create_config_spec_request(&self.sdk_key, lcut, zstd_dict_id);
57
+ pub async fn get_specs(&self, lcut: Option<u64>) -> Result<ConfigSpecResponse, StatsigGrpcErr> {
58
+ let request = create_config_spec_request(&self.sdk_key, lcut);
63
59
  let mut client = self.get_or_setup_grpc_client().await?;
64
60
 
65
61
  client
@@ -72,9 +68,8 @@ impl StatsigGrpcClient {
72
68
  pub async fn get_specs_stream(
73
69
  &self,
74
70
  lcut: Option<u64>,
75
- zstd_dict_id: Option<String>,
76
71
  ) -> Result<Streaming<ConfigSpecResponse>, StatsigGrpcErr> {
77
- let request = create_config_spec_request(&self.sdk_key, lcut, zstd_dict_id);
72
+ let request = create_config_spec_request(&self.sdk_key, lcut);
78
73
  let mut client = self.get_or_setup_grpc_client().await?;
79
74
 
80
75
  client
@@ -194,15 +189,11 @@ impl StatsigGrpcClient {
194
189
  }
195
190
  }
196
191
 
197
- fn create_config_spec_request(
198
- sdk_key: &str,
199
- current_lcut: Option<u64>,
200
- current_zstd_dict_id: Option<String>,
201
- ) -> ConfigSpecRequest {
192
+ fn create_config_spec_request(sdk_key: &str, current_lcut: Option<u64>) -> ConfigSpecRequest {
202
193
  ConfigSpecRequest {
203
194
  since_time: current_lcut,
204
195
  sdk_key: sdk_key.to_string(),
205
196
  version: Some(ApiVersion::V2 as i32),
206
- zstd_dict_id: current_zstd_dict_id,
197
+ zstd_dict_id: None,
207
198
  }
208
199
  }
@@ -41,6 +41,7 @@ class EvaluationDetails:
41
41
  reason: builtins.str
42
42
  lcut: typing.Optional[builtins.int]
43
43
  received_at: typing.Optional[builtins.int]
44
+ version: typing.Optional[builtins.int]
44
45
 
45
46
  class Experiment:
46
47
  name: builtins.str
@@ -90,6 +91,7 @@ class FeatureGateEvaluationOptions:
90
91
 
91
92
  class InitializeDetails:
92
93
  duration: builtins.float
94
+ duration_ms: builtins.int
93
95
  init_success: builtins.bool
94
96
  is_config_spec_ready: builtins.bool
95
97
  is_id_list_ready: typing.Optional[builtins.bool]
@@ -223,9 +225,6 @@ class StatsigBasePy:
223
225
  def get_layer(self, user:StatsigUser, name:builtins.str, options:typing.Optional[LayerEvaluationOptions]=None) -> Layer:
224
226
  ...
225
227
 
226
- def get_prompt(self, user:StatsigUser, name:builtins.str, options:typing.Optional[LayerEvaluationOptions]=None) -> Layer:
227
- ...
228
-
229
228
  def manually_log_layer_parameter_exposure(self, user:StatsigUser, name:builtins.str, param_name:builtins.str) -> None:
230
229
  ...
231
230
 
@@ -294,7 +293,6 @@ class StatsigOptions:
294
293
  enable_id_lists: typing.Optional[builtins.bool]
295
294
  wait_for_user_agent_init: typing.Optional[builtins.bool]
296
295
  wait_for_country_lookup_init: typing.Optional[builtins.bool]
297
- disable_user_agent_parsing: typing.Optional[builtins.bool]
298
296
  disable_country_lookup: typing.Optional[builtins.bool]
299
297
  id_lists_url: typing.Optional[builtins.str]
300
298
  id_lists_sync_interval_ms: typing.Optional[builtins.int]
@@ -309,7 +307,9 @@ class StatsigOptions:
309
307
  config_compression_mode: typing.Optional[builtins.str]
310
308
  proxy_config: typing.Optional[ProxyConfig]
311
309
  spec_adapter_configs: typing.Optional[list]
312
- def __new__(cls,specs_url:typing.Optional[builtins.str]=None, specs_sync_interval_ms:typing.Optional[builtins.int]=None, init_timeout_ms:typing.Optional[builtins.int]=None, log_event_url:typing.Optional[builtins.str]=None, disable_all_logging:typing.Optional[builtins.bool]=None, disable_network:typing.Optional[builtins.bool]=None, event_logging_flush_interval_ms:typing.Optional[builtins.int]=None, event_logging_max_queue_size:typing.Optional[builtins.int]=None, event_logging_max_pending_batch_queue_size:typing.Optional[builtins.int]=None, enable_id_lists:typing.Optional[builtins.bool]=None, wait_for_user_agent_init:typing.Optional[builtins.bool]=None, wait_for_country_lookup_init:typing.Optional[builtins.bool]=None, disable_user_agent_parsing:typing.Optional[builtins.bool]=None, disable_country_lookup:typing.Optional[builtins.bool]=None, id_lists_url:typing.Optional[builtins.str]=None, id_lists_sync_interval_ms:typing.Optional[builtins.int]=None, fallback_to_statsig_api:typing.Optional[builtins.bool]=None, environment:typing.Optional[builtins.str]=None, output_log_level:typing.Optional[builtins.str]=None, global_custom_fields:typing.Optional[typing.Mapping[builtins.str, typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool, typing.List[typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool]]]]]=None, observability_client:typing.Optional[ObservabilityClientBase]=None, data_store:typing.Optional[DataStoreBase]=None, persistent_storage:typing.Optional[PersistentStorageBaseClass]=None, config_compression_mode:typing.Optional[builtins.str]=None, proxy_config:typing.Optional[ProxyConfig]=None, output_logger_provider:typing.Optional[OutputLoggerProviderBase]=None, spec_adapter_configs:typing.Optional[list]=None): ...
310
+ use_third_party_ua_parser: typing.Optional[builtins.bool]
311
+ disable_disk_access: typing.Optional[builtins.bool]
312
+ def __new__(cls,specs_url:typing.Optional[builtins.str]=None, specs_sync_interval_ms:typing.Optional[builtins.int]=None, init_timeout_ms:typing.Optional[builtins.int]=None, log_event_url:typing.Optional[builtins.str]=None, disable_all_logging:typing.Optional[builtins.bool]=None, disable_network:typing.Optional[builtins.bool]=None, event_logging_flush_interval_ms:typing.Optional[builtins.int]=None, event_logging_max_queue_size:typing.Optional[builtins.int]=None, event_logging_max_pending_batch_queue_size:typing.Optional[builtins.int]=None, enable_id_lists:typing.Optional[builtins.bool]=None, wait_for_user_agent_init:typing.Optional[builtins.bool]=None, wait_for_country_lookup_init:typing.Optional[builtins.bool]=None, disable_country_lookup:typing.Optional[builtins.bool]=None, id_lists_url:typing.Optional[builtins.str]=None, id_lists_sync_interval_ms:typing.Optional[builtins.int]=None, fallback_to_statsig_api:typing.Optional[builtins.bool]=None, environment:typing.Optional[builtins.str]=None, output_log_level:typing.Optional[builtins.str]=None, global_custom_fields:typing.Optional[typing.Mapping[builtins.str, typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool, typing.List[typing.Union[builtins.str, builtins.int, builtins.float, builtins.bool]]]]]=None, observability_client:typing.Optional[ObservabilityClientBase]=None, data_store:typing.Optional[DataStoreBase]=None, persistent_storage:typing.Optional[PersistentStorageBaseClass]=None, config_compression_mode:typing.Optional[builtins.str]=None, proxy_config:typing.Optional[ProxyConfig]=None, output_logger_provider:typing.Optional[OutputLoggerProviderBase]=None, spec_adapter_configs:typing.Optional[list]=None, use_third_party_ua_parser:typing.Optional[builtins.bool]=None, disable_disk_access:typing.Optional[builtins.bool]=None): ...
313
313
 
314
314
  class StatsigUser:
315
315
  user_id: builtins.str
@@ -373,37 +373,6 @@ impl StatsigBasePy {
373
373
  }
374
374
  }
375
375
 
376
- #[pyo3(signature = (user, name, options=None))]
377
- pub fn get_prompt(
378
- &self,
379
- user: &StatsigUserPy,
380
- name: &str,
381
- options: Option<LayerEvaluationOptionsPy>,
382
- py: Python,
383
- ) -> LayerPy {
384
- let mut options_actual = options
385
- .as_ref()
386
- .map_or(LayerEvaluationOptions::default(), |o| o.into());
387
-
388
- options_actual.user_persisted_values = options
389
- .and_then(|o| o.user_persisted_values)
390
- .and_then(|v| extract_user_persisted_values(py, name, v));
391
-
392
- let layer = self
393
- .inner
394
- .get_prompt_with_options(&user.inner, name, options_actual);
395
-
396
- LayerPy {
397
- name: layer.name.clone(),
398
- rule_id: layer.rule_id.clone(),
399
- group_name: layer.group_name.clone(),
400
- allocated_experiment_name: layer.allocated_experiment_name.clone(),
401
- value: map_to_py_dict(py, &layer.__value),
402
- details: layer.details.clone().into(),
403
- inner: layer,
404
- }
405
- }
406
-
407
376
  #[pyo3(signature = (user, name, param_name))]
408
377
  pub fn manually_log_layer_parameter_exposure(
409
378
  &self,
@@ -129,8 +129,6 @@ pub struct StatsigOptionsPy {
129
129
  #[pyo3(get, set)]
130
130
  pub wait_for_country_lookup_init: Option<bool>,
131
131
  #[pyo3(get, set)]
132
- pub disable_user_agent_parsing: Option<bool>,
133
- #[pyo3(get, set)]
134
132
  pub disable_country_lookup: Option<bool>,
135
133
  #[pyo3(get, set)]
136
134
  pub id_lists_url: Option<String>,
@@ -158,6 +156,10 @@ pub struct StatsigOptionsPy {
158
156
  pub proxy_config: Option<Py<ProxyConfigPy>>,
159
157
  #[pyo3(get, set)]
160
158
  pub spec_adapter_configs: Option<Py<PyList>>,
159
+ #[pyo3(get, set)]
160
+ pub use_third_party_ua_parser: Option<bool>,
161
+ #[pyo3(get, set)]
162
+ pub disable_disk_access: Option<bool>,
161
163
  }
162
164
 
163
165
  #[gen_stub_pymethods]
@@ -177,7 +179,6 @@ impl StatsigOptionsPy {
177
179
  enable_id_lists=None,
178
180
  wait_for_user_agent_init=None,
179
181
  wait_for_country_lookup_init=None,
180
- disable_user_agent_parsing=None,
181
182
  disable_country_lookup=None,
182
183
  id_lists_url=None,
183
184
  id_lists_sync_interval_ms=None,
@@ -192,6 +193,8 @@ impl StatsigOptionsPy {
192
193
  proxy_config=None,
193
194
  output_logger_provider=None,
194
195
  spec_adapter_configs=None,
196
+ use_third_party_ua_parser=None,
197
+ disable_disk_access=None,
195
198
  ))]
196
199
  #[allow(clippy::too_many_arguments)]
197
200
  pub fn new(
@@ -207,7 +210,6 @@ impl StatsigOptionsPy {
207
210
  enable_id_lists: Option<bool>,
208
211
  wait_for_user_agent_init: Option<bool>,
209
212
  wait_for_country_lookup_init: Option<bool>,
210
- disable_user_agent_parsing: Option<bool>,
211
213
  disable_country_lookup: Option<bool>,
212
214
  id_lists_url: Option<String>,
213
215
  id_lists_sync_interval_ms: Option<u32>,
@@ -222,6 +224,8 @@ impl StatsigOptionsPy {
222
224
  proxy_config: Option<Py<ProxyConfigPy>>,
223
225
  output_logger_provider: Option<Py<OutputLoggerProviderBasePy>>,
224
226
  spec_adapter_configs: Option<Py<PyList>>,
227
+ use_third_party_ua_parser: Option<bool>,
228
+ disable_disk_access: Option<bool>,
225
229
  ) -> Self {
226
230
  Self {
227
231
  specs_url,
@@ -236,7 +240,6 @@ impl StatsigOptionsPy {
236
240
  wait_for_user_agent_init,
237
241
  wait_for_country_lookup_init,
238
242
  disable_country_lookup,
239
- disable_user_agent_parsing,
240
243
  id_lists_url,
241
244
  id_lists_sync_interval_ms,
242
245
  fallback_to_statsig_api,
@@ -251,6 +254,8 @@ impl StatsigOptionsPy {
251
254
  proxy_config,
252
255
  output_logger_provider,
253
256
  spec_adapter_configs,
257
+ use_third_party_ua_parser,
258
+ disable_disk_access,
254
259
  }
255
260
  }
256
261
  }
@@ -329,7 +334,6 @@ fn create_inner_statsig_options(
329
334
  global_custom_fields,
330
335
  disable_network: opts.disable_network,
331
336
  disable_country_lookup: opts.disable_country_lookup,
332
- disable_user_agent_parsing: opts.disable_user_agent_parsing,
333
337
  persistent_storage: opts.persistent_storage.as_ref().map(|s| {
334
338
  Arc::new(StatsigPersistentStorageOverrideAdapter::new(
335
339
  s.extract(py).unwrap_or_default(),
@@ -366,7 +370,8 @@ fn create_inner_statsig_options(
366
370
  .unwrap_or_default(),
367
371
  ) as Arc<dyn OutputLogProvider>
368
372
  }),
369
- __experimental_ua_parsing_enabled: None,
373
+ use_third_party_ua_parser: opts.use_third_party_ua_parser,
374
+ disable_disk_access: opts.disable_disk_access,
370
375
  }
371
376
  }
372
377
 
@@ -4,9 +4,8 @@ use pyo3::{
4
4
  };
5
5
  use pyo3_stub_gen::derive::*;
6
6
  use statsig_rust::{
7
- event_logging::exposable_string::ExposableString, log_d, log_e, log_w, PersistentStorage,
8
- SecondaryExposure, StickyValues as StickyValuesActual,
9
- UserPersistedValues as UserPersistedValuesActual,
7
+ interned_string::InternedString, log_d, log_e, log_w, PersistentStorage, SecondaryExposure,
8
+ StickyValues as StickyValuesActual, UserPersistedValues as UserPersistedValuesActual,
10
9
  };
11
10
  use std::collections::HashMap;
12
11
 
@@ -64,7 +63,7 @@ pub fn convert_dict_to_user_persisted_values(
64
63
 
65
64
  let sticky_value = StickyValuesActual {
66
65
  value,
67
- rule_id: rule_id.map(|r| ExposableString::from_str_ref(r.as_str())),
66
+ rule_id: rule_id.map(InternedString::from_string),
68
67
  group_name,
69
68
  config_delegate,
70
69
  time,
@@ -137,7 +136,7 @@ fn convert_secondary_exposures_to_py_dict(
137
136
  .iter()
138
137
  .map(|exposure: &SecondaryExposure| {
139
138
  let secondary_exposure_dict = PyDict::new(py);
140
- secondary_exposure_dict.set_item("gate", exposure.gate.clone())?;
139
+ secondary_exposure_dict.set_item("gate", exposure.gate.unperformant_to_string())?;
141
140
  secondary_exposure_dict
142
141
  .set_item("gateValue", exposure.gate_value.clone().to_string())?;
143
142
  secondary_exposure_dict
@@ -168,9 +167,9 @@ fn convert_py_dict_to_secondary_exposure(py_dict: &Bound<PyDict>) -> PyResult<Se
168
167
  let gate_value = get_string_from_py_dict_throw_on_none(py_dict, "gateValue")?;
169
168
  let rule_id = get_string_from_py_dict_throw_on_none(py_dict, "ruleID")?;
170
169
  Ok(SecondaryExposure {
171
- gate,
172
- gate_value,
173
- rule_id: ExposableString::from_str_ref(rule_id.as_str()),
170
+ gate: InternedString::from_string(gate),
171
+ gate_value: InternedString::from_string(gate_value),
172
+ rule_id: InternedString::from_string(rule_id),
174
173
  })
175
174
  }
176
175
 
@@ -19,11 +19,15 @@ use crate::pyo_utils::{
19
19
  };
20
20
 
21
21
  const TAG: &str = stringify!(StatsigTypesPy);
22
+
22
23
  #[gen_stub_pyclass]
23
24
  #[pyclass(name = "InitializeDetails", module = "statsig_python_core")]
24
25
  pub struct InitializeDetailsPy {
25
26
  #[pyo3(get)]
26
- pub duration: f64,
27
+ pub duration: f64, // deprecated, this should be removed in the next major version. Use duration_ms instead.
28
+
29
+ #[pyo3(get)]
30
+ pub duration_ms: u64,
27
31
 
28
32
  #[pyo3(get)]
29
33
  pub init_success: bool,
@@ -44,12 +48,15 @@ pub struct InitializeDetailsPy {
44
48
  impl From<InitializeDetails> for InitializeDetailsPy {
45
49
  fn from(value: InitializeDetails) -> Self {
46
50
  InitializeDetailsPy {
47
- duration: value.duration,
51
+ duration_ms: value.duration_ms,
48
52
  init_success: value.init_success,
49
53
  is_config_spec_ready: value.is_config_spec_ready,
50
54
  is_id_list_ready: value.is_id_list_ready,
51
55
  source: value.source.to_string(),
52
56
  failure_details: value.failure_details.map(FailureDetailsPy::from),
57
+
58
+ #[allow(deprecated)]
59
+ duration: value.duration_ms as f64,
53
60
  }
54
61
  }
55
62
  }
@@ -57,7 +64,7 @@ impl From<InitializeDetails> for InitializeDetailsPy {
57
64
  impl InitializeDetailsPy {
58
65
  pub fn from_error(reason: &str, error: Option<String>) -> Self {
59
66
  InitializeDetailsPy {
60
- duration: 0.0,
67
+ duration_ms: 0,
61
68
  init_success: false,
62
69
  is_config_spec_ready: false,
63
70
  is_id_list_ready: None,
@@ -66,6 +73,9 @@ impl InitializeDetailsPy {
66
73
  reason: reason.to_string(),
67
74
  error,
68
75
  }),
76
+
77
+ #[allow(deprecated)]
78
+ duration: 0.0,
69
79
  }
70
80
  }
71
81
  }
@@ -101,6 +111,9 @@ pub struct EvaluationDetailsPy {
101
111
 
102
112
  #[pyo3(get)]
103
113
  pub received_at: Option<u64>,
114
+
115
+ #[pyo3(get)]
116
+ pub version: Option<u32>,
104
117
  }
105
118
 
106
119
  impl From<EvaluationDetails> for EvaluationDetailsPy {
@@ -109,6 +122,7 @@ impl From<EvaluationDetails> for EvaluationDetailsPy {
109
122
  reason: value.reason,
110
123
  lcut: value.lcut,
111
124
  received_at: value.received_at,
125
+ version: value.version,
112
126
  }
113
127
  }
114
128
  }
@@ -12,7 +12,6 @@ def create_statsig(specs_url, log_event_url, id_lists_url):
12
12
  options.output_log_level = "debug"
13
13
 
14
14
  options.disable_country_lookup = True
15
- options.disable_user_agent_parsing = True
16
15
 
17
16
  options.specs_url = specs_url
18
17
  options.specs_sync_interval_ms = 1
@@ -3,7 +3,13 @@ from time import sleep
3
3
  from typing import Optional
4
4
  import pytest
5
5
 
6
- from statsig_python_core import DataStore, StatsigOptions, StatsigUser, Statsig, DataStoreResponse
6
+ from statsig_python_core import (
7
+ DataStore,
8
+ StatsigOptions,
9
+ StatsigUser,
10
+ Statsig,
11
+ DataStoreResponse,
12
+ )
7
13
  from pytest_httpserver import HTTPServer
8
14
  from utils import get_test_data_resource
9
15
 
@@ -11,8 +17,9 @@ dcs_content = get_test_data_resource("eval_proj_dcs.json")
11
17
  json_data = json.loads(dcs_content)
12
18
 
13
19
  updated_dcs_json_data = json_data.copy()
14
- if 'time' in updated_dcs_json_data:
15
- updated_dcs_json_data['time'] += 10
20
+ if "time" in updated_dcs_json_data:
21
+ updated_dcs_json_data["time"] += 10
22
+
16
23
 
17
24
  class MockDataStore(DataStore):
18
25
  init_called = False
@@ -35,17 +42,16 @@ class MockDataStore(DataStore):
35
42
  def get(self, key: str) -> Optional[DataStoreResponse]:
36
43
  print(f"Getting value for key: {key}")
37
44
  self.get_called_count += 1
38
- return DataStoreResponse(
39
- result=dcs_content,
40
- time=1234567890
41
- )
45
+ return DataStoreResponse(result=dcs_content, time=1234567890)
42
46
 
43
47
  def set(self, key: str, value: str, time: Optional[int] = None):
44
48
  self.content_set = value
45
49
  print(f"Setting value for key: {key}")
46
50
 
47
51
  def support_polling_updates_for(self, key: str) -> bool:
48
- print(f"Checking if polling updates are supported for key: {key}: should_poll={self.should_poll}")
52
+ print(
53
+ f"Checking if polling updates are supported for key: {key}: should_poll={self.should_poll}"
54
+ )
49
55
  return self.should_poll
50
56
 
51
57
 
@@ -72,6 +78,7 @@ def statsig_setup(httpserver: HTTPServer):
72
78
 
73
79
  statsig.shutdown().wait()
74
80
 
81
+
75
82
  def test_data_store_usage_get_with_test_param():
76
83
  data_store = MockDataStore(test_param="test_param")
77
84
  assert data_store.test_param == "test_param"
@@ -99,11 +106,11 @@ def test_data_store_usage_set(statsig_setup):
99
106
  statsig.initialize().wait()
100
107
 
101
108
  gate = statsig.get_feature_gate(user, "test_public")
102
-
109
+
103
110
  assert data_store.init_called
104
111
  assert gate.details.reason == "Adapter(DataStore):Recognized"
105
112
  sleep(1)
106
-
113
+
107
114
  gate_after = statsig.get_feature_gate(user, "test_public")
108
115
  statsig.flush_events().wait()
109
116
 
@@ -1,3 +1,6 @@
1
+ import asyncio
2
+
3
+ import uvloop
1
4
  from mock_scrapi import MockScrapi
2
5
  from pytest_httpserver import HTTPServer
3
6
  from utils import get_test_data_resource
@@ -6,7 +9,7 @@ from typing import Generator
6
9
  import multiprocessing
7
10
  import time
8
11
  import datetime
9
- from statsig_python_core import Statsig, StatsigOptions
12
+ from statsig_python_core import Statsig, StatsigOptions, StatsigUser
10
13
  import subprocess
11
14
 
12
15
  multiprocessing.set_start_method("fork", force=True)
@@ -84,6 +87,20 @@ def test_forking_inline(httpserver: HTTPServer):
84
87
  timed_out_procs
85
88
  ), f"pid {pid}: timeout detected, killing all processes. Timed out procs: {timed_out_procs}"
86
89
 
90
+ def test_uvloop_run_forking(httpserver: HTTPServer):
91
+ uvloop.run(_run_parent_process_after_fork(httpserver))
92
+
93
+ async def _run_parent_process_after_fork(httpserver: HTTPServer):
94
+ mock_scrapi = setup_server(httpserver)
95
+ specs_url = mock_scrapi.url_for_endpoint("/v2/download_config_specs")
96
+ log_event_url = mock_scrapi.url_for_endpoint("/v1/log_event")
97
+ id_lists_url = mock_scrapi.url_for_endpoint("/v1/get_id_lists")
98
+ statsig = Statsig("secret-key", StatsigOptions(specs_url=specs_url, log_event_url=log_event_url, id_lists_url=id_lists_url))
99
+ statsig.log_event(StatsigUser("a-user"), "a_event")
100
+ await asyncio.create_subprocess_exec("sleep", "5")
101
+ statsig.flush_events().wait()
102
+ event = mock_scrapi.get_logged_events()
103
+ assert event[0]['eventName'] == 'a_event'
87
104
 
88
105
  def _proc_name_generator(start: int) -> Generator:
89
106
  num_cpus = os.cpu_count() or 1
@@ -68,7 +68,6 @@ def test_bg_tasks_shutdown(httpserver: HTTPServer):
68
68
  options.output_log_level = "none"
69
69
  options.specs_url = mock_scrapi.url_for_endpoint("/v2/download_config_specs")
70
70
  options.specs_sync_interval_ms = 1
71
- options.disable_user_agent_parsing = True
72
71
  options.disable_country_lookup = True
73
72
  options.log_event_url = mock_scrapi.url_for_endpoint("/v1/log_event")
74
73
  options.event_logging_flush_interval_ms = 1
@@ -32,14 +32,15 @@ reqwest = { version = "0.12.14", features = [
32
32
  ], optional = true, default-features = false }
33
33
  serde = { version = "1.0.204", features = ["derive"] }
34
34
  serde_derive = { version = "1.0.204", features = ["deserialize_in_place"] }
35
- serde_json = { version = "1.0.125", features = [
35
+ serde_json = { version = "1.0.143", features = [
36
36
  "float_roundtrip",
37
37
  "raw_value",
38
38
  ] }
39
39
  serde_with = "3.4.0"
40
40
  sha2 = "0.10.8"
41
- sigstat-grpc = { path = "../statsig-grpc", version = "0.8.3", optional = true }
41
+ sigstat-grpc = { path = "../statsig-grpc", version = "0.12.1-rc.2511121816", optional = true }
42
42
  simple_logger = { version = "5.0.0" }
43
+ tempfile = "3.8.1"
43
44
  tokio = { version = "1.39.1", features = ["full"] }
44
45
  uaparser = "0.6.4"
45
46
  uuid = { version = "1.10.0", features = ["v4", "fast-rng"] }
@@ -61,4 +62,7 @@ custom_network_provider = []
61
62
  with_grpc = ["sigstat-grpc"]
62
63
  testing = []
63
64
  with_zstd = []
64
- with_shared_dict_compression = []
65
+
66
+ # [[bin]]
67
+ # name = "sync"
68
+ # path = "tests/bin/sync.rs"