Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 8be0fd7

Browse files
eiriricellis
authored andcommittedApr 22, 2025·
refactor(follower): use normal feed for one-off changes
1 parent 892a82f commit 8be0fd7

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed
 

‎ibmcloudant/features/changes_follower.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ def __init__(
293293
) -> None:
294294
self.options = kwargs
295295
self.limit = self.options.get('limit')
296-
self._set_defaults()
296+
self._set_defaults(_Mode.FINITE)
297297
self.service = service
298298
self.error_tolerance = error_tolerance
299299
self._iter = None
@@ -358,11 +358,16 @@ def options(self, value: Dict):
358358
raise ValueError(error_fmt.format(invalid_opts_list, class_name))
359359
self._options = value
360360

361-
def _set_defaults(self, limit: int = None):
362-
defaults = {
363-
'feed': PostChangesEnums.Feed.LONGPOLL,
364-
'timeout': _LONGPOLL_TIMEOUT,
365-
}
361+
def _set_defaults(self, mode: _Mode, limit: int = None):
362+
if mode == _Mode.FINITE:
363+
defaults = {
364+
'feed': PostChangesEnums.Feed.NORMAL
365+
}
366+
elif mode == _Mode.LISTEN:
367+
defaults = {
368+
'feed': PostChangesEnums.Feed.LONGPOLL,
369+
'timeout': _LONGPOLL_TIMEOUT,
370+
}
366371
if limit is not None:
367372
self.logger.debug(f'Applying changes limit {limit}')
368373
defaults['limit'] = limit
@@ -445,7 +450,7 @@ def _run(self, mode: _Mode):
445450
if self.limit is not None:
446451
batch_size = self.limit if self.limit < batch_size else batch_size
447452

448-
self._set_defaults(batch_size)
453+
self._set_defaults(mode, batch_size)
449454
changes_caller = functools.partial(
450455
self.service.post_changes, **self.options
451456
)

‎test/unit/features/test_changes_follower.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,16 @@ def test_validate_options_multiple_invalid_cases(self):
112112

113113
def test_set_defaults(self):
114114
follower = ChangesFollower(self.client, db="db", **self.kwarg_valid)
115+
expected = {
116+
"feed": PostChangesEnums.Feed.NORMAL,
117+
"timeout": None,
118+
}
119+
for opt, val in expected.items():
120+
self.assertEqual(follower.options.get(opt), val)
121+
122+
def test_set_defaults_listen(self):
123+
follower = ChangesFollower(self.client, db="db", **self.kwarg_valid)
124+
follower._set_defaults(_Mode.LISTEN)
115125
expected = {
116126
"feed": PostChangesEnums.Feed.LONGPOLL,
117127
"timeout": _LONGPOLL_TIMEOUT,
@@ -121,7 +131,18 @@ def test_set_defaults(self):
121131

122132
def test_set_defaults_with_limit(self):
123133
follower = ChangesFollower(self.client, db="db", **self.kwarg_valid)
124-
follower._set_defaults(limit=12)
134+
follower._set_defaults(_Mode.FINITE, limit=12)
135+
expected = {
136+
"feed": PostChangesEnums.Feed.NORMAL,
137+
"timeout": None,
138+
"limit": 12,
139+
}
140+
for opt, val in expected.items():
141+
self.assertEqual(follower.options.get(opt), val)
142+
143+
def test_set_defaults_listen_with_limit(self):
144+
follower = ChangesFollower(self.client, db="db", **self.kwarg_valid)
145+
follower._set_defaults(_Mode.LISTEN, limit=12)
125146
expected = {
126147
"feed": PostChangesEnums.Feed.LONGPOLL,
127148
"timeout": _LONGPOLL_TIMEOUT,
@@ -133,7 +154,7 @@ def test_set_defaults_with_limit(self):
133154
def test_set_defaults_with_kwarg_limit(self):
134155
kwarg = {**self.kwarg_valid, **{"limit": 24}}
135156
follower = ChangesFollower(self.client, db="db", **kwarg)
136-
follower._set_defaults(limit=12)
157+
follower._set_defaults(_Mode.LISTEN, limit=12)
137158
self.assertEqual(follower.options.get("limit"), 12)
138159

139160

0 commit comments

Comments
 (0)
Please sign in to comment.