{"record":{"id":"c0b3af57d8146e56","repo":"OpenBB-finance/OpenBB","slug":"the-data-is-unexpectedly-empty-query-breakpoi","errorCode":null,"errorMessage":"The data is unexpectedly empty. -> {query.breakpoint_type}","messagePattern":"The data is unexpectedly empty\\. -> (.+?)","errorType":"exception","errorClass":"OpenBBError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/famafrench/openbb_famafrench/models/breakpoints.py","lineNumber":278,"sourceCode":"\n        try:\n            return get_breakpoint_data(\n                breakpoint_type=query.breakpoint_type,\n            )\n        except Exception as e:\n            raise OpenBBError(e) from e\n\n    @staticmethod\n    def transform_data(\n        query: FamaFrenchBreakpointQueryParams,\n        data: tuple,\n        **kwargs: Any,\n    ) -> AnnotatedResult[list[FamaFrenchBreakpointData]]:\n        \"\"\"Transform the extracted data.\"\"\"\n        dfs, meta = data\n\n        if not dfs:\n            raise OpenBBError(\n                f\"The data is unexpectedly empty. -> {query.breakpoint_type}\"\n            )\n\n        df = dfs[0]\n        metadata = meta[0]\n\n        if query.start_date:\n            df = df[df[\"date\"] >= query.start_date.strftime(\"%Y-%m-%d\")]\n\n        if query.end_date:\n            df = df[df[\"date\"] <= query.end_date.strftime(\"%Y-%m-%d\")]\n\n        return AnnotatedResult(\n            result=[\n                FamaFrenchBreakpointData(**d) for d in df.to_dict(orient=\"records\")\n            ],\n            metadata={\"description\": metadata},\n        )","sourceCodeStart":260,"sourceCodeEnd":296,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/famafrench/openbb_famafrench/models/breakpoints.py#L260-L296","documentation":"Fama-French breakpoints transform guard: the FTP extraction returned no parsed DataFrames (dfs is empty) for the requested breakpoint_type, so there is nothing to transform. This indicates the dataset ZIP/text for that breakpoint type was empty or unparseable, not a bad parameter — parameter choices are validated earlier by the query model.","triggerScenarios":"Requesting a breakpoint_type whose file on the Fama-French FTP (Dartmouth) server is missing or empty; the downloader fetched a file but parsing yielded zero tables; the FTP server returned an error page that was cached.","commonSituations":"Fama-French reorganizing their FTP layout; intermittent empty responses from the mirror; provider version lagging a file rename for a niche breakpoint type.","solutions":["Retry — transient FTP hiccups are common on the Dartmouth host.","Try a different breakpoint_type to confirm the connection/parse path works.","Update the openbb-famafrench provider for current FTP file mappings.","If persistent, verify the expected file exists by browsing the Fama-French data pages manually."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    res = await obb.economy.famafrench.breakpoints(breakpoint_type=bt, provider='famafrench')\nexcept OpenBBError as e:\n    if 'unexpectedly empty' in str(e):\n        logger.warning('No data for breakpoint_type=%s — skipping', bt)\n        res = None\n    else:\n        raise","preventionTips":["Treat empty-breakpoint results as skippable in batch jobs over multiple breakpoint types","Update the famafrench provider when Fama-French reorganizes FTP files"],"tags":["famafrench","breakpoints","empty-data","ftp"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}