kameleoon-client-python 3.15.0__tar.gz → 3.16.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 (184) hide show
  1. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/PKG-INFO +1 -1
  2. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/custom_data_info.py +8 -1
  3. kameleoon-client-python-3.16.0/kameleoon/data/custom_data.py +90 -0
  4. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/manager/visitor.py +4 -2
  5. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/manager/visitor_manager.py +8 -3
  6. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/mapping_identifier.py +2 -1
  7. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/remote_data/remote_visitor_data.py +1 -1
  8. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/middleware.py +0 -1
  9. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/sdk_version.py +1 -1
  10. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/targeting_manager.py +1 -1
  11. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon_client_python.egg-info/PKG-INFO +1 -1
  12. kameleoon-client-python-3.15.0/kameleoon/data/custom_data.py +0 -58
  13. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/MANIFEST.in +0 -0
  14. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/README.md +0 -0
  15. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/__init__.py +0 -0
  16. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/client_readiness/__init__.py +0 -0
  17. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/client_readiness/async_readiness.py +0 -0
  18. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/client_readiness/threading_readiness.py +0 -0
  19. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/__init__.py +0 -0
  20. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/data_file.py +0 -0
  21. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/experiment.py +0 -0
  22. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/feature_flag.py +0 -0
  23. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/me_group.py +0 -0
  24. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/rule.py +0 -0
  25. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/rule_type.py +0 -0
  26. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/settings.py +0 -0
  27. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/variable.py +0 -0
  28. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/variation.py +0 -0
  29. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/configuration/variation_by_exposition.py +0 -0
  30. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/__init__.py +0 -0
  31. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/browser.py +0 -0
  32. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/cbscores.py +0 -0
  33. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/conversion.py +0 -0
  34. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/cookie.py +0 -0
  35. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/data.py +0 -0
  36. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/device.py +0 -0
  37. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/geolocation.py +0 -0
  38. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/kcs_heat.py +0 -0
  39. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/manager/__init__.py +0 -0
  40. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/manager/assigned_variation.py +0 -0
  41. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/manager/forced_experiment_variation.py +0 -0
  42. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/manager/forced_feature_variation.py +0 -0
  43. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/manager/forced_variation.py +0 -0
  44. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/manager/page_view_visit.py +0 -0
  45. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/manager/visitor_slot.py +0 -0
  46. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/operating_system.py +0 -0
  47. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/page_view.py +0 -0
  48. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/personalization.py +0 -0
  49. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/targeted_segment.py +0 -0
  50. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/unique_identifier.py +0 -0
  51. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/user_agent.py +0 -0
  52. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/data/visitor_visits.py +0 -0
  53. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/defaults.py +0 -0
  54. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/exceptions.py +0 -0
  55. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/__init__.py +0 -0
  56. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/domain.py +0 -0
  57. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/functions.py +0 -0
  58. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/hasher.py +0 -0
  59. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/logger.py +0 -0
  60. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/multi_threading.py +0 -0
  61. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/nonce.py +0 -0
  62. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/repeat_timer.py +0 -0
  63. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/scheduler.py +0 -0
  64. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/string_utils.py +0 -0
  65. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/helpers/visitor_code.py +0 -0
  66. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/hybrid/__init__.py +0 -0
  67. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/hybrid/hybrid_manager.py +0 -0
  68. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/hybrid/hybrid_manager_impl.py +0 -0
  69. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/kameleoon_client.py +0 -0
  70. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/kameleoon_client_config.py +0 -0
  71. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/kameleoon_client_factory.py +0 -0
  72. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/logging/__init__.py +0 -0
  73. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/logging/kameleoon_logger.py +0 -0
  74. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/logging/log_level.py +0 -0
  75. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/logging/logger.py +0 -0
  76. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/__init__.py +0 -0
  77. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/asyncexec/__init__.py +0 -0
  78. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/asyncexec/async_executor.py +0 -0
  79. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/data/__init__.py +0 -0
  80. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/data/data_manager.py +0 -0
  81. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/evaluation/__init__.py +0 -0
  82. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/evaluation/evaluated_experiment.py +0 -0
  83. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/remote_data/__init__.py +0 -0
  84. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/remote_data/remote_data_manager.py +0 -0
  85. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/tracking/__init__.py +0 -0
  86. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/tracking/tracking_builder.py +0 -0
  87. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/tracking/tracking_manager.py +0 -0
  88. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/tracking/visitor_tracking_registry.py +0 -0
  89. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/warehouse/__init__.py +0 -0
  90. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/managers/warehouse/warehouse_manager.py +0 -0
  91. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/__init__.py +0 -0
  92. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/access_token_source.py +0 -0
  93. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/access_token_source_factory.py +0 -0
  94. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/activity_event.py +0 -0
  95. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/cookie/__init__.py +0 -0
  96. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/cookie/cookie_manager.py +0 -0
  97. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/net_provider.py +0 -0
  98. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/net_provider_impl.py +0 -0
  99. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/network_manager.py +0 -0
  100. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/network_manager_factory.py +0 -0
  101. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/network_manager_factory_impl.py +0 -0
  102. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/network_manager_impl.py +0 -0
  103. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/query_builder.py +0 -0
  104. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/query_encodable.py +0 -0
  105. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/sendable.py +0 -0
  106. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/service_initialize_context.py +0 -0
  107. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/service_initialize_context_impl.py +0 -0
  108. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/services/__init__.py +0 -0
  109. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/services/automation_service.py +0 -0
  110. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/services/automation_service_impl.py +0 -0
  111. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/services/configuration_service.py +0 -0
  112. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/services/configuration_service_impl.py +0 -0
  113. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/services/data_service.py +0 -0
  114. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/services/data_service_impl.py +0 -0
  115. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/services/service.py +0 -0
  116. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/services/service_impl.py +0 -0
  117. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/uri_helper.py +0 -0
  118. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/network/url_provider.py +0 -0
  119. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/real_time/__init__.py +0 -0
  120. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/real_time/real_time_configuration_service.py +0 -0
  121. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/real_time/real_time_event.py +0 -0
  122. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/storage/__init__.py +0 -0
  123. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/storage/cache.py +0 -0
  124. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/storage/cache_factory.py +0 -0
  125. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/storage/cache_factory_impl.py +0 -0
  126. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/storage/cache_impl.py +0 -0
  127. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/__init__.py +0 -0
  128. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/__init__.py +0 -0
  129. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/browser_condition.py +0 -0
  130. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/constants.py +0 -0
  131. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/conversion_condition.py +0 -0
  132. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/cookie_condition.py +0 -0
  133. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/custom_datum.py +0 -0
  134. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/device_condition.py +0 -0
  135. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/exclusive_experiment_condition.py +0 -0
  136. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/geolocation_condition.py +0 -0
  137. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/kcs_heat_range_condition.py +0 -0
  138. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/number_condition.py +0 -0
  139. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/operating_system_condition.py +0 -0
  140. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/page_title_condition.py +0 -0
  141. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/page_url_condition.py +0 -0
  142. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/page_view_number_condition.py +0 -0
  143. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/previous_page_condition.py +0 -0
  144. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/sdk_language_condition.py +0 -0
  145. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/segment_condition.py +0 -0
  146. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/string_value_condition.py +0 -0
  147. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/target_experiment_condition.py +0 -0
  148. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/target_feature_flag_condition.py +0 -0
  149. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/target_personalization_condition.py +0 -0
  150. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/targeting_condition.py +0 -0
  151. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/time_elapsed_since_visit_condition.py +0 -0
  152. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/unknown_condition.py +0 -0
  153. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/visit_number_today_condition.py +0 -0
  154. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/visit_number_total_condition.py +0 -0
  155. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/visitor_code_condition.py +0 -0
  156. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/conditions/visitor_new_return_condition.py +0 -0
  157. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/models.py +0 -0
  158. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/tree_builder.py +0 -0
  159. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/targeting/tree_condition_factory.py +0 -0
  160. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/types/__init__.py +0 -0
  161. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/types/remote_visitor_data_filter.py +0 -0
  162. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/types/variable.py +0 -0
  163. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon/types/variation.py +0 -0
  164. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon_client_python.egg-info/SOURCES.txt +0 -0
  165. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon_client_python.egg-info/dependency_links.txt +0 -0
  166. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon_client_python.egg-info/requires.txt +14 -14
  167. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/kameleoon_client_python.egg-info/top_level.txt +0 -0
  168. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/setup.cfg +0 -0
  169. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/setup.py +0 -0
  170. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/__init__.py +0 -0
  171. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/kameleoon_app/__init__.py +0 -0
  172. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/kameleoon_app/admin.py +0 -0
  173. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/kameleoon_app/apps.py +0 -0
  174. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/kameleoon_app/migrations/__init__.py +0 -0
  175. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/kameleoon_app/models.py +0 -0
  176. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/kameleoon_app/tests.py +0 -0
  177. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/kameleoon_app/views.py +0 -0
  178. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/manage.py +0 -0
  179. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/proj/__init__.py +0 -0
  180. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/proj/asgi.py +0 -0
  181. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/proj/settings.py +0 -0
  182. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/proj/urls.py +0 -0
  183. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/integration/proj/proj/wsgi.py +0 -0
  184. {kameleoon-client-python-3.15.0 → kameleoon-client-python-3.16.0}/tests/resources/config.yml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kameleoon-client-python
