{"record":{"id":"714290a115973030","repo":"OpenBB-finance/OpenBB","slug":"the-request-was-returned-empty-714290","errorCode":null,"errorMessage":"The request was returned empty.","messagePattern":"The request was returned empty\\.","errorType":"exception","errorClass":"EmptyDataError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/econdb/openbb_econdb/models/port_volume.py","lineNumber":109,"sourceCode":"            f\"Unexpected format of the response. -> Expected dict, got {str(response.__class__.__name__)}\"\n        )\n\n    @staticmethod\n    def transform_data(\n        query: EconDbPortVolumeQueryParams,\n        data: dict,\n        **kwargs: Any,\n    ) -> list[EconDbPortVolumeData]:\n        \"\"\"Transform the data.\"\"\"\n        # pylint: disable=import-outside-toplevel\n        from openbb_econdb.utils.helpers import COUNTRY_MAP\n        from pandas import DataFrame, concat, to_datetime\n\n        df: DataFrame = DataFrame()\n        res = data.copy()\n\n        if not res:\n            raise EmptyDataError(\"The request was returned empty.\")\n\n        ports = res.pop(\"Ports\", None)\n        code_to_city_map = {d[\"locode\"]: d[\"name\"] for d in ports}\n        code_to_country_map = {d[\"locode\"]: d[\"iso2\"] for d in ports}\n        port_codes = list(code_to_city_map)\n\n        for code in port_codes:\n            new_data: list = []\n            for k, v in res.items():\n                new_data.extend(\n                    {\n                        \"date\": d.get(\"Date\"),\n                        \"port_code\": code,\n                        \"port_name\": code_to_city_map[code],\n                        \"country\": code_to_country_map[code],\n                        \"measure\": k,\n                        \"value\": d.get(code),\n                    }","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/econdb/openbb_econdb/models/port_volume.py#L91-L127","documentation":"EmptyDataError raised at the top of EconDbPortVolumeFetcher.transform_data when the extracted dict is falsy — i.e. the HTTP request succeeded and the response was a dict, but it is empty ({}). There is no 'Ports' key or any series to process.","triggerScenarios":"economy.port_volume(provider='econdb') when econdb.com serves an empty JSON object for shipping.json — typically an upstream generation glitch or a briefly broken deployment.","commonSituations":"Hitting the endpoint mid-update on EconDB's side; cached empty response from a previous failure.","solutions":["Retry the call — an empty object is usually a transient upstream state.","Clear the local HTTP cache (~/.cache/openbb/http) if a bad empty response may have been cached.","Verify by curling https://www.econdb.com/static/openbb/shipping.json directly."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":"def has_port_data(payload: dict) -> bool:\n    return bool(payload) and 'Ports' in payload","tryCatchPattern":"from openbb_core.provider.utils.errors import EmptyDataError\nimport time\nfor attempt in range(2):\n    try:\n        res = obb.economy.port_volume(provider='econdb', use_cache=False)\n        break\n    except EmptyDataError:\n        if attempt:\n            raise\n        time.sleep(30)","preventionTips":["Pass use_cache=False on retry so a bad empty payload is not re-cached.","Clear ~/.cache/openbb/http after persistent empty responses."],"tags":["empty-data","port-volume","econdb","api"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}