splitio-client 10.3.0rc1__tar.gz → 10.4.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.
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/PKG-INFO +2 -2
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/setup.py +1 -1
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/api/client.py +9 -1
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/api/impressions.py +25 -9
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/api/splits.py +8 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/client/client.py +175 -98
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/client/input_validator.py +25 -10
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/evaluator.py +32 -9
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/impressions/adapters.py +16 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/impressions/strategies.py +16 -2
- splitio_client-10.4.0/splitio/models/grammar/matchers/prerequisites.py +38 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/rule_based_segment.py +4 -3
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/impressions.py +7 -1
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/splits.py +45 -5
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/push/workers.py +29 -14
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/storage/pluggable.py +1 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/storage/redis.py +1 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/sync/split.py +15 -5
- splitio_client-10.4.0/splitio/version.py +1 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio_client.egg-info/PKG-INFO +2 -2
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio_client.egg-info/SOURCES.txt +1 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio_client.egg-info/requires.txt +1 -1
- splitio_client-10.3.0rc1/splitio/version.py +0 -1
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/LICENSE.txt +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/README.md +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/setup.cfg +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/api/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/api/auth.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/api/commons.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/api/events.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/api/segments.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/api/telemetry.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/client/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/client/config.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/client/factory.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/client/key.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/client/listener.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/client/localhost.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/client/manager.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/client/util.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/cache/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/cache/lru.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/filters.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/hashfns/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/hashfns/legacy.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/hashfns/murmur3py.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/impressions/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/impressions/impressions.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/impressions/manager.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/impressions/unique_keys_tracker.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/splitters.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/engine/telemetry.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/exceptions.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/factories.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/impressions.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/key.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/datatypes.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/events.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/condition.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/base.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/keys.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/misc.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/numeric.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/semver.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/sets.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/string.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/utils/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/matchers/utils/utils.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/grammar/partitions.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/notification.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/rule_based_segments.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/segments.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/telemetry.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/models/token.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/optional/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/optional/loaders.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/push/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/push/manager.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/push/parser.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/push/processor.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/push/splitsse.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/push/sse.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/push/status_tracker.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/recorder/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/recorder/recorder.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/spec.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/storage/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/storage/adapters/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/storage/adapters/cache_trait.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/storage/adapters/redis.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/storage/adapters/util.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/storage/inmemmory.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/sync/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/sync/event.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/sync/impression.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/sync/manager.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/sync/segment.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/sync/synchronizer.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/sync/telemetry.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/sync/unique_keys.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/sync/util.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/tasks/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/tasks/events_sync.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/tasks/impressions_sync.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/tasks/segment_sync.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/tasks/split_sync.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/tasks/telemetry_sync.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/tasks/unique_keys_sync.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/tasks/util/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/tasks/util/asynctask.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/tasks/util/workerpool.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/util/__init__.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/util/backoff.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/util/decorators.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/util/storage_helper.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/util/threadutil.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio/util/time.py +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio_client.egg-info/dependency_links.txt +0 -0
- {splitio_client-10.3.0rc1 → splitio_client-10.4.0}/splitio_client.egg-info/top_level.txt +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: splitio_client
|
|
3
|
-
Version: 10.
|
|
3
|
+
Version: 10.4.0
|
|
4
4
|
Summary: Split.io Python Client
|
|
5
5
|
Home-page: https://github.com/splitio/python-client
|
|
6
|
-
Download-URL: https://github.com/splitio/python-client/tarball/10.
|
|
6
|
+
Download-URL: https://github.com/splitio/python-client/tarball/10.4.0
|
|
7
7
|
Author: Patricio Echague, Sebastian Arrubia
|
|
8
8
|
Author-email: pato@split.io, sebastian@split.io
|
|
9
9
|
License: Apache License 2.0
|
|
@@ -207,7 +207,11 @@ class HttpClient(HttpClientBase):
|
|
|
207
207
|
self._record_telemetry(response.status_code, get_current_epoch_time_ms() - start)
|
|
208
208
|
return HttpResponse(response.status_code, response.text, response.headers)
|
|
209
209
|
|
|
210
|
-
except
|
|
210
|
+
except requests.exceptions.ChunkedEncodingError as exc:
|
|
211
|
+
_LOGGER.error("IncompleteRead exception detected: %s", exc)
|
|
212
|
+
return HttpResponse(400, "", {})
|
|
213
|
+
|
|
214
|
+
except Exception as exc: # pylint: disable=broad-except
|
|
211
215
|
raise HttpClientException(_EXC_MSG.format(source='request')) from exc
|
|
212
216
|
|
|
213
217
|
def post(self, server, path, sdk_key, body, query=None, extra_headers=None): # pylint: disable=too-many-arguments
|
|
@@ -300,6 +304,10 @@ class HttpClientAsync(HttpClientBase):
|
|
|
300
304
|
await self._record_telemetry(response.status, get_current_epoch_time_ms() - start)
|
|
301
305
|
return HttpResponse(response.status, body, response.headers)
|
|
302
306
|
|
|
307
|
+
except aiohttp.ClientPayloadError as exc:
|
|
308
|
+
_LOGGER.error("ContentLengthError exception detected: %s", exc)
|
|
309
|
+
return HttpResponse(400, "", {})
|
|
310
|
+
|
|
303
311
|
except aiohttp.ClientError as exc: # pylint: disable=broad-except
|
|
304
312
|
raise HttpClientException(_EXC_MSG.format(source='aiohttp')) from exc
|
|
305
313
|
|
|
@@ -30,15 +30,7 @@ class ImpressionsAPIBase(object): # pylint: disable=too-few-public-methods
|
|
|
30
30
|
{
|
|
31
31
|
'f': test_name,
|
|
32
32
|
'i': [
|
|
33
|
-
|
|
34
|
-
'k': impression.matching_key,
|
|
35
|
-
't': impression.treatment,
|
|
36
|
-
'm': impression.time,
|
|
37
|
-
'c': impression.change_number,
|
|
38
|
-
'r': impression.label,
|
|
39
|
-
'b': impression.bucketing_key,
|
|
40
|
-
'pt': impression.previous_time
|
|
41
|
-
}
|
|
33
|
+
ImpressionsAPIBase._filter_out_null_prop(impression)
|
|
42
34
|
for impression in imps
|
|
43
35
|
]
|
|
44
36
|
}
|
|
@@ -48,6 +40,30 @@ class ImpressionsAPIBase(object): # pylint: disable=too-few-public-methods
|
|
|
48
40
|
)
|
|
49
41
|
]
|
|
50
42
|
|
|
43
|
+
@staticmethod
|
|
44
|
+
def _filter_out_null_prop(impression):
|
|
45
|
+
if impression.properties == None:
|
|
46
|
+
return {
|
|
47
|
+
'k': impression.matching_key,
|
|
48
|
+
't': impression.treatment,
|
|
49
|
+
'm': impression.time,
|
|
50
|
+
'c': impression.change_number,
|
|
51
|
+
'r': impression.label,
|
|
52
|
+
'b': impression.bucketing_key,
|
|
53
|
+
'pt': impression.previous_time
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return {
|
|
57
|
+
'k': impression.matching_key,
|
|
58
|
+
't': impression.treatment,
|
|
59
|
+
'm': impression.time,
|
|
60
|
+
'c': impression.change_number,
|
|
61
|
+
'r': impression.label,
|
|
62
|
+
'b': impression.bucketing_key,
|
|
63
|
+
'pt': impression.previous_time,
|
|
64
|
+
'properties': impression.properties
|
|
65
|
+
}
|
|
66
|
+
|
|
51
67
|
@staticmethod
|
|
52
68
|
def _build_counters(counters):
|
|
53
69
|
"""
|
|
@@ -89,6 +89,10 @@ class SplitsAPI(SplitsAPIBase): # pylint: disable=too-few-public-methods
|
|
|
89
89
|
self._check_last_proxy_check_timestamp(change_number)
|
|
90
90
|
change_number = self._check_old_spec_since(change_number)
|
|
91
91
|
|
|
92
|
+
if self._spec_version == _SPEC_1_1:
|
|
93
|
+
fetch_options = FetchOptions(fetch_options.cache_control_headers, fetch_options.change_number,
|
|
94
|
+
None, fetch_options.sets, self._spec_version)
|
|
95
|
+
rbs_change_number = None
|
|
92
96
|
query, extra_headers = build_fetch(change_number, fetch_options, self._metadata, rbs_change_number)
|
|
93
97
|
response = self._client.get(
|
|
94
98
|
'sdk',
|
|
@@ -158,6 +162,10 @@ class SplitsAPIAsync(SplitsAPIBase): # pylint: disable=too-few-public-methods
|
|
|
158
162
|
try:
|
|
159
163
|
self._check_last_proxy_check_timestamp(change_number)
|
|
160
164
|
change_number = self._check_old_spec_since(change_number)
|
|
165
|
+
if self._spec_version == _SPEC_1_1:
|
|
166
|
+
fetch_options = FetchOptions(fetch_options.cache_control_headers, fetch_options.change_number,
|
|
167
|
+
None, fetch_options.sets, self._spec_version)
|
|
168
|
+
rbs_change_number = None
|
|
161
169
|
|
|
162
170
|
query, extra_headers = build_fetch(change_number, fetch_options, self._metadata, rbs_change_number)
|
|
163
171
|
response = await self._client.get(
|