3
- Version: 3.15.0
3
+ Version: 3.16.0
4
4
  Summary: Kameleoon Client Python Software Development Kit.
5
5
  Home-page: https://developers.kameleoon.com/python-sdk.html
6
6
  Author: Kameleoon
@@ -18,6 +18,7 @@ class CustomDataInfo:
18
18
  self.__local_only = set()
19
19
  self.__visitor_scope = set()
20
20
  self.__custom_data_index_by_id = {}
21
+ self.__custom_data_index_by_name = {}
21
22
  if custom_data is not None:
22
23
  for data in custom_data:
23
24
  index = data.get("index")
@@ -29,6 +30,8 @@ class CustomDataInfo:
29
30
  self.__visitor_scope.add(index)
30
31
  if (id_ := data.get("id")) is not None:
31
32
  self.__custom_data_index_by_id[id_] = index
33
+ if (name := data.get("name")) is not None:
34
+ self.__custom_data_index_by_name[name] = index
32
35
  if data.get("isMappingIdentifier"):
33
36
  if bool(self.__mapping_identifier_index is not None):
34
37
  KameleoonLogger.warning(
@@ -55,5 +58,9 @@ class CustomDataInfo:
55
58
  return self.__mapping_identifier_index
56
59
 
57
60
  def get_custom_data_index_by_id(self, custom_data_id: int) -> Optional[int]:
58
- """Get corresponding custom data id by custom data index"""
61
+ """Get corresponding custom data index by custom data id"""
59
62
  return self.__custom_data_index_by_id.get(custom_data_id)
63
+
64
+ def get_custom_data_index_by_name(self, custom_data_name: str) -> Optional[int]:
65
+ """Get corresponding custom data index by custom data name"""
66
+ return self.__custom_data_index_by_name.get(custom_data_name)
@@ -0,0 +1,90 @@
1
+ """Custom data"""
2
+
3
+ import json
4
+ from typing import Optional, Tuple, Union
5
+ from kameleoon.data.data import Data, DataType
6
+ from kameleoon.network.sendable import DuplicationUnsafeSendableBase
7
+ from kameleoon.network.query_builder import QueryBuilder, QueryParam, QueryParams
8
+
9
+
10
+ class CustomData(Data, DuplicationUnsafeSendableBase):
11
+ """Custom data"""
12
+
13
+ EVENT_TYPE = "customData"
14
+
15
+ def __init__(self, index_or_name: Union[int, str], *args: str, overwrite=True) -> None:
16
+ """
17
+ :param index_or_name: Index or Name of the custom data. This field is mandatory.
18
+ :type index_or_name: Union[int, str]
19
+ :param args: Values of the custom data to be stored. This field is mandatory.
20
+ :type args: *str
21
+ :param overwrite: Flag to explicitly control how the values are stored and how they appear in reports.
22
+ This field is optional, `True` by default.
23
+ :type overwrite: bool
24
+ """
25
+ # pylint: disable=invalid-name,redefined-builtin
26
+ super().__init__()
27
+ # pylint: disable=W0511
28
+ if isinstance(index_or_name, int):
29
+ self.__index = index_or_name
30
+ self._name = None
31
+ else:
32
+ self.__index = -1
33
+ self._name = index_or_name
34
+ self.__values = args
35
+ self.__overwrite = overwrite
36
+
37
+ def _named_to_indexed(self, index: int) -> "CustomData":
38
+ """Makes an indexed Custom Data instance based on the current instance"""
39
+ custom_data = CustomData(index, *self.__values, overwrite=self.__overwrite)
40
+ custom_data._name = self._name
41
+ return custom_data
42
+
43
+ @property
44
+ def id(self) -> int: # pylint: disable=C0103
45
+ """
46
+ Deprecated. Please use `index` instead.
47
+
48
+ Returns index
49
+ """
50
+ return self.__index
51
+
52
+ @property
53
+ def index(self) -> int:
54
+ """Returns index"""
55
+ return self.__index
56
+
57
+ @property
58
+ def name(self) -> Optional[str]:
59
+ """Returns name"""
60
+ return self._name
61
+
62
+ @property
63
+ def values(self) -> Tuple[str, ...]:
64
+ """Returns values"""
65
+ return self.__values
66
+
67
+ @property
68
+ def overwrite(self) -> bool:
69
+ """Returns overwrite"""
70
+ return self.__overwrite
71
+
72
+ @property
73
+ def data_type(self) -> DataType:
74
+ return DataType.CUSTOM_DATA
75
+
76
+ def _add_query_params(self, query_builder: QueryBuilder) -> None:
77
+ str_values = json.dumps({v: 1 for v in self.__values}, separators=(",", ":"))
78
+ query_builder.extend(
79
+ QueryParam(QueryParams.EVENT_TYPE, self.EVENT_TYPE, False),
80
+ QueryParam(QueryParams.INDEX, str(self.id), False),
81
+ QueryParam(QueryParams.VALUES_COUNT_MAP, str_values),
82
+ QueryParam(QueryParams.OVERWRITE, "true" if self.__overwrite else "false", False),
83
+ )
84
+
85
+ def __str__(self):
86
+ return (
87
+ "CustomData{"
88
+ f"index:{self.__index},name:'{self._name}',values:{self.__values},overwrite:{self.__overwrite}"
89
+ "}"
90
+ )
@@ -227,6 +227,8 @@ class Visitor: # pylint: disable=R0904
227
227
  KameleoonLogger.debug('CALL: Visitor.add_data(args: %s, overwrite: %s)', args, overwrite)
228
228
  with self._data.lock:
229
229
  for data in args:
230
+ if data is None:
231
+ continue
230
232
  data_type = type(data)
231
233
  data_adder = self.DATA_ADDERS.get(data_type)
232
234
  if data_adder:
@@ -424,8 +426,8 @@ class Visitor: # pylint: disable=R0904
424
426
  custom_data = cast(CustomData, context.data)
425
427
  if self._data.custom_data_dict is None:
426
428
  self._data.custom_data_dict = {}
427
- if context.overwrite or custom_data.id not in self._data.custom_data_dict:
428
- self._data.custom_data_dict[custom_data.id] = custom_data
429
+ if context.overwrite or custom_data.index not in self._data.custom_data_dict:
430
+ self._data.custom_data_dict[custom_data.index] = custom_data
429
431
 
430
432
  def _add_page_view(self, context: DataAddingContext) -> None:
431
433
  page_view = cast(PageView, context.data)
@@ -87,15 +87,20 @@ class VisitorManager:
87
87
 
88
88
  def __process_custom_data(
89
89
  self, visitor_code: str, visitor: Visitor, custom_data_info: CustomDataInfo, custom_data: CustomData
90
- ) -> CustomData:
90
+ ) -> Optional[CustomData]:
91
91
  """Processes custom data, potentially modifying or mapping it based on certain conditions."""
92
+ if custom_data.name is not None:
93
+ cd_index = custom_data_info.get_custom_data_index_by_name(custom_data.name)
94
+ if cd_index is None:
95
+ return None
96
+ custom_data = custom_data._named_to_indexed(cd_index)
92
97
  # We shouldn't send custom data with local only type
93
- if custom_data_info.is_local_only(custom_data.id):
98
+ if custom_data_info.is_local_only(custom_data.index):
94
99
  custom_data.mark_as_sent()
95
100
  # If mappingIdentifier is passed, we should link anonymous visitor with real unique userId.
96
101
  # After authorization, customer must be able to continue work with userId, but hash for variation
97
102
  # should be calculated based on anonymous visitor code, that's why set MappingIdentifier to visitor.
98
- if custom_data_info.is_mapping_identifier(custom_data.id) and custom_data.values and custom_data.values[0]:
103
+ if custom_data_info.is_mapping_identifier(custom_data.index) and custom_data.values and custom_data.values[0]:
99
104
  visitor.mapping_identifier = visitor_code
100
105
  user_id = custom_data.values[0]
101
106
  if visitor_code != user_id:
@@ -6,7 +6,8 @@ from kameleoon.network.query_builder import QueryBuilder, QueryParam, QueryParam
6
6
  class MappingIdentifier(CustomData):
7
7
  """Mapping identifier"""
8
8
  def __init__(self, custom_data: CustomData) -> None:
9
- super().__init__(custom_data.id, *custom_data.values)
9
+ super().__init__(custom_data.index, *custom_data.values, overwrite=custom_data.overwrite)
10
+ self._name = custom_data.name
10
11
 
11
12
  @property
12
13
  def unsent(self) -> bool:
@@ -103,7 +103,7 @@ class RemoteVisitorData:
103
103
  """Marks data as sent based on the provided `custom_data_info`."""
104
104
  if self.__custom_data_dict:
105
105
  for data in self.__custom_data_dict.values():
106
- if custom_data_info is None or not custom_data_info.is_visitor_scope(data.id):
106
+ if custom_data_info is None or not custom_data_info.is_visitor_scope(data.index):
107
107
  data.mark_as_sent()
108
108
  if self.__experiments:
109
109
  for experiment in self.__experiments.values():
@@ -32,7 +32,6 @@ class KameleoonWSGIMiddleware:
32
32
  environ["HTTP_COOKIE"] = f"{VISITOR_CODE_COOKIE}={visitor_code}"
33
33
 
34
34
  def _custom_start_response(status, headers, exc_info=None):
35
- # pylint: disable=W0212
36
35
  self._client._cookie_manager.update(visitor_code, self._client._is_consent_given(visitor_code), cookies)
37
36
  headers.append(("Set-Cookie", cookies.output(header="")))
38
37
  return start_response(status, headers, exc_info)
@@ -4,7 +4,7 @@ from typing import Optional, Tuple
4
4
 
5
5
  from kameleoon.logging.kameleoon_logger import KameleoonLogger
6
6
 
7
- version_info = (3, 15, 0)
7
+ version_info = (3, 16, 0)
8
8
  __version__ = ".".join(str(v) for v in version_info) # uses in scripts
9
9
 
10
10
 
@@ -53,7 +53,7 @@ class TargetingManager:
53
53
  visitor_code: str,
54
54
  campaign_id: Optional[int],
55
55
  ):
56
- # pylint: disable=E1101,W0212
56
+ # pylint: disable=E1101
57
57
  KameleoonLogger.debug(
58
58
  "CALL: TargetingManager.__get_condition_data(condition_type_literal: %s, visitor, visitor_code: %s, "
59
59
  "campaign_id: %s)", condition_type_literal, visitor_code, campaign_id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kameleoon-client-python
3
- Version: 3.15.0
3
+ Version: 3.16.0
4
4
  Summary: Kameleoon Client Python Software Development Kit.
5
5
  Home-page: https://developers.kameleoon.com/python-sdk.html
6
6
  Author: Kameleoon
@@ -1,58 +0,0 @@
1
- """Custom data"""
2
-
3
- import json
4
- from typing import Tuple
5
- from kameleoon.data.data import Data, DataType
6
- from kameleoon.network.sendable import DuplicationUnsafeSendableBase
7
- from kameleoon.network.query_builder import QueryBuilder, QueryParam, QueryParams
8
-
9
-
10
- class CustomData(Data, DuplicationUnsafeSendableBase):
11
- """Custom data"""
12
-
13
- EVENT_TYPE = "customData"
14
-
15
- def __init__(self, id: int, *args: str) -> None:
16
- """
17
- :param id: Index / ID of the custom data to be stored. This field is mandatory.
18
- :type id: int
19
- :param `*args`: Values of the custom data to be stored. This field is optional.
20
- :type `*args`: str
21
-
22
- Example:
23
-
24
- .. code-block:: python3
25
-
26
- kameleoon_client.add_data(visitor_code, CustomData(123, "some-value"))
27
- """
28
- # pylint: disable=invalid-name,redefined-builtin
29
- super().__init__()
30
- # pylint: disable=W0511
31
- self.__id = id
32
- self.__values = args
33
-
34
- @property
35
- def id(self) -> int: # pylint: disable=C0103
36
- """Returns ID"""
37
- return self.__id
38
-
39
- @property
40
- def values(self) -> Tuple[str, ...]:
41
- """Stored values."""
42
- return self.__values
43
-
44
- @property
45
- def data_type(self) -> DataType:
46
- return DataType.CUSTOM_DATA
47
-
48
- def _add_query_params(self, query_builder: QueryBuilder) -> None:
49
- str_values = json.dumps({v: 1 for v in self.__values}, separators=(",", ":"))
50
- query_builder.extend(
51
- QueryParam(QueryParams.EVENT_TYPE, self.EVENT_TYPE, False),
52
- QueryParam(QueryParams.INDEX, str(self.id), False),
53
- QueryParam(QueryParams.VALUES_COUNT_MAP, str_values),
54
- QueryParam(QueryParams.OVERWRITE, "true", False),
55
- )
56
-
57
- def __str__(self):
58
- return f"CustomData{{id:{self.__id},values:{self.__values}}}"
@@ -4,24 +4,24 @@ sseclient-py<1.9.0,>=1.7.0
4
4
  aiohttp<4.0.0,>=3.8.0
5
5
 
6
6
  [test]
7
- flake8==4.0.1
8
- twine==3.4.1
7
+ wheel==0.36.2
8
+ pytest-pythonpath==0.7.3
9
+ pytest-django==4.4.0
9
10
  types-python-dateutil==2.8.2
10
- aiohttp<4.0.0,>=3.8.0
11
- pyyaml<6.1.0,>=5.4.0
12
11
  Werkzeug==2.0.1
13
- freezegun==1.1.0
14
- pytest-cov==2.12.1
15
- types-requests==2.25.0
16
- pytest-django==4.4.0
17
12
  pytest-asyncio==0.21.*
18
- aioresponses==0.7.*
19
- pytest-pythonpath==0.7.3
20
- wheel==0.36.2
21
- pylint==2.12.*
22
- Django==3.2.4
13
+ types-requests==2.25.0
14
+ pyyaml<6.1.0,>=5.4.0
15
+ twine==3.4.1
16
+ pytest-cov==2.12.1
23
17
  mypy==0.991
18
+ aiohttp<4.0.0,>=3.8.0
19
+ flake8==4.0.1
20
+ aioresponses==0.7.*
24
21
  requests<3.0.0,>=2.25
25
22
  sseclient-py<1.9.0,>=1.7.0
26
- types-PyYAML==5.4.3
23
+ freezegun==1.1.0
27
24
  pytest-ordering==0.6
25
+ pylint==2.12.*
26
+ Django==3.2.4
27
+ types-PyYAML==5.4.3