wingify-fme-python-sdk 1.61.0__tar.gz → 1.62.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.62.0}/PKG-INFO +1 -1
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/setup.py +1 -1
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/constants/Constants.py +4 -1
- wingify_fme_python_sdk-1.62.0/wingify/constants/sampled_debug_error_template_keys.py +34 -0
- wingify_fme_python_sdk-1.62.0/wingify/models/settings/internal_event_sampling_settings_model.py +53 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/settings/settings_model.py +19 -2
- wingify_fme_python_sdk-1.62.0/wingify/services/internal_events_sampling_service.py +62 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/debugger_service_util.py +16 -0
- wingify_fme_python_sdk-1.62.0/wingify/utils/internal_events_sampling_util.py +106 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/wingify.py +10 -9
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0/wingify_fme_python_sdk.egg-info}/PKG-INFO +1 -1
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify_fme_python_sdk.egg-info/SOURCES.txt +4 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/LICENSE +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/MANIFEST.in +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/NOTICE +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/README.md +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/requirements-dev.txt +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/requirements.txt +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/setup.cfg +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/vwo/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/vwo/vwo.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/vwo/vwo_builder.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/vwo/vwo_client.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/api/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/api/get_flag_api.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/api/set_attribute_api.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/api/track_api.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/constants/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/decorators/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/decorators/storage_decorator.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/api_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/campaign_type_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/debug_category_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/event_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/headers_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/hooks_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/status_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/storage_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/url_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/Alias.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/AliasSetResponse.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/batch_event_data.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/campaign/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/campaign/campaign_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/campaign/feature_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/campaign/holdout_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/campaign/impact_campaign_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/campaign/metric_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/campaign/rule_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/campaign/variable_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/campaign/variation_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/gateway_service_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/campaign_group_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/campaign_metric_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/campaign_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/campaign_variation_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/empty_object_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/feature_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/group_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/holdout_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/rule_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/settings_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/variable_schema.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/settings/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/storage/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/storage/storage_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/user/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/user/context_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/user/context_vwo_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/user/get_flag.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/vwo_options_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/wingify_options_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/decision_maker/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/decision_maker/decision_maker.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/core/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/core/log_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/core/log_transport_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/enums/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/enums/log_level_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/enums/log_level_number_enum.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/log_message_builder.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/logger.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/transports/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/transports/console_transport.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/client/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/client/network_client.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/handlers/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/handlers/request_handler.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/manager/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/manager/network_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/models/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/models/global_request_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/models/request_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/network_layer/models/response_model.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/segmentation_evaluator/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/segmentation_evaluator/core/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/segmentation_evaluator/core/segmentation_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/segmentation_evaluator/enums/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.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.62.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.62.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.62.0}/wingify/packages/segmentation_evaluator/evaluators/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/segmentation_evaluator/evaluators/segment_evaluator.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/segmentation_evaluator/evaluators/segment_operand_evaluator.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/segmentation_evaluator/utils/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/segmentation_evaluator/utils/segment_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.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.62.0}/wingify/packages/storage/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/storage/connector.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/storage/storage.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/resources/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/resources/debug-messages.json +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/resources/error-messages.json +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/resources/info-message.json +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/resources/trace-messages.json +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/resources/warn-messages.json +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/batch_event_queue.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/campaign_decision_service.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/hooks_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/settings_manager.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/storage_service.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/url_service.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/__init__.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/aliasing_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/brand_context.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/brand_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/campaign_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/data_type_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/decision_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/event_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/function_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/gateway_service_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/holdout_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/impression_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/log_message_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/meg_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/model_utils.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/network_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/rule_evaluation_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/settings_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/usage_stats_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/uuid_util.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/vwo_client.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/wingify_builder.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/wingify_client.py +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify_fme_python_sdk.egg-info/dependency_links.txt +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify_fme_python_sdk.egg-info/requires.txt +0 -0
- {wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify_fme_python_sdk.egg-info/top_level.txt +0 -0
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/constants/Constants.py
RENAMED
|
@@ -17,7 +17,7 @@ class Constants:
|
|
|
17
17
|
# TODO: read from setup.py
|
|
18
18
|
sdk_meta = {
|
|
19
19
|
"name": "vwo-fme-python-sdk",
|
|
20
|
-
"version": "1.
|
|
20
|
+
"version": "1.62.0",
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
SDK_VERSION = sdk_meta["version"]
|
|
@@ -87,3 +87,6 @@ class Constants:
|
|
|
87
87
|
|
|
88
88
|
VARIATION_IS_PART_OF_HOLDOUT = 1
|
|
89
89
|
VARIATION_NOT_PART_OF_HOLDOUT = 2
|
|
90
|
+
|
|
91
|
+
INTERNAL_EVENTS_DEFAULT_SAMPLING_PERCENT_SERVER = 10.0
|
|
92
|
+
INTERNAL_EVENTS_DEFAULT_ALWAYS_APPLY_SAMPLING = False
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Copyright 2024-2026 Wingify Software Pvt. Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
class SampledDebugErrorTemplateKeys:
|
|
16
|
+
"""
|
|
17
|
+
Debug error template keys (`msg_t`) that are subject to sampling.
|
|
18
|
+
Keys not listed here always send and bypass sampling.
|
|
19
|
+
"""
|
|
20
|
+
SAMPLED_KEYS = {
|
|
21
|
+
"EVENT_NOT_FOUND",
|
|
22
|
+
"FEATURE_NOT_FOUND",
|
|
23
|
+
"FEATURE_NOT_FOUND_WITH_ID"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@staticmethod
|
|
27
|
+
def contains(message_template_key: str) -> bool:
|
|
28
|
+
"""
|
|
29
|
+
Checks whether a debug error template key should be sampled before sending.
|
|
30
|
+
|
|
31
|
+
:param message_template_key: The `msg_t` value from the debug event
|
|
32
|
+
:return: `True` if the key is in the sampled set; `False` otherwise
|
|
33
|
+
"""
|
|
34
|
+
return message_template_key is not None and message_template_key in SampledDebugErrorTemplateKeys.SAMPLED_KEYS
|
wingify_fme_python_sdk-1.62.0/wingify/models/settings/internal_event_sampling_settings_model.py
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Copyright 2024-2026 Wingify Software Pvt. Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from typing import Dict, Any, Optional
|
|
16
|
+
|
|
17
|
+
class PlatformSamplingRates:
|
|
18
|
+
"""
|
|
19
|
+
Holds the sampling percentage for a specific platform (e.g., server).
|
|
20
|
+
Maps to the per-platform object inside `sampling.usage` or `sampling.debug`.
|
|
21
|
+
"""
|
|
22
|
+
def __init__(self, data: Dict[str, Any]):
|
|
23
|
+
self._server = data.get("server")
|
|
24
|
+
|
|
25
|
+
def get_server(self) -> Optional[float]:
|
|
26
|
+
return self._server
|
|
27
|
+
|
|
28
|
+
class EventCategorySamplingRates:
|
|
29
|
+
"""
|
|
30
|
+
Groups sampling rates by event category: `usage` and `debug`.
|
|
31
|
+
Maps to the top-level `sampling` object in the DaCDN settings.
|
|
32
|
+
"""
|
|
33
|
+
def __init__(self, data: Dict[str, Any]):
|
|
34
|
+
self._usage = PlatformSamplingRates(data.get("usage", {})) if data.get("usage") else None
|
|
35
|
+
self._debug = PlatformSamplingRates(data.get("debug", {})) if data.get("debug") else None
|
|
36
|
+
|
|
37
|
+
def get_usage(self) -> Optional[PlatformSamplingRates]:
|
|
38
|
+
return self._usage
|
|
39
|
+
|
|
40
|
+
def get_debug(self) -> Optional[PlatformSamplingRates]:
|
|
41
|
+
return self._debug
|
|
42
|
+
|
|
43
|
+
class AlwaysApplySampling:
|
|
44
|
+
"""
|
|
45
|
+
Controls whether sampling is enforced before sending an event.
|
|
46
|
+
Maps to `alwaysApplySampling` in DaCDN settings.
|
|
47
|
+
When `server` is False (the default), usage-stats and sampled debug events bypass sampling and are always sent.
|
|
48
|
+
"""
|
|
49
|
+
def __init__(self, data: Dict[str, Any]):
|
|
50
|
+
self._server = data.get("server")
|
|
51
|
+
|
|
52
|
+
def get_server(self) -> Optional[bool]:
|
|
53
|
+
return self._server
|
|
@@ -13,13 +13,14 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
from typing import List, Dict, Optional
|
|
16
|
+
from typing import List, Dict, Optional, Any
|
|
17
17
|
from ..campaign.campaign_model import CampaignModel
|
|
18
18
|
from ..campaign.feature_model import FeatureModel
|
|
19
19
|
from ...utils.model_utils import _parse_campaign, _parse_feature
|
|
20
20
|
import json
|
|
21
21
|
from ...constants.Constants import Constants
|
|
22
22
|
from ..campaign.holdout_model import HoldoutModel
|
|
23
|
+
from .internal_event_sampling_settings_model import AlwaysApplySampling, EventCategorySamplingRates
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
class SettingsModel:
|
|
@@ -37,6 +38,10 @@ class SettingsModel:
|
|
|
37
38
|
self._is_web_connectivity_enabled = data.get("isWebConnectivityEnabled", True)
|
|
38
39
|
self._holdouts = [HoldoutModel(h) for h in data.get("holdouts", [])]
|
|
39
40
|
self._is_tracking_usage_enabled = data.get("isMAU", False)
|
|
41
|
+
self._sdk_meta_info = data.get("sdkMetaInfo", {})
|
|
42
|
+
self._usage_stats_account_id = data.get("usageStatsAccountId", None)
|
|
43
|
+
self._always_apply_sampling = AlwaysApplySampling(data.get("alwaysApplySampling", {})) if data.get("alwaysApplySampling") is not None else None
|
|
44
|
+
self._sampling = EventCategorySamplingRates(data.get("sampling", {})) if data.get("sampling") is not None else None
|
|
40
45
|
|
|
41
46
|
# Getter methods for accessing private attributes
|
|
42
47
|
def get_features(self) -> List[FeatureModel]:
|
|
@@ -107,4 +112,16 @@ class SettingsModel:
|
|
|
107
112
|
return self._is_tracking_usage_enabled
|
|
108
113
|
|
|
109
114
|
def set_is_tracking_usage_enabled(self, value: bool):
|
|
110
|
-
self._is_tracking_usage_enabled = value
|
|
115
|
+
self._is_tracking_usage_enabled = value
|
|
116
|
+
|
|
117
|
+
def get_sdk_meta_info(self) -> Dict[str, Any]:
|
|
118
|
+
return self._sdk_meta_info
|
|
119
|
+
|
|
120
|
+
def get_usage_stats_account_id(self) -> Optional[int]:
|
|
121
|
+
return self._usage_stats_account_id
|
|
122
|
+
|
|
123
|
+
def get_always_apply_sampling(self) -> Optional[AlwaysApplySampling]:
|
|
124
|
+
return self._always_apply_sampling
|
|
125
|
+
|
|
126
|
+
def get_sampling(self) -> Optional[EventCategorySamplingRates]:
|
|
127
|
+
return self._sampling
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Copyright 2024-2026 Wingify Software Pvt. Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import random
|
|
16
|
+
from typing import Callable, Optional
|
|
17
|
+
from ..models.settings.settings_model import SettingsModel
|
|
18
|
+
from ..utils.internal_events_sampling_util import (
|
|
19
|
+
should_apply_sampling,
|
|
20
|
+
get_usage_stats_sampling_percent,
|
|
21
|
+
get_debug_event_sampling_percent,
|
|
22
|
+
passes_sampling_percent,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
class InternalEventsSamplingService:
|
|
26
|
+
"""
|
|
27
|
+
Applies sampling rules for internal SDK events:
|
|
28
|
+
`vwo_sdkUsageStats` and sampled `vwo_sdkDebug`.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __init__(self, random_value_provider: Optional[Callable[[], float]] = None):
|
|
32
|
+
"""
|
|
33
|
+
Creates a sampling service.
|
|
34
|
+
:param random_value_provider: Optional supplier returning a value in [0, 1) for sampling checks; overridable in tests.
|
|
35
|
+
"""
|
|
36
|
+
self._random_value_provider = random_value_provider if random_value_provider is not None else random.random
|
|
37
|
+
|
|
38
|
+
def should_send_usage_stats_event(self, settings: Optional[SettingsModel]) -> bool:
|
|
39
|
+
"""
|
|
40
|
+
Determines whether the usage-stats event should be sent.
|
|
41
|
+
On server, always sends unless `alwaysApplySampling.server` is enabled.
|
|
42
|
+
:param settings: Parsed settings from the server
|
|
43
|
+
:return: `True` when the usage-stats event should be sent
|
|
44
|
+
"""
|
|
45
|
+
if not should_apply_sampling(settings):
|
|
46
|
+
return True
|
|
47
|
+
|
|
48
|
+
usage_stats_sampling_percent = get_usage_stats_sampling_percent(settings)
|
|
49
|
+
return passes_sampling_percent(usage_stats_sampling_percent, self._random_value_provider())
|
|
50
|
+
|
|
51
|
+
def should_send_sampled_debug_event(self, settings: Optional[SettingsModel]) -> bool:
|
|
52
|
+
"""
|
|
53
|
+
Determines whether a sampled debug event should be sent.
|
|
54
|
+
Only called for `msg_t` keys in the sampled set; always-send keys bypass this.
|
|
55
|
+
:param settings: Parsed settings from the server
|
|
56
|
+
:return: `True` when the sampled debug event should be sent
|
|
57
|
+
"""
|
|
58
|
+
if not should_apply_sampling(settings):
|
|
59
|
+
return True
|
|
60
|
+
|
|
61
|
+
debug_sampling_percent = get_debug_event_sampling_percent(settings)
|
|
62
|
+
return passes_sampling_percent(debug_sampling_percent, self._random_value_provider())
|
|
@@ -30,6 +30,22 @@ def send_debug_event_to_vwo(debug_event_props: Dict[str, Any]):
|
|
|
30
30
|
get_debugger_event_payload,
|
|
31
31
|
send_event,
|
|
32
32
|
)
|
|
33
|
+
from ..utils.internal_events_sampling_util import is_sampled_debug_error_template_key
|
|
34
|
+
from ..services.internal_events_sampling_service import InternalEventsSamplingService
|
|
35
|
+
from ..wingify import Wingify
|
|
36
|
+
|
|
37
|
+
# Sampled keys: apply sampling only when alwaysApplySampling.server is true; others are ALWAYS_SEND
|
|
38
|
+
msg_t = debug_event_props.get("msg_t")
|
|
39
|
+
is_sampled_debug_event = isinstance(msg_t, str) and is_sampled_debug_error_template_key(msg_t)
|
|
40
|
+
|
|
41
|
+
instance = Wingify.getInstance()
|
|
42
|
+
settings = getattr(instance, '_settings', None) if instance else None
|
|
43
|
+
# if the event is present in the sampled debug events keys list, then apply sampling
|
|
44
|
+
if is_sampled_debug_event:
|
|
45
|
+
sampling_service = InternalEventsSamplingService()
|
|
46
|
+
if not sampling_service.should_send_sampled_debug_event(settings):
|
|
47
|
+
return
|
|
48
|
+
|
|
33
49
|
# Create the query parameters
|
|
34
50
|
properties = get_events_base_properties(EventEnum.DEBUGGER_EVENT.value)
|
|
35
51
|
# Create the payload with required fields
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Copyright 2024-2026 Wingify Software Pvt. Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import math
|
|
16
|
+
from typing import Optional
|
|
17
|
+
from ..constants.Constants import Constants
|
|
18
|
+
from ..constants.sampled_debug_error_template_keys import SampledDebugErrorTemplateKeys
|
|
19
|
+
from ..models.settings.settings_model import SettingsModel
|
|
20
|
+
from ..models.settings.internal_event_sampling_settings_model import PlatformSamplingRates
|
|
21
|
+
|
|
22
|
+
def get_default_sampling_percent() -> float:
|
|
23
|
+
"""
|
|
24
|
+
Returns the default server sampling percentage when settings omit the value.
|
|
25
|
+
:return: Default sampling percentage (10.0)
|
|
26
|
+
"""
|
|
27
|
+
return Constants.INTERNAL_EVENTS_DEFAULT_SAMPLING_PERCENT_SERVER
|
|
28
|
+
|
|
29
|
+
def normalize_sampling_percent(sampling_value: Optional[float]) -> float:
|
|
30
|
+
"""
|
|
31
|
+
Normalizes a sampling value to a valid percentage in the range [0, 100].
|
|
32
|
+
Falls back to the server default when the value is missing or invalid.
|
|
33
|
+
:param sampling_value: Raw value from settings
|
|
34
|
+
:return: Valid sampling percentage between 0 and 100
|
|
35
|
+
"""
|
|
36
|
+
if sampling_value is not None and 0 <= sampling_value <= 100:
|
|
37
|
+
return float(sampling_value)
|
|
38
|
+
|
|
39
|
+
return get_default_sampling_percent()
|
|
40
|
+
|
|
41
|
+
def get_runtime_sampling_percent(runtime_sampling_config: Optional[PlatformSamplingRates]) -> float:
|
|
42
|
+
"""
|
|
43
|
+
Reads the server sampling percentage from a runtime sampling config object.
|
|
44
|
+
:param runtime_sampling_config: Nested config (e.g. `sampling.usage`)
|
|
45
|
+
:return: Sampling percentage for the server runtime
|
|
46
|
+
"""
|
|
47
|
+
if runtime_sampling_config is None:
|
|
48
|
+
return get_default_sampling_percent()
|
|
49
|
+
|
|
50
|
+
return normalize_sampling_percent(runtime_sampling_config.get_server())
|
|
51
|
+
|
|
52
|
+
def get_usage_stats_sampling_percent(settings: Optional[SettingsModel]) -> float:
|
|
53
|
+
"""
|
|
54
|
+
Reads the usage-stats sampling percentage for the server runtime from settings.
|
|
55
|
+
:param settings: Parsed settings from the server
|
|
56
|
+
:return: Configured usage-stats sampling percentage (0-100)
|
|
57
|
+
"""
|
|
58
|
+
sampling = settings.get_sampling() if settings else None
|
|
59
|
+
usage_sampling = sampling.get_usage() if sampling else None
|
|
60
|
+
return get_runtime_sampling_percent(usage_sampling)
|
|
61
|
+
|
|
62
|
+
def get_debug_event_sampling_percent(settings: Optional[SettingsModel]) -> float:
|
|
63
|
+
"""
|
|
64
|
+
Reads the debug-event sampling percentage for the server runtime from settings.
|
|
65
|
+
:param settings: Parsed settings from the server
|
|
66
|
+
:return: Configured debug sampling percentage (0-100)
|
|
67
|
+
"""
|
|
68
|
+
sampling = settings.get_sampling() if settings else None
|
|
69
|
+
debug_sampling = sampling.get_debug() if sampling else None
|
|
70
|
+
return get_runtime_sampling_percent(debug_sampling)
|
|
71
|
+
|
|
72
|
+
def should_apply_sampling(settings: Optional[SettingsModel]) -> bool:
|
|
73
|
+
"""
|
|
74
|
+
Determines whether sampling should be evaluated before send.
|
|
75
|
+
Controlled by `alwaysApplySampling.server`; defaults to `False`.
|
|
76
|
+
When `False`, usage-stats and sampled debug events are always sent.
|
|
77
|
+
:param settings: Parsed settings from the server
|
|
78
|
+
:return: `True` when a sampling check is required before sending
|
|
79
|
+
"""
|
|
80
|
+
if settings is None:
|
|
81
|
+
return Constants.INTERNAL_EVENTS_DEFAULT_ALWAYS_APPLY_SAMPLING
|
|
82
|
+
|
|
83
|
+
always_apply_sampling = settings.get_always_apply_sampling()
|
|
84
|
+
if always_apply_sampling is None or always_apply_sampling.get_server() is None:
|
|
85
|
+
return Constants.INTERNAL_EVENTS_DEFAULT_ALWAYS_APPLY_SAMPLING
|
|
86
|
+
|
|
87
|
+
return always_apply_sampling.get_server()
|
|
88
|
+
|
|
89
|
+
def passes_sampling_percent(sampling_percent: float, random_value: float) -> bool:
|
|
90
|
+
"""
|
|
91
|
+
Evaluates whether an event qualifies under the configured sampling percentage.
|
|
92
|
+
:param sampling_percent: Configured sampling percentage (0-100)
|
|
93
|
+
:param random_value: Random value in the range [0, 1)
|
|
94
|
+
:return: `True` when the random draw falls within the sampling threshold
|
|
95
|
+
"""
|
|
96
|
+
# Map random [0,1) to integer percent bucket [0,100]
|
|
97
|
+
normalized_random_percent = int(math.floor(random_value * 101))
|
|
98
|
+
return normalized_random_percent <= sampling_percent
|
|
99
|
+
|
|
100
|
+
def is_sampled_debug_error_template_key(message_template_key: str) -> bool:
|
|
101
|
+
"""
|
|
102
|
+
Checks whether a debug error template key is in the sampled set.
|
|
103
|
+
:param message_template_key: The `msg_t` value from the debug event
|
|
104
|
+
:return: `True` when the key requires sampling before send
|
|
105
|
+
"""
|
|
106
|
+
return SampledDebugErrorTemplateKeys.contains(message_template_key)
|
|
@@ -25,6 +25,7 @@ from wingify.utils.brand_context import set_is_via_vwo
|
|
|
25
25
|
from wingify.utils.brand_util import get_brand
|
|
26
26
|
from wingify.utils.log_message_util import refresh_log_messages
|
|
27
27
|
from wingify.packages.logger.core.log_manager import LogManager
|
|
28
|
+
from wingify.services.internal_events_sampling_service import InternalEventsSamplingService
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
class Wingify:
|
|
@@ -103,22 +104,22 @@ def init(options: Dict[str, Any]) -> Optional["WingifyClient"]:
|
|
|
103
104
|
sdk_init_time = int((time.time() * 1000) - start_time_for_init)
|
|
104
105
|
|
|
105
106
|
was_initialized = False
|
|
106
|
-
if instance
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
if getattr(instance, '_settings', None) is not None:
|
|
108
|
+
sdk_meta_info = instance._settings.get_sdk_meta_info()
|
|
109
|
+
if sdk_meta_info:
|
|
110
|
+
was_initialized = sdk_meta_info.get("wasInitializedEarlier", False)
|
|
110
111
|
|
|
111
112
|
if instance.is_settings_valid_on_init and not was_initialized:
|
|
112
113
|
send_sdk_init_event(instance.settings_fetch_time, sdk_init_time)
|
|
113
114
|
|
|
114
115
|
usage_stats_account_id = None
|
|
115
|
-
if instance
|
|
116
|
-
usage_stats_account_id = instance.
|
|
117
|
-
"usageStatsAccountId"
|
|
118
|
-
)
|
|
116
|
+
if getattr(instance, '_settings', None) is not None:
|
|
117
|
+
usage_stats_account_id = instance._settings.get_usage_stats_account_id()
|
|
119
118
|
|
|
120
119
|
if usage_stats_account_id:
|
|
121
|
-
|
|
120
|
+
sampling_service = InternalEventsSamplingService()
|
|
121
|
+
if sampling_service.should_send_usage_stats_event(instance._settings):
|
|
122
|
+
send_sdk_usage_stats_event(usage_stats_account_id)
|
|
122
123
|
|
|
123
124
|
return instance
|
|
124
125
|
except Exception as e:
|
|
@@ -20,6 +20,7 @@ wingify/api/set_attribute_api.py
|
|
|
20
20
|
wingify/api/track_api.py
|
|
21
21
|
wingify/constants/Constants.py
|
|
22
22
|
wingify/constants/__init__.py
|
|
23
|
+
wingify/constants/sampled_debug_error_template_keys.py
|
|
23
24
|
wingify/decorators/__init__.py
|
|
24
25
|
wingify/decorators/storage_decorator.py
|
|
25
26
|
wingify/enums/__init__.py
|
|
@@ -61,6 +62,7 @@ wingify/models/schemas/rule_schema.py
|
|
|
61
62
|
wingify/models/schemas/settings_schema.py
|
|
62
63
|
wingify/models/schemas/variable_schema.py
|
|
63
64
|
wingify/models/settings/__init__.py
|
|
65
|
+
wingify/models/settings/internal_event_sampling_settings_model.py
|
|
64
66
|
wingify/models/settings/settings_model.py
|
|
65
67
|
wingify/models/storage/__init__.py
|
|
66
68
|
wingify/models/storage/storage_model.py
|
|
@@ -119,6 +121,7 @@ wingify/services/__init__.py
|
|
|
119
121
|
wingify/services/batch_event_queue.py
|
|
120
122
|
wingify/services/campaign_decision_service.py
|
|
121
123
|
wingify/services/hooks_manager.py
|
|
124
|
+
wingify/services/internal_events_sampling_service.py
|
|
122
125
|
wingify/services/settings_manager.py
|
|
123
126
|
wingify/services/storage_service.py
|
|
124
127
|
wingify/services/url_service.py
|
|
@@ -135,6 +138,7 @@ wingify/utils/function_util.py
|
|
|
135
138
|
wingify/utils/gateway_service_util.py
|
|
136
139
|
wingify/utils/holdout_util.py
|
|
137
140
|
wingify/utils/impression_util.py
|
|
141
|
+
wingify/utils/internal_events_sampling_util.py
|
|
138
142
|
wingify/utils/log_message_util.py
|
|
139
143
|
wingify/utils/meg_util.py
|
|
140
144
|
wingify/utils/model_utils.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/api/set_attribute_api.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/constants/__init__.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/decorators/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/campaign_type_enum.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/debug_category_enum.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/headers_enum.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/status_enum.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/enums/storage_enum.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/AliasSetResponse.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/batch_event_data.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/campaign/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/schemas/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/settings/__init__.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/storage/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/user/__init__.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/user/context_model.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/user/get_flag.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/models/vwo_options_model.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/logger/logger.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/storage/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/packages/storage/storage.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/resources/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/resources/info-message.json
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/resources/warn-messages.json
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/hooks_manager.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/settings_manager.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/storage_service.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/services/url_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/aliasing_util.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/brand_context.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/campaign_util.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/data_type_util.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/decision_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/function_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/holdout_util.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/impression_util.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/log_message_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/model_utils.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/network_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/settings_util.py
RENAMED
|
File without changes
|
{wingify_fme_python_sdk-1.61.0 → wingify_fme_python_sdk-1.62.0}/wingify/utils/usage_stats_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|