Implement auto-pagination iterators for all endpoints
Implementation:
- Added iter_all() method to all sync endpoints
- PagesEndpoint.iter_all() - automatic pagination for pages
- UsersEndpoint.iter_all() - automatic pagination for users
- GroupsEndpoint.iter_all() - iterate over all groups
- AssetsEndpoint.iter_all() - iterate over all assets
- Added async iter_all() to all async endpoints
- AsyncPagesEndpoint - async generator with pagination
- AsyncUsersEndpoint - async generator with pagination
- AsyncGroupsEndpoint - async iterator
- AsyncAssetsEndpoint - async iterator
Features:
- Automatic batch fetching (configurable batch size, default: 50)
- Transparent pagination - users don't manage offsets
- Memory efficient - fetches data in chunks
- Filtering support - pass through all filter parameters
- Consistent interface across all endpoints
Usage:
# Sync iteration
for page in client.pages.iter_all(batch_size=100):
print(page.title)
# Async iteration
async for user in client.users.iter_all():
print(user.name)
Tests:
- 7 comprehensive pagination tests
- Single batch, multiple batch, and empty result scenarios
- Both sync and async iterator testing
- All tests passing (100%)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -547,3 +547,19 @@ class GroupsEndpoint(BaseEndpoint):
|
||||
}
|
||||
|
||||
return normalized
|
||||
|
||||
def iter_all(self):
|
||||
"""Iterate over all groups.
|
||||
|
||||
Note: Groups API returns all groups at once, so this is equivalent
|
||||
to iterating over list().
|
||||
|
||||
Yields:
|
||||
Group objects one at a time
|
||||
|
||||
Example:
|
||||
>>> for group in client.groups.iter_all():
|
||||
... print(f"{group.name}: {len(group.users)} users")
|
||||
"""
|
||||
for group in self.list():
|
||||
yield group
|
||||
|
||||
Reference in New Issue
Block a user