wingify-fme-python-sdk 1.61.0__tar.gz → 1.65.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.
- {wingify_fme_python_sdk-1.61.0/wingify_fme_python_sdk.egg-info → wingify_fme_python_sdk-1.65.0}/PKG-INFO +669 -13
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/README.md +668 -12
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/setup.py +1 -1
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/constants/Constants.py +4 -1
- wingify_fme_python_sdk-1.65.0/wingify/constants/sampled_debug_error_template_keys.py +34 -0
- wingify_fme_python_sdk-1.65.0/wingify/models/settings/internal_event_sampling_settings_model.py +53 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/settings/settings_model.py +19 -2
- wingify_fme_python_sdk-1.65.0/wingify/services/internal_events_sampling_service.py +62 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/debugger_service_util.py +16 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/event_util.py +19 -8
- wingify_fme_python_sdk-1.65.0/wingify/utils/internal_events_sampling_util.py +106 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/network_util.py +21 -15
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/wingify.py +17 -10
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0/wingify_fme_python_sdk.egg-info}/PKG-INFO +669 -13
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify_fme_python_sdk.egg-info/SOURCES.txt +4 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/LICENSE +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/MANIFEST.in +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/NOTICE +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/requirements-dev.txt +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/requirements.txt +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/setup.cfg +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/vwo/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/vwo/vwo.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/vwo/vwo_builder.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/vwo/vwo_client.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/api/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/api/get_flag_api.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/api/set_attribute_api.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/api/track_api.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/constants/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/decorators/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/decorators/storage_decorator.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/enums/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/enums/api_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/enums/campaign_type_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/enums/debug_category_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/enums/event_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/enums/headers_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/enums/hooks_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/enums/status_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/enums/storage_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/enums/url_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/Alias.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/AliasSetResponse.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/batch_event_data.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/campaign/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/campaign/campaign_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/campaign/feature_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/campaign/holdout_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/campaign/impact_campaign_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/campaign/metric_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/campaign/rule_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/campaign/variable_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/campaign/variation_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/gateway_service_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/campaign_group_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/campaign_metric_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/campaign_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/campaign_variation_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/empty_object_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/feature_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/group_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/holdout_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/rule_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/settings_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/schemas/variable_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/settings/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/storage/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/storage/storage_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/user/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/user/context_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/user/context_vwo_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/user/get_flag.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/vwo_options_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/models/wingify_options_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/decision_maker/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/decision_maker/decision_maker.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/core/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/core/log_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/core/log_transport_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/enums/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/enums/log_level_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/enums/log_level_number_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/log_message_builder.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/logger.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/transports/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/logger/transports/console_transport.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/client/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/client/network_client.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/handlers/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/handlers/request_handler.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/manager/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/manager/network_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/models/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/models/global_request_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/models/request_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/network_layer/models/response_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/core/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/core/segmentation_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/enums/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/enums/segment_operand_regex_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/enums/segment_operand_value_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/enums/segment_operator_value_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/evaluators/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/evaluators/segment_evaluator.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/evaluators/segment_operand_evaluator.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/utils/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/utils/segment_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/segmentation_evaluator/utils/web_testing_segment_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/storage/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/storage/connector.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/packages/storage/storage.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/resources/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/resources/debug-messages.json +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/resources/error-messages.json +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/resources/info-message.json +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/resources/trace-messages.json +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/resources/warn-messages.json +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/services/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/services/batch_event_queue.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/services/campaign_decision_service.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/services/hooks_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/services/settings_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/services/storage_service.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/services/url_service.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/aliasing_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/brand_context.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/brand_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/campaign_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/data_type_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/decision_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/function_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/gateway_service_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/holdout_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/impression_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/log_message_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/meg_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/model_utils.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/rule_evaluation_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/settings_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/usage_stats_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/utils/uuid_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/vwo_client.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/wingify_builder.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify/wingify_client.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify_fme_python_sdk.egg-info/dependency_links.txt +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify_fme_python_sdk.egg-info/requires.txt +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.65.0}/wingify_fme_python_sdk.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: wingify-fme-python-sdk
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.65.0
|
|
4
4
|
Summary: Wingify Feature Management and Experimentation SDK for Python
|
|
5
5
|
Home-page: https://github.com/wingify/vwo-fme-python-sdk
|
|
6
6
|
Author: Wingify
|
|
@@ -44,13 +44,35 @@ The **VWO Feature Management and Experimentation SDK** (VWO FME Python SDK) enab
|
|
|
44
44
|
|
|
45
45
|
It's recommended you use [virtualenv](https://virtualenv.pypa.io/en/latest/) to create isolated Python environments.
|
|
46
46
|
|
|
47
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
48
|
+
|
|
49
|
+
<details>
|
|
50
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
51
|
+
|
|
47
52
|
```bash
|
|
48
53
|
pip install vwo-fme-python-sdk
|
|
49
54
|
```
|
|
50
55
|
|
|
56
|
+
</details>
|
|
57
|
+
|
|
58
|
+
<details>
|
|
59
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
pip install wingify-fme-python-sdk
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
</details>
|
|
66
|
+
|
|
51
67
|
## Basic Usage Example
|
|
52
68
|
|
|
53
69
|
The following example demonstrates initializing the SDK with a VWO account ID and SDK key, setting a user context, checking if a feature flag is enabled, and tracking a custom event.
|
|
70
|
+
|
|
71
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
72
|
+
|
|
73
|
+
<details>
|
|
74
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
75
|
+
|
|
54
76
|
```python
|
|
55
77
|
from vwo import init
|
|
56
78
|
|
|
@@ -77,6 +99,39 @@ vwo_client.track_event('event_name', user_context, event_properties)
|
|
|
77
99
|
vwo_client.set_attribute('attribute_key', 'attribute_value', user_context)
|
|
78
100
|
```
|
|
79
101
|
|
|
102
|
+
</details>
|
|
103
|
+
|
|
104
|
+
<details>
|
|
105
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
from wingify import init
|
|
109
|
+
|
|
110
|
+
options = {
|
|
111
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
112
|
+
'account_id': '123456' # Wingify Account ID
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
wingify_client = init(options)
|
|
116
|
+
|
|
117
|
+
# set user context
|
|
118
|
+
user_context = {'id': 'unique_user_id'}
|
|
119
|
+
# returns a flag object
|
|
120
|
+
get_flag = wingify_client.get_flag('feature_key', user_context)
|
|
121
|
+
# check if flag is enabled
|
|
122
|
+
is_enabled = get_flag.is_enabled()
|
|
123
|
+
# get varible
|
|
124
|
+
int_var = get_flag.get_variable('int_variable_key', 'default_value')
|
|
125
|
+
|
|
126
|
+
# track event
|
|
127
|
+
wingify_client.track_event('event_name', user_context, event_properties)
|
|
128
|
+
|
|
129
|
+
# set attribute
|
|
130
|
+
wingify_client.set_attribute('attribute_key', 'attribute_value', user_context)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
</details>
|
|
134
|
+
|
|
80
135
|
## Utility Functions
|
|
81
136
|
|
|
82
137
|
### getUUID
|
|
@@ -85,10 +140,26 @@ The `getUUID` function generates a deterministic UUID for a given user and accou
|
|
|
85
140
|
|
|
86
141
|
#### Function Signature
|
|
87
142
|
|
|
143
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
144
|
+
|
|
145
|
+
<details>
|
|
146
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
147
|
+
|
|
88
148
|
```python
|
|
89
149
|
vwo.getUUID(user_id: str, account_id: str) -> Optional[str]
|
|
90
150
|
```
|
|
91
151
|
|
|
152
|
+
</details>
|
|
153
|
+
|
|
154
|
+
<details>
|
|
155
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
wingify.getUUID(user_id: str, account_id: str) -> Optional[str]
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
</details>
|
|
162
|
+
|
|
92
163
|
#### Parameters
|
|
93
164
|
|
|
94
165
|
| **Parameter** | **Description** | **Required** | **Type** |
|
|
@@ -103,6 +174,11 @@ vwo.getUUID(user_id: str, account_id: str) -> Optional[str]
|
|
|
103
174
|
|
|
104
175
|
#### Example
|
|
105
176
|
|
|
177
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
178
|
+
|
|
179
|
+
<details>
|
|
180
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
181
|
+
|
|
106
182
|
```python
|
|
107
183
|
import vwo
|
|
108
184
|
|
|
@@ -116,6 +192,26 @@ print('Generated UUID:', uuid)
|
|
|
116
192
|
# Output: Generated UUID: CC25A368ADA0542699EAD62489811105
|
|
117
193
|
```
|
|
118
194
|
|
|
195
|
+
</details>
|
|
196
|
+
|
|
197
|
+
<details>
|
|
198
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
199
|
+
|
|
200
|
+
```python
|
|
201
|
+
import wingify
|
|
202
|
+
|
|
203
|
+
# Generate UUID for a user
|
|
204
|
+
userId = 'user-123'
|
|
205
|
+
accountId = '123456'
|
|
206
|
+
|
|
207
|
+
uuid = wingify.getUUID(userId, accountId)
|
|
208
|
+
|
|
209
|
+
print('Generated UUID:', uuid)
|
|
210
|
+
# Output: Generated UUID: CC25A368ADA0542699EAD62489811105
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
</details>
|
|
214
|
+
|
|
119
215
|
#### Use Cases
|
|
120
216
|
|
|
121
217
|
- Generate consistent UUIDs for users across different services
|
|
@@ -124,7 +220,7 @@ print('Generated UUID:', uuid)
|
|
|
124
220
|
|
|
125
221
|
## Advanced Configuration Options
|
|
126
222
|
|
|
127
|
-
To customize the SDK further, additional parameters can be passed to the `init()` API. Here
|
|
223
|
+
To customize the SDK further, additional parameters can be passed to the `init()` API. Here's a table describing each option:
|
|
128
224
|
|
|
129
225
|
| **Parameter** | **Description** | **Required** | **Type** | **Example** |
|
|
130
226
|
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -------- | ------------------------------- |
|
|
@@ -167,13 +263,12 @@ context = {
|
|
|
167
263
|
},
|
|
168
264
|
'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
|
|
169
265
|
'ip_address': '1.1.1.1',
|
|
170
|
-
'session_id': 1697123456 # Optional: Custom session ID for web client integration
|
|
266
|
+
'session_id': 1697123456, # Optional: Custom session ID for web client integration
|
|
171
267
|
'platformVariables': {
|
|
172
268
|
# Reference example only:.
|
|
173
269
|
# In production, fetch campaign assignments using script run in frontend and pass that object to backend as webTestingCampaigns.
|
|
174
270
|
'webTestingCampaigns': '{"122":"1","130":"2"}'
|
|
175
|
-
}
|
|
176
|
-
'session_id': 1697123456 # Optional: Custom session ID for web client integration
|
|
271
|
+
}
|
|
177
272
|
}
|
|
178
273
|
```
|
|
179
274
|
|
|
@@ -209,6 +304,11 @@ You can access and manage session IDs through the following methods:
|
|
|
209
304
|
|
|
210
305
|
### Example Usage
|
|
211
306
|
|
|
307
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
308
|
+
|
|
309
|
+
<details>
|
|
310
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
311
|
+
|
|
212
312
|
```python
|
|
213
313
|
from vwo import init
|
|
214
314
|
|
|
@@ -228,8 +328,39 @@ session_id = flag.get_session_id()
|
|
|
228
328
|
print(f"Session ID for web client: {session_id}")
|
|
229
329
|
```
|
|
230
330
|
|
|
331
|
+
</details>
|
|
332
|
+
|
|
333
|
+
<details>
|
|
334
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
335
|
+
|
|
336
|
+
```python
|
|
337
|
+
from wingify import init
|
|
338
|
+
|
|
339
|
+
options = {
|
|
340
|
+
'sdk_key': '32-alpha-numeric-sdk-key',
|
|
341
|
+
'account_id': '123456'
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
wingify_client = init(options)
|
|
345
|
+
|
|
346
|
+
# Session ID is automatically generated if not provided
|
|
347
|
+
context = {'id': 'user-123'}
|
|
348
|
+
flag = wingify_client.get_flag('feature-key', context)
|
|
349
|
+
|
|
350
|
+
# Access the session ID to pass to web client for session recording
|
|
351
|
+
session_id = flag.get_session_id()
|
|
352
|
+
print(f"Session ID for web client: {session_id}")
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
</details>
|
|
356
|
+
|
|
231
357
|
You can also explicitly set a session ID to match a web client session:
|
|
232
358
|
|
|
359
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
360
|
+
|
|
361
|
+
<details>
|
|
362
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
363
|
+
|
|
233
364
|
```python
|
|
234
365
|
from vwo import init
|
|
235
366
|
|
|
@@ -243,6 +374,26 @@ context_with_session = {
|
|
|
243
374
|
flag = vwo_client.get_flag('feature-key', context_with_session)
|
|
244
375
|
```
|
|
245
376
|
|
|
377
|
+
</details>
|
|
378
|
+
|
|
379
|
+
<details>
|
|
380
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
381
|
+
|
|
382
|
+
```python
|
|
383
|
+
from wingify import init
|
|
384
|
+
|
|
385
|
+
wingify_client = init(options)
|
|
386
|
+
|
|
387
|
+
context_with_session = {
|
|
388
|
+
'id': 'user-123',
|
|
389
|
+
'session_id': 1697123456 # Custom session ID matching web client
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
flag = wingify_client.get_flag('feature-key', context_with_session)
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
</details>
|
|
396
|
+
|
|
246
397
|
This enhancement enables seamless integration between server-side feature flag decisions and client-side session recording, allowing for comprehensive user behavior analysis across both server and client environments.
|
|
247
398
|
|
|
248
399
|
### Basic Feature Flagging
|
|
@@ -258,6 +409,11 @@ The `get_flag()` method provides a simple way to check if a feature is enabled f
|
|
|
258
409
|
|
|
259
410
|
Example usage:
|
|
260
411
|
|
|
412
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
413
|
+
|
|
414
|
+
<details>
|
|
415
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
416
|
+
|
|
261
417
|
```python
|
|
262
418
|
feature_flag = vwo_client.get_flag("feature_key", context)
|
|
263
419
|
is_enabled = feature_flag.is_enabled()
|
|
@@ -272,6 +428,27 @@ else:
|
|
|
272
428
|
print("Feature is not enabled!")
|
|
273
429
|
```
|
|
274
430
|
|
|
431
|
+
</details>
|
|
432
|
+
|
|
433
|
+
<details>
|
|
434
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
435
|
+
|
|
436
|
+
```python
|
|
437
|
+
feature_flag = wingify_client.get_flag("feature_key", context)
|
|
438
|
+
is_enabled = feature_flag.is_enabled()
|
|
439
|
+
|
|
440
|
+
if is_enabled:
|
|
441
|
+
print("Feature is enabled!")
|
|
442
|
+
|
|
443
|
+
# Get and use feature variable with type safety
|
|
444
|
+
variable_value = feature_flag.get_variable('feature_variable', 'default_value')
|
|
445
|
+
print("Variable value: " + variable_value)
|
|
446
|
+
else:
|
|
447
|
+
print("Feature is not enabled!")
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
</details>
|
|
451
|
+
|
|
275
452
|
### Custom Event Tracking
|
|
276
453
|
|
|
277
454
|
Feature flags can be enhanced with connected metrics to track key performance indicators (KPIs) for your features. These metrics help measure the effectiveness of your testing rules by comparing control versus variation performance, and evaluate the impact of personalization and rollout campaigns. Use the `track_event()` method to track custom events like conversions, user interactions, and other important metrics:
|
|
@@ -284,10 +461,26 @@ Feature flags can be enhanced with connected metrics to track key performance in
|
|
|
284
461
|
|
|
285
462
|
Example usage:
|
|
286
463
|
|
|
464
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
465
|
+
|
|
466
|
+
<details>
|
|
467
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
468
|
+
|
|
287
469
|
```python
|
|
288
470
|
vwo_client.track_event('event_name', context, event_properties)
|
|
289
471
|
```
|
|
290
472
|
|
|
473
|
+
</details>
|
|
474
|
+
|
|
475
|
+
<details>
|
|
476
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
477
|
+
|
|
478
|
+
```python
|
|
479
|
+
wingify_client.track_event('event_name', context, event_properties)
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
</details>
|
|
483
|
+
|
|
291
484
|
### Pushing Attributes
|
|
292
485
|
|
|
293
486
|
User attributes provide rich contextual information about users, enabling powerful personalization. The `set_attribute()` method in VWOClient provides a simple way to associate these attributes with users in VWO for advanced segmentation. The method accepts an attribute key, value, and dictionary containing the user information. Here's what you need to know about the method parameters:
|
|
@@ -300,10 +493,26 @@ User attributes provide rich contextual information about users, enabling powerf
|
|
|
300
493
|
|
|
301
494
|
Example usage:
|
|
302
495
|
|
|
496
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
497
|
+
|
|
498
|
+
<details>
|
|
499
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
500
|
+
|
|
303
501
|
```python
|
|
304
502
|
vwo_client.set_attribute('attribute_key', 'attribute_value', context)
|
|
305
503
|
```
|
|
306
504
|
|
|
505
|
+
</details>
|
|
506
|
+
|
|
507
|
+
<details>
|
|
508
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
509
|
+
|
|
510
|
+
```python
|
|
511
|
+
wingify_client.set_attribute('attribute_key', 'attribute_value', context)
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
</details>
|
|
515
|
+
|
|
307
516
|
### Polling Interval Adjustment
|
|
308
517
|
|
|
309
518
|
The `poll_interval` is an optional parameter that allows the SDK to automatically fetch and update settings from the VWO server at specified intervals. The polling interval can be configured in three ways:
|
|
@@ -314,6 +523,11 @@ The `poll_interval` is an optional parameter that allows the SDK to automaticall
|
|
|
314
523
|
|
|
315
524
|
Setting this parameter ensures your application always uses the latest configuration by periodically checking for and applying any updates.
|
|
316
525
|
|
|
526
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
527
|
+
|
|
528
|
+
<details>
|
|
529
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
530
|
+
|
|
317
531
|
```python
|
|
318
532
|
options = {
|
|
319
533
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
@@ -324,6 +538,23 @@ options = {
|
|
|
324
538
|
vwo_client = init(options)
|
|
325
539
|
```
|
|
326
540
|
|
|
541
|
+
</details>
|
|
542
|
+
|
|
543
|
+
<details>
|
|
544
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
545
|
+
|
|
546
|
+
```python
|
|
547
|
+
options = {
|
|
548
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
549
|
+
'account_id': '123456', # Wingify Account ID
|
|
550
|
+
'poll_interval': 60000 # Set the poll interval to 60 seconds
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
wingify_client = init(options)
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
</details>
|
|
557
|
+
|
|
327
558
|
### Gateway
|
|
328
559
|
|
|
329
560
|
The VWO FME Gateway Service is an optional but powerful component that enhances VWO's Feature Management and Experimentation (FME) SDKs. It acts as a critical intermediary for pre-segmentation capabilities based on user location and user agent (UA). By deploying this service within your infrastructure, you benefit from minimal latency and strengthened security for all FME operations.
|
|
@@ -340,6 +571,11 @@ The Gateway Service is required in the following scenarios:
|
|
|
340
571
|
|
|
341
572
|
The gateway can be customized by passing the `gateway_service` parameter in the `init` configuration.
|
|
342
573
|
|
|
574
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
575
|
+
|
|
576
|
+
<details>
|
|
577
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
578
|
+
|
|
343
579
|
```python
|
|
344
580
|
options = {
|
|
345
581
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
@@ -351,6 +587,24 @@ options = {
|
|
|
351
587
|
vwo_client = init(options)
|
|
352
588
|
```
|
|
353
589
|
|
|
590
|
+
</details>
|
|
591
|
+
|
|
592
|
+
<details>
|
|
593
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
594
|
+
|
|
595
|
+
```python
|
|
596
|
+
options = {
|
|
597
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
598
|
+
'account_id': '123456', # Wingify Account ID
|
|
599
|
+
'gateway_service': {
|
|
600
|
+
'url': 'http://custom.gateway.com'
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
wingify_client = init(options)
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
</details>
|
|
607
|
+
|
|
354
608
|
### User Aliasing
|
|
355
609
|
|
|
356
610
|
User aliasing allows you to create consistent user experiences across different user identifiers. This is useful when users can be identified by multiple IDs (e.g., anonymous ID, authenticated ID, email), and you want to maintain consistent feature flag decisions across these identifiers.
|
|
@@ -366,6 +620,11 @@ User aliasing requires:
|
|
|
366
620
|
|
|
367
621
|
To enable user aliasing, configure both the gateway service and the aliasing flag:
|
|
368
622
|
|
|
623
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
624
|
+
|
|
625
|
+
<details>
|
|
626
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
627
|
+
|
|
369
628
|
```python
|
|
370
629
|
from vwo import init
|
|
371
630
|
|
|
@@ -383,10 +642,39 @@ options = {
|
|
|
383
642
|
vwo_client = init(options)
|
|
384
643
|
```
|
|
385
644
|
|
|
645
|
+
</details>
|
|
646
|
+
|
|
647
|
+
<details>
|
|
648
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
649
|
+
|
|
650
|
+
```python
|
|
651
|
+
from wingify import init
|
|
652
|
+
|
|
653
|
+
options = {
|
|
654
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
655
|
+
'account_id': '123456', # Wingify Account ID
|
|
656
|
+
# set gateway service
|
|
657
|
+
'gateway_service': {
|
|
658
|
+
'url': 'http://custom.gateway.com'
|
|
659
|
+
},
|
|
660
|
+
# enable aliasing
|
|
661
|
+
'is_aliasing_enabled': True,
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
wingify_client = init(options)
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
</details>
|
|
668
|
+
|
|
386
669
|
#### Setting User Alias
|
|
387
670
|
|
|
388
671
|
Use the `set_alias()` method to create an alias relationship between a user ID and an alias ID:
|
|
389
672
|
|
|
673
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
674
|
+
|
|
675
|
+
<details>
|
|
676
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
677
|
+
|
|
390
678
|
```python
|
|
391
679
|
# Method 1: Using user ID and alias ID directly
|
|
392
680
|
is_alias_set = vwo_client.set_alias('user-123', 'alias-456')
|
|
@@ -396,6 +684,22 @@ context = {'id': 'user-123'}
|
|
|
396
684
|
is_alias_set = vwo_client.set_alias(context, 'alias-456')
|
|
397
685
|
```
|
|
398
686
|
|
|
687
|
+
</details>
|
|
688
|
+
|
|
689
|
+
<details>
|
|
690
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
691
|
+
|
|
692
|
+
```python
|
|
693
|
+
# Method 1: Using user ID and alias ID directly
|
|
694
|
+
is_alias_set = wingify_client.set_alias('user-123', 'alias-456')
|
|
695
|
+
|
|
696
|
+
# Method 2: Using context dict and alias ID
|
|
697
|
+
context = {'id': 'user-123'}
|
|
698
|
+
is_alias_set = wingify_client.set_alias(context, 'alias-456')
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
</details>
|
|
702
|
+
|
|
399
703
|
### Proxy URL
|
|
400
704
|
|
|
401
705
|
The `proxy_url` parameter allows you to redirect all SDK network calls through a custom proxy server. This feature enables you to route all SDK network requests (settings, tracking, etc.) through your own proxy server, providing better control over network traffic and security.
|
|
@@ -404,6 +708,11 @@ The `proxy_url` parameter allows you to redirect all SDK network calls through a
|
|
|
404
708
|
|
|
405
709
|
The proxy URL can be configured by passing the `proxy_url` parameter in the `init` configuration.
|
|
406
710
|
|
|
711
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
712
|
+
|
|
713
|
+
<details>
|
|
714
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
715
|
+
|
|
407
716
|
```python
|
|
408
717
|
options = {
|
|
409
718
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
@@ -413,6 +722,24 @@ options = {
|
|
|
413
722
|
|
|
414
723
|
vwo_client = init(options)
|
|
415
724
|
```
|
|
725
|
+
|
|
726
|
+
</details>
|
|
727
|
+
|
|
728
|
+
<details>
|
|
729
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
730
|
+
|
|
731
|
+
```python
|
|
732
|
+
options = {
|
|
733
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
734
|
+
'account_id': '123456', # Wingify Account ID
|
|
735
|
+
'proxy_url': 'http://custom.proxy.com'
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
wingify_client = init(options)
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
</details>
|
|
742
|
+
|
|
416
743
|
**Note:** If both `gateway_service` and `proxy_url` are provided, the SDK will give preference to the `gateway_service` for all network requests.
|
|
417
744
|
|
|
418
745
|
### Storage
|
|
@@ -429,6 +756,11 @@ Key benefits of implementing storage:
|
|
|
429
756
|
|
|
430
757
|
The storage mechanism ensures that once a decision is made for a user, it remains consistent even if campaign settings are modified in the VWO Application. This is particularly useful for maintaining a stable user experience during A/B tests and feature rollouts.
|
|
431
758
|
|
|
759
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
760
|
+
|
|
761
|
+
<details>
|
|
762
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
763
|
+
|
|
432
764
|
```python
|
|
433
765
|
from vwo import StorageConnector
|
|
434
766
|
class UserStorage(StorageConnector):
|
|
@@ -456,9 +788,48 @@ options = {
|
|
|
456
788
|
vwo_client = init(options)
|
|
457
789
|
```
|
|
458
790
|
|
|
791
|
+
</details>
|
|
792
|
+
|
|
793
|
+
<details>
|
|
794
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
795
|
+
|
|
796
|
+
```python
|
|
797
|
+
from wingify import StorageConnector
|
|
798
|
+
class UserStorage(StorageConnector):
|
|
799
|
+
def get(self, key: str, user_id: str):
|
|
800
|
+
return client_db.get(f"{key}_{user_id}")
|
|
801
|
+
|
|
802
|
+
def set(self, value: dict):
|
|
803
|
+
key = f"{value.get('featureKey')}_{value.get('userId')}"
|
|
804
|
+
client_db[key] = {
|
|
805
|
+
'rolloutKey': value.get('rolloutKey'),
|
|
806
|
+
'rolloutVariationId': value.get('rolloutVariationId'),
|
|
807
|
+
'rolloutId': value.get('rolloutId'),
|
|
808
|
+
'experimentKey': value.get('experimentKey'),
|
|
809
|
+
'experimentVariationId': value.get('experimentVariationId'),
|
|
810
|
+
'experimentId': value.get('experimentId'),
|
|
811
|
+
}
|
|
812
|
+
return True
|
|
813
|
+
|
|
814
|
+
options = {
|
|
815
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
816
|
+
'account_id': '123456', # Wingify Account ID
|
|
817
|
+
'storage': UserStorage()
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
wingify_client = init(options)
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
</details>
|
|
824
|
+
|
|
459
825
|
### Integrations
|
|
460
826
|
VWO FME SDKs provide seamless integration with third-party tools like analytics platforms, monitoring services, customer data platforms (CDPs), and messaging systems. This is achieved through a simple yet powerful callback mechanism that receives VWO-specific properties and can forward them to any third-party tool of your choice.
|
|
461
827
|
|
|
828
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
829
|
+
|
|
830
|
+
<details>
|
|
831
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
832
|
+
|
|
462
833
|
```python
|
|
463
834
|
def callback(properties):
|
|
464
835
|
# properties will contain all the required VWO specific information
|
|
@@ -474,6 +845,28 @@ options = {
|
|
|
474
845
|
vwo_client = init(options)
|
|
475
846
|
```
|
|
476
847
|
|
|
848
|
+
</details>
|
|
849
|
+
|
|
850
|
+
<details>
|
|
851
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
852
|
+
|
|
853
|
+
```python
|
|
854
|
+
def callback(properties):
|
|
855
|
+
# properties will contain all the required Wingify specific information
|
|
856
|
+
print(properties)
|
|
857
|
+
|
|
858
|
+
options = {
|
|
859
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
860
|
+
'account_id': '12345', # Wingify Account ID
|
|
861
|
+
'integrations': {
|
|
862
|
+
'callback': callback
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
wingify_client = init(options)
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
</details>
|
|
869
|
+
|
|
477
870
|
### Logger
|
|
478
871
|
|
|
479
872
|
VWO by default logs all `ERROR` level messages to your server console.
|
|
@@ -487,6 +880,11 @@ To gain more control over VWO's logging behaviour, you can use the `logger` para
|
|
|
487
880
|
|
|
488
881
|
#### Example 1: Set log level to control verbosity of logs
|
|
489
882
|
|
|
883
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
884
|
+
|
|
885
|
+
<details>
|
|
886
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
887
|
+
|
|
490
888
|
```python
|
|
491
889
|
options = {
|
|
492
890
|
'account_id': '123456', # VWO Account ID
|
|
@@ -498,8 +896,31 @@ options = {
|
|
|
498
896
|
vwo_client = init(options)
|
|
499
897
|
```
|
|
500
898
|
|
|
899
|
+
</details>
|
|
900
|
+
|
|
901
|
+
<details>
|
|
902
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
903
|
+
|
|
904
|
+
```python
|
|
905
|
+
options = {
|
|
906
|
+
'account_id': '123456', # Wingify Account ID
|
|
907
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
908
|
+
'logger': {
|
|
909
|
+
'level': 'DEBUG'
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
wingify_client = init(options)
|
|
913
|
+
```
|
|
914
|
+
|
|
915
|
+
</details>
|
|
916
|
+
|
|
501
917
|
#### Example 2: Add custom prefix to log messages for easier identification
|
|
502
918
|
|
|
919
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
920
|
+
|
|
921
|
+
<details>
|
|
922
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
923
|
+
|
|
503
924
|
```python
|
|
504
925
|
options = {
|
|
505
926
|
'account_id': '123456', # VWO Account ID
|
|
@@ -512,6 +933,25 @@ options = {
|
|
|
512
933
|
vwo_client = init(options)
|
|
513
934
|
```
|
|
514
935
|
|
|
936
|
+
</details>
|
|
937
|
+
|
|
938
|
+
<details>
|
|
939
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
940
|
+
|
|
941
|
+
```python
|
|
942
|
+
options = {
|
|
943
|
+
'account_id': '123456', # Wingify Account ID
|
|
944
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
945
|
+
'logger': {
|
|
946
|
+
'level': 'DEBUG',
|
|
947
|
+
'prefix': 'CUSTOM LOG PREFIX'
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
wingify_client = init(options)
|
|
951
|
+
```
|
|
952
|
+
|
|
953
|
+
</details>
|
|
954
|
+
|
|
515
955
|
#### Example 3: Implement custom transport to handle logs your way
|
|
516
956
|
|
|
517
957
|
The `transport` parameter allows you to implement custom logging behavior by providing your own logging functions. You can define handlers for different log levels (`debug`, `info`, `warn`, `error`, `trace`) to process log messages according to your needs.
|
|
@@ -527,6 +967,12 @@ For example, you could:
|
|
|
527
967
|
The transport object should implement handlers for the log levels you want to customize. Each handler receives the log message as a parameter.
|
|
528
968
|
|
|
529
969
|
For single transport you can use the `transport` parameter. For example:
|
|
970
|
+
|
|
971
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
972
|
+
|
|
973
|
+
<details>
|
|
974
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
975
|
+
|
|
530
976
|
```python
|
|
531
977
|
from vwo import init
|
|
532
978
|
|
|
@@ -541,7 +987,7 @@ class CustomTransport:
|
|
|
541
987
|
options = {
|
|
542
988
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
543
989
|
'account_id': '123456', # VWO Account ID
|
|
544
|
-
'logger' {
|
|
990
|
+
'logger': {
|
|
545
991
|
'transport': CustomTransport({'level': 'INFO'})
|
|
546
992
|
}
|
|
547
993
|
}
|
|
@@ -549,7 +995,42 @@ options = {
|
|
|
549
995
|
vwo_client = init(options)
|
|
550
996
|
```
|
|
551
997
|
|
|
998
|
+
</details>
|
|
999
|
+
|
|
1000
|
+
<details>
|
|
1001
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1002
|
+
|
|
1003
|
+
```python
|
|
1004
|
+
from wingify import init
|
|
1005
|
+
|
|
1006
|
+
class CustomTransport:
|
|
1007
|
+
def __init__(self, config):
|
|
1008
|
+
self.level = config.get('level', "ERROR")
|
|
1009
|
+
self.config = config
|
|
1010
|
+
|
|
1011
|
+
def log(self, level, message):
|
|
1012
|
+
# your custom implementation here
|
|
1013
|
+
|
|
1014
|
+
options = {
|
|
1015
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1016
|
+
'account_id': '123456', # Wingify Account ID
|
|
1017
|
+
'logger': {
|
|
1018
|
+
'transport': CustomTransport({'level': 'INFO'})
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
wingify_client = init(options)
|
|
1023
|
+
```
|
|
1024
|
+
|
|
1025
|
+
</details>
|
|
1026
|
+
|
|
552
1027
|
For multiple transports you can use the `transports` parameter. For example:
|
|
1028
|
+
|
|
1029
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
1030
|
+
|
|
1031
|
+
<details>
|
|
1032
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1033
|
+
|
|
553
1034
|
```python
|
|
554
1035
|
from vwo import init
|
|
555
1036
|
|
|
@@ -572,7 +1053,7 @@ class CustomTransportForError:
|
|
|
572
1053
|
options = {
|
|
573
1054
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
574
1055
|
'account_id': '123456', # VWO Account ID
|
|
575
|
-
'logger' {
|
|
1056
|
+
'logger': {
|
|
576
1057
|
'transports': [
|
|
577
1058
|
CustomTransportForInfo({'level': 'INFO'}),
|
|
578
1059
|
CustomTransportForError({'level': 'ERROR'})
|
|
@@ -583,6 +1064,46 @@ options = {
|
|
|
583
1064
|
vwo_client = init(options)
|
|
584
1065
|
```
|
|
585
1066
|
|
|
1067
|
+
</details>
|
|
1068
|
+
|
|
1069
|
+
<details>
|
|
1070
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1071
|
+
|
|
1072
|
+
```python
|
|
1073
|
+
from wingify import init
|
|
1074
|
+
|
|
1075
|
+
class CustomTransportForInfo:
|
|
1076
|
+
def __init__(self, config):
|
|
1077
|
+
self.level = config.get('level', "INFO")
|
|
1078
|
+
self.config = config
|
|
1079
|
+
|
|
1080
|
+
def log(self, level, message):
|
|
1081
|
+
# your custom implementation here
|
|
1082
|
+
|
|
1083
|
+
class CustomTransportForError:
|
|
1084
|
+
def __init__(self, config):
|
|
1085
|
+
self.level = config.get('level', "ERROR")
|
|
1086
|
+
self.config = config
|
|
1087
|
+
|
|
1088
|
+
def log(self, level, message):
|
|
1089
|
+
# your custom implementation here
|
|
1090
|
+
|
|
1091
|
+
options = {
|
|
1092
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1093
|
+
'account_id': '123456', # Wingify Account ID
|
|
1094
|
+
'logger': {
|
|
1095
|
+
'transports': [
|
|
1096
|
+
CustomTransportForInfo({'level': 'INFO'}),
|
|
1097
|
+
CustomTransportForError({'level': 'ERROR'})
|
|
1098
|
+
]
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
wingify_client = init(options)
|
|
1103
|
+
```
|
|
1104
|
+
|
|
1105
|
+
</details>
|
|
1106
|
+
|
|
586
1107
|
### Threading
|
|
587
1108
|
|
|
588
1109
|
The SDK leverages threading to efficiently manage concurrent operations. Threading is enabled by default, but can be disabled by configuring the `threading` parameter during initialization. This gives you control over the SDK's concurrency behavior based on your application's needs.
|
|
@@ -598,6 +1119,11 @@ When threading is disabled, all tracking calls will block the main execution thr
|
|
|
598
1119
|
|
|
599
1120
|
Example showing blocking behavior:
|
|
600
1121
|
|
|
1122
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
1123
|
+
|
|
1124
|
+
<details>
|
|
1125
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1126
|
+
|
|
601
1127
|
```python
|
|
602
1128
|
# By disabling threading, the SDK will wait for the response from the server for each tracking call.
|
|
603
1129
|
from vwo import init
|
|
@@ -608,11 +1134,33 @@ options = {
|
|
|
608
1134
|
'threading': {
|
|
609
1135
|
'enabled': False
|
|
610
1136
|
}
|
|
611
|
-
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
vwo_client = init(options)
|
|
1140
|
+
```
|
|
1141
|
+
|
|
1142
|
+
</details>
|
|
1143
|
+
|
|
1144
|
+
<details>
|
|
1145
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1146
|
+
|
|
1147
|
+
```python
|
|
1148
|
+
# By disabling threading, the SDK will wait for the response from the server for each tracking call.
|
|
1149
|
+
from wingify import init
|
|
1150
|
+
|
|
1151
|
+
options = {
|
|
1152
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1153
|
+
'account_id': '123456', # Wingify Account ID
|
|
1154
|
+
'threading': {
|
|
1155
|
+
'enabled': False
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
612
1158
|
|
|
613
|
-
|
|
1159
|
+
wingify_client = init(options)
|
|
614
1160
|
```
|
|
615
1161
|
|
|
1162
|
+
</details>
|
|
1163
|
+
|
|
616
1164
|
#### Enable Threading (Default)
|
|
617
1165
|
|
|
618
1166
|
Threading in the VWO SDK provides several important benefits:
|
|
@@ -627,6 +1175,11 @@ Example of how threading improves performance:
|
|
|
627
1175
|
|
|
628
1176
|
The SDK uses a thread pool to manage these concurrent operations efficiently. The default pool size of 5 threads is suitable for most applications, but you can adjust it based on your needs:
|
|
629
1177
|
|
|
1178
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
1179
|
+
|
|
1180
|
+
<details>
|
|
1181
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1182
|
+
|
|
630
1183
|
```python
|
|
631
1184
|
# By default, threading is enabled and the max_workers is set to 5.
|
|
632
1185
|
# you can customize the max_workers by passing the max_workers parameter in the threading configuration.
|
|
@@ -639,11 +1192,35 @@ options = {
|
|
|
639
1192
|
'enabled': True,
|
|
640
1193
|
'max_workers': 10
|
|
641
1194
|
}
|
|
642
|
-
|
|
1195
|
+
}
|
|
643
1196
|
|
|
644
|
-
|
|
1197
|
+
vwo_client = init(options)
|
|
645
1198
|
```
|
|
646
1199
|
|
|
1200
|
+
</details>
|
|
1201
|
+
|
|
1202
|
+
<details>
|
|
1203
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1204
|
+
|
|
1205
|
+
```python
|
|
1206
|
+
# By default, threading is enabled and the max_workers is set to 5.
|
|
1207
|
+
# you can customize the max_workers by passing the max_workers parameter in the threading configuration.
|
|
1208
|
+
from wingify import init
|
|
1209
|
+
|
|
1210
|
+
options = {
|
|
1211
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1212
|
+
'account_id': '123456', # Wingify Account ID
|
|
1213
|
+
'threading': {
|
|
1214
|
+
'enabled': True,
|
|
1215
|
+
'max_workers': 10
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
wingify_client = init(options)
|
|
1220
|
+
```
|
|
1221
|
+
|
|
1222
|
+
</details>
|
|
1223
|
+
|
|
647
1224
|
### Batch Events
|
|
648
1225
|
|
|
649
1226
|
The `batch_event_data` configuration allows you to optimize network requests by batching multiple events together. This is particularly useful for high-traffic applications where you want to reduce the number of API calls.
|
|
@@ -656,6 +1233,11 @@ The `batch_event_data` configuration allows you to optimize network requests by
|
|
|
656
1233
|
|
|
657
1234
|
Example usage:
|
|
658
1235
|
|
|
1236
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
1237
|
+
|
|
1238
|
+
<details>
|
|
1239
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1240
|
+
|
|
659
1241
|
```python
|
|
660
1242
|
from vwo import init
|
|
661
1243
|
|
|
@@ -666,8 +1248,8 @@ options = {
|
|
|
666
1248
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
667
1249
|
'account_id': '123456', # VWO Account ID
|
|
668
1250
|
'batch_event_data': {
|
|
669
|
-
'events_per_request':
|
|
670
|
-
'request_time_interval':
|
|
1251
|
+
'events_per_request': 100, # Send up to 100 events per request
|
|
1252
|
+
'request_time_interval': 60, # Flush events every 60 seconds
|
|
671
1253
|
'flush_callback': event_flush_callback
|
|
672
1254
|
}
|
|
673
1255
|
}
|
|
@@ -675,12 +1257,54 @@ options = {
|
|
|
675
1257
|
vwo_client = init(options)
|
|
676
1258
|
```
|
|
677
1259
|
|
|
1260
|
+
</details>
|
|
1261
|
+
|
|
1262
|
+
<details>
|
|
1263
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1264
|
+
|
|
1265
|
+
```python
|
|
1266
|
+
from wingify import init
|
|
1267
|
+
|
|
1268
|
+
def event_flush_callback(error, payload):
|
|
1269
|
+
# your implementation here
|
|
1270
|
+
|
|
1271
|
+
options = {
|
|
1272
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1273
|
+
'account_id': '123456', # Wingify Account ID
|
|
1274
|
+
'batch_event_data': {
|
|
1275
|
+
'events_per_request': 100, # Send up to 100 events per request
|
|
1276
|
+
'request_time_interval': 60, # Flush events every 60 seconds
|
|
1277
|
+
'flush_callback': event_flush_callback
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
wingify_client = init(options)
|
|
1282
|
+
```
|
|
1283
|
+
|
|
1284
|
+
</details>
|
|
1285
|
+
|
|
678
1286
|
You can also manually flush events using the `flush_events()` method:
|
|
679
1287
|
|
|
1288
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
1289
|
+
|
|
1290
|
+
<details>
|
|
1291
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1292
|
+
|
|
680
1293
|
```python
|
|
681
1294
|
vwo_client.flush_events()
|
|
682
1295
|
```
|
|
683
1296
|
|
|
1297
|
+
</details>
|
|
1298
|
+
|
|
1299
|
+
<details>
|
|
1300
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1301
|
+
|
|
1302
|
+
```python
|
|
1303
|
+
wingify_client.flush_events()
|
|
1304
|
+
```
|
|
1305
|
+
|
|
1306
|
+
</details>
|
|
1307
|
+
|
|
684
1308
|
|
|
685
1309
|
### Custom Bucketing Seed
|
|
686
1310
|
|
|
@@ -688,6 +1312,11 @@ This option allows you to override the default bucketing behavior (which uses `u
|
|
|
688
1312
|
|
|
689
1313
|
To use this feature, provide the `bucketingSeed` in the user context.
|
|
690
1314
|
|
|
1315
|
+
If SDK version less than 1.50.0, use the VWO snippet. If SDK version 1.50.0 or later, we recommend switching to the Wingify snippet
|
|
1316
|
+
|
|
1317
|
+
<details>
|
|
1318
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1319
|
+
|
|
691
1320
|
```python
|
|
692
1321
|
from vwo import init
|
|
693
1322
|
|
|
@@ -708,6 +1337,33 @@ user_context = {
|
|
|
708
1337
|
get_flag = vwo_client.get_flag('feature_key', user_context)
|
|
709
1338
|
```
|
|
710
1339
|
|
|
1340
|
+
</details>
|
|
1341
|
+
|
|
1342
|
+
<details>
|
|
1343
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1344
|
+
|
|
1345
|
+
```python
|
|
1346
|
+
from wingify import init
|
|
1347
|
+
|
|
1348
|
+
options = {
|
|
1349
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1350
|
+
'account_id': '123456', # Wingify Account ID
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1353
|
+
wingify_client = init(options)
|
|
1354
|
+
|
|
1355
|
+
# Pass bucketingSeed in context
|
|
1356
|
+
user_context = {
|
|
1357
|
+
'id': 'unique_user_id',
|
|
1358
|
+
'bucketingSeed': 'group_id_123' # This value will be used for bucketing
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1361
|
+
# The user will be bucketed based on 'group_id_123' instead of 'unique_user_id'
|
|
1362
|
+
get_flag = wingify_client.get_flag('feature_key', user_context)
|
|
1363
|
+
```
|
|
1364
|
+
|
|
1365
|
+
</details>
|
|
1366
|
+
|
|
711
1367
|
## Local development
|
|
712
1368
|
|
|
713
1369
|
```bash
|