OpenBB-finance/OpenBB · error · ValueError

Unsupported list item type: {type(item)}

Error message

Unsupported list item type: {type(item)}

What it means

ValueError from list_to_basemodel in openbb_core/app/utils.py: while converting a list of results into OpenBB Data models, an item was not a Data instance, a dict, a pandas DataFrame, or a Series. Each supported type has a conversion path; anything else (str, int, tuple, custom objects) is rejected.

Source

Thrown at openbb_platform/core/openbb_core/app/utils.py:106

        Data(**d) for d in json.loads(df.to_json(orient="records", date_format="iso"))
    ]


def list_to_basemodel(data_list: list) -> list[Data]:
    """Convert a list to a list of BaseModel."""
    # pylint: disable=import-outside-toplevel
    from pandas import DataFrame, Series

    base_models = []
    for item in data_list:
        if isinstance(item, Data) or issubclass(type(item), Data):
            base_models.append(item)
        elif isinstance(item, dict):
            base_models.append(Data(**item))
        elif isinstance(item, (DataFrame, Series)):
            base_models.extend(df_to_basemodel(item))
        else:
            raise ValueError(f"Unsupported list item type: {type(item)}")
    return base_models


def dict_to_basemodel(data_dict: dict) -> Data:
    """Convert a dictionary to BaseModel."""
    try:
        return Data(**data_dict)
    except ValidationError as e:
        raise ValueError(
            f"Validation error when converting dict to BaseModel: {e}"
        ) from e


def ndarray_to_basemodel(array: "ndarray") -> list[Data]:
    """Convert a NumPy array to list of BaseModel."""
    # Assuming a 2D array where rows are records
    if array.ndim != 2:
        raise ValueError("Only 2D arrays are supported.")

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Make every list item a dict keyed by field name: [{'symbol': 'AAPL', 'close': 190.5}]
  2. Or return a pandas DataFrame/Series from the fetcher so df_to_basemodel handles it
  3. Or return Data subclass instances directly
  4. Upgrade openbb-core if the provider expects newer conversion support

Example fix

# before
data = ['AAPL', 'MSFT']
models = convert_to_basemodel(data)  # ValueError: Unsupported list item type

# after
data = [{'symbol': 'AAPL'}, {'symbol': 'MSFT'}]
models = convert_to_basemodel(data)
Defensive patterns

Strategy: type-guard

Validate before calling

def coercible_items(data_list: list) -> bool:
    from pandas import DataFrame, Series
    from openbb_core.provider.abstract.data import Data
    return all(
        isinstance(i, (Data, dict, DataFrame, Series)) for i in data_list
    )

Type guard

from openbb_core.provider.abstract.data import Data
from pandas import DataFrame, Series

def is_supported_item(item) -> bool:
    return isinstance(item, (Data, dict, DataFrame, Series))

Try / catch

try:
    models = convert_to_basemodel(data)
except ValueError as e:
    if 'Unsupported list item type' in str(e):
        data = [d if isinstance(d, dict) else dict(d) for d in data]
        models = convert_to_basemodel(data)
    else:
        raise

Prevention

When it happens

Trigger: Calling convert_to_basemodel / list_to_basemodel (used when normalizing provider fetch results) with e.g. [1, 2, 3], ['AAPL'], a list of namedtuples, or a list mixing JSON strings with dicts. Providers whose fetchers return raw strings/lists of scalars hit this during result processing.

Common situations: Writing a custom provider extension whose fetch() returns non-tabular data; passing already-serialized JSON strings; a tuple of values instead of a dict per record; version drift where a provider returns a new type not handled by the installed openbb-core.

Related errors


AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14). Data as JSON: /api/errors/7cf9823e5e9784a2. Report an issue: GitHub.