Skip to content

Commit 4cd84cd

Browse files
authored
Merge pull request #559 from splitio/sync-api-classes
Update sync and api classes
2 parents 3b6780e + 7df86ef commit 4cd84cd

File tree

7 files changed

+492
-205
lines changed

7 files changed

+492
-205
lines changed

setup.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
'flake8',
99
'pytest==7.0.1',
1010
'pytest-mock==3.11.1',
11-
'coverage',
11+
'coverage==7.0.0',
1212
'pytest-cov==4.1.0',
1313
'importlib-metadata==6.7',
1414
'tomli==1.2.3',
@@ -17,7 +17,8 @@
1717
'pytest-asyncio==0.21.0',
1818
'aiohttp>=3.8.4',
1919
'aiofiles>=23.1.0',
20-
'requests-kerberos>=0.15.0'
20+
'requests-kerberos>=0.15.0',
21+
'urllib3==2.2.0'
2122
]
2223

2324
INSTALL_REQUIRES = [

splitio/api/commons.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def record_telemetry(status_code, elapsed, metric_name, telemetry_runtime_produc
5757
class FetchOptions(object):
5858
"""Fetch Options object."""
5959

60-
def __init__(self, cache_control_headers=False, change_number=None, sets=None, spec=SPEC_VERSION):
60+
def __init__(self, cache_control_headers=False, change_number=None, rbs_change_number=None, sets=None, spec=SPEC_VERSION):
6161
"""
6262
Class constructor.
6363
@@ -72,6 +72,7 @@ def __init__(self, cache_control_headers=False, change_number=None, sets=None, s
7272
"""
7373
self._cache_control_headers = cache_control_headers
7474
self._change_number = change_number
75+
self._rbs_change_number = rbs_change_number
7576
self._sets = sets
7677
self._spec = spec
7778

@@ -85,6 +86,11 @@ def change_number(self):
8586
"""Return change number."""
8687
return self._change_number
8788

89+
@property
90+
def rbs_change_number(self):
91+
"""Return change number."""
92+
return self._rbs_change_number
93+
8894
@property
8995
def sets(self):
9096
"""Return sets."""
@@ -103,14 +109,19 @@ def __eq__(self, other):
103109
if self._change_number != other._change_number:
104110
return False
105111

112+
if self._rbs_change_number != other._rbs_change_number:
113+
return False
114+
106115
if self._sets != other._sets:
107116
return False
117+
108118
if self._spec != other._spec:
109119
return False
120+
110121
return True
111122

112123

113-
def build_fetch(change_number, fetch_options, metadata):
124+
def build_fetch(change_number, fetch_options, metadata, rbs_change_number=None):
114125
"""
115126
Build fetch with new flags if that is the case.
116127
@@ -123,11 +134,16 @@ def build_fetch(change_number, fetch_options, metadata):
123134
:param metadata: Metadata Headers.
124135
:type metadata: dict
125136
137+
:param rbs_change_number: Last known timestamp of a rule based segment modification.
138+
:type rbs_change_number: int
139+
126140
:return: Objects for fetch
127141
:rtype: dict, dict
128142
"""
129143
query = {'s': fetch_options.spec} if fetch_options.spec is not None else {}
130144
query['since'] = change_number
145+
if rbs_change_number is not None:
146+
query['rbSince'] = rbs_change_number
131147
extra_headers = metadata
132148
if fetch_options is None:
133149
return query, extra_headers

splitio/api/splits.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,24 @@ def __init__(self, client, sdk_key, sdk_metadata, telemetry_runtime_producer):
3131
self._telemetry_runtime_producer = telemetry_runtime_producer
3232
self._client.set_telemetry_data(HTTPExceptionsAndLatencies.SPLIT, self._telemetry_runtime_producer)
3333

34-
def fetch_splits(self, change_number, fetch_options):
34+
def fetch_splits(self, change_number, rbs_change_number, fetch_options):
3535
"""
3636
Fetch feature flags from backend.
3737
3838
:param change_number: Last known timestamp of a split modification.
3939
:type change_number: int
4040
41+
:param rbs_change_number: Last known timestamp of a rule based segment modification.
42+
:type rbs_change_number: int
43+
4144
:param fetch_options: Fetch options for getting feature flag definitions.
4245
:type fetch_options: splitio.api.commons.FetchOptions
4346
4447
:return: Json representation of a splitChanges response.
4548
:rtype: dict
4649
"""
4750
try:
48-
query, extra_headers = build_fetch(change_number, fetch_options, self._metadata)
51+
query, extra_headers = build_fetch(change_number, fetch_options, self._metadata, rbs_change_number)
4952
response = self._client.get(
5053
'sdk',
5154
'splitChanges',
@@ -86,12 +89,15 @@ def __init__(self, client, sdk_key, sdk_metadata, telemetry_runtime_producer):
8689
self._telemetry_runtime_producer = telemetry_runtime_producer
8790
self._client.set_telemetry_data(HTTPExceptionsAndLatencies.SPLIT, self._telemetry_runtime_producer)
8891

89-
async def fetch_splits(self, change_number, fetch_options):
92+
async def fetch_splits(self, change_number, rbs_change_number, fetch_options):
9093
"""
9194
Fetch feature flags from backend.
9295
9396
:param change_number: Last known timestamp of a split modification.
9497
:type change_number: int
98+
99+
:param rbs_change_number: Last known timestamp of a rule based segment modification.
100+
:type rbs_change_number: int
95101
96102
:param fetch_options: Fetch options for getting feature flag definitions.
97103
:type fetch_options: splitio.api.commons.FetchOptions
@@ -100,7 +106,7 @@ async def fetch_splits(self, change_number, fetch_options):
100106
:rtype: dict
101107
"""
102108
try:
103-
query, extra_headers = build_fetch(change_number, fetch_options, self._metadata)
109+
query, extra_headers = build_fetch(change_number, fetch_options, self._metadata, rbs_change_number)
104110
response = await self._client.get(
105111
'sdk',
106112
'splitChanges',

0 commit comments

Comments
 (0)