kameleoon-client-python 3.2.0__py2.py3-none-any.whl → 3.3.0__py2.py3-none-any.whl

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.
kameleoon/data/data.py CHANGED
@@ -18,6 +18,7 @@ class DataType(IntEnum):
18
18
  GEOLOCATION = 9
19
19
  PAGE_VIEW_VISIT = 10
20
20
  VISITOR_VISITS = 11
21
+ KCS_HEAT = 12
21
22
 
22
23
 
23
24
  class BaseData:
@@ -0,0 +1,22 @@
1
+ """KCS heat"""
2
+
3
+ from typing import Dict
4
+ from kameleoon.data import DataType
5
+ from kameleoon.data.data import BaseData
6
+
7
+
8
+ class KcsHeat(BaseData):
9
+ """KCS heat"""
10
+
11
+ def __init__(self, values: Dict[int, Dict[int, float]]) -> None:
12
+ super().__init__()
13
+ self.__values = values
14
+
15
+ @property
16
+ def values(self) -> Dict[int, Dict[int, float]]:
17
+ """Returns goal scores stored by goal IDs within dictionaries stored by key moment IDs within a dictionary"""
18
+ return self.__values
19
+
20
+ @property
21
+ def data_type(self) -> DataType:
22
+ return DataType.KCS_HEAT
kameleoon/sdk_version.py CHANGED
@@ -3,7 +3,7 @@
3
3
  from typing import Optional, Tuple
4
4
 
5
5
 
6
- version_info = (3, 2, 0)
6
+ version_info = (3, 3, 0)
7
7
  __version__ = ".".join(str(v) for v in version_info) # uses in scripts
8
8
 
9
9
 
@@ -0,0 +1,32 @@
1
+ """Device condition"""
2
+
3
+ from typing import Any, Dict, Union
4
+ from kameleoon.data.kcs_heat import KcsHeat
5
+ from kameleoon.targeting.conditions.targeting_condition import TargetingCondition
6
+
7
+
8
+ class KcsHeatRangeCondition(TargetingCondition):
9
+ """KCS heat range / Heat slice / AI predictive / Likelihood to convert"""
10
+
11
+ def __init__(self, json_condition: Dict[str, Union[str, int, Any]]):
12
+ super().__init__(json_condition)
13
+ self.__goal_id = self.__get_json_value(json_condition, "goalId", int, -1)
14
+ self.__key_moment_id = self.__get_json_value(json_condition, "keyMomentId", int, -1)
15
+ # Goal score belongs to [0.0; 100.0] range
16
+ self.__lower_bound = self.__get_json_value(json_condition, "lowerBound", (float, int), 101.0)
17
+ self.__upper_bound = self.__get_json_value(json_condition, "upperBound", (float, int), -1.0)
18
+
19
+ @staticmethod
20
+ def __get_json_value(json_condition: Dict[str, Union[str, int, Any]], key: str, types, default):
21
+ value = json_condition.get(key)
22
+ return value if isinstance(value, types) else default
23
+
24
+ def check(self, data: Any) -> bool:
25
+ return isinstance(data, KcsHeat) and self.__check(data)
26
+
27
+ def __check(self, kcs_heat: KcsHeat) -> bool:
28
+ goal_scores = kcs_heat.values.get(self.__key_moment_id)
29
+ if not isinstance(goal_scores, dict):
30
+ return False
31
+ score = goal_scores.get(self.__goal_id)
32
+ return isinstance(score, (float, int)) and (self.__lower_bound <= score <= self.__upper_bound)
@@ -36,6 +36,7 @@ class TargetingConditionType(Enum):
36
36
  VISITS = "VISITS"
37
37
  SAME_DAY_VISITS = "SAME_DAY_VISITS"
38
38
  NEW_VISITORS = "NEW_VISITORS"
39
+ HEAT_SLICE = "HEAT_SLICE"
39
40
  UNKNOWN = "UNKNOWN"
