Source code for pybdl.access.aggregates
"""Access layer for aggregates API endpoints."""
from typing import Any
import pandas as pd
from pybdl.access.base import BaseAccess
[docs]
class AggregatesAccess(BaseAccess):
"""
Access layer for aggregates API, converting responses to DataFrames.
Example column renaming::
_column_renames = {
"list_aggregates": {
"id": "aggregate_id",
"name": "aggregate_name",
},
"get_aggregate": {
"id": "aggregate_id",
},
}
"""
[docs]
def list_aggregates(
self,
page_size: int | None = None,
max_pages: int | None = None,
**kwargs: Any,
) -> pd.DataFrame:
"""
List all aggregates as a DataFrame.
Args:
page_size: Number of results per page (defaults to config.page_size or 100).
max_pages: Maximum number of pages to fetch (None for all pages).
**kwargs: Additional parameters passed to API layer (e.g., sort, lang, format, extra_query).
Returns:
DataFrame with aggregates data.
"""
if page_size is None:
page_size = self._get_default_page_size()
data = self.api_client.list_aggregates(page_size=page_size, max_pages=max_pages, **kwargs)
return self._to_dataframe(data)
[docs]
def get_aggregate(
self,
aggregate_id: str,
**kwargs: Any,
) -> pd.DataFrame:
"""
Retrieve metadata details for a specific aggregate as a DataFrame.
Args:
aggregate_id: Aggregate identifier.
**kwargs: Additional parameters passed to API layer (e.g., lang, format, extra_query).
Returns:
DataFrame with aggregate metadata.
"""
data = self.api_client.get_aggregate(aggregate_id, **kwargs)
return self._to_dataframe(data)
[docs]
async def alist_aggregates(
self,
page_size: int | None = None,
max_pages: int | None = None,
**kwargs: Any,
) -> pd.DataFrame:
"""
Asynchronously list all aggregates as a DataFrame.
Args:
page_size: Number of results per page (defaults to config.page_size or 100).
max_pages: Maximum number of pages to fetch (None for all pages).
**kwargs: Additional parameters passed to API layer (e.g., sort, lang, format, extra_query).
Returns:
DataFrame with aggregates data.
"""
if page_size is None:
page_size = self._get_default_page_size()
data = await self.api_client.alist_aggregates(page_size=page_size, max_pages=max_pages, **kwargs)
return self._to_dataframe(data)
[docs]
async def aget_aggregate(
self,
aggregate_id: str,
**kwargs: Any,
) -> pd.DataFrame:
"""
Asynchronously retrieve metadata details for a specific aggregate as a DataFrame.
Args:
aggregate_id: Aggregate identifier.
**kwargs: Additional parameters passed to API layer (e.g., lang, format, extra_query).
Returns:
DataFrame with aggregate metadata.
"""
data = await self.api_client.aget_aggregate(aggregate_id, **kwargs)
return self._to_dataframe(data)