Filtering and Pagination
pyvergeos provides flexible options for filtering and paginating results.
Keyword Arguments
The simplest way to filter is with keyword arguments:
# Filter by status
running_vms = client.vms.list(status="running")
# Filter by multiple fields
linux_vms = client.vms.list(os_family="linux", status="running")
# Wildcard matching
web_servers = client.vms.list(name="web-*")
OData Filter Strings
For complex queries, use OData filter syntax:
# Greater than
vms = client.vms.list(filter="ram gt 2048")
# Compound conditions
vms = client.vms.list(filter="os_family eq 'linux' and ram gt 2048")
# String functions
vms = client.vms.list(filter="startswith(name, 'prod-')")
Supported operators:
eq- Equalne- Not equalgt- Greater thanlt- Less thange- Greater than or equalle- Less than or equaland- Logical andor- Logical or
Filter Builder
For programmatic filter construction, use the Filter class:
from pyvergeos.filters import Filter
# Build a filter
f = Filter()
f.eq("os_family", "linux")
f.and_()
f.gt("ram", 2048)
vms = client.vms.list(filter=str(f))
# Method chaining
f = Filter().eq("status", "running").and_().startswith("name", "prod-")
vms = client.vms.list(filter=str(f))
Field Selection
Limit returned fields for better performance:
# Only return name and status
vms = client.vms.list(fields=["name", "status"])
for vm in vms:
print(f"{vm.name}: {vm.status}")
Pagination
Control result size with limit and offset:
# Get first 10 results
vms = client.vms.list(limit=10)
# Get next 10 results
vms = client.vms.list(limit=10, offset=10)
Iterating All Results
For large result sets, use iter_all() for automatic pagination:
# Automatically handles pagination
for vm in client.vms.iter_all():
print(vm.name)
# Custom page size
for vm in client.vms.iter_all(page_size=50):
process(vm)
Sorting
Sort results with the orderby parameter:
# Sort by name ascending
vms = client.vms.list(orderby="name")
# Sort descending
vms = client.vms.list(orderby="name desc")
# Multiple sort fields
vms = client.vms.list(orderby="status,name")
Combining Options
All filtering and pagination options can be combined:
vms = client.vms.list(
filter="os_family eq 'linux'",
fields=["name", "status", "ram"],
orderby="name",
limit=100
)