Skip to content

Commit ea4f0b2

Browse files
committed
added progress callbacks to event_V2 API
1 parent bf6d594 commit ea4f0b2

File tree

4 files changed

+26
-5
lines changed

4 files changed

+26
-5
lines changed

CHANGELOG.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
# PyBanyan Change History
22

3-
## 0.17.2
4-
* Remove accidentally committed test code
3+
## 0.18.2
4+
* trapped errors in progress callbacks
5+
6+
## 0.18.1
7+
* add progress callbacks to new list methods in event_v2
58

69
## 0.18.0
710
* added count method to event_v2 object

banyan/api/__init__.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import logging
77
import os
8+
import sys
89
from typing import Dict, Any, List, Union, Callable
910

1011
import requests
@@ -195,6 +196,17 @@ def progress_callback(self) -> ProgressCallback:
195196
def progress_callback(self, value: ProgressCallback) -> None:
196197
self._progress_callback = value
197198

199+
def _do_progress_callback(self, method: str, uri: str, count: int, total: int) -> None:
200+
if self._progress_callback:
201+
try:
202+
self._progress_callback(method, uri, count, total)
203+
except Exception as ex:
204+
err_msg = f'{ex.__class__.__name__} exception in progress callback: {ex.args[0]}'
205+
if self._log:
206+
self._log.error(err_msg)
207+
else:
208+
print(err_msg, file=sys.stderr)
209+
198210
def paged_request(self, method: str, uri: str, params: Dict[str, Any] = None, data: Any = None,
199211
json: str = None, headers: Dict[str, str] = None, accept: str = None,
200212
progress_callback: ProgressCallback = None) -> JsonListOrObj:
@@ -215,8 +227,7 @@ def paged_request(self, method: str, uri: str, params: Dict[str, Any] = None, da
215227
return all_results
216228
all_results.extend(results[key])
217229
logging.debug(f'Found {key}, result count = {len(results[key])}, total count = {len(all_results)}')
218-
if callback:
219-
callback(method, uri, len(all_results), results.get('count', -1))
230+
self._do_progress_callback(method, uri, len(all_results), results.get('count', -1))
220231
skip += limit
221232

222233
@property

banyan/api/event_v2.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ def count(self, before_dt: datetime = None, after_dt: datetime = None, order: st
3434
container_id: str = None, service_name: str = None, event_id: str = None) -> int:
3535
params = self._make_params(before_dt, after_dt, order, event_type, subtype, action, email_address,
3636
device_id, device_serial, container_id, service_name, event_id)
37+
return self._count(params)
38+
39+
def _count(self, params: Dict[str, Any]) -> int:
3740
response_json = self._client.api_request('GET', '/events/count', params=params)
3841
return response_json['data']
3942

@@ -63,12 +66,15 @@ def list(self, before_dt: datetime = None, after_dt: datetime = None, order: str
6366
else:
6467
return self._list_paged(params)
6568

69+
# noinspection PyProtectedMember
6670
def _list_daterange(self, params: Dict[str, Any]) -> List[Resource]:
6771
order = params.get('order', 'desc')
6872
params['order'] = 'asc'
6973
all_data: List[EventV2] = list()
7074
event_ids: Set[UUID] = set()
75+
count = self._count(params)
7176
schema = self.Meta.info_class.Schema()
77+
self._client._do_progress_callback('GET', self.Meta.list_uri, 0, count)
7278
while params['after'] < params['before']:
7379
response_json = self._client.api_request('GET', self.Meta.list_uri, params=params)
7480
data: List[EventV2] = schema.load(response_json['data'], many=True)
@@ -78,6 +84,7 @@ def _list_daterange(self, params: Dict[str, Any]) -> List[Resource]:
7884
all_data.extend(data)
7985
event_ids.update([x.event_id for x in data])
8086
params['after'] = int(data[-1].created_at.timestamp() * 1000)
87+
self._client._do_progress_callback('GET', self.Meta.list_uri, len(all_data), count)
8188
self._build_cache(all_data)
8289
return all_data
8390

banyan/core/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
from cement.utils.version import get_version as cement_get_version
33

4-
VERSION = (0, 18, 0, 'final', 1)
4+
VERSION = (0, 18, 2, 'final', 1)
55

66

77
def get_version(version=VERSION):

0 commit comments

Comments
 (0)