oai-statsig-python-core 0.27.0rc2__tar.gz → 0.28.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/Cargo.lock +6 -6
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/Cargo.toml +1 -1
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/PKG-INFO +2 -2
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/statsig_python_core.pyi +22 -0
- {oai_statsig_python_core-0.27.0rc2/statsig-pyo3 → oai_statsig_python_core-0.28.0/statsig-grpc}/README.md +1 -1
- {oai_statsig_python_core-0.27.0rc2/statsig-grpc → oai_statsig_python_core-0.28.0/statsig-pyo3}/README.md +1 -1
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/interned_store_py.rs +52 -1
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/lib.rs +1 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/pyo_utils.rs +1 -4
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +2 -6
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_interned_store_preload.py +25 -4
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/Cargo.toml +1 -1
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/__tests__/spec_store_tests.rs +127 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/dynamic_returnable.rs +19 -6
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/dynamic_configs_processor.rs +3 -2
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/instance_registry.rs +48 -29
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +263 -110
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_v2_tests.rs +208 -5
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/__tests__/interned_store_returnable_tests.rs +39 -3
- oai_statsig_python_core-0.28.0/statsig-rust/src/interned_values/interned_store/mmap_artifact.rs +191 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/interned_store/mmap_manifest.rs +62 -15
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/interned_store/mmap_reader/materialize.rs +5 -6
- oai_statsig_python_core-0.28.0/statsig-rust/src/interned_values/interned_store/mmap_reader/memory.rs +361 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/interned_store/mmap_reader.rs +61 -74
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/interned_store/mmap_writer.rs +58 -228
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/interned_store.rs +71 -74
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/mmap_data_v2.rs +12 -0
- oai_statsig_python_core-0.28.0/statsig-rust/src/interned_values/mod.rs +18 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/spec_store.rs +109 -45
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/proto_specs.rs +33 -6
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/spec_types.rs +1 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/specs_hash_map.rs +100 -6
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/statsig_config_specs.rs +2 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/statsig_types.rs +1 -4
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/instance_registry_tests.rs +91 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/spec_types_tests.rs +21 -1
- oai_statsig_python_core-0.27.0rc2/statsig-rust/src/interned_values/__tests__/fixtures/interned_store_v1.mmap +0 -0
- oai_statsig_python_core-0.27.0rc2/statsig-rust/src/interned_values/mod.rs +0 -8
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/__init__.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/_frozen_json.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/data_store.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/error_boundary.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/observability_client.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/persistent_storage.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/py.typed +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/requirements.txt +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/statsig.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/py_src/statsig_python_core/statsig_types.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/pyproject.toml +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-grpc/Cargo.toml +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-grpc/build.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-grpc/src/lib.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/.github/workflows/CI.yml +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/.gitignore +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/Cargo.toml +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/benchmarks/dynamic_config_value_cache_benchmark.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/data_store_base_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/event_logging_adapter_base_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/safe_gil.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/statsig_base_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/statsig_options_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/statsig_types_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/statsig_user_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/unit_id_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/fork_runner.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/mock_output_logger.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/mock_scrapi.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/profile_util.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_bulk_evaluate_gcir_parity.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_data_store.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_error_boundary.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_evaluation_cache_integration.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_evaluation_cache_pyo3.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_forking.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_frozen_json.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_layer_param_exposure_sampling.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_observability_client.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_override_adapter.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_performance.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_sec_expo_as_primary.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_shutdown.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_statsig.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_statsig_options.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_statsig_user.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_statsig_user_json_serialization.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_statsig_user_none_fields.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/tests/utils.py +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/build.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/resources/ip_supalite.table +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/__tests__/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/compression/compression_helper.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/compression/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/console_capture/console_capture_handler.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/console_capture/console_capture_instances.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/console_capture/console_capture_options.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/console_capture/console_log_line_levels.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/console_capture/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/data_store_interface.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/dcs_str.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/__tests__/rkyv_value_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/cmab_evaluator.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/evaluation_data.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/evaluation_types.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/evaluator.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/evaluator_context.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/evaluator_result.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/rkyv_value.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer_performance.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/delayed_exposure_store.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_logger.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/queued_expo.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/event_queue/queued_secondary_expo.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/flush_type.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/sec_expo_as_primary_experiment.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/evaluation_plan.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/feature_gates_processor.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/gcir_formatter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/gcir_options.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/gcir_process_iter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/layer_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/param_stores_processor.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/secondary_exposure_hashing.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/target_app_id_utils.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/gcir/timing.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/global_configs.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/hashing/ahash.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/hashing/djb2.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/hashing/hash_util.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/hashing/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/init_details.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/initialize_response.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/initialize_v2_response.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_string.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/__tests__/interned_store_eval_value_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/__tests__/interned_store_string_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/mmap_data_v2/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/mmap_data_v2/spec.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/mmap_data_v2/spec_content_hash.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/interned_values/mmap_sync.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/lib.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/logging_utils.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/macros.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/http_types.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/network_client.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/network_error.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/providers/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/networking/proxy_config.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/observability/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/observability/ops_stats.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/output_logger.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/override_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/persistent_storage/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/sdk_event_emitter/event_types.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_adapter/config_spec_background_sync_metrics.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/__tests__/proto_specs_syncing_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/__tests__/proto_specs_unknown_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/__tests__/proto_specs_vs_json_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/__tests__/proto_stream_reader_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/explicit_params.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/specs_response/proto_stream_reader.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/statsig.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/statsig_core_api_options.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/statsig_err.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/statsig_global.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/statsig_metadata.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/statsig_options.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/statsig_runtime.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/statsig_type_factories.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/statsig_types_raw.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/user/fast_statsig_user.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/user/into_optional.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/user/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/user/statsig_user.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/user/unit_id.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/user/user_data.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/user/user_value.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/src/value_parsing.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/check_gate_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/big_number_dcs.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/company_id_list +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/dcs_error.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/dcs_non_case_sensitive.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/dcs_user_agent_versions.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/dcs_with_analytical_exposure_sampling.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/demo_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/eval_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/get_id_lists.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/perf_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/test_user_agents.txt +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/ua_string_cases.json +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data_store_bytes_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data_store_json_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data_store_json_only_no_bytes_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/data_store_proto_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/exposure_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/flushing_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/gcir_plan_expansion_bench.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/global_configs_test.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/interner_contention_bench.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/list_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/network_client_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/output_logger_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/override_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/perf_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_global_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/statsig_user_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/substring_search_bench.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/typed_getters_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/user_json_tests.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/utils/helpers.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
- {oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/tests/utils/mod.rs +0 -0
|
@@ -1738,7 +1738,7 @@ dependencies = [
|
|
|
1738
1738
|
|
|
1739
1739
|
[[package]]
|
|
1740
1740
|
name = "oai-statsig-grpc"
|
|
1741
|
-
version = "0.
|
|
1741
|
+
version = "0.28.0"
|
|
1742
1742
|
dependencies = [
|
|
1743
1743
|
"async-trait",
|
|
1744
1744
|
"chrono",
|
|
@@ -1753,7 +1753,7 @@ dependencies = [
|
|
|
1753
1753
|
|
|
1754
1754
|
[[package]]
|
|
1755
1755
|
name = "oai-statsig-rust"
|
|
1756
|
-
version = "0.
|
|
1756
|
+
version = "0.28.0"
|
|
1757
1757
|
dependencies = [
|
|
1758
1758
|
"ahash",
|
|
1759
1759
|
"arc-swap",
|
|
@@ -3043,7 +3043,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
|
|
3043
3043
|
|
|
3044
3044
|
[[package]]
|
|
3045
3045
|
name = "statsig-node"
|
|
3046
|
-
version = "0.
|
|
3046
|
+
version = "0.28.0"
|
|
3047
3047
|
dependencies = [
|
|
3048
3048
|
"async-trait",
|
|
3049
3049
|
"napi",
|
|
@@ -3058,7 +3058,7 @@ dependencies = [
|
|
|
3058
3058
|
|
|
3059
3059
|
[[package]]
|
|
3060
3060
|
name = "statsig-pyo3"
|
|
3061
|
-
version = "0.
|
|
3061
|
+
version = "0.28.0"
|
|
3062
3062
|
dependencies = [
|
|
3063
3063
|
"async-trait",
|
|
3064
3064
|
"lazy_static",
|
|
@@ -3073,7 +3073,7 @@ dependencies = [
|
|
|
3073
3073
|
|
|
3074
3074
|
[[package]]
|
|
3075
3075
|
name = "statsig_elixir"
|
|
3076
|
-
version = "0.
|
|
3076
|
+
version = "0.28.0"
|
|
3077
3077
|
dependencies = [
|
|
3078
3078
|
"async-trait",
|
|
3079
3079
|
"oai-statsig-rust",
|
|
@@ -3086,7 +3086,7 @@ dependencies = [
|
|
|
3086
3086
|
|
|
3087
3087
|
[[package]]
|
|
3088
3088
|
name = "statsig_ffi"
|
|
3089
|
-
version = "0.
|
|
3089
|
+
version = "0.28.0"
|
|
3090
3090
|
dependencies = [
|
|
3091
3091
|
"async-trait",
|
|
3092
3092
|
"cbindgen",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oai_statsig_python_core
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.28.0
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -55,7 +55,7 @@ Bindings
|
|
|
55
55
|
|
|
56
56
|
- PHP [[packagist](https://packagist.org/packages/statsig/statsig-php-core)] [[source](https://github.com/statsig-io/statsig-server-core/blob/main/statsig-php)] [[docs](https://docs.statsig.com/server-core/php-core?ref=gh_server_core)]
|
|
57
57
|
|
|
58
|
-
- Java [[maven](https://
|
|
58
|
+
- Java [[maven](https://central.sonatype.com/artifact/com.oaistatsig/javacore)] [[source](https://github.com/openai/statsig-priv-server-core/tree/main/statsig-java)] [[docs](https://docs.statsig.com/server-core/java-core?ref=gh_server_core)]
|
|
59
59
|
|
|
60
60
|
- Rust [[crates.io](https://crates.io/crates/oai-statsig-rust)] [[source](https://github.com/statsig-io/statsig-server-core/tree/main/statsig-rust)] [[docs](https://docs.statsig.com/server-core/rust-core?ref=gh_server_core)]
|
|
61
61
|
|
|
@@ -22,6 +22,7 @@ __all__ = [
|
|
|
22
22
|
"LayerEvaluationOptions",
|
|
23
23
|
"LayerParamExposureData",
|
|
24
24
|
"LogEventRequest",
|
|
25
|
+
"MmapReaderMemorySnapshot",
|
|
25
26
|
"ObservabilityClientBase",
|
|
26
27
|
"OutputLoggerProviderBase",
|
|
27
28
|
"ParameterStore",
|
|
@@ -119,6 +120,8 @@ class InternedStore:
|
|
|
119
120
|
def fetch_and_write_mmap(cls, sdk_key: builtins.str, specs_url: typing.Optional[builtins.str] = None) -> typing.Any: ...
|
|
120
121
|
@classmethod
|
|
121
122
|
def preload_mmap(cls, sdk_key: builtins.str) -> None: ...
|
|
123
|
+
@classmethod
|
|
124
|
+
def mmap_reader_memory_snapshot(cls) -> typing.Optional[MmapReaderMemorySnapshot]: ...
|
|
122
125
|
|
|
123
126
|
@typing.final
|
|
124
127
|
class LayerEvaluationOptions:
|
|
@@ -144,6 +147,25 @@ class LogEventRequest:
|
|
|
144
147
|
def retries(self) -> builtins.int: ...
|
|
145
148
|
def __new__(cls, payload: typing.Any, event_count: builtins.int, retries: builtins.int) -> LogEventRequest: ...
|
|
146
149
|
|
|
150
|
+
@typing.final
|
|
151
|
+
class MmapReaderMemorySnapshot:
|
|
152
|
+
@property
|
|
153
|
+
def format_version(self) -> builtins.int: ...
|
|
154
|
+
@property
|
|
155
|
+
def mapped_bytes(self) -> builtins.int: ...
|
|
156
|
+
@property
|
|
157
|
+
def resident_bytes(self) -> typing.Optional[builtins.int]: ...
|
|
158
|
+
@property
|
|
159
|
+
def proportional_set_bytes(self) -> typing.Optional[builtins.int]: ...
|
|
160
|
+
@property
|
|
161
|
+
def private_dirty_bytes(self) -> typing.Optional[builtins.int]: ...
|
|
162
|
+
@property
|
|
163
|
+
def deleted_mapped_bytes(self) -> typing.Optional[builtins.int]: ...
|
|
164
|
+
@property
|
|
165
|
+
def loaded_generation_count(self) -> builtins.int: ...
|
|
166
|
+
@property
|
|
167
|
+
def vma_segment_count(self) -> typing.Optional[builtins.int]: ...
|
|
168
|
+
|
|
147
169
|
class ObservabilityClientBase:
|
|
148
170
|
def __new__(cls) -> ObservabilityClientBase: ...
|
|
149
171
|
|
|
@@ -35,7 +35,7 @@ Bindings
|
|
|
35
35
|
|
|
36
36
|
- PHP [[packagist](https://packagist.org/packages/statsig/statsig-php-core)] [[source](https://github.com/statsig-io/statsig-server-core/blob/main/statsig-php)] [[docs](https://docs.statsig.com/server-core/php-core?ref=gh_server_core)]
|
|
37
37
|
|
|
38
|
-
- Java [[maven](https://
|
|
38
|
+
- Java [[maven](https://central.sonatype.com/artifact/com.oaistatsig/javacore)] [[source](https://github.com/openai/statsig-priv-server-core/tree/main/statsig-java)] [[docs](https://docs.statsig.com/server-core/java-core?ref=gh_server_core)]
|
|
39
39
|
|
|
40
40
|
- Rust [[crates.io](https://crates.io/crates/oai-statsig-rust)] [[source](https://github.com/statsig-io/statsig-server-core/tree/main/statsig-rust)] [[docs](https://docs.statsig.com/server-core/rust-core?ref=gh_server_core)]
|
|
41
41
|
|
|
@@ -35,7 +35,7 @@ Bindings
|
|
|
35
35
|
|
|
36
36
|
- PHP [[packagist](https://packagist.org/packages/statsig/statsig-php-core)] [[source](https://github.com/statsig-io/statsig-server-core/blob/main/statsig-php)] [[docs](https://docs.statsig.com/server-core/php-core?ref=gh_server_core)]
|
|
37
37
|
|
|
38
|
-
- Java [[maven](https://
|
|
38
|
+
- Java [[maven](https://central.sonatype.com/artifact/com.oaistatsig/javacore)] [[source](https://github.com/openai/statsig-priv-server-core/tree/main/statsig-java)] [[docs](https://docs.statsig.com/server-core/java-core?ref=gh_server_core)]
|
|
39
39
|
|
|
40
40
|
- Rust [[crates.io](https://crates.io/crates/oai-statsig-rust)] [[source](https://github.com/statsig-io/statsig-server-core/tree/main/statsig-rust)] [[docs](https://docs.statsig.com/server-core/rust-core?ref=gh_server_core)]
|
|
41
41
|
|
|
@@ -8,12 +8,48 @@ use pyo3::types::PyModule;
|
|
|
8
8
|
use pyo3::types::PyType;
|
|
9
9
|
use pyo3_stub_gen::derive::*;
|
|
10
10
|
|
|
11
|
-
use statsig_rust::interned_values::InternedStore;
|
|
11
|
+
use statsig_rust::interned_values::{InternedStore, MmapReaderMemorySnapshot};
|
|
12
12
|
use statsig_rust::log_e;
|
|
13
13
|
use statsig_rust::StatsigRuntime;
|
|
14
14
|
|
|
15
15
|
const TAG: &str = stringify!(InternStorePy);
|
|
16
16
|
|
|
17
|
+
#[gen_stub_pyclass]
|
|
18
|
+
#[pyclass(name = "MmapReaderMemorySnapshot", module = "statsig_python_core")]
|
|
19
|
+
pub struct MmapReaderMemorySnapshotPy {
|
|
20
|
+
#[pyo3(get)]
|
|
21
|
+
pub format_version: u32,
|
|
22
|
+
#[pyo3(get)]
|
|
23
|
+
pub mapped_bytes: u64,
|
|
24
|
+
#[pyo3(get)]
|
|
25
|
+
pub resident_bytes: Option<u64>,
|
|
26
|
+
#[pyo3(get)]
|
|
27
|
+
pub proportional_set_bytes: Option<u64>,
|
|
28
|
+
#[pyo3(get)]
|
|
29
|
+
pub private_dirty_bytes: Option<u64>,
|
|
30
|
+
#[pyo3(get)]
|
|
31
|
+
pub deleted_mapped_bytes: Option<u64>,
|
|
32
|
+
#[pyo3(get)]
|
|
33
|
+
pub loaded_generation_count: u64,
|
|
34
|
+
#[pyo3(get)]
|
|
35
|
+
pub vma_segment_count: Option<u64>,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
impl From<MmapReaderMemorySnapshot> for MmapReaderMemorySnapshotPy {
|
|
39
|
+
fn from(snapshot: MmapReaderMemorySnapshot) -> Self {
|
|
40
|
+
Self {
|
|
41
|
+
format_version: snapshot.format_version,
|
|
42
|
+
mapped_bytes: snapshot.mapped_bytes,
|
|
43
|
+
resident_bytes: snapshot.resident_bytes,
|
|
44
|
+
proportional_set_bytes: snapshot.proportional_set_bytes,
|
|
45
|
+
private_dirty_bytes: snapshot.private_dirty_bytes,
|
|
46
|
+
deleted_mapped_bytes: snapshot.deleted_mapped_bytes,
|
|
47
|
+
loaded_generation_count: snapshot.loaded_generation_count,
|
|
48
|
+
vma_segment_count: snapshot.vma_segment_count,
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
17
53
|
#[gen_stub_pyclass]
|
|
18
54
|
#[pyclass(name = "InternedStore", module = "statsig_python_core")]
|
|
19
55
|
#[derive(Default)]
|
|
@@ -99,6 +135,21 @@ impl InternedStorePy {
|
|
|
99
135
|
|
|
100
136
|
Ok(())
|
|
101
137
|
}
|
|
138
|
+
|
|
139
|
+
#[classmethod]
|
|
140
|
+
pub fn mmap_reader_memory_snapshot(
|
|
141
|
+
_cls: &Bound<'_, PyType>,
|
|
142
|
+
py: Python<'_>,
|
|
143
|
+
) -> PyResult<Option<MmapReaderMemorySnapshotPy>> {
|
|
144
|
+
py.detach(|| {
|
|
145
|
+
InternedStore::mmap_reader_memory_snapshot().map_err(|error| error.to_string())
|
|
146
|
+
})
|
|
147
|
+
.map(|snapshot| snapshot.map(Into::into))
|
|
148
|
+
.map_err(|error| {
|
|
149
|
+
log_e!(TAG, "Failed to inspect mmap reader memory: {error}");
|
|
150
|
+
PyRuntimeError::new_err(error)
|
|
151
|
+
})
|
|
152
|
+
}
|
|
102
153
|
}
|
|
103
154
|
|
|
104
155
|
fn get_completion_event(py: Python) -> PyResult<(Py<PyAny>, Py<PyAny>)> {
|
{oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/lib.rs
RENAMED
|
@@ -43,6 +43,7 @@ fn statsig_python_core(m: &Bound<'_, PyModule>) -> PyResult<()> {
|
|
|
43
43
|
m.add_class::<statsig_persistent_storage_override_adapter_py::PersistentStorageBasePy>()?;
|
|
44
44
|
m.add_class::<output_logger_provider_base_py::OutputLoggerProviderBasePy>()?;
|
|
45
45
|
m.add_class::<statsig_options_py::SpecAdapterConfigPy>()?;
|
|
46
|
+
m.add_class::<interned_store_py::MmapReaderMemorySnapshotPy>()?;
|
|
46
47
|
m.add_class::<interned_store_py::InternedStorePy>()?;
|
|
47
48
|
m.add_function(wrap_pyfunction!(notify_python_shutdown, m)?)?;
|
|
48
49
|
m.add_function(wrap_pyfunction!(notify_python_fork, m)?)?;
|
{oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-pyo3/src/pyo_utils.rs
RENAMED
|
@@ -103,10 +103,7 @@ pub fn json_value_to_py_object(py: Python<'_>, value: &Value) -> PyResult<Py<PyA
|
|
|
103
103
|
pub fn py_list_to_list(py_list: &Bound<PyList>) -> PyResult<Vec<String>> {
|
|
104
104
|
let mut converted_list = Vec::new();
|
|
105
105
|
for value in py_list {
|
|
106
|
-
|
|
107
|
-
Ok(s) => converted_list.push(s),
|
|
108
|
-
Err(e) => return Err(e),
|
|
109
|
-
}
|
|
106
|
+
converted_list.push(value.extract::<String>()?);
|
|
110
107
|
}
|
|
111
108
|
Ok(converted_list)
|
|
112
109
|
}
|
|
@@ -169,12 +169,8 @@ fn convert_py_lists_to_secondary_exposures(
|
|
|
169
169
|
) -> PyResult<Vec<SecondaryExposure>> {
|
|
170
170
|
let mut exposures = Vec::new();
|
|
171
171
|
for item in py_list {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
exposures.push(convert_py_dict_to_secondary_exposure(&e)?);
|
|
175
|
-
}
|
|
176
|
-
Err(e) => return Err(e.into()),
|
|
177
|
-
}
|
|
172
|
+
let exposure = item.extract::<Bound<PyDict>>()?;
|
|
173
|
+
exposures.push(convert_py_dict_to_secondary_exposure(&exposure)?);
|
|
178
174
|
}
|
|
179
175
|
|
|
180
176
|
Ok(exposures)
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
from utils import get_test_data_resource_bytes, get_test_data_resource
|
|
2
|
-
from pytest_httpserver import HTTPServer
|
|
3
|
-
import pytest
|
|
4
1
|
import json
|
|
5
|
-
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
from pytest_httpserver import HTTPServer
|
|
6
|
+
|
|
6
7
|
from mock_output_logger import MockOutputLoggerProvider
|
|
8
|
+
from statsig_python_core import InternedStore, Statsig, StatsigOptions, StatsigUser
|
|
9
|
+
from utils import get_test_data_resource, get_test_data_resource_bytes
|
|
7
10
|
|
|
8
11
|
EVAL_PROJ_JSON = get_test_data_resource_bytes("eval_proj_dcs.json")
|
|
9
12
|
DEMO_PROJ_PROTO = get_test_data_resource_bytes("demo_proj_dcs.pb.br")
|
|
@@ -57,6 +60,24 @@ def test_interned_store_mmap_preload(server_setup):
|
|
|
57
60
|
fetch_complete = InternedStore.fetch_and_write_mmap(sdk_key, specs_url)
|
|
58
61
|
assert fetch_complete.wait(5)
|
|
59
62
|
InternedStore.preload_mmap(sdk_key)
|
|
63
|
+
memory = InternedStore.mmap_reader_memory_snapshot()
|
|
64
|
+
assert memory is not None
|
|
65
|
+
assert memory.format_version == 2
|
|
66
|
+
assert memory.mapped_bytes > 0
|
|
67
|
+
assert memory.loaded_generation_count == 1
|
|
68
|
+
if sys.platform == "linux":
|
|
69
|
+
assert memory.resident_bytes is not None
|
|
70
|
+
assert memory.proportional_set_bytes is not None
|
|
71
|
+
assert memory.private_dirty_bytes is not None
|
|
72
|
+
assert memory.deleted_mapped_bytes == 0
|
|
73
|
+
assert memory.vma_segment_count is not None
|
|
74
|
+
assert memory.vma_segment_count >= 1
|
|
75
|
+
else:
|
|
76
|
+
assert memory.resident_bytes is None
|
|
77
|
+
assert memory.proportional_set_bytes is None
|
|
78
|
+
assert memory.private_dirty_bytes is None
|
|
79
|
+
assert memory.deleted_mapped_bytes is None
|
|
80
|
+
assert memory.vma_segment_count is None
|
|
60
81
|
|
|
61
82
|
log_provider = MockOutputLoggerProvider()
|
|
62
83
|
log_provider.logs = []
|
{oai_statsig_python_core-0.27.0rc2 → oai_statsig_python_core-0.28.0}/statsig-rust/Cargo.toml
RENAMED
|
@@ -45,7 +45,7 @@ serde_json = { version = "1.0.143", features = [
|
|
|
45
45
|
] }
|
|
46
46
|
serde_with = "3.4.0"
|
|
47
47
|
sha2 = "0.10.8"
|
|
48
|
-
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.
|
|
48
|
+
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.28.0", optional = true }
|
|
49
49
|
simple_logger = { version = "5.0.0" }
|
|
50
50
|
tempfile = "3.8.1"
|
|
51
51
|
tokio = { version = "1.39.1", features = ["full"] }
|
|
@@ -361,6 +361,124 @@ async fn receive_proto_latency(
|
|
|
361
361
|
.flatten()
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
+
async fn receive_spec_decode_tags(
|
|
365
|
+
receiver: &mut tokio::sync::broadcast::Receiver<OpsStatsEvent>,
|
|
366
|
+
timeout: Duration,
|
|
367
|
+
) -> Option<HashMap<String, String>> {
|
|
368
|
+
tokio::time::timeout(timeout, async {
|
|
369
|
+
loop {
|
|
370
|
+
let OpsStatsEvent::Observability(event) = receiver.recv().await.ok()? else {
|
|
371
|
+
continue;
|
|
372
|
+
};
|
|
373
|
+
if event.metric_name == "interned_mmap.spec_decode.count" {
|
|
374
|
+
assert!(matches!(&event.metric_type, MetricType::Increment));
|
|
375
|
+
return event.tags;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
})
|
|
379
|
+
.await
|
|
380
|
+
.ok()
|
|
381
|
+
.flatten()
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
#[tokio::test]
|
|
385
|
+
#[serial]
|
|
386
|
+
async fn test_spec_decode_metric_reports_owned_materialized_updates_only() {
|
|
387
|
+
let sdk_key = "secret-owned-metric-test";
|
|
388
|
+
let ops_stats = OPS_STATS.get_for_instance(sdk_key);
|
|
389
|
+
let mut receiver = ops_stats.subscribe_for_test();
|
|
390
|
+
let store = SpecStore::new(
|
|
391
|
+
sdk_key,
|
|
392
|
+
sdk_key.to_string(),
|
|
393
|
+
StatsigRuntime::get_runtime(),
|
|
394
|
+
Arc::new(SdkEventEmitter::default()),
|
|
395
|
+
None,
|
|
396
|
+
);
|
|
397
|
+
|
|
398
|
+
store
|
|
399
|
+
.set_values(SpecsUpdate {
|
|
400
|
+
data: ResponseData::from_bytes(
|
|
401
|
+
br#"{
|
|
402
|
+
"experiment_to_layer": {},
|
|
403
|
+
"condition_map": {},
|
|
404
|
+
"dynamic_configs": {},
|
|
405
|
+
"feature_gates": {
|
|
406
|
+
"owned_metric_gate": {
|
|
407
|
+
"type": "feature_gate",
|
|
408
|
+
"salt": "owned-metric-salt",
|
|
409
|
+
"defaultValue": false,
|
|
410
|
+
"enabled": true,
|
|
411
|
+
"rules": [],
|
|
412
|
+
"idType": "userID",
|
|
413
|
+
"entity": "feature_gate"
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
"layer_configs": {},
|
|
417
|
+
"has_updates": true,
|
|
418
|
+
"time": 1
|
|
419
|
+
}"#
|
|
420
|
+
.to_vec(),
|
|
421
|
+
),
|
|
422
|
+
source: SpecsSource::Network,
|
|
423
|
+
received_at: 2_000,
|
|
424
|
+
source_api: None,
|
|
425
|
+
has_updates: None,
|
|
426
|
+
})
|
|
427
|
+
.unwrap();
|
|
428
|
+
|
|
429
|
+
let tags = receive_spec_decode_tags(&mut receiver, Duration::from_millis(100))
|
|
430
|
+
.await
|
|
431
|
+
.expect("materialized update should emit spec decode telemetry");
|
|
432
|
+
assert_eq!(tags.get("source").map(String::as_str), Some("owned"));
|
|
433
|
+
assert_eq!(
|
|
434
|
+
tags.get("reason").map(String::as_str),
|
|
435
|
+
Some("spec_preload_unavailable")
|
|
436
|
+
);
|
|
437
|
+
assert_eq!(
|
|
438
|
+
tags.get("sdk_key").map(String::as_str),
|
|
439
|
+
Some("secret-owned-")
|
|
440
|
+
);
|
|
441
|
+
|
|
442
|
+
store
|
|
443
|
+
.set_values(SpecsUpdate {
|
|
444
|
+
data: ResponseData::from_bytes(
|
|
445
|
+
br#"{
|
|
446
|
+
"experiment_to_layer": {},
|
|
447
|
+
"condition_map": {},
|
|
448
|
+
"dynamic_configs": {},
|
|
449
|
+
"feature_gates": {},
|
|
450
|
+
"layer_configs": {},
|
|
451
|
+
"has_updates": true,
|
|
452
|
+
"time": 2
|
|
453
|
+
}"#
|
|
454
|
+
.to_vec(),
|
|
455
|
+
),
|
|
456
|
+
source: SpecsSource::Network,
|
|
457
|
+
received_at: 2_001,
|
|
458
|
+
source_api: None,
|
|
459
|
+
has_updates: None,
|
|
460
|
+
})
|
|
461
|
+
.unwrap();
|
|
462
|
+
assert_eq!(
|
|
463
|
+
receive_spec_decode_tags(&mut receiver, Duration::from_millis(100)).await,
|
|
464
|
+
None
|
|
465
|
+
);
|
|
466
|
+
|
|
467
|
+
store
|
|
468
|
+
.set_values(SpecsUpdate {
|
|
469
|
+
data: ResponseData::from_bytes(br#"{"has_updates":false}"#.to_vec()),
|
|
470
|
+
source: SpecsSource::Network,
|
|
471
|
+
received_at: 2_002,
|
|
472
|
+
source_api: None,
|
|
473
|
+
has_updates: Some(false),
|
|
474
|
+
})
|
|
475
|
+
.unwrap();
|
|
476
|
+
assert_eq!(
|
|
477
|
+
receive_spec_decode_tags(&mut receiver, Duration::from_millis(100)).await,
|
|
478
|
+
None
|
|
479
|
+
);
|
|
480
|
+
}
|
|
481
|
+
|
|
364
482
|
#[tokio::test]
|
|
365
483
|
async fn test_spec_store_data_store_updates_forwarded_to_data_store() {
|
|
366
484
|
let data_store = Arc::new(TestDataStore::new(true));
|
|
@@ -864,6 +982,7 @@ async fn test_proto_metrics_classify_processing_and_duplicates() {
|
|
|
864
982
|
None,
|
|
865
983
|
);
|
|
866
984
|
apply_eval_project(&delta_store);
|
|
985
|
+
let mut spec_decode_receiver = ops_stats.subscribe_for_test();
|
|
867
986
|
let before = delta_store.load_data();
|
|
868
987
|
let deleted_name = before
|
|
869
988
|
.snapshot
|
|
@@ -891,6 +1010,14 @@ async fn test_proto_metrics_classify_processing_and_duplicates() {
|
|
|
891
1010
|
"metric-api",
|
|
892
1011
|
)
|
|
893
1012
|
.unwrap();
|
|
1013
|
+
let spec_decode_tags =
|
|
1014
|
+
receive_spec_decode_tags(&mut spec_decode_receiver, Duration::from_secs(1))
|
|
1015
|
+
.await
|
|
1016
|
+
.expect("materialized delta should emit spec decode telemetry");
|
|
1017
|
+
assert_eq!(
|
|
1018
|
+
spec_decode_tags.get("source").map(String::as_str),
|
|
1019
|
+
Some("owned")
|
|
1020
|
+
);
|
|
894
1021
|
let materialized = delta_store.load_data();
|
|
895
1022
|
apply_delta(
|
|
896
1023
|
&delta_store,
|
|
@@ -113,8 +113,17 @@ impl DynamicReturnable {
|
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
pub(crate) fn get_stable_hash(&self) -> u64 {
|
|
116
|
-
self.stable_hash
|
|
117
|
-
|
|
116
|
+
if let Some(hash) = self.stable_hash {
|
|
117
|
+
return hash.get();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if matches!(&self.value, DynamicReturnableValue::JsonArchived(_)) {
|
|
121
|
+
if let Some(hash) = InternedStore::get_mmap_returnable_stable_hash(self.hash) {
|
|
122
|
+
return hash;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
stable_hash(&self.value)
|
|
118
127
|
}
|
|
119
128
|
|
|
120
129
|
pub(crate) fn from_interned_value(hash: u64, value: DynamicReturnableValue) -> Self {
|
|
@@ -137,7 +146,7 @@ impl DynamicReturnable {
|
|
|
137
146
|
}
|
|
138
147
|
|
|
139
148
|
#[cfg(test)]
|
|
140
|
-
pub(crate) fn
|
|
149
|
+
pub(crate) fn has_inline_stable_hash(&self) -> bool {
|
|
141
150
|
self.stable_hash.is_some()
|
|
142
151
|
}
|
|
143
152
|
}
|
|
@@ -158,12 +167,16 @@ fn stable_hash(value: &DynamicReturnableValue) -> u64 {
|
|
|
158
167
|
DynamicReturnableValue::JsonStatic(value) => {
|
|
159
168
|
stable_object_hash(value.iter().map(|(key, value)| (key.as_str(), value)))
|
|
160
169
|
}
|
|
161
|
-
DynamicReturnableValue::JsonArchived(value) =>
|
|
162
|
-
stable_object_hash(value.iter().map(|(key, value)| (key.as_str(), value)))
|
|
163
|
-
}
|
|
170
|
+
DynamicReturnableValue::JsonArchived(value) => archived_returnable_stable_hash(value),
|
|
164
171
|
}
|
|
165
172
|
}
|
|
166
173
|
|
|
174
|
+
pub(crate) fn archived_returnable_stable_hash(
|
|
175
|
+
value: &ArchivedHashMap<ArchivedString, ArchivedRkyvValue>,
|
|
176
|
+
) -> u64 {
|
|
177
|
+
stable_object_hash(value.iter().map(|(key, value)| (key.as_str(), value)))
|
|
178
|
+
}
|
|
179
|
+
|
|
167
180
|
impl<'de> Deserialize<'de> for DynamicReturnable {
|
|
168
181
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
169
182
|
where
|
|
@@ -146,7 +146,7 @@ pub(crate) fn get_dynamic_config_evaluations_with_plan(
|
|
|
146
146
|
};
|
|
147
147
|
|
|
148
148
|
for planned in &plan.cmab_configs {
|
|
149
|
-
|
|
149
|
+
let should_filter = gcir_time!("cmab.filtering", {
|
|
150
150
|
let is_filtered_by_experiment = options
|
|
151
151
|
.experiment_filter
|
|
152
152
|
.as_ref()
|
|
@@ -162,7 +162,8 @@ pub(crate) fn get_dynamic_config_evaluations_with_plan(
|
|
|
162
162
|
&options.client_sdk_key,
|
|
163
163
|
)
|
|
164
164
|
}
|
|
165
|
-
})
|
|
165
|
+
});
|
|
166
|
+
if should_filter {
|
|
166
167
|
continue;
|
|
167
168
|
}
|
|
168
169
|
|
|
@@ -26,8 +26,15 @@ impl InstanceRegistry {
|
|
|
26
26
|
let id_tuple = (short_type_name, Uuid::new_v4());
|
|
27
27
|
let id_hash = hash_one(id_tuple);
|
|
28
28
|
|
|
29
|
-
let
|
|
30
|
-
|
|
29
|
+
let replaced = {
|
|
30
|
+
let mut registry = Self::get_write_lock()?;
|
|
31
|
+
registry.insert(id_hash, instance)
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// Registered instances may run arbitrary shutdown logic when dropped.
|
|
35
|
+
// Keep that work outside the global registry lock in the unlikely event
|
|
36
|
+
// of an ID collision.
|
|
37
|
+
drop(replaced);
|
|
31
38
|
|
|
32
39
|
Some(id_hash)
|
|
33
40
|
}
|
|
@@ -41,27 +48,29 @@ impl InstanceRegistry {
|
|
|
41
48
|
}
|
|
42
49
|
|
|
43
50
|
pub fn get<T: Send + Sync + 'static>(id: &u64) -> Option<Arc<T>> {
|
|
44
|
-
let
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
let instance = {
|
|
52
|
+
let registry = match REGISTRY.try_read_for(Duration::from_secs(5)) {
|
|
53
|
+
Some(guard) => guard,
|
|
54
|
+
None => {
|
|
55
|
+
log_e!(TAG, "Failed to acquire read lock: Failed to lock REGISTRY");
|
|
56
|
+
return None;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
registry.get(id).cloned()
|
|
50
61
|
};
|
|
51
62
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
})
|
|
63
|
+
instance.and_then(|any_arc| match any_arc.downcast::<T>() {
|
|
64
|
+
Ok(t) => Some(t),
|
|
65
|
+
Err(_) => {
|
|
66
|
+
log_e!(
|
|
67
|
+
TAG,
|
|
68
|
+
"Failed to downcast instance with ref '{}' to generic type",
|
|
69
|
+
id
|
|
70
|
+
);
|
|
71
|
+
None
|
|
72
|
+
}
|
|
73
|
+
})
|
|
65
74
|
}
|
|
66
75
|
|
|
67
76
|
pub fn get_raw(id: &u64) -> Option<Arc<dyn Any + Send + Sync>> {
|
|
@@ -77,19 +86,29 @@ impl InstanceRegistry {
|
|
|
77
86
|
}
|
|
78
87
|
|
|
79
88
|
pub fn remove(id: &u64) {
|
|
80
|
-
let
|
|
81
|
-
|
|
82
|
-
|
|
89
|
+
let removed = {
|
|
90
|
+
let mut registry = match Self::get_write_lock() {
|
|
91
|
+
Some(registry) => registry,
|
|
92
|
+
None => return,
|
|
93
|
+
};
|
|
94
|
+
registry.remove(id)
|
|
83
95
|
};
|
|
84
|
-
|
|
96
|
+
|
|
97
|
+
// Instance destructors can run shutdown hooks and callbacks.
|
|
98
|
+
drop(removed);
|
|
85
99
|
}
|
|
86
100
|
|
|
87
101
|
pub fn remove_all() {
|
|
88
|
-
let
|
|
89
|
-
|
|
90
|
-
|
|
102
|
+
let removed = {
|
|
103
|
+
let mut registry = match Self::get_write_lock() {
|
|
104
|
+
Some(registry) => registry,
|
|
105
|
+
None => return,
|
|
106
|
+
};
|
|
107
|
+
std::mem::take(&mut *registry)
|
|
91
108
|
};
|
|
92
|
-
|
|
109
|
+
|
|
110
|
+
// Drop all instances after the registry is available to other callers.
|
|
111
|
+
drop(removed);
|
|
93
112
|
}
|
|
94
113
|
|
|
95
114
|
fn get_write_lock() -> Option<RwLockWriteGuard<'static, AHashMap<u64, AnyInstance>>> {
|