Source code for mantlebio.types.response.list_reponse
from typing import List, Type, TypeVar, Generic, Iterator, Union
import pandas as pd
from mantlebio.exceptions import MantleResponseError
from mantlebio.types.response.response_item import ResponseItem
T = TypeVar('T', bound=ResponseItem)
[docs]
class ListResponse(Generic[T]):
"""
A generic class for handling list responses from the Mantle API
"""
def __init__(self, items: Union[List[T],None] = None) -> None:
self.items = items if items else []
def __len__(self) -> int:
return len(self.items)
def __getitem__(self, index: int) -> T:
return self.items[index]
def __iter__(self) -> Iterator[T]:
return iter(self.items)
[docs]
def append(self, item: T) -> None:
"""
Append an item to the list
"""
self.items.append(item)
[docs]
def extend(self, items: List[T]) -> None:
"""
Extend the list with a list of items
"""
self.items.extend(items)
[docs]
def to_dataframe(self) -> pd.DataFrame:
"""
Convert the list of items to a pandas DataFrame
"""
try:
data = [item.to_series() for item in self.items]
return pd.DataFrame(data)
except Exception as e:
raise MantleResponseError("Error converting list response to DataFrame") from e
[docs]
def _get_item_type(self) -> Type[T]:
if self.items and len(self.items) > 0:
return type(self.items[0])
raise ValueError("The items list is empty, cannot determine the item type.")