mirror of
https://github.com/thousandeyes/thousandeyes-sdk-python.git
synced 2026-02-04 02:46:51 +00:00
CP-2451 fix bugs, add warning to readme and improve example
This commit is contained in:
parent
abea9a244a
commit
3ad6e074bf
@ -2,18 +2,28 @@
|
||||
|
||||
This package provides core functionality for interacting with the ThousandEyes API and should be installed before using any of the published SDKs.
|
||||
|
||||
Usage example for iterating paginated responses:
|
||||
`PaginatorIterator` is unbounded, so wrap it with `itertools.islice` to cap the number of items and avoid making unintended, potentially expensive API calls.
|
||||
Pick a slice size that matches your UI or batch size so you only fetch what you plan to process:
|
||||
|
||||
```python
|
||||
from thousandeyes_sdk.core import PaginatorIterator
|
||||
from thousandeyes_sdk.dashboards.api.dashboards_api import DashboardsApi
|
||||
from thousandeyes_sdk.core import Configuration, ApiClient, PaginatorIterator
|
||||
from thousandeyes_sdk.dashboards import DashboardsApi
|
||||
from itertools import islice
|
||||
|
||||
dashboards_api = DashboardsApi()
|
||||
for widget_data in PaginatorIterator(
|
||||
dashboards_api.get_dashboard_widget_data,
|
||||
lambda response: response.data.tests if response.data else [],
|
||||
dashboard_id="dashboard-id",
|
||||
widget_id="widget-id",
|
||||
):
|
||||
print(widget_data)
|
||||
configuration = Configuration(
|
||||
host = "https://api.thousandeyes.com/v7",
|
||||
access_token = "an_access_token",
|
||||
)
|
||||
|
||||
|
||||
def get_dashboard_widget_data():
|
||||
with ApiClient(configuration) as client:
|
||||
dashboards_api = DashboardsApi(client)
|
||||
for item in list(islice(PaginatorIterator(
|
||||
dashboards_api.get_dashboard_widget_data,
|
||||
lambda response: response.data.tests,
|
||||
dashboard_id="a_dashboard_id",
|
||||
widget_id="a_widget_id",
|
||||
), 20)):
|
||||
print(item.test_id)
|
||||
```
|
||||
|
||||
@ -60,7 +60,8 @@ class PaginatorIterator(Generic[P, R, I]):
|
||||
|
||||
while True:
|
||||
response = self._method(**params)
|
||||
for item in self._items_getter(response):
|
||||
items = self._items_getter(response)
|
||||
for item in items if items else []:
|
||||
yield item
|
||||
|
||||
next_cursor = self._next_cursor_from_response(response)
|
||||
@ -71,14 +72,10 @@ class PaginatorIterator(Generic[P, R, I]):
|
||||
last_cursor = next_cursor
|
||||
|
||||
def _next_cursor_from_response(self, response: Any) -> Optional[str]:
|
||||
data = getattr(response, "data", response)
|
||||
links = getattr(data, "links", None)
|
||||
links = getattr(response, "links", None)
|
||||
|
||||
if links is None:
|
||||
links = getattr(data, "_links", None)
|
||||
|
||||
if links is None and isinstance(data, Mapping):
|
||||
links = data.get("_links") or data.get("links")
|
||||
links = getattr(response, "_links", None)
|
||||
|
||||
if links is None:
|
||||
return None
|
||||
|
||||
Loading…
Reference in New Issue
Block a user