wingify-fme-python-sdk 1.62.0__tar.gz → 1.66.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.62.0 → wingify_fme_python_sdk-1.66.0}/PKG-INFO +686 -15
- wingify_fme_python_sdk-1.62.0/wingify_fme_python_sdk.egg-info/PKG-INFO → wingify_fme_python_sdk-1.66.0/README.md +668 -39
- wingify_fme_python_sdk-1.66.0/requirements.txt +4 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/setup.py +7 -3
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/constants/Constants.py +1 -1
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/event_util.py +19 -8
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/network_util.py +21 -15
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/wingify.py +8 -2
- wingify_fme_python_sdk-1.62.0/README.md → wingify_fme_python_sdk-1.66.0/wingify_fme_python_sdk.egg-info/PKG-INFO +710 -12
- wingify_fme_python_sdk-1.66.0/wingify_fme_python_sdk.egg-info/requires.txt +8 -0
- wingify_fme_python_sdk-1.62.0/requirements.txt +0 -3
- wingify_fme_python_sdk-1.62.0/wingify_fme_python_sdk.egg-info/requires.txt +0 -3
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/LICENSE +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/MANIFEST.in +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/NOTICE +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/requirements-dev.txt +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/setup.cfg +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/vwo/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/vwo/vwo.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/vwo/vwo_builder.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/vwo/vwo_client.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/api/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/api/get_flag_api.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/api/set_attribute_api.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/api/track_api.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/constants/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/constants/sampled_debug_error_template_keys.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/decorators/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/decorators/storage_decorator.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/enums/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/enums/api_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/enums/campaign_type_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/enums/debug_category_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/enums/event_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/enums/headers_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/enums/hooks_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/enums/status_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/enums/storage_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/enums/url_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/Alias.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/AliasSetResponse.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/batch_event_data.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/campaign/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/campaign/campaign_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/campaign/feature_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/campaign/holdout_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/campaign/impact_campaign_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/campaign/metric_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/campaign/rule_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/campaign/variable_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/campaign/variation_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/gateway_service_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/campaign_group_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/campaign_metric_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/campaign_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/campaign_variation_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/empty_object_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/feature_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/group_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/holdout_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/rule_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/settings_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/schemas/variable_schema.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/settings/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/settings/internal_event_sampling_settings_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/settings/settings_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/storage/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/storage/storage_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/user/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/user/context_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/user/context_vwo_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/user/get_flag.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/vwo_options_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/models/wingify_options_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/decision_maker/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/decision_maker/decision_maker.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/core/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/core/log_manager.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/core/log_transport_manager.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/enums/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/enums/log_level_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/enums/log_level_number_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/log_message_builder.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/logger.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/transports/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/logger/transports/console_transport.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/client/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/client/network_client.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/handlers/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/handlers/request_handler.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/manager/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/manager/network_manager.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/models/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/models/global_request_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/models/request_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/network_layer/models/response_model.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/core/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/core/segmentation_manager.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/enums/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/enums/segment_operand_regex_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/enums/segment_operand_value_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/enums/segment_operator_value_enum.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/evaluators/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/evaluators/segment_evaluator.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/evaluators/segment_operand_evaluator.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/utils/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/utils/segment_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/segmentation_evaluator/utils/web_testing_segment_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/storage/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/storage/connector.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/packages/storage/storage.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/resources/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/resources/debug-messages.json +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/resources/error-messages.json +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/resources/info-message.json +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/resources/trace-messages.json +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/resources/warn-messages.json +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/services/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/services/batch_event_queue.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/services/campaign_decision_service.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/services/hooks_manager.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/services/internal_events_sampling_service.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/services/settings_manager.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/services/storage_service.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/services/url_service.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/__init__.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/aliasing_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/brand_context.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/brand_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/campaign_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/data_type_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/debugger_service_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/decision_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/function_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/gateway_service_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/holdout_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/impression_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/internal_events_sampling_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/log_message_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/meg_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/model_utils.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/rule_evaluation_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/settings_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/usage_stats_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/utils/uuid_util.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/vwo_client.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/wingify_builder.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify/wingify_client.py +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify_fme_python_sdk.egg-info/SOURCES.txt +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify_fme_python_sdk.egg-info/dependency_links.txt +0 -0
- {wingify_fme_python_sdk-1.62.0 → wingify_fme_python_sdk-1.66.0}/wingify_fme_python_sdk.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: wingify-fme-python-sdk
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.66.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
|
|
@@ -18,12 +18,27 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.9
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
21
25
|
Description-Content-Type: text/markdown
|
|
22
26
|
License-File: LICENSE
|
|
23
27
|
License-File: NOTICE
|
|
24
|
-
Requires-Dist: murmurhash==1.0.10
|
|
28
|
+
Requires-Dist: murmurhash==1.0.10; python_version < "3.9"
|
|
29
|
+
Requires-Dist: murmurhash<1.1,>=1.0.10; python_version >= "3.9"
|
|
25
30
|
Requires-Dist: requests>=2.27.1
|
|
26
31
|
Requires-Dist: jsonschema>=3.2.0
|
|
32
|
+
Dynamic: author
|
|
33
|
+
Dynamic: author-email
|
|
34
|
+
Dynamic: classifier
|
|
35
|
+
Dynamic: description
|
|
36
|
+
Dynamic: description-content-type
|
|
37
|
+
Dynamic: home-page
|
|
38
|
+
Dynamic: license
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
Dynamic: requires-dist
|
|
41
|
+
Dynamic: summary
|
|
27
42
|
|
|
28
43
|
## VWO Feature Management and Experimentation SDK for Python
|
|
29
44
|
|
|
@@ -44,13 +59,35 @@ The **VWO Feature Management and Experimentation SDK** (VWO FME Python SDK) enab
|
|
|
44
59
|
|
|
45
60
|
It's recommended you use [virtualenv](https://virtualenv.pypa.io/en/latest/) to create isolated Python environments.
|
|
46
61
|
|
|
62
|
+
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
|
|
63
|
+
|
|
64
|
+
<details>
|
|
65
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
66
|
+
|
|
47
67
|
```bash
|
|
48
68
|
pip install vwo-fme-python-sdk
|
|
49
69
|
```
|
|
50
70
|
|
|
71
|
+
</details>
|
|
72
|
+
|
|
73
|
+
<details>
|
|
74
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pip install wingify-fme-python-sdk
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
</details>
|
|
81
|
+
|
|
51
82
|
## Basic Usage Example
|
|
52
83
|
|
|
53
84
|
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.
|
|
85
|
+
|
|
86
|
+
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
|
|
87
|
+
|
|
88
|
+
<details>
|
|
89
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
90
|
+
|
|
54
91
|
```python
|
|
55
92
|
from vwo import init
|
|
56
93
|
|
|
@@ -77,6 +114,39 @@ vwo_client.track_event('event_name', user_context, event_properties)
|
|
|
77
114
|
vwo_client.set_attribute('attribute_key', 'attribute_value', user_context)
|
|
78
115
|
```
|
|
79
116
|
|
|
117
|
+
</details>
|
|
118
|
+
|
|
119
|
+
<details>
|
|
120
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
121
|
+
|
|
122
|
+
```python
|
|
123
|
+
from wingify import init
|
|
124
|
+
|
|
125
|
+
options = {
|
|
126
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
127
|
+
'account_id': '123456' # Wingify Account ID
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
wingify_client = init(options)
|
|
131
|
+
|
|
132
|
+
# set user context
|
|
133
|
+
user_context = {'id': 'unique_user_id'}
|
|
134
|
+
# returns a flag object
|
|
135
|
+
get_flag = wingify_client.get_flag('feature_key', user_context)
|
|
136
|
+
# check if flag is enabled
|
|
137
|
+
is_enabled = get_flag.is_enabled()
|
|
138
|
+
# get varible
|
|
139
|
+
int_var = get_flag.get_variable('int_variable_key', 'default_value')
|
|
140
|
+
|
|
141
|
+
# track event
|
|
142
|
+
wingify_client.track_event('event_name', user_context, event_properties)
|
|
143
|
+
|
|
144
|
+
# set attribute
|
|
145
|
+
wingify_client.set_attribute('attribute_key', 'attribute_value', user_context)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
</details>
|
|
149
|
+
|
|
80
150
|
## Utility Functions
|
|
81
151
|
|
|
82
152
|
### getUUID
|
|
@@ -85,10 +155,26 @@ The `getUUID` function generates a deterministic UUID for a given user and accou
|
|
|
85
155
|
|
|
86
156
|
#### Function Signature
|
|
87
157
|
|
|
158
|
+
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
|
|
159
|
+
|
|
160
|
+
<details>
|
|
161
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
162
|
+
|
|
88
163
|
```python
|
|
89
164
|
vwo.getUUID(user_id: str, account_id: str) -> Optional[str]
|
|
90
165
|
```
|
|
91
166
|
|
|
167
|
+
</details>
|
|
168
|
+
|
|
169
|
+
<details>
|
|
170
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
wingify.getUUID(user_id: str, account_id: str) -> Optional[str]
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
</details>
|
|
177
|
+
|
|
92
178
|
#### Parameters
|
|
93
179
|
|
|
94
180
|
| **Parameter** | **Description** | **Required** | **Type** |
|
|
@@ -103,6 +189,11 @@ vwo.getUUID(user_id: str, account_id: str) -> Optional[str]
|
|
|
103
189
|
|
|
104
190
|
#### Example
|
|
105
191
|
|
|
192
|
+
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
|
|
193
|
+
|
|
194
|
+
<details>
|
|
195
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
196
|
+
|
|
106
197
|
```python
|
|
107
198
|
import vwo
|
|
108
199
|
|
|
@@ -116,6 +207,26 @@ print('Generated UUID:', uuid)
|
|
|
116
207
|
# Output: Generated UUID: CC25A368ADA0542699EAD62489811105
|
|
117
208
|
```
|
|
118
209
|
|
|
210
|
+
</details>
|
|
211
|
+
|
|
212
|
+
<details>
|
|
213
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
214
|
+
|
|
215
|
+
```python
|
|
216
|
+
import wingify
|
|
217
|
+
|
|
218
|
+
# Generate UUID for a user
|
|
219
|
+
userId = 'user-123'
|
|
220
|
+
accountId = '123456'
|
|
221
|
+
|
|
222
|
+
uuid = wingify.getUUID(userId, accountId)
|
|
223
|
+
|
|
224
|
+
print('Generated UUID:', uuid)
|
|
225
|
+
# Output: Generated UUID: CC25A368ADA0542699EAD62489811105
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
</details>
|
|
229
|
+
|
|
119
230
|
#### Use Cases
|
|
120
231
|
|
|
121
232
|
- Generate consistent UUIDs for users across different services
|
|
@@ -124,7 +235,7 @@ print('Generated UUID:', uuid)
|
|
|
124
235
|
|
|
125
236
|
## Advanced Configuration Options
|
|
126
237
|
|
|
127
|
-
To customize the SDK further, additional parameters can be passed to the `init()` API. Here
|
|
238
|
+
To customize the SDK further, additional parameters can be passed to the `init()` API. Here's a table describing each option:
|
|
128
239
|
|
|
129
240
|
| **Parameter** | **Description** | **Required** | **Type** | **Example** |
|
|
130
241
|
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -------- | ------------------------------- |
|
|
@@ -167,13 +278,12 @@ context = {
|
|
|
167
278
|
},
|
|
168
279
|
'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
280
|
'ip_address': '1.1.1.1',
|
|
170
|
-
'session_id': 1697123456 # Optional: Custom session ID for web client integration
|
|
281
|
+
'session_id': 1697123456, # Optional: Custom session ID for web client integration
|
|
171
282
|
'platformVariables': {
|
|
172
283
|
# Reference example only:.
|
|
173
284
|
# In production, fetch campaign assignments using script run in frontend and pass that object to backend as webTestingCampaigns.
|
|
174
285
|
'webTestingCampaigns': '{"122":"1","130":"2"}'
|
|
175
|
-
}
|
|
176
|
-
'session_id': 1697123456 # Optional: Custom session ID for web client integration
|
|
286
|
+
}
|
|
177
287
|
}
|
|
178
288
|
```
|
|
179
289
|
|
|
@@ -209,6 +319,11 @@ You can access and manage session IDs through the following methods:
|
|
|
209
319
|
|
|
210
320
|
### Example Usage
|
|
211
321
|
|
|
322
|
+
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
|
|
323
|
+
|
|
324
|
+
<details>
|
|
325
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
326
|
+
|
|
212
327
|
```python
|
|
213
328
|
from vwo import init
|
|
214
329
|
|
|
@@ -228,8 +343,39 @@ session_id = flag.get_session_id()
|
|
|
228
343
|
print(f"Session ID for web client: {session_id}")
|
|
229
344
|
```
|
|
230
345
|
|
|
346
|
+
</details>
|
|
347
|
+
|
|
348
|
+
<details>
|
|
349
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
350
|
+
|
|
351
|
+
```python
|
|
352
|
+
from wingify import init
|
|
353
|
+
|
|
354
|
+
options = {
|
|
355
|
+
'sdk_key': '32-alpha-numeric-sdk-key',
|
|
356
|
+
'account_id': '123456'
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
wingify_client = init(options)
|
|
360
|
+
|
|
361
|
+
# Session ID is automatically generated if not provided
|
|
362
|
+
context = {'id': 'user-123'}
|
|
363
|
+
flag = wingify_client.get_flag('feature-key', context)
|
|
364
|
+
|
|
365
|
+
# Access the session ID to pass to web client for session recording
|
|
366
|
+
session_id = flag.get_session_id()
|
|
367
|
+
print(f"Session ID for web client: {session_id}")
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
</details>
|
|
371
|
+
|
|
231
372
|
You can also explicitly set a session ID to match a web client session:
|
|
232
373
|
|
|
374
|
+
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
|
|
375
|
+
|
|
376
|
+
<details>
|
|
377
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
378
|
+
|
|
233
379
|
```python
|
|
234
380
|
from vwo import init
|
|
235
381
|
|
|
@@ -243,6 +389,26 @@ context_with_session = {
|
|
|
243
389
|
flag = vwo_client.get_flag('feature-key', context_with_session)
|
|
244
390
|
```
|
|
245
391
|
|
|
392
|
+
</details>
|
|
393
|
+
|
|
394
|
+
<details>
|
|
395
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
396
|
+
|
|
397
|
+
```python
|
|
398
|
+
from wingify import init
|
|
399
|
+
|
|
400
|
+
wingify_client = init(options)
|
|
401
|
+
|
|
402
|
+
context_with_session = {
|
|
403
|
+
'id': 'user-123',
|
|
404
|
+
'session_id': 1697123456 # Custom session ID matching web client
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
flag = wingify_client.get_flag('feature-key', context_with_session)
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
</details>
|
|
411
|
+
|
|
246
412
|
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
413
|
|
|
248
414
|
### Basic Feature Flagging
|
|
@@ -258,6 +424,11 @@ The `get_flag()` method provides a simple way to check if a feature is enabled f
|
|
|
258
424
|
|
|
259
425
|
Example usage:
|
|
260
426
|
|
|
427
|
+
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
|
|
428
|
+
|
|
429
|
+
<details>
|
|
430
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
431
|
+
|
|
261
432
|
```python
|
|
262
433
|
feature_flag = vwo_client.get_flag("feature_key", context)
|
|
263
434
|
is_enabled = feature_flag.is_enabled()
|
|
@@ -272,6 +443,27 @@ else:
|
|
|
272
443
|
print("Feature is not enabled!")
|
|
273
444
|
```
|
|
274
445
|
|
|
446
|
+
</details>
|
|
447
|
+
|
|
448
|
+
<details>
|
|
449
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
450
|
+
|
|
451
|
+
```python
|
|
452
|
+
feature_flag = wingify_client.get_flag("feature_key", context)
|
|
453
|
+
is_enabled = feature_flag.is_enabled()
|
|
454
|
+
|
|
455
|
+
if is_enabled:
|
|
456
|
+
print("Feature is enabled!")
|
|
457
|
+
|
|
458
|
+
# Get and use feature variable with type safety
|
|
459
|
+
variable_value = feature_flag.get_variable('feature_variable', 'default_value')
|
|
460
|
+
print("Variable value: " + variable_value)
|
|
461
|
+
else:
|
|
462
|
+
print("Feature is not enabled!")
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
</details>
|
|
466
|
+
|
|
275
467
|
### Custom Event Tracking
|
|
276
468
|
|
|
277
469
|
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 +476,26 @@ Feature flags can be enhanced with connected metrics to track key performance in
|
|
|
284
476
|
|
|
285
477
|
Example usage:
|
|
286
478
|
|
|
479
|
+
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
|
|
480
|
+
|
|
481
|
+
<details>
|
|
482
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
483
|
+
|
|
287
484
|
```python
|
|
288
485
|
vwo_client.track_event('event_name', context, event_properties)
|
|
289
486
|
```
|
|
290
487
|
|
|
488
|
+
</details>
|
|
489
|
+
|
|
490
|
+
<details>
|
|
491
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
492
|
+
|
|
493
|
+
```python
|
|
494
|
+
wingify_client.track_event('event_name', context, event_properties)
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
</details>
|
|
498
|
+
|
|
291
499
|
### Pushing Attributes
|
|
292
500
|
|
|
293
501
|
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 +508,26 @@ User attributes provide rich contextual information about users, enabling powerf
|
|
|
300
508
|
|
|
301
509
|
Example usage:
|
|
302
510
|
|
|
511
|
+
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
|
|
512
|
+
|
|
513
|
+
<details>
|
|
514
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
515
|
+
|
|
303
516
|
```python
|
|
304
517
|
vwo_client.set_attribute('attribute_key', 'attribute_value', context)
|
|
305
518
|
```
|
|
306
519
|
|
|
520
|
+
</details>
|
|
521
|
+
|
|
522
|
+
<details>
|
|
523
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
524
|
+
|
|
525
|
+
```python
|
|
526
|
+
wingify_client.set_attribute('attribute_key', 'attribute_value', context)
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
</details>
|
|
530
|
+
|
|
307
531
|
### Polling Interval Adjustment
|
|
308
532
|
|
|
309
533
|
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 +538,11 @@ The `poll_interval` is an optional parameter that allows the SDK to automaticall
|
|
|
314
538
|
|
|
315
539
|
Setting this parameter ensures your application always uses the latest configuration by periodically checking for and applying any updates.
|
|
316
540
|
|
|
541
|
+
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
|
|
542
|
+
|
|
543
|
+
<details>
|
|
544
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
545
|
+
|
|
317
546
|
```python
|
|
318
547
|
options = {
|
|
319
548
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
@@ -324,6 +553,23 @@ options = {
|
|
|
324
553
|
vwo_client = init(options)
|
|
325
554
|
```
|
|
326
555
|
|
|
556
|
+
</details>
|
|
557
|
+
|
|
558
|
+
<details>
|
|
559
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
560
|
+
|
|
561
|
+
```python
|
|
562
|
+
options = {
|
|
563
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
564
|
+
'account_id': '123456', # Wingify Account ID
|
|
565
|
+
'poll_interval': 60000 # Set the poll interval to 60 seconds
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
wingify_client = init(options)
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
</details>
|
|
572
|
+
|
|
327
573
|
### Gateway
|
|
328
574
|
|
|
329
575
|
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 +586,11 @@ The Gateway Service is required in the following scenarios:
|
|
|
340
586
|
|
|
341
587
|
The gateway can be customized by passing the `gateway_service` parameter in the `init` configuration.
|
|
342
588
|
|
|
589
|
+
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
|
|
590
|
+
|
|
591
|
+
<details>
|
|
592
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
593
|
+
|
|
343
594
|
```python
|
|
344
595
|
options = {
|
|
345
596
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
@@ -351,6 +602,24 @@ options = {
|
|
|
351
602
|
vwo_client = init(options)
|
|
352
603
|
```
|
|
353
604
|
|
|
605
|
+
</details>
|
|
606
|
+
|
|
607
|
+
<details>
|
|
608
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
609
|
+
|
|
610
|
+
```python
|
|
611
|
+
options = {
|
|
612
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
613
|
+
'account_id': '123456', # Wingify Account ID
|
|
614
|
+
'gateway_service': {
|
|
615
|
+
'url': 'http://custom.gateway.com'
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
wingify_client = init(options)
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
</details>
|
|
622
|
+
|
|
354
623
|
### User Aliasing
|
|
355
624
|
|
|
356
625
|
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 +635,11 @@ User aliasing requires:
|
|
|
366
635
|
|
|
367
636
|
To enable user aliasing, configure both the gateway service and the aliasing flag:
|
|
368
637
|
|
|
638
|
+
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
|
|
639
|
+
|
|
640
|
+
<details>
|
|
641
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
642
|
+
|
|
369
643
|
```python
|
|
370
644
|
from vwo import init
|
|
371
645
|
|
|
@@ -383,10 +657,39 @@ options = {
|
|
|
383
657
|
vwo_client = init(options)
|
|
384
658
|
```
|
|
385
659
|
|
|
660
|
+
</details>
|
|
661
|
+
|
|
662
|
+
<details>
|
|
663
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
664
|
+
|
|
665
|
+
```python
|
|
666
|
+
from wingify import init
|
|
667
|
+
|
|
668
|
+
options = {
|
|
669
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
670
|
+
'account_id': '123456', # Wingify Account ID
|
|
671
|
+
# set gateway service
|
|
672
|
+
'gateway_service': {
|
|
673
|
+
'url': 'http://custom.gateway.com'
|
|
674
|
+
},
|
|
675
|
+
# enable aliasing
|
|
676
|
+
'is_aliasing_enabled': True,
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
wingify_client = init(options)
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
</details>
|
|
683
|
+
|
|
386
684
|
#### Setting User Alias
|
|
387
685
|
|
|
388
686
|
Use the `set_alias()` method to create an alias relationship between a user ID and an alias ID:
|
|
389
687
|
|
|
688
|
+
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
|
|
689
|
+
|
|
690
|
+
<details>
|
|
691
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
692
|
+
|
|
390
693
|
```python
|
|
391
694
|
# Method 1: Using user ID and alias ID directly
|
|
392
695
|
is_alias_set = vwo_client.set_alias('user-123', 'alias-456')
|
|
@@ -396,6 +699,22 @@ context = {'id': 'user-123'}
|
|
|
396
699
|
is_alias_set = vwo_client.set_alias(context, 'alias-456')
|
|
397
700
|
```
|
|
398
701
|
|
|
702
|
+
</details>
|
|
703
|
+
|
|
704
|
+
<details>
|
|
705
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
706
|
+
|
|
707
|
+
```python
|
|
708
|
+
# Method 1: Using user ID and alias ID directly
|
|
709
|
+
is_alias_set = wingify_client.set_alias('user-123', 'alias-456')
|
|
710
|
+
|
|
711
|
+
# Method 2: Using context dict and alias ID
|
|
712
|
+
context = {'id': 'user-123'}
|
|
713
|
+
is_alias_set = wingify_client.set_alias(context, 'alias-456')
|
|
714
|
+
```
|
|
715
|
+
|
|
716
|
+
</details>
|
|
717
|
+
|
|
399
718
|
### Proxy URL
|
|
400
719
|
|
|
401
720
|
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 +723,11 @@ The `proxy_url` parameter allows you to redirect all SDK network calls through a
|
|
|
404
723
|
|
|
405
724
|
The proxy URL can be configured by passing the `proxy_url` parameter in the `init` configuration.
|
|
406
725
|
|
|
726
|
+
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
|
|
727
|
+
|
|
728
|
+
<details>
|
|
729
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
730
|
+
|
|
407
731
|
```python
|
|
408
732
|
options = {
|
|
409
733
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
@@ -413,6 +737,24 @@ options = {
|
|
|
413
737
|
|
|
414
738
|
vwo_client = init(options)
|
|
415
739
|
```
|
|
740
|
+
|
|
741
|
+
</details>
|
|
742
|
+
|
|
743
|
+
<details>
|
|
744
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
745
|
+
|
|
746
|
+
```python
|
|
747
|
+
options = {
|
|
748
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
749
|
+
'account_id': '123456', # Wingify Account ID
|
|
750
|
+
'proxy_url': 'http://custom.proxy.com'
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
wingify_client = init(options)
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
</details>
|
|
757
|
+
|
|
416
758
|
**Note:** If both `gateway_service` and `proxy_url` are provided, the SDK will give preference to the `gateway_service` for all network requests.
|
|
417
759
|
|
|
418
760
|
### Storage
|
|
@@ -429,6 +771,11 @@ Key benefits of implementing storage:
|
|
|
429
771
|
|
|
430
772
|
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
773
|
|
|
774
|
+
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
|
|
775
|
+
|
|
776
|
+
<details>
|
|
777
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
778
|
+
|
|
432
779
|
```python
|
|
433
780
|
from vwo import StorageConnector
|
|
434
781
|
class UserStorage(StorageConnector):
|
|
@@ -456,9 +803,48 @@ options = {
|
|
|
456
803
|
vwo_client = init(options)
|
|
457
804
|
```
|
|
458
805
|
|
|
806
|
+
</details>
|
|
807
|
+
|
|
808
|
+
<details>
|
|
809
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
810
|
+
|
|
811
|
+
```python
|
|
812
|
+
from wingify import StorageConnector
|
|
813
|
+
class UserStorage(StorageConnector):
|
|
814
|
+
def get(self, key: str, user_id: str):
|
|
815
|
+
return client_db.get(f"{key}_{user_id}")
|
|
816
|
+
|
|
817
|
+
def set(self, value: dict):
|
|
818
|
+
key = f"{value.get('featureKey')}_{value.get('userId')}"
|
|
819
|
+
client_db[key] = {
|
|
820
|
+
'rolloutKey': value.get('rolloutKey'),
|
|
821
|
+
'rolloutVariationId': value.get('rolloutVariationId'),
|
|
822
|
+
'rolloutId': value.get('rolloutId'),
|
|
823
|
+
'experimentKey': value.get('experimentKey'),
|
|
824
|
+
'experimentVariationId': value.get('experimentVariationId'),
|
|
825
|
+
'experimentId': value.get('experimentId'),
|
|
826
|
+
}
|
|
827
|
+
return True
|
|
828
|
+
|
|
829
|
+
options = {
|
|
830
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
831
|
+
'account_id': '123456', # Wingify Account ID
|
|
832
|
+
'storage': UserStorage()
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
wingify_client = init(options)
|
|
836
|
+
```
|
|
837
|
+
|
|
838
|
+
</details>
|
|
839
|
+
|
|
459
840
|
### Integrations
|
|
460
841
|
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
842
|
|
|
843
|
+
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
|
|
844
|
+
|
|
845
|
+
<details>
|
|
846
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
847
|
+
|
|
462
848
|
```python
|
|
463
849
|
def callback(properties):
|
|
464
850
|
# properties will contain all the required VWO specific information
|
|
@@ -474,6 +860,28 @@ options = {
|
|
|
474
860
|
vwo_client = init(options)
|
|
475
861
|
```
|
|
476
862
|
|
|
863
|
+
</details>
|
|
864
|
+
|
|
865
|
+
<details>
|
|
866
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
867
|
+
|
|
868
|
+
```python
|
|
869
|
+
def callback(properties):
|
|
870
|
+
# properties will contain all the required Wingify specific information
|
|
871
|
+
print(properties)
|
|
872
|
+
|
|
873
|
+
options = {
|
|
874
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
875
|
+
'account_id': '12345', # Wingify Account ID
|
|
876
|
+
'integrations': {
|
|
877
|
+
'callback': callback
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
wingify_client = init(options)
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
</details>
|
|
884
|
+
|
|
477
885
|
### Logger
|
|
478
886
|
|
|
479
887
|
VWO by default logs all `ERROR` level messages to your server console.
|
|
@@ -487,6 +895,11 @@ To gain more control over VWO's logging behaviour, you can use the `logger` para
|
|
|
487
895
|
|
|
488
896
|
#### Example 1: Set log level to control verbosity of logs
|
|
489
897
|
|
|
898
|
+
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
|
|
899
|
+
|
|
900
|
+
<details>
|
|
901
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
902
|
+
|
|
490
903
|
```python
|
|
491
904
|
options = {
|
|
492
905
|
'account_id': '123456', # VWO Account ID
|
|
@@ -498,8 +911,31 @@ options = {
|
|
|
498
911
|
vwo_client = init(options)
|
|
499
912
|
```
|
|
500
913
|
|
|
914
|
+
</details>
|
|
915
|
+
|
|
916
|
+
<details>
|
|
917
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
918
|
+
|
|
919
|
+
```python
|
|
920
|
+
options = {
|
|
921
|
+
'account_id': '123456', # Wingify Account ID
|
|
922
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
923
|
+
'logger': {
|
|
924
|
+
'level': 'DEBUG'
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
wingify_client = init(options)
|
|
928
|
+
```
|
|
929
|
+
|
|
930
|
+
</details>
|
|
931
|
+
|
|
501
932
|
#### Example 2: Add custom prefix to log messages for easier identification
|
|
502
933
|
|
|
934
|
+
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
|
|
935
|
+
|
|
936
|
+
<details>
|
|
937
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
938
|
+
|
|
503
939
|
```python
|
|
504
940
|
options = {
|
|
505
941
|
'account_id': '123456', # VWO Account ID
|
|
@@ -512,6 +948,25 @@ options = {
|
|
|
512
948
|
vwo_client = init(options)
|
|
513
949
|
```
|
|
514
950
|
|
|
951
|
+
</details>
|
|
952
|
+
|
|
953
|
+
<details>
|
|
954
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
955
|
+
|
|
956
|
+
```python
|
|
957
|
+
options = {
|
|
958
|
+
'account_id': '123456', # Wingify Account ID
|
|
959
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
960
|
+
'logger': {
|
|
961
|
+
'level': 'DEBUG',
|
|
962
|
+
'prefix': 'CUSTOM LOG PREFIX'
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
wingify_client = init(options)
|
|
966
|
+
```
|
|
967
|
+
|
|
968
|
+
</details>
|
|
969
|
+
|
|
515
970
|
#### Example 3: Implement custom transport to handle logs your way
|
|
516
971
|
|
|
517
972
|
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 +982,12 @@ For example, you could:
|
|
|
527
982
|
The transport object should implement handlers for the log levels you want to customize. Each handler receives the log message as a parameter.
|
|
528
983
|
|
|
529
984
|
For single transport you can use the `transport` parameter. For example:
|
|
985
|
+
|
|
986
|
+
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
|
|
987
|
+
|
|
988
|
+
<details>
|
|
989
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
990
|
+
|
|
530
991
|
```python
|
|
531
992
|
from vwo import init
|
|
532
993
|
|
|
@@ -541,7 +1002,7 @@ class CustomTransport:
|
|
|
541
1002
|
options = {
|
|
542
1003
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
543
1004
|
'account_id': '123456', # VWO Account ID
|
|
544
|
-
'logger' {
|
|
1005
|
+
'logger': {
|
|
545
1006
|
'transport': CustomTransport({'level': 'INFO'})
|
|
546
1007
|
}
|
|
547
1008
|
}
|
|
@@ -549,7 +1010,42 @@ options = {
|
|
|
549
1010
|
vwo_client = init(options)
|
|
550
1011
|
```
|
|
551
1012
|
|
|
1013
|
+
</details>
|
|
1014
|
+
|
|
1015
|
+
<details>
|
|
1016
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1017
|
+
|
|
1018
|
+
```python
|
|
1019
|
+
from wingify import init
|
|
1020
|
+
|
|
1021
|
+
class CustomTransport:
|
|
1022
|
+
def __init__(self, config):
|
|
1023
|
+
self.level = config.get('level', "ERROR")
|
|
1024
|
+
self.config = config
|
|
1025
|
+
|
|
1026
|
+
def log(self, level, message):
|
|
1027
|
+
# your custom implementation here
|
|
1028
|
+
|
|
1029
|
+
options = {
|
|
1030
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1031
|
+
'account_id': '123456', # Wingify Account ID
|
|
1032
|
+
'logger': {
|
|
1033
|
+
'transport': CustomTransport({'level': 'INFO'})
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
wingify_client = init(options)
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
</details>
|
|
1041
|
+
|
|
552
1042
|
For multiple transports you can use the `transports` parameter. For example:
|
|
1043
|
+
|
|
1044
|
+
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
|
|
1045
|
+
|
|
1046
|
+
<details>
|
|
1047
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1048
|
+
|
|
553
1049
|
```python
|
|
554
1050
|
from vwo import init
|
|
555
1051
|
|
|
@@ -572,7 +1068,7 @@ class CustomTransportForError:
|
|
|
572
1068
|
options = {
|
|
573
1069
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
574
1070
|
'account_id': '123456', # VWO Account ID
|
|
575
|
-
'logger' {
|
|
1071
|
+
'logger': {
|
|
576
1072
|
'transports': [
|
|
577
1073
|
CustomTransportForInfo({'level': 'INFO'}),
|
|
578
1074
|
CustomTransportForError({'level': 'ERROR'})
|
|
@@ -583,6 +1079,46 @@ options = {
|
|
|
583
1079
|
vwo_client = init(options)
|
|
584
1080
|
```
|
|
585
1081
|
|
|
1082
|
+
</details>
|
|
1083
|
+
|
|
1084
|
+
<details>
|
|
1085
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1086
|
+
|
|
1087
|
+
```python
|
|
1088
|
+
from wingify import init
|
|
1089
|
+
|
|
1090
|
+
class CustomTransportForInfo:
|
|
1091
|
+
def __init__(self, config):
|
|
1092
|
+
self.level = config.get('level', "INFO")
|
|
1093
|
+
self.config = config
|
|
1094
|
+
|
|
1095
|
+
def log(self, level, message):
|
|
1096
|
+
# your custom implementation here
|
|
1097
|
+
|
|
1098
|
+
class CustomTransportForError:
|
|
1099
|
+
def __init__(self, config):
|
|
1100
|
+
self.level = config.get('level', "ERROR")
|
|
1101
|
+
self.config = config
|
|
1102
|
+
|
|
1103
|
+
def log(self, level, message):
|
|
1104
|
+
# your custom implementation here
|
|
1105
|
+
|
|
1106
|
+
options = {
|
|
1107
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1108
|
+
'account_id': '123456', # Wingify Account ID
|
|
1109
|
+
'logger': {
|
|
1110
|
+
'transports': [
|
|
1111
|
+
CustomTransportForInfo({'level': 'INFO'}),
|
|
1112
|
+
CustomTransportForError({'level': 'ERROR'})
|
|
1113
|
+
]
|
|
1114
|
+
}
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
wingify_client = init(options)
|
|
1118
|
+
```
|
|
1119
|
+
|
|
1120
|
+
</details>
|
|
1121
|
+
|
|
586
1122
|
### Threading
|
|
587
1123
|
|
|
588
1124
|
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 +1134,11 @@ When threading is disabled, all tracking calls will block the main execution thr
|
|
|
598
1134
|
|
|
599
1135
|
Example showing blocking behavior:
|
|
600
1136
|
|
|
1137
|
+
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
|
|
1138
|
+
|
|
1139
|
+
<details>
|
|
1140
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1141
|
+
|
|
601
1142
|
```python
|
|
602
1143
|
# By disabling threading, the SDK will wait for the response from the server for each tracking call.
|
|
603
1144
|
from vwo import init
|
|
@@ -608,11 +1149,33 @@ options = {
|
|
|
608
1149
|
'threading': {
|
|
609
1150
|
'enabled': False
|
|
610
1151
|
}
|
|
611
|
-
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
vwo_client = init(options)
|
|
1155
|
+
```
|
|
1156
|
+
|
|
1157
|
+
</details>
|
|
1158
|
+
|
|
1159
|
+
<details>
|
|
1160
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1161
|
+
|
|
1162
|
+
```python
|
|
1163
|
+
# By disabling threading, the SDK will wait for the response from the server for each tracking call.
|
|
1164
|
+
from wingify import init
|
|
1165
|
+
|
|
1166
|
+
options = {
|
|
1167
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1168
|
+
'account_id': '123456', # Wingify Account ID
|
|
1169
|
+
'threading': {
|
|
1170
|
+
'enabled': False
|
|
1171
|
+
}
|
|
1172
|
+
}
|
|
612
1173
|
|
|
613
|
-
|
|
1174
|
+
wingify_client = init(options)
|
|
614
1175
|
```
|
|
615
1176
|
|
|
1177
|
+
</details>
|
|
1178
|
+
|
|
616
1179
|
#### Enable Threading (Default)
|
|
617
1180
|
|
|
618
1181
|
Threading in the VWO SDK provides several important benefits:
|
|
@@ -627,6 +1190,11 @@ Example of how threading improves performance:
|
|
|
627
1190
|
|
|
628
1191
|
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
1192
|
|
|
1193
|
+
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
|
|
1194
|
+
|
|
1195
|
+
<details>
|
|
1196
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1197
|
+
|
|
630
1198
|
```python
|
|
631
1199
|
# By default, threading is enabled and the max_workers is set to 5.
|
|
632
1200
|
# you can customize the max_workers by passing the max_workers parameter in the threading configuration.
|
|
@@ -639,11 +1207,35 @@ options = {
|
|
|
639
1207
|
'enabled': True,
|
|
640
1208
|
'max_workers': 10
|
|
641
1209
|
}
|
|
642
|
-
|
|
1210
|
+
}
|
|
643
1211
|
|
|
644
|
-
|
|
1212
|
+
vwo_client = init(options)
|
|
645
1213
|
```
|
|
646
1214
|
|
|
1215
|
+
</details>
|
|
1216
|
+
|
|
1217
|
+
<details>
|
|
1218
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1219
|
+
|
|
1220
|
+
```python
|
|
1221
|
+
# By default, threading is enabled and the max_workers is set to 5.
|
|
1222
|
+
# you can customize the max_workers by passing the max_workers parameter in the threading configuration.
|
|
1223
|
+
from wingify import init
|
|
1224
|
+
|
|
1225
|
+
options = {
|
|
1226
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1227
|
+
'account_id': '123456', # Wingify Account ID
|
|
1228
|
+
'threading': {
|
|
1229
|
+
'enabled': True,
|
|
1230
|
+
'max_workers': 10
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
wingify_client = init(options)
|
|
1235
|
+
```
|
|
1236
|
+
|
|
1237
|
+
</details>
|
|
1238
|
+
|
|
647
1239
|
### Batch Events
|
|
648
1240
|
|
|
649
1241
|
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 +1248,11 @@ The `batch_event_data` configuration allows you to optimize network requests by
|
|
|
656
1248
|
|
|
657
1249
|
Example usage:
|
|
658
1250
|
|
|
1251
|
+
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
|
|
1252
|
+
|
|
1253
|
+
<details>
|
|
1254
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1255
|
+
|
|
659
1256
|
```python
|
|
660
1257
|
from vwo import init
|
|
661
1258
|
|
|
@@ -666,8 +1263,8 @@ options = {
|
|
|
666
1263
|
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
667
1264
|
'account_id': '123456', # VWO Account ID
|
|
668
1265
|
'batch_event_data': {
|
|
669
|
-
'events_per_request':
|
|
670
|
-
'request_time_interval':
|
|
1266
|
+
'events_per_request': 100, # Send up to 100 events per request
|
|
1267
|
+
'request_time_interval': 60, # Flush events every 60 seconds
|
|
671
1268
|
'flush_callback': event_flush_callback
|
|
672
1269
|
}
|
|
673
1270
|
}
|
|
@@ -675,12 +1272,54 @@ options = {
|
|
|
675
1272
|
vwo_client = init(options)
|
|
676
1273
|
```
|
|
677
1274
|
|
|
1275
|
+
</details>
|
|
1276
|
+
|
|
1277
|
+
<details>
|
|
1278
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1279
|
+
|
|
1280
|
+
```python
|
|
1281
|
+
from wingify import init
|
|
1282
|
+
|
|
1283
|
+
def event_flush_callback(error, payload):
|
|
1284
|
+
# your implementation here
|
|
1285
|
+
|
|
1286
|
+
options = {
|
|
1287
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1288
|
+
'account_id': '123456', # Wingify Account ID
|
|
1289
|
+
'batch_event_data': {
|
|
1290
|
+
'events_per_request': 100, # Send up to 100 events per request
|
|
1291
|
+
'request_time_interval': 60, # Flush events every 60 seconds
|
|
1292
|
+
'flush_callback': event_flush_callback
|
|
1293
|
+
}
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
wingify_client = init(options)
|
|
1297
|
+
```
|
|
1298
|
+
|
|
1299
|
+
</details>
|
|
1300
|
+
|
|
678
1301
|
You can also manually flush events using the `flush_events()` method:
|
|
679
1302
|
|
|
1303
|
+
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
|
|
1304
|
+
|
|
1305
|
+
<details>
|
|
1306
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1307
|
+
|
|
680
1308
|
```python
|
|
681
1309
|
vwo_client.flush_events()
|
|
682
1310
|
```
|
|
683
1311
|
|
|
1312
|
+
</details>
|
|
1313
|
+
|
|
1314
|
+
<details>
|
|
1315
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1316
|
+
|
|
1317
|
+
```python
|
|
1318
|
+
wingify_client.flush_events()
|
|
1319
|
+
```
|
|
1320
|
+
|
|
1321
|
+
</details>
|
|
1322
|
+
|
|
684
1323
|
|
|
685
1324
|
### Custom Bucketing Seed
|
|
686
1325
|
|
|
@@ -688,6 +1327,11 @@ This option allows you to override the default bucketing behavior (which uses `u
|
|
|
688
1327
|
|
|
689
1328
|
To use this feature, provide the `bucketingSeed` in the user context.
|
|
690
1329
|
|
|
1330
|
+
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
|
|
1331
|
+
|
|
1332
|
+
<details>
|
|
1333
|
+
<summary>VWO (SDK version < 1.50.0)</summary>
|
|
1334
|
+
|
|
691
1335
|
```python
|
|
692
1336
|
from vwo import init
|
|
693
1337
|
|
|
@@ -708,6 +1352,33 @@ user_context = {
|
|
|
708
1352
|
get_flag = vwo_client.get_flag('feature_key', user_context)
|
|
709
1353
|
```
|
|
710
1354
|
|
|
1355
|
+
</details>
|
|
1356
|
+
|
|
1357
|
+
<details>
|
|
1358
|
+
<summary>Wingify (SDK version >= 1.50.0) — recommended</summary>
|
|
1359
|
+
|
|
1360
|
+
```python
|
|
1361
|
+
from wingify import init
|
|
1362
|
+
|
|
1363
|
+
options = {
|
|
1364
|
+
'sdk_key': '32-alpha-numeric-sdk-key', # SDK Key
|
|
1365
|
+
'account_id': '123456', # Wingify Account ID
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
wingify_client = init(options)
|
|
1369
|
+
|
|
1370
|
+
# Pass bucketingSeed in context
|
|
1371
|
+
user_context = {
|
|
1372
|
+
'id': 'unique_user_id',
|
|
1373
|
+
'bucketingSeed': 'group_id_123' # This value will be used for bucketing
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
# The user will be bucketed based on 'group_id_123' instead of 'unique_user_id'
|
|
1377
|
+
get_flag = wingify_client.get_flag('feature_key', user_context)
|
|
1378
|
+
```
|
|
1379
|
+
|
|
1380
|
+
</details>
|
|
1381
|
+
|
|
711
1382
|
## Local development
|
|
712
1383
|
|
|
713
1384
|
```bash
|