statsig-python-core 0.10.1__tar.gz → 0.10.2__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.
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/Cargo.lock +6 -6
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/Cargo.toml +1 -1
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/PKG-INFO +1 -1
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/Cargo.toml +1 -1
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/data_store_interface.rs +2 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/cmab_evaluator.rs +2 -2
- statsig_python_core-0.10.2/statsig-rust/src/evaluation/evaluation_details.rs +105 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/evaluator.rs +30 -45
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/evaluator_context.rs +13 -5
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/gcir/dynamic_configs_processor.rs +4 -4
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/gcir/feature_gates_processor.rs +2 -2
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/gcir/gcir_formatter.rs +54 -178
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/gcir/gcir_options.rs +19 -1
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/gcir/layer_configs_processor.rs +2 -2
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/gcir/mod.rs +1 -1
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/gcir/param_stores_processor.rs +1 -1
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/gcir/target_app_id_utils.rs +1 -1
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/hashing/hash_util.rs +15 -5
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/lib.rs +1 -1
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +1 -1
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/statsig.rs +183 -49
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/statsig_metadata.rs +1 -1
- statsig_python_core-0.10.2/statsig-rust/tests/direct_gcir_tests.rs +143 -0
- statsig_python_core-0.10.1/statsig-rust/src/evaluation/evaluation_details.rs +0 -82
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/py_src/statsig_python_core/__init__.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/py_src/statsig_python_core/data_store.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/py_src/statsig_python_core/error_boundary.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/py_src/statsig_python_core/observability_client.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/py_src/statsig_python_core/output_logger_provider.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/py_src/statsig_python_core/persistent_storage.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/py_src/statsig_python_core/py.typed +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/py_src/statsig_python_core/requirements.txt +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/py_src/statsig_python_core/statsig.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/py_src/statsig_python_core/statsig_python_core.pyi +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/pyproject.toml +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/Cargo.toml +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/README.md +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/api-interface-definitions/README.md +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/api-interface-definitions/protos/data_adapter.proto +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/api-interface-definitions/protos/grpc_health.proto +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/api-interface-definitions/protos/statsig_forward_proxy.proto +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/build.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/src/lib.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/.github/workflows/CI.yml +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/.gitignore +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/Cargo.toml +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/README.md +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/py_src/statsig_python_core/__init__.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/py_src/statsig_python_core/data_store.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/py_src/statsig_python_core/error_boundary.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/py_src/statsig_python_core/observability_client.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/py_src/statsig_python_core/output_logger_provider.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/py_src/statsig_python_core/persistent_storage.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/py_src/statsig_python_core/py.typed +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/py_src/statsig_python_core/requirements.txt +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/py_src/statsig_python_core/statsig.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/py_src/statsig_python_core/statsig_python_core.pyi +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/data_store_base_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/lib.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/pyo_utils.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/safe_gil.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/statsig_base_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/statsig_options_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/statsig_types_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/statsig_user_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/unit_id_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/fork_runner.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/mock_scrapi.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_data_store.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_error_boundary.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_forking.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_observability_client.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_override_adapter.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_shutdown.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_statsig.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_statsig_options.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_statsig_user.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-pyo3/tests/utils.py +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/resources/ip_supalite.table +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/__tests__/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/compression/compression_helper.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/compression/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/dcs_str.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/evaluation_types.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/evaluator_result.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_logger.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/flush_type.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/gcir/gcir_process_iter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/global_configs.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/hashing/ahash.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/hashing/djb2.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/hashing/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/initialize_response.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/instance_registry.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/interned_string.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/interned_value_store.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/macros.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/http_types.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/network_client.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/network_error.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/providers/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/networking/proxy_config.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/observability/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/observability/ops_stats.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/output_logger.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/override_adapter/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/persistent_storage/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/sdk_event_emitter/event_types.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/spec_store.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_adapter/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_response/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_response/spec_directory.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/specs_response/spec_types.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/statsig_core_api_options.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/statsig_err.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/statsig_global.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/statsig_options.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/statsig_runtime.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/statsig_type_factories.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/statsig_types.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/user/into_optional.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/user/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/user/statsig_user.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/user/unit_id.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/user/user_data.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/utils/mod.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/check_gate_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/big_number_dcs.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/company_id_list +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/get_id_lists.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/test_user_agents.txt +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data/ua_string_cases.json +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/exposure_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/flushing_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/gcir_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/global_configs_test.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/instance_registry_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/list_methods_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/network_client_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/network_failure_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/output_logger_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/override_adapter_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/perf_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/spec_types_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_global_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_options_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/statsig_user_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/typed_getters_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/user_agent_tests_third_party.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/user_json_tests.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/utils/helpers.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
- {statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/tests/utils/mod.rs +0 -0
|
@@ -2373,7 +2373,7 @@ dependencies = [
|
|
|
2373
2373
|
|
|
2374
2374
|
[[package]]
|
|
2375
2375
|
name = "sigstat-grpc"
|
|
2376
|
-
version = "0.10.
|
|
2376
|
+
version = "0.10.2"
|
|
2377
2377
|
dependencies = [
|
|
2378
2378
|
"async-trait",
|
|
2379
2379
|
"chrono",
|
|
@@ -2437,7 +2437,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
|
|
|
2437
2437
|
|
|
2438
2438
|
[[package]]
|
|
2439
2439
|
name = "statsig-node"
|
|
2440
|
-
version = "0.10.
|
|
2440
|
+
version = "0.10.2"
|
|
2441
2441
|
dependencies = [
|
|
2442
2442
|
"async-trait",
|
|
2443
2443
|
"napi",
|
|
@@ -2451,7 +2451,7 @@ dependencies = [
|
|
|
2451
2451
|
|
|
2452
2452
|
[[package]]
|
|
2453
2453
|
name = "statsig-pyo3"
|
|
2454
|
-
version = "0.10.
|
|
2454
|
+
version = "0.10.2"
|
|
2455
2455
|
dependencies = [
|
|
2456
2456
|
"async-trait",
|
|
2457
2457
|
"lazy_static",
|
|
@@ -2465,7 +2465,7 @@ dependencies = [
|
|
|
2465
2465
|
|
|
2466
2466
|
[[package]]
|
|
2467
2467
|
name = "statsig-rust"
|
|
2468
|
-
version = "0.10.
|
|
2468
|
+
version = "0.10.2"
|
|
2469
2469
|
dependencies = [
|
|
2470
2470
|
"ahash",
|
|
2471
2471
|
"arc-swap",
|
|
@@ -2506,7 +2506,7 @@ dependencies = [
|
|
|
2506
2506
|
|
|
2507
2507
|
[[package]]
|
|
2508
2508
|
name = "statsig_elixir"
|
|
2509
|
-
version = "0.10.
|
|
2509
|
+
version = "0.10.2"
|
|
2510
2510
|
dependencies = [
|
|
2511
2511
|
"parking_lot",
|
|
2512
2512
|
"rustler",
|
|
@@ -2518,7 +2518,7 @@ dependencies = [
|
|
|
2518
2518
|
|
|
2519
2519
|
[[package]]
|
|
2520
2520
|
name = "statsig_ffi"
|
|
2521
|
-
version = "0.10.
|
|
2521
|
+
version = "0.10.2"
|
|
2522
2522
|
dependencies = [
|
|
2523
2523
|
"async-trait",
|
|
2524
2524
|
"cbindgen",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: statsig_python_core
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.2
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -38,7 +38,7 @@ serde_json = { version = "1.0.143", features = [
|
|
|
38
38
|
] }
|
|
39
39
|
serde_with = "3.4.0"
|
|
40
40
|
sha2 = "0.10.8"
|
|
41
|
-
sigstat-grpc = { path = "../statsig-grpc", version = "0.10.
|
|
41
|
+
sigstat-grpc = { path = "../statsig-grpc", version = "0.10.2", optional = true }
|
|
42
42
|
simple_logger = { version = "5.0.0" }
|
|
43
43
|
tempfile = "3.8.1"
|
|
44
44
|
tokio = { version = "1.39.1", features = ["full"] }
|
{statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/data_store_interface.rs
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
use std::fmt::Display;
|
|
2
2
|
|
|
3
3
|
use async_trait::async_trait;
|
|
4
|
+
use serde::{Deserialize, Serialize};
|
|
4
5
|
|
|
5
6
|
use crate::StatsigErr;
|
|
6
7
|
|
|
@@ -38,6 +39,7 @@ impl Display for CompressFormat {
|
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
41
|
|
|
42
|
+
#[derive(Deserialize, Serialize)]
|
|
41
43
|
pub struct DataStoreResponse {
|
|
42
44
|
pub result: Option<String>,
|
|
43
45
|
pub time: Option<u64>,
|
|
@@ -33,7 +33,7 @@ pub struct CMABRankedGroup {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
pub fn get_cmab_ranked_list(ctx: &mut EvaluatorContext, name: &str) -> Vec<CMABRankedGroup> {
|
|
36
|
-
let cmabs = match &ctx.
|
|
36
|
+
let cmabs = match &ctx.specs_data.cmab_configs {
|
|
37
37
|
Some(cmabs) => cmabs,
|
|
38
38
|
None => return vec![],
|
|
39
39
|
};
|
|
@@ -112,7 +112,7 @@ pub(crate) fn evaluate_cmab(
|
|
|
112
112
|
_ => return false,
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
let cmabs = match &ctx.
|
|
115
|
+
let cmabs = match &ctx.specs_data.cmab_configs {
|
|
116
116
|
Some(cmabs) => cmabs,
|
|
117
117
|
None => return false,
|
|
118
118
|
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
use crate::evaluation::evaluator_result::EvaluatorResult;
|
|
2
|
+
use crate::SpecsSource;
|
|
3
|
+
use serde::{Deserialize, Serialize};
|
|
4
|
+
|
|
5
|
+
#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
|
|
6
|
+
pub struct EvaluationDetails {
|
|
7
|
+
pub reason: String,
|
|
8
|
+
pub lcut: Option<u64>,
|
|
9
|
+
pub received_at: Option<u64>,
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
impl EvaluationDetails {
|
|
13
|
+
pub fn unrecognized(source: &SpecsSource, lcut: u64, received_at: Option<u64>) -> Self {
|
|
14
|
+
Self::create_from_data(
|
|
15
|
+
source,
|
|
16
|
+
lcut,
|
|
17
|
+
received_at,
|
|
18
|
+
"Unrecognized",
|
|
19
|
+
&EvaluatorResult::default(),
|
|
20
|
+
)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
pub fn recognized_without_eval_result(
|
|
24
|
+
source: &SpecsSource,
|
|
25
|
+
lcut: u64,
|
|
26
|
+
received_at: Option<u64>,
|
|
27
|
+
) -> Self {
|
|
28
|
+
Self::create_from_data(
|
|
29
|
+
source,
|
|
30
|
+
lcut,
|
|
31
|
+
received_at,
|
|
32
|
+
"Recognized",
|
|
33
|
+
&EvaluatorResult::default(),
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
pub fn recognized(
|
|
38
|
+
source: &SpecsSource,
|
|
39
|
+
lcut: u64,
|
|
40
|
+
received_at: Option<u64>,
|
|
41
|
+
eval_result: &EvaluatorResult,
|
|
42
|
+
) -> Self {
|
|
43
|
+
Self::create_from_data(source, lcut, received_at, "Recognized", eval_result)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
pub fn recognized_but_overridden(
|
|
47
|
+
lcut: u64,
|
|
48
|
+
received_at: Option<u64>,
|
|
49
|
+
override_reason: &str,
|
|
50
|
+
) -> Self {
|
|
51
|
+
Self {
|
|
52
|
+
reason: format!("{override_reason}:Recognized"),
|
|
53
|
+
lcut: Some(lcut),
|
|
54
|
+
received_at,
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
#[must_use]
|
|
59
|
+
pub fn unrecognized_no_data() -> Self {
|
|
60
|
+
Self {
|
|
61
|
+
reason: SpecsSource::NoValues.to_string(),
|
|
62
|
+
lcut: None,
|
|
63
|
+
received_at: None,
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
#[must_use]
|
|
68
|
+
pub fn error(sub_reason: &str) -> Self {
|
|
69
|
+
Self {
|
|
70
|
+
reason: format!("Error:{sub_reason}"),
|
|
71
|
+
lcut: None,
|
|
72
|
+
received_at: None,
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
fn create_from_data(
|
|
77
|
+
source: &SpecsSource,
|
|
78
|
+
lcut: u64,
|
|
79
|
+
received_at: Option<u64>,
|
|
80
|
+
sub_reason: &str,
|
|
81
|
+
eval_result: &EvaluatorResult,
|
|
82
|
+
) -> Self {
|
|
83
|
+
if *source == SpecsSource::Uninitialized || *source == SpecsSource::NoValues {
|
|
84
|
+
return Self {
|
|
85
|
+
reason: source.to_string(),
|
|
86
|
+
lcut: None,
|
|
87
|
+
received_at: None,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if eval_result.unsupported {
|
|
92
|
+
return Self {
|
|
93
|
+
reason: format!("{source}:Unsupported"),
|
|
94
|
+
lcut: Some(lcut),
|
|
95
|
+
received_at,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
Self {
|
|
100
|
+
reason: format!("{source}:{sub_reason}"),
|
|
101
|
+
lcut: Some(lcut),
|
|
102
|
+
received_at,
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
{statsig_python_core-0.10.1 → statsig_python_core-0.10.2}/statsig-rust/src/evaluation/evaluator.rs
RENAMED
|
@@ -7,9 +7,8 @@ use crate::evaluation::comparisons::{
|
|
|
7
7
|
compare_time, compare_versions,
|
|
8
8
|
};
|
|
9
9
|
use crate::evaluation::dynamic_value::DynamicValue;
|
|
10
|
-
use crate::evaluation::evaluation_details::EvaluationDetails;
|
|
11
10
|
use crate::evaluation::evaluation_types::SecondaryExposure;
|
|
12
|
-
use crate::evaluation::evaluator_context::EvaluatorContext;
|
|
11
|
+
use crate::evaluation::evaluator_context::{EvaluatorContext, IdListResolution};
|
|
13
12
|
use crate::evaluation::evaluator_value::{EvaluatorValue, MemoizedEvaluatorValue};
|
|
14
13
|
use crate::evaluation::get_unit_id::get_unit_id;
|
|
15
14
|
use crate::evaluation::user_agent_parsing::UserAgentParser;
|
|
@@ -46,40 +45,16 @@ pub enum Recognition {
|
|
|
46
45
|
}
|
|
47
46
|
|
|
48
47
|
impl Evaluator {
|
|
49
|
-
pub fn evaluate_with_details(
|
|
50
|
-
ctx: &mut EvaluatorContext,
|
|
51
|
-
spec_name: &str,
|
|
52
|
-
spec_type: &SpecType,
|
|
53
|
-
) -> Result<EvaluationDetails, StatsigErr> {
|
|
54
|
-
let recognition = Self::evaluate(ctx, spec_name, spec_type)?;
|
|
55
|
-
|
|
56
|
-
if recognition == Recognition::Unrecognized {
|
|
57
|
-
return Ok(EvaluationDetails::unrecognized(ctx.spec_store_data));
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if let Some(reason) = ctx.result.override_reason {
|
|
61
|
-
return Ok(EvaluationDetails::recognized_but_overridden(
|
|
62
|
-
ctx.spec_store_data,
|
|
63
|
-
reason,
|
|
64
|
-
));
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
Ok(EvaluationDetails::recognized(
|
|
68
|
-
ctx.spec_store_data,
|
|
69
|
-
&ctx.result,
|
|
70
|
-
))
|
|
71
|
-
}
|
|
72
|
-
|
|
73
48
|
pub fn evaluate(
|
|
74
49
|
ctx: &mut EvaluatorContext,
|
|
75
50
|
spec_name: &str,
|
|
76
51
|
spec_type: &SpecType,
|
|
77
52
|
) -> Result<Recognition, StatsigErr> {
|
|
78
53
|
let opt_addressable_spec = match spec_type {
|
|
79
|
-
SpecType::Gate => ctx.
|
|
80
|
-
SpecType::DynamicConfig => ctx.
|
|
81
|
-
SpecType::Experiment => ctx.
|
|
82
|
-
SpecType::Layer => ctx.
|
|
54
|
+
SpecType::Gate => ctx.specs_data.feature_gates.get(spec_name),
|
|
55
|
+
SpecType::DynamicConfig => ctx.specs_data.dynamic_configs.get(spec_name),
|
|
56
|
+
SpecType::Experiment => ctx.specs_data.dynamic_configs.get(spec_name),
|
|
57
|
+
SpecType::Layer => ctx.specs_data.layer_configs.get(spec_name),
|
|
83
58
|
};
|
|
84
59
|
|
|
85
60
|
let opt_spec = opt_addressable_spec.map(|a| a.spec.as_ref());
|
|
@@ -178,12 +153,12 @@ fn try_apply_config_mapping(
|
|
|
178
153
|
spec_type: &SpecType,
|
|
179
154
|
opt_spec: Option<&Spec>,
|
|
180
155
|
) -> bool {
|
|
181
|
-
let overrides = match &ctx.
|
|
156
|
+
let overrides = match &ctx.specs_data.overrides {
|
|
182
157
|
Some(overrides) => overrides,
|
|
183
158
|
None => return false,
|
|
184
159
|
};
|
|
185
160
|
|
|
186
|
-
let override_rules = match &ctx.
|
|
161
|
+
let override_rules = match &ctx.specs_data.override_rules {
|
|
187
162
|
Some(override_rules) => override_rules,
|
|
188
163
|
None => return false,
|
|
189
164
|
};
|
|
@@ -275,7 +250,7 @@ fn evaluate_rule<'a>(ctx: &mut EvaluatorContext<'a>, rule: &'a Rule) -> Result<(
|
|
|
275
250
|
// println!("--- Eval Rule {} ---", rule.id);
|
|
276
251
|
for condition_hash in &rule.conditions {
|
|
277
252
|
// println!("Condition Hash {}", condition_hash);
|
|
278
|
-
let opt_condition = ctx.
|
|
253
|
+
let opt_condition = ctx.specs_data.condition_map.get(condition_hash);
|
|
279
254
|
let condition = if let Some(c) = opt_condition {
|
|
280
255
|
c
|
|
281
256
|
} else {
|
|
@@ -429,22 +404,35 @@ fn evaluate_id_list(
|
|
|
429
404
|
target_value: &MemoizedEvaluatorValue,
|
|
430
405
|
value: &DynamicValue,
|
|
431
406
|
) -> bool {
|
|
432
|
-
let
|
|
433
|
-
let id_lists = &ctx.spec_store_data.id_lists;
|
|
407
|
+
let is_in_list = is_in_id_list(ctx, target_value, value);
|
|
434
408
|
|
|
435
|
-
|
|
409
|
+
if op == "not_in_segment_list" {
|
|
410
|
+
return !is_in_list;
|
|
411
|
+
}
|
|
436
412
|
|
|
413
|
+
is_in_list
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
fn is_in_id_list(
|
|
417
|
+
ctx: &mut EvaluatorContext<'_>,
|
|
418
|
+
target_value: &MemoizedEvaluatorValue,
|
|
419
|
+
value: &DynamicValue,
|
|
420
|
+
) -> bool {
|
|
421
|
+
let list_name = unwrap_or_return!(&target_value.string_value, false);
|
|
437
422
|
let dyn_str = unwrap_or_return!(&value.string_value, false);
|
|
438
423
|
let hashed = ctx.hashing.sha256(&dyn_str.value);
|
|
439
424
|
let lookup_id: String = hashed.chars().take(8).collect();
|
|
440
425
|
|
|
441
|
-
|
|
426
|
+
match ctx.id_list_resolver {
|
|
427
|
+
IdListResolution::MapLookup(id_lists) => {
|
|
428
|
+
let list = unwrap_or_return!(id_lists.get(list_name.value.as_str()), false);
|
|
442
429
|
|
|
443
|
-
|
|
444
|
-
|
|
430
|
+
list.ids.contains(&lookup_id)
|
|
431
|
+
}
|
|
432
|
+
IdListResolution::Callback(callback) => {
|
|
433
|
+
callback(list_name.value.as_str(), lookup_id.as_str())
|
|
434
|
+
}
|
|
445
435
|
}
|
|
446
|
-
|
|
447
|
-
is_in_list
|
|
448
436
|
}
|
|
449
437
|
|
|
450
438
|
fn evaluate_nested_gate<'a>(
|
|
@@ -507,10 +495,7 @@ fn evaluate_config_delegate<'a>(
|
|
|
507
495
|
rule: &'a Rule,
|
|
508
496
|
) -> Result<bool, StatsigErr> {
|
|
509
497
|
let delegate = unwrap_or_return!(&rule.config_delegate, Ok(false));
|
|
510
|
-
let delegate_spec = unwrap_or_return!(
|
|
511
|
-
ctx.spec_store_data.values.dynamic_configs.get(delegate),
|
|
512
|
-
Ok(false)
|
|
513
|
-
);
|
|
498
|
+
let delegate_spec = unwrap_or_return!(ctx.specs_data.dynamic_configs.get(delegate), Ok(false));
|
|
514
499
|
|
|
515
500
|
ctx.result.undelegated_secondary_exposures = Some(ctx.result.secondary_exposures.clone());
|
|
516
501
|
|
|
@@ -4,18 +4,24 @@ use std::sync::Arc;
|
|
|
4
4
|
use crate::evaluation::dynamic_value::DynamicValue;
|
|
5
5
|
use crate::evaluation::evaluator_result::EvaluatorResult;
|
|
6
6
|
use crate::hashing::HashUtil;
|
|
7
|
+
use crate::id_lists_adapter::IdList;
|
|
7
8
|
use crate::interned_string::InternedString;
|
|
8
|
-
use crate::
|
|
9
|
-
use crate::specs_response::spec_types::{Rule, Spec};
|
|
9
|
+
use crate::specs_response::spec_types::{Rule, Spec, SpecsResponseFull};
|
|
10
10
|
use crate::user::StatsigUserInternal;
|
|
11
11
|
use crate::StatsigErr::StackOverflowError;
|
|
12
12
|
use crate::{OverrideAdapter, StatsigErr};
|
|
13
13
|
|
|
14
14
|
const MAX_RECURSIVE_DEPTH: u16 = 300;
|
|
15
15
|
|
|
16
|
+
pub enum IdListResolution<'a> {
|
|
17
|
+
MapLookup(&'a HashMap<String, IdList>),
|
|
18
|
+
Callback(&'a dyn Fn(&str, &str) -> bool),
|
|
19
|
+
}
|
|
20
|
+
|
|
16
21
|
pub struct EvaluatorContext<'a> {
|
|
17
22
|
pub user: &'a StatsigUserInternal<'a, 'a>,
|
|
18
|
-
pub
|
|
23
|
+
pub specs_data: &'a SpecsResponseFull,
|
|
24
|
+
pub id_list_resolver: IdListResolution<'a>,
|
|
19
25
|
pub hashing: &'a HashUtil,
|
|
20
26
|
pub result: EvaluatorResult<'a>,
|
|
21
27
|
pub nested_count: u16,
|
|
@@ -28,7 +34,8 @@ pub struct EvaluatorContext<'a> {
|
|
|
28
34
|
impl<'a> EvaluatorContext<'a> {
|
|
29
35
|
pub fn new(
|
|
30
36
|
user: &'a StatsigUserInternal,
|
|
31
|
-
|
|
37
|
+
specs_data: &'a SpecsResponseFull,
|
|
38
|
+
id_list_resolver: IdListResolution<'a>,
|
|
32
39
|
hashing: &'a HashUtil,
|
|
33
40
|
app_id: Option<&'a DynamicValue>,
|
|
34
41
|
override_adapter: Option<&'a Arc<dyn OverrideAdapter>>,
|
|
@@ -38,7 +45,8 @@ impl<'a> EvaluatorContext<'a> {
|
|
|
38
45
|
|
|
39
46
|
Self {
|
|
40
47
|
user,
|
|
41
|
-
|
|
48
|
+
specs_data,
|
|
49
|
+
id_list_resolver,
|
|
42
50
|
hashing,
|
|
43
51
|
app_id,
|
|
44
52
|
result,
|
|
@@ -51,12 +51,12 @@ pub(crate) fn get_dynamic_config_evaluations(
|
|
|
51
51
|
context,
|
|
52
52
|
options,
|
|
53
53
|
sec_expo_hash_memo,
|
|
54
|
-
&context.
|
|
54
|
+
&context.specs_data.dynamic_configs,
|
|
55
55
|
get_dynamic_config_type,
|
|
56
56
|
factory,
|
|
57
57
|
)?;
|
|
58
58
|
|
|
59
|
-
let cmab_configs = match &context.
|
|
59
|
+
let cmab_configs = match &context.specs_data.cmab_configs {
|
|
60
60
|
Some(cmab_configs) => cmab_configs,
|
|
61
61
|
None => return Ok(result),
|
|
62
62
|
};
|
|
@@ -131,12 +131,12 @@ pub(crate) fn get_dynamic_config_evaluations_v2(
|
|
|
131
131
|
context,
|
|
132
132
|
options,
|
|
133
133
|
sec_expo_hash_memo,
|
|
134
|
-
&context.
|
|
134
|
+
&context.specs_data.dynamic_configs,
|
|
135
135
|
get_dynamic_config_type,
|
|
136
136
|
factory,
|
|
137
137
|
)?;
|
|
138
138
|
|
|
139
|
-
let cmab_configs = match &context.
|
|
139
|
+
let cmab_configs = match &context.specs_data.cmab_configs {
|
|
140
140
|
Some(cmab_configs) => cmab_configs,
|
|
141
141
|
None => return Ok(result),
|
|
142
142
|
};
|
|
@@ -35,7 +35,7 @@ pub(crate) fn get_gate_evaluations(
|
|
|
35
35
|
context,
|
|
36
36
|
options,
|
|
37
37
|
sec_expo_hash_memo,
|
|
38
|
-
&context.
|
|
38
|
+
&context.specs_data.feature_gates,
|
|
39
39
|
get_gate_spec_type,
|
|
40
40
|
factory,
|
|
41
41
|
)
|
|
@@ -60,7 +60,7 @@ pub(crate) fn get_gate_evaluations_v2(
|
|
|
60
60
|
context,
|
|
61
61
|
options,
|
|
62
62
|
sec_expo_hash_memo,
|
|
63
|
-
&context.
|
|
63
|
+
&context.specs_data.feature_gates,
|
|
64
64
|
get_gate_spec_type,
|
|
65
65
|
factory,
|
|
66
66
|
)
|