40
41
 
41
42
 
@@ -99,4 +99,6 @@ class TargetingManager:
99
99
  TargetingConditionType.NEW_VISITORS,
100
100
  ):
101
101
  return visitor.visitor_visits
102
+ if TargetingConditionType.HEAT_SLICE:
103
+ return visitor.kcs_heat
102
104
  return None
@@ -13,6 +13,7 @@ from kameleoon.targeting.conditions.exclusive_feature_flag_condition import Excl
13
13
  from kameleoon.targeting.conditions.visitor_code_condition import VisitorCodeCondition
14
14
  from kameleoon.targeting.conditions.cookie_condition import CookieCondition
15
15
  from kameleoon.targeting.conditions.geolocation_condition import GeolocationCondition
16
+ from kameleoon.targeting.conditions.kcs_heat_range_condition import KcsHeatRangeCondition
16
17
  from kameleoon.targeting.conditions.operating_system_condition import OperatingSystemCondition
17
18
  from kameleoon.targeting.conditions.segment_condition import SegmentCondition
18
19
  from kameleoon.targeting.conditions.target_feature_flag_condition import TargetFeatureFlagCondition
@@ -96,6 +97,9 @@ class TreeConditionFactory:
96
97
  ):
97
98
  return TimeElapsedSinceVisitCondition(condition_json)
98
99
 
100
+ if condition_type == TargetingConditionType.HEAT_SLICE:
101
+ return KcsHeatRangeCondition(condition_json)
102
+
99
103
  return UnknownCondition(condition_json)
100
104
  except KeyError as exception:
101
105
  print(f"Unsupported targeted condition type found: {exception}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kameleoon-client-python
3
- Version: 3.2.0
3
+ Version: 3.3.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
@@ -21,27 +21,27 @@ Requires-Dist: requests (>=2.25)
21
21
  Requires-Dist: sseclient-py (==1.7.*)
22
22
  Requires-Dist: aiohttp (==3.8.*)
23
23
  Provides-Extra: test
24
- Requires-Dist: aiohttp (==3.8.*) ; extra == 'test'
25
- Requires-Dist: aioresponses (==0.7.*) ; extra == 'test'
24
+ Requires-Dist: pytest-pythonpath (==0.7.3) ; extra == 'test'
25
+ Requires-Dist: twine (==3.4.1) ; extra == 'test'
26
+ Requires-Dist: pytest-cov (==2.12.1) ; extra == 'test'
26
27
  Requires-Dist: pyyaml (==5.4.*) ; extra == 'test'
28
+ Requires-Dist: Django (==3.2.4) ; extra == 'test'
29
+ Requires-Dist: flake8 (==4.0.1) ; extra == 'test'
30
+ Requires-Dist: types-PyYAML (==5.4.3) ; extra == 'test'
31
+ Requires-Dist: pytest-django (==4.4.0) ; extra == 'test'
32
+ Requires-Dist: requests (>=2.25) ; extra == 'test'
33
+ Requires-Dist: pytest-ordering (==0.6) ; extra == 'test'
27
34
  Requires-Dist: Werkzeug (==2.0.1) ; extra == 'test'
28
- Requires-Dist: wheel (==0.36.2) ; extra == 'test'
29
35
  Requires-Dist: types-python-dateutil (==2.8.2) ; extra == 'test'
30
36
  Requires-Dist: freezegun (==1.1.0) ; extra == 'test'
31
37
  Requires-Dist: mypy (==0.991) ; extra == 'test'
32
- Requires-Dist: pytest-django (==4.4.0) ; extra == 'test'
33
- Requires-Dist: flake8 (==4.0.1) ; extra == 'test'
34
- Requires-Dist: pytest-ordering (==0.6) ; extra == 'test'
35
- Requires-Dist: pytest-pythonpath (==0.7.3) ; extra == 'test'
36
38
  Requires-Dist: pylint (==2.12.*) ; extra == 'test'
37
- Requires-Dist: twine (==3.4.1) ; extra == 'test'
38
- Requires-Dist: Django (==3.2.4) ; extra == 'test'
39
- Requires-Dist: requests (>=2.25) ; extra == 'test'
40
- Requires-Dist: types-PyYAML (==5.4.3) ; extra == 'test'
41
- Requires-Dist: pytest-cov (==2.12.1) ; extra == 'test'
42
39
  Requires-Dist: pytest-asyncio (==0.21.*) ; extra == 'test'
43
- Requires-Dist: sseclient-py (==1.7.*) ; extra == 'test'
44
40
  Requires-Dist: types-requests (==2.25.0) ; extra == 'test'
41
+ Requires-Dist: aioresponses (==0.7.*) ; extra == 'test'
42
+ Requires-Dist: wheel (==0.36.2) ; extra == 'test'
43
+ Requires-Dist: aiohttp (==3.8.*) ; extra == 'test'
44
+ Requires-Dist: sseclient-py (==1.7.*) ; extra == 'test'
45
45
 
46
46
 
47
47
  # Kameleoon Python SDK
@@ -5,7 +5,7 @@ kameleoon/kameleoon_client.py,sha256=aPC1dQkuoMhvvXrfOMiEGnQfPba3080RHSxrP3CtvmQ
5
5
  kameleoon/kameleoon_client_config.py,sha256=tvqfrZIRHE_svvNXdtRJzo_uAMM1KdRSEtjJPKTULT4,7468
6
6
  kameleoon/kameleoon_client_factory.py,sha256=RwKfOFLomssoiFWoU8Fd1h8DJVX2igLi-DYXc9xJpB4,2601
7
7
  kameleoon/middleware.py,sha256=Q_jR6r5HTsC19HMltnXQ1JABVDkcWIi2Nzpoa0CtERQ,1620
8
- kameleoon/sdk_version.py,sha256=uE8WBhCjdcfS1CH9aAJ7xVrVY2dWkmDPANGyFiC9ZWE,1282
8
+ kameleoon/sdk_version.py,sha256=hvtSTb5-Sq8aeIkfnM5SBXoF9Gf2DNqArFIv4cdlMGQ,1282
9
9
  kameleoon/configuration/__init__.py,sha256=soJL7ddciHfFr_BkbdrQ6B3buvIw8o06mcxaUGBGnAc,162
10
10
  kameleoon/configuration/custom_data_info.py,sha256=oZ7GuvleGW1j9mNrYbwZ3ZN_VhRBydqBoCMiOrz7icw,1931
11
11
  kameleoon/configuration/data_file.py,sha256=YoVpv9SdbjNr2gMz34Le_usbg1ydkXQCFEYOc6Y-q8A,4686
@@ -21,9 +21,10 @@ kameleoon/data/browser.py,sha256=kOmQpH9JPQUXN-PQTvQ7zQhfjR3DldT_ebWt9l91iP8,169
21
21
  kameleoon/data/conversion.py,sha256=FYdtbbge235vjSvxDw5-mG0JOKqb2yQr7zR4lKovA9M,2113
22
22
  kameleoon/data/cookie.py,sha256=sA_ZJrmgWIGbrfVSGe2ExLd8WvMI2jjZn07V02jpcAE,755
23
23
  kameleoon/data/custom_data.py,sha256=JJrRZXB_o9eXaly0IPgGXyKB68CSN0zVnKkg8xldyVA,1979
24
- kameleoon/data/data.py,sha256=qjgHOtwg9_gyjstIZTc3Rn1m3fEIl7iiFDYyhG8kQpM,753
24
+ kameleoon/data/data.py,sha256=gD9tyLFJzdQ5tsPtf4U0yjnn1owAV9LqEf39xCLpyOc,771
25
25
  kameleoon/data/device.py,sha256=6xy9ia21gdmtoJ7g3KKE7laUdK8URz0mjXkHMWtU_TM,1296
26
26
  kameleoon/data/geolocation.py,sha256=wVU2ffG0r6F_OMXrQ_vujgeCMOaBlLvFf_zcQBlwIiU,3010
27
+ kameleoon/data/kcs_heat.py,sha256=z6OlBdrq8aY2Zb9nNQlPAMZRbRbH1Y94M0r9WDO7BH0,591
27
28
  kameleoon/data/operating_system.py,sha256=jWfxnypiCW7m9_JRPwt2GlTt7-_x7rTKOV2AUw-JcIk,1588
28
29
  kameleoon/data/page_view.py,sha256=SlbV1fQNFoxJlSg2UMxUFE7S-Z6s0VHKaXO-GMLyHDQ,2006
29
30
  kameleoon/data/user_agent.py,sha256=9BjuxuBShqKsLfH_hn3fDLgOUqRna0yvX14ly8ITLxA,729
@@ -46,9 +47,9 @@ kameleoon/storage/cache_factory_impl.py,sha256=HU-7Y8OeUD0078KasR3Qru2HeP4gkRtCH
46
47
  kameleoon/storage/cache_impl.py,sha256=8aGhq2Q2InKvY0UMpReVlt0tQZiwAA1HRxc6xmLGb9I,1058
47
48
  kameleoon/targeting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
49
  kameleoon/targeting/models.py,sha256=ExFwEZYCbxBw9V0zYJ967frqxxFUybAW44T0rZzeu7A,1013
49
- kameleoon/targeting/targeting_manager.py,sha256=IizzuVEugFxWYXa_s16wxlAbRAuZfwts2CXqFTVr-k8,4526
50
+ kameleoon/targeting/targeting_manager.py,sha256=nd0ICVzlweNiwWsKYE7P5HstDsQ6Wg2Bnji4uplLc44,4608
50
51
  kameleoon/targeting/tree_builder.py,sha256=API4jgZxUtO6Jc6xuZoN7Wyy7SsVBlIeqCjOuCyEbcA,5264
51
- kameleoon/targeting/tree_condition_factory.py,sha256=jrg_cazgFIPs-eipejNl2jy_KVQoJ3lxMAwF7-_uNx4,5366
52
+ kameleoon/targeting/tree_condition_factory.py,sha256=63K96vB7CNst6Rkuve-AD2f6IEv9GxNJCZGBN05rauY,5586
52
53
  kameleoon/targeting/conditions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
54
  kameleoon/targeting/conditions/browser_condition.py,sha256=RmBEXbQSbmRzWHXzCjSxM-J2AcJAhOM_fUPQpAY7Gf8,2475
54
55
  kameleoon/targeting/conditions/constants.py,sha256=3ospn-l0fVyNrrpsGZFfjW9uLIvsKOT6yCFttxVWy-I,389
@@ -58,6 +59,7 @@ kameleoon/targeting/conditions/custom_datum.py,sha256=5lpMyYtMPBpdC7EWmAGyQciyaj
58
59
  kameleoon/targeting/conditions/device_condition.py,sha256=OebG3JwVtffOJ1OMKx9rEUjGLgebU3Cq2hpRhXR8TTI,925
59
60
  kameleoon/targeting/conditions/exclusive_feature_flag_condition.py,sha256=YznXPgJIs6HbVD5jtfFRaCUHxfHvBWCKZfg8nJZbb0w,1555
60
61
  kameleoon/targeting/conditions/geolocation_condition.py,sha256=vF9IZlqhTuyvfxDn07ooEIvMDZlech8Nyqz0Q_vRHls,1350
62
+ kameleoon/targeting/conditions/kcs_heat_range_condition.py,sha256=AV0W12UkRNQ3LdWTKwQN1nxq0ybBy_CRKATgpDWIAaE,1523
61
63
  kameleoon/targeting/conditions/number_condition.py,sha256=C86FuLPh9kdcgLydZ_UT1kmJlehv5MA_xqdPR3PG8do,1482
62
64
  kameleoon/targeting/conditions/operating_system_condition.py,sha256=R_EUjBJ7QPAEuetPej30QIweEb65iUgcuwQPw0d5Jvc,993
63
65
  kameleoon/targeting/conditions/page_title_condition.py,sha256=yZ7Xkv1g9uvGc7UDKA_D8Gt4OJO4Y1lq0EO9HgmmCpY,867
@@ -68,14 +70,14 @@ kameleoon/targeting/conditions/sdk_language_condition.py,sha256=RbqykeJ9BBLecF66
68
70
  kameleoon/targeting/conditions/segment_condition.py,sha256=te39VU9nbHA3MaK12A1vQ9AW8kTVa65yHvsEq4oPOis,1681
69
71
  kameleoon/targeting/conditions/string_value_condition.py,sha256=jTqMqaa_rUoyE4jQ6aRBsu6lnnjkNX5f4soE4qhgstY,1631
70
72
  kameleoon/targeting/conditions/target_feature_flag_condition.py,sha256=PGZopSOkKi4qcabOVpw3is6vl4FidO4VqNca9zLu1M0,2818
71
- kameleoon/targeting/conditions/targeting_condition.py,sha256=Pg4v_cjHQqo9rMWwtWql2LxM3Pq-yeVjAomasSZO4R0,2034
73
+ kameleoon/targeting/conditions/targeting_condition.py,sha256=6OGh_ryqqNYOp9JrHzFuPwN0F26NZHBTqsxmFnA0E7A,2064
72
74
  kameleoon/targeting/conditions/time_elapsed_since_visit_condition.py,sha256=kYMCMSmlKApQgZ7uG-t22u7FqO1wuRfDjCuktLC-WGA,1178
73
75
  kameleoon/targeting/conditions/unknown_condition.py,sha256=9A5Dwcp_9JK7MKkcsDxs3QP76_SI-tKHMHYBPrqYhao,389
74
76
  kameleoon/targeting/conditions/visit_number_today_condition.py,sha256=UPohyXI_aZP3TdI1grtEWHZcXOA-vJgEoFeLS1O25Ks,1234
75
77
  kameleoon/targeting/conditions/visit_number_total_condition.py,sha256=3qIta3vIE-quLfp_IbmaSBaYs1QrAbGGyPcGN1EiOMo,736
76
78
  kameleoon/targeting/conditions/visitor_code_condition.py,sha256=03q8MeXc4y1FhHyA_7rCOmDjN7iDka-sOUfhNDTDrCg,415
77
79
  kameleoon/targeting/conditions/visitor_new_return_condition.py,sha256=AIKmWga-c-e_guqsDaaaeWg7zR8lVPChkZTd4N2fgt4,1037
78
- kameleoon_client_python-3.2.0.dist-info/METADATA,sha256=VtTHRLJpP-SroH9CfdIvF-vgGBnAhUBDtFnHvT5-ir0,12889
79
- kameleoon_client_python-3.2.0.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110
80
- kameleoon_client_python-3.2.0.dist-info/top_level.txt,sha256=i6mIQRivSZ-iWKzQ7WnfUr-c19Hkt0uJR_PKO53yZEc,10
81
- kameleoon_client_python-3.2.0.dist-info/RECORD,,
80
+ kameleoon_client_python-3.3.0.dist-info/METADATA,sha256=tSn38SnvOz479wE9jguaVa3dKTscGlJPHtOCS7R0SzE,12889
81
+ kameleoon_client_python-3.3.0.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110
82
+ kameleoon_client_python-3.3.0.dist-info/top_level.txt,sha256=i6mIQRivSZ-iWKzQ7WnfUr-c19Hkt0uJR_PKO53yZEc,10
83
+ kameleoon_client_python-3.3.0.dist-info/RECORD,,