{"record":{"id":"e2409fe30d5f16e9","repo":"OpenBB-finance/OpenBB","slug":"invalid-logging-handler","errorCode":null,"errorMessage":"Invalid logging handler","messagePattern":"Invalid logging handler","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"openbb_platform/core/openbb_core/app/model/system_settings.py","lineNumber":103,"sourceCode":"\n        if not user_settings.exists():\n            cls.create_json(\n                user_settings,\n                {\"credentials\": {}, \"preferences\": {}, \"defaults\": {\"commands\": {}}},\n            )\n\n        if not system_settings.exists():\n            cls.create_json(system_settings, {})\n\n        return values\n\n    @field_validator(\"logging_handlers\")\n    @classmethod\n    def validate_logging_handlers(cls, v):\n        \"\"\"Validate the logging handlers.\"\"\"\n        for value in v:\n            if value not in [\"stdout\", \"stderr\", \"noop\", \"file\"]:\n                raise ValueError(\"Invalid logging handler\")\n        return v\n","sourceCodeStart":85,"sourceCodeEnd":105,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/core/openbb_core/app/model/system_settings.py#L85-L105","documentation":"Raised in the economic-indicators validator when the transform/unit value (resolved from a user-friendly lowercase name to its code via transform_lookup/unit_lookup) is not among the dataflow's available transform-dimension values for the current country+indicator selection. This is the transform analogue of the country/frequency cross-checks.","triggerScenarios":"Passing `transform='growth'` for a dataflow whose UNIT_MEASURE/TRANSFORMATION dimension has no growth entry for that indicator; passing a raw code that isn't in the available values; using a unit name valid in one dataflow (e.g. 'percent_change') in another that uses different codes.","commonSituations":"Assuming all IFS-style transforms exist across dataflows; hardcoded transform lists copied from one endpoint; IMF codelist differences between dataflows (version drift).","solutions":["Read the `available values` list in the error message and pass one of those exact codes/names.","Use `transform='all'` to fetch all transforms and filter client-side.","Omit `transform` entirely if you don't need unit selection.","For batches, resolve transforms per dataflow rather than reusing one value everywhere."],"exampleFix":"# before\nres = obb.economy.economic_indicators(provider='imf', symbol='IFS::NGDP_XDC', country='USA', transform='growth')\n\n# after\nres = obb.economy.economic_indicators(provider='imf', symbol='IFS::NGDP_XDC', country='USA', transform='all')","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    res = obb.economy.economic_indicators(provider='imf', symbol=sym, country=c, transform=t)\nexcept Exception as e:\n    if \"dimension 'transform'\" in str(e):\n        # transform not offered for this selection: fetch all transforms and filter\n        res = obb.economy.economic_indicators(provider='imf', symbol=sym, country=c, transform='all')\n    else:\n        raise","preventionTips":["Transform/unit vocabularies differ per dataflow — never reuse one hardcoded list everywhere.","Prefer transform='all' plus client-side filtering when coverage is unknown.","Capture the available-values list from the error message to build per-dataflow transform catalogs."],"tags":["imf","openbb","validation","transform","sdmx","codelist"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}