Source code for apitalker.data

from typing import Any, List, Union

from pandas import DataFrame  # type: ignore
from pandas.io.json import _json_normalize  # type: ignore


[docs]class Data: """Class for handling data returned by using `apitalker.api.API.get_data()` method. """
[docs] def __init__(self, data: List[Any]) -> None: """Initializes instance of the class. Args: data (List[Any]): data retrieved from Apitalks API data resource. Attributes: as_list (List[Any]): original data retrieved from Api resource as_dataframe (pandas.Dataframe): data as pandas DataFrame object, converted using `pandas._json_normalize()`. You can then use various methods, which `pandas.DataFrame` class provides, e.g. for saving data in various file types. Examples: >>> from apitalker.api import API >>> >>> api = API("yourapikey") >>> >>> data, error = api.get_data("/path/to/resource/", **kwargs) >>> >>> if error is None: >>> data.as_dataframe.to_json() >>> data.as_dataframe.to_csv() """ self.as_list: List[Any] = data self.as_dataframe: Union[DataFrame, bool] = self.to_dataframe(data=self.as_list)
[docs] def to_dataframe(self, data=None, **kwargs) -> Union[DataFrame, bool]: """Converts `data` to DataFrame. Keyword Args: data (Union[None, Any]): data to normalize and convert into `pandas.core.frame.DataFrame` kwargs: keyword args to pass to pandas `_json.normalize()` function, which does the normalization and conversion to `DataFrame`. See References for link. Returns: Union[pandas.core.frame.DataFrame, bool] * pandas.core.frame.DataFrame: converted API data to pandas `DataFrame`, if normalization of data was successful. \ If data cannot be normalized, returns empty `DataFrame`. * False: if normalization raises an `Exception`. Can happen, if data have deeply nested and irregular structure. References: json_normalize: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.json_normalize.html#pandas-json-normalize """ try: return _json_normalize(data, **kwargs) except Exception as e: print(f"Exception in 'apitalker.data.Data.to_dataframe()': {str(e)}") return False