{"record":{"id":"5de70bc7e4d9dfa2","repo":"OpenBB-finance/OpenBB","slug":"no-data-was-returned-5de70b","errorCode":null,"errorMessage":"No data was returned.","messagePattern":"No data was returned\\.","errorType":"exception","errorClass":"EmptyDataError","httpStatus":null,"severity":"warning","filePath":"openbb_platform/providers/intrinio/openbb_intrinio/models/etf_price_performance.py","lineNumber":210,"sourceCode":"                        f\"Symbol Error: {analytics['messages']}\"  # type: ignore\n                        + f\"for {etf.get('ticker')}\"  # type: ignore\n                    )\n                    return\n                # Remove the duplicate data from the analytics response.\n                _ = analytics.pop(\"messages\", None)  # type: ignore\n                _ = analytics.pop(\"etf\", None)  # type: ignore\n                _ = analytics.pop(\"date\", None)  # type: ignore\n\n                data.update(analytics)  # type: ignore\n\n            results.append(data)\n\n        tasks = [get_one(symbol, **kwargs) for symbol in symbols]\n\n        await asyncio.gather(*tasks)\n\n        if not results:\n            raise EmptyDataError(\"No data was returned.\")\n\n        # Undo any formatting changes made to the symbols before sorting.\n        symbols = query.symbol.replace(\":US\", \"\").split(\",\")\n\n        return sorted(\n            results,\n            key=(lambda item: (symbols.index(item.get(\"symbol\", len(symbols))))),\n        )\n\n    @staticmethod\n    def transform_data(\n        query: IntrinioEtfPricePerformanceQueryParams,\n        data: list[dict],\n        **kwargs: Any,\n    ) -> list[IntrinioEtfPricePerformanceData]:\n        \"\"\"Transform data.\"\"\"\n        return [IntrinioEtfPricePerformanceData.model_validate(d) for d in data]\n","sourceCodeStart":192,"sourceCodeEnd":228,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/intrinio/openbb_intrinio/models/etf_price_performance.py#L192-L228","documentation":"EmptyDataError raised in IntrinioEtfPricePerformanceFetcher after asyncio.gather over all symbols: none of the get_one tasks appended to 'results', meaning every symbol's analytics/price-performance lookup yielded nothing (individual failures typically warn or silently skip).","triggerScenarios":"Calling etf.price_performance(provider='intrinio', symbol=...) where every requested symbol is invalid, not an ETF, or lacks analytics data on Intrinio. Symbols are normalized (':US' handling appears nearby), so malformed input can also end up querying an unrecognizable identifier.","commonSituations":"Passing indices or non-ETF tickers (e.g. 'SPX'); tickers missing from Intrinio's analytics universe; batch pipelines with outdated ETF lists where every entry fails.","solutions":["Use real ETF tickers (SPY, QQQ) — verify with obb.etf.search(provider='intrinio', query='...')","Try a subset of symbols to isolate which ones are the problem, since partial failures only warn","Catch EmptyDataError and fall back to computing performance from obb.etf.historical prices"],"exampleFix":"# before\nres = obb.etf.price_performance(provider=\"intrinio\", symbol=\"SPX\")\n\n# after\nres = obb.etf.price_performance(provider=\"intrinio\", symbol=\"SPY\")","handlingStrategy":"fallback","validationCode":"def etf_symbols_have_analytics(symbols: list[str]) -> bool:\n    return bool(symbols) and all(s.upper().replace(\":US\", \"\").isalpha() for s in symbols)","typeGuard":"from openbb_core.provider.utils.errors import EmptyDataError","tryCatchPattern":"from openbb_core.provider.utils.errors import EmptyDataError\n\ntry:\n    perf = await obb.etf.price_performance(provider=\"intrinio\", symbol=sym)\nexcept EmptyDataError:\n    # compute performance from historical prices instead\n    hist = await obb.etf.historical(provider=\"intrinio\", symbol=sym)\n    perf = compute_performance(hist.to_df())","preventionTips":["Reserve this endpoint for known ETFs with analytics coverage","Keep a price-based performance fallback for uncovered tickers","Batch-test symbols; partial failures warn while only total failure raises"],"tags":["etf","price-performance","intrinio","empty-data"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}