{"record":{"id":"841055f570504b93","repo":"OpenBB-finance/OpenBB","slug":"invalid-dataset-dataset","errorCode":null,"errorMessage":"Invalid dataset, {dataset}","messagePattern":"Invalid dataset, (.+?)","errorType":"exception","errorClass":"OpenBBError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/famafrench/openbb_famafrench/models/factors.py","lineNumber":279,"sourceCode":"\n    @staticmethod\n    async def aextract_data(\n        query: FamaFrenchFactorsQueryParams,\n        credentials: dict[str, str] | None,\n        **kwargs: Any,\n    ) -> tuple:\n        \"\"\"Extract the data from the FTP.\"\"\"\n        # pylint: disable=import-outside-toplevel, broad-except\n        from openbb_famafrench.utils.helpers import get_portfolio_data\n\n        factors = FACTOR_REGION_MAP.get(query.region, {})\n        factor = factors_dict.get(query.factor, \"\")\n        portfolio = factors.get(\"factors\", {}).get(factor, \"\")\n        interval = factors.get(\"intervals\", {}).get(factor, {}).get(query.frequency, \"\")\n        dataset = portfolio + interval\n\n        if not dataset:\n            raise OpenBBError(f\"Invalid dataset, {dataset}\")\n\n        try:\n            return get_portfolio_data(\n                dataset=dataset,\n                frequency=query.frequency,\n            )\n        except Exception as e:\n            raise OpenBBError(original=e) from e\n\n    @staticmethod\n    def transform_data(\n        query: FamaFrenchFactorsQueryParams,\n        data: tuple,\n        **kwargs: Any,\n    ) -> AnnotatedResult[list[FamaFrenchFactorsData]]:\n        \"\"\"Transform the raw data and insert metadata.\"\"\"\n        # pylint: disable=import-outside-toplevel\n        from pandas import to_datetime","sourceCodeStart":261,"sourceCodeEnd":297,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/famafrench/openbb_famafrench/models/factors.py#L261-L297","documentation":"Fama-French factors extraction guard: the dataset filename is composed as portfolio + interval (looked up from FACTOR_REGION_MAP for the query's region/factor/frequency). If either lookup misses, dataset is '' and the fetch aborts with this OpenBBError. In normal flow the model validator (errors 335-338) rejects such combinations first, so hitting this means the query object was constructed bypassing validation.","triggerScenarios":"Instantiating FamaFrenchFactorsQueryParams.model_construct(...) or otherwise skipping validators with a mismatched region/factor/frequency; FACTOR_REGION_MAP keys drifting out of sync with factors_dict after a partial upgrade.","commonSituations":"See trigger scenarios.","solutions":["Construct the query through normal validation (FamaFrenchFactorsQueryParams(**params)) so errors 335-338 catch bad combos with clear messages.","Verify the (region, factor, frequency) triple against FACTOR_REGION_MAP and factors_dict.","Reinstall/align the openbb-famafrench package version so the maps are consistent."],"exampleFix":"# before\nq = FamaFrenchFactorsQueryParams.model_construct(region='europe', factor='st_reversal', frequency='monthly')\nawait fetcher.aextract_data(q, None)\n\n# after\nq = FamaFrenchFactorsQueryParams(region='europe', factor='5_factors', frequency='monthly')  # validators run","handlingStrategy":"validation","validationCode":"from openbb_famafrench.models.factors import FACTOR_REGION_MAP, factors_dict\n\ndef dataset_resolves(region: str, factor: str, frequency: str) -> bool:\n    f = factors_dict.get(factor, '')\n    block = FACTOR_REGION_MAP.get(region, {})\n    portfolio = block.get('factors', {}).get(f, '')\n    interval = block.get('intervals', {}).get(f, {}).get(frequency, '')\n    return bool(portfolio + interval)","typeGuard":null,"tryCatchPattern":"try:\n    res = await obb.economy.famafrench.factors(factor=f, region=r, frequency=frq, provider='famafrench')\nexcept OpenBBError as e:\n    if 'Invalid dataset' in str(e):\n        raise ValueError('Bypassed validation — build query via the params model') from e\n    raise","preventionTips":["Always construct query params through the validated model, never model_construct","Keep provider package versions aligned so the internal maps stay in sync"],"tags":["famafrench","factors","validation","internal-contract"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}