wingify-fme-python-sdk 1.62.0__tar.gz → 1.65.0__tar.gz

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