diff --git a/openbb_platform/core/openbb_core/provider/standard_models/gdp_forecast.py b/openbb_platform/core/openbb_core/provider/standard_models/gdp_forecast.py index 2db61c1640d4..5be679439de9 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/gdp_forecast.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/gdp_forecast.py @@ -1,9 +1,9 @@ """Forecast GDP Standard Model.""" from datetime import date as dateType -from typing import Literal, Optional +from typing import Optional, Union -from pydantic import Field, field_validator +from pydantic import Field from openbb_core.provider.abstract.data import Data from openbb_core.provider.abstract.query_params import QueryParams @@ -16,35 +16,19 @@ class GdpForecastQueryParams(QueryParams): """Forecast GDP Query.""" - period: Literal["quarter", "annual"] = Field( - default="annual", - description=QUERY_DESCRIPTIONS.get("period", "") - + " Units for nominal GDP period. Either quarter or annual.", - ) start_date: Optional[dateType] = Field( default=None, description=QUERY_DESCRIPTIONS.get("start_date") ) end_date: Optional[dateType] = Field( default=None, description=QUERY_DESCRIPTIONS.get("end_date") ) - type: Literal["nominal", "real"] = Field( - default="real", - description="Type of GDP to get forecast of. Either nominal or real.", - ) - - @field_validator("period", "type", mode="before", check_fields=False) - @classmethod - def to_lower(cls, v: Optional[str]) -> Optional[str]: - """Convert field to lowercase.""" - return v.lower() if v else v class GdpForecastData(Data): """Forecast GDP Data.""" - date: Optional[dateType] = Field( - default=None, description=DATA_DESCRIPTIONS.get("date") - ) - value: Optional[float] = Field( - default=None, description="Nominal GDP value on the date." + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date")) + country: str = Field(description=DATA_DESCRIPTIONS.get("country")) + value: Union[int, float] = Field( + description="Forecasted GDP value for the country and date." ) diff --git a/openbb_platform/extensions/economy/integration/test_economy_api.py b/openbb_platform/extensions/economy/integration/test_economy_api.py index e77649e351a8..46dbf66c2af1 100644 --- a/openbb_platform/extensions/economy/integration/test_economy_api.py +++ b/openbb_platform/extensions/economy/integration/test_economy_api.py @@ -135,23 +135,14 @@ def test_economy_risk_premium(params, headers): @parametrize( "params", [ - ( - { - "period": "annual", - "start_date": "2023-01-01", - "end_date": "2025-06-06", - "type": "real", - "provider": "oecd", - } - ), ( { "country": "united_states", "provider": "oecd", - "period": "annual", - "start_date": "2023-01-01", - "end_date": "2025-06-06", - "type": "real", + "frequency": "annual", + "start_date": None, + "end_date": None, + "units": "volume", } ), ], diff --git a/openbb_platform/extensions/economy/integration/test_economy_python.py b/openbb_platform/extensions/economy/integration/test_economy_python.py index bdd473deaa8c..9466690f8f17 100644 --- a/openbb_platform/extensions/economy/integration/test_economy_python.py +++ b/openbb_platform/extensions/economy/integration/test_economy_python.py @@ -126,22 +126,14 @@ def test_economy_risk_premium(params, obb): @parametrize( "params", [ - ( - { - "period": "annual", - "start_date": "2023-01-01", - "end_date": "2025-06-06", - "type": "real", - } - ), ( { "country": "united_states", "provider": "oecd", - "period": "annual", - "start_date": "2023-01-01", - "end_date": "2025-06-06", - "type": "real", + "frequency": "annual", + "start_date": None, + "end_date": None, + "units": "volume", } ), ], diff --git a/openbb_platform/extensions/economy/openbb_economy/gdp/gdp_router.py b/openbb_platform/extensions/economy/openbb_economy/gdp/gdp_router.py index a257a1e2c85e..a6b8699b34a9 100644 --- a/openbb_platform/extensions/economy/openbb_economy/gdp/gdp_router.py +++ b/openbb_platform/extensions/economy/openbb_economy/gdp/gdp_router.py @@ -20,7 +20,14 @@ model="GdpForecast", examples=[ APIEx(parameters={"provider": "oecd"}), - APIEx(parameters={"period": "annual", "type": "real", "provider": "oecd"}), + APIEx( + parameters={ + "country": "united_states,germany,france", + "frequency": "annual", + "units": "capita", + "provider": "oecd", + } + ), ], ) async def forecast( @@ -37,7 +44,14 @@ async def forecast( model="GdpNominal", examples=[ APIEx(parameters={"provider": "oecd"}), - APIEx(parameters={"units": "usd", "provider": "oecd"}), + APIEx( + parameters={ + "units": "capita", + "country": "all", + "frequency": "annual", + "provider": "oecd", + } + ), ], ) async def nominal( diff --git a/openbb_platform/openbb/assets/reference.json b/openbb_platform/openbb/assets/reference.json index d40b72459d83..116a41e55701 100644 --- a/openbb_platform/openbb/assets/reference.json +++ b/openbb_platform/openbb/assets/reference.json @@ -2525,17 +2525,9 @@ "message": null }, "description": "Get Forecasted GDP Data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.gdp.forecast(provider='oecd')\nobb.economy.gdp.forecast(period='annual', type='real', provider='oecd')\n```\n\n", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.gdp.forecast(provider='oecd')\nobb.economy.gdp.forecast(country=united_states,germany,france, frequency=annual, units=capita, provider='oecd')\n```\n\n", "parameters": { "standard": [ - { - "name": "period", - "type": "Literal['quarter', 'annual']", - "description": "Time period of the data to return. Units for nominal GDP period. Either quarter or annual.", - "default": "annual", - "optional": true, - "choices": null - }, { "name": "start_date", "type": "Union[date, str]", @@ -2552,14 +2544,6 @@ "optional": true, "choices": null }, - { - "name": "type", - "type": "Literal['nominal', 'real']", - "description": "Type of GDP to get forecast of. Either nominal or real.", - "default": "real", - "optional": true, - "choices": null - }, { "name": "provider", "type": "Literal['oecd']", @@ -2571,11 +2555,88 @@ "oecd": [ { "name": "country", - "type": "Literal['argentina', 'asia', 'australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'colombia', 'costa_rica', 'croatia', 'czech_republic', 'denmark', 'estonia', 'euro_area_17', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'non-oecd', 'norway', 'oecd_total', 'peru', 'poland', 'portugal', 'romania', 'russia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states', 'world']", - "description": "Country to get GDP for.", - "default": "united_states", + "type": "Union[str, List[str]]", + "description": "Country, or countries, to get forward GDP projections for. Default is all. Multiple items allowed for provider(s): oecd.", + "default": "all", + "optional": true, + "choices": [ + "argentina", + "asia", + "australia", + "austria", + "belgium", + "brazil", + "bulgaria", + "canada", + "chile", + "china", + "colombia", + "costa_rica", + "croatia", + "czech_republic", + "denmark", + "estonia", + "finland", + "france", + "germany", + "greece", + "hungary", + "iceland", + "india", + "indonesia", + "ireland", + "israel", + "italy", + "japan", + "korea", + "latvia", + "lithuania", + "luxembourg", + "mexico", + "netherlands", + "new_zealand", + "norway", + "peru", + "poland", + "portugal", + "romania", + "russia", + "slovak_republic", + "slovenia", + "south_africa", + "spain", + "sweden", + "switzerland", + "turkey", + "united_kingdom", + "united_states", + "other_major_oil_producers", + "rest_of_the_world", + "world", + "all" + ] + }, + { + "name": "frequency", + "type": "Literal['annual', 'quarter']", + "description": "Frequency of the data, default is annual.", + "default": "annual", "optional": true, "choices": null + }, + { + "name": "units", + "type": "Literal['current_prices', 'volume', 'capita', 'growth', 'deflator']", + "description": "Units of the data, default is volume (chain linked volume, 2015). 'current_prices', 'volume', and 'capita' are expressed in USD; 'growth' as a percent; 'deflator' as an index.", + "default": "volume", + "optional": true, + "choices": [ + "current_prices", + "volume", + "capita", + "growth", + "deflator" + ] } ] }, @@ -2614,16 +2675,24 @@ "name": "date", "type": "date", "description": "The date of the data.", - "default": null, - "optional": true, + "default": "", + "optional": false, + "choices": null + }, + { + "name": "country", + "type": "str", + "description": "None", + "default": "", + "optional": false, "choices": null }, { "name": "value", - "type": "float", - "description": "Nominal GDP value on the date.", - "default": null, - "optional": true, + "type": "Union[int, float]", + "description": "Forecasted GDP value for the country and date.", + "default": "", + "optional": false, "choices": null } ], @@ -2637,7 +2706,7 @@ "message": null }, "description": "Get Nominal GDP Data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.gdp.nominal(provider='oecd')\nobb.economy.gdp.nominal(units=usd, provider='oecd')\n```\n\n", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.gdp.nominal(provider='oecd')\nobb.economy.gdp.nominal(units=capita, country=all, frequency=annual, provider='oecd')\n```\n\n", "parameters": { "standard": [ { diff --git a/openbb_platform/openbb/package/economy_gdp.py b/openbb_platform/openbb/package/economy_gdp.py index a30de7ae6213..4b7233549557 100644 --- a/openbb_platform/openbb/package/economy_gdp.py +++ b/openbb_platform/openbb/package/economy_gdp.py @@ -25,12 +25,6 @@ def __repr__(self) -> str: @validate def forecast( self, - period: Annotated[ - Literal["quarter", "annual"], - OpenBBField( - description="Time period of the data to return. Units for nominal GDP period. Either quarter or annual." - ), - ] = "annual", start_date: Annotated[ Union[datetime.date, None, str], OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), @@ -39,12 +33,6 @@ def forecast( Union[datetime.date, None, str], OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, - type: Annotated[ - Literal["nominal", "real"], - OpenBBField( - description="Type of GDP to get forecast of. Either nominal or real." - ), - ] = "real", provider: Annotated[ Optional[Literal["oecd"]], OpenBBField( @@ -57,18 +45,19 @@ def forecast( Parameters ---------- - period : Literal['quarter', 'annual'] - Time period of the data to return. Units for nominal GDP period. Either quarter or annual. start_date : Union[datetime.date, None, str] Start date of the data, in YYYY-MM-DD format. end_date : Union[datetime.date, None, str] End date of the data, in YYYY-MM-DD format. - type : Literal['nominal', 'real'] - Type of GDP to get forecast of. Either nominal or real. provider : Optional[Literal['oecd']] The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: oecd. - country : Literal['argentina', 'asia', 'australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'colombia', 'costa_rica', 'croatia', 'czech_republic', 'denmark', 'estonia', 'euro_area_17', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'non-oecd', 'norway', 'oecd_total', 'peru', 'poland', 'portugal', 'romania', 'russia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states', 'world'] - Country to get GDP for. (provider: oecd) + country : str + Country, or countries, to get forward GDP projections for. Default is all. Multiple comma separated items allowed. (provider: oecd) + frequency : Literal['annual', 'quarter'] + Frequency of the data, default is annual. (provider: oecd) + units : Literal['current_prices', 'volume', 'capita', 'growth', 'deflator'] + Units of the data, default is volume (chain linked volume, 2015). + 'current_prices', 'volume', and 'capita' are expressed in USD; 'growth' as a percent; 'deflator' as an index. (provider: oecd) Returns ------- @@ -86,16 +75,18 @@ def forecast( GdpForecast ----------- - date : Optional[date] + date : date The date of the data. - value : Optional[float] - Nominal GDP value on the date. + country : str + None + value : Union[int, float] + Forecasted GDP value for the country and date. Examples -------- >>> from openbb import obb >>> obb.economy.gdp.forecast(provider='oecd') - >>> obb.economy.gdp.forecast(period='annual', type='real', provider='oecd') + >>> obb.economy.gdp.forecast(country='united_states,germany,france', frequency='annual', units='capita', provider='oecd') """ # noqa: E501 return self._run( @@ -109,12 +100,11 @@ def forecast( ) }, standard_params={ - "period": period, "start_date": start_date, "end_date": end_date, - "type": type, }, extra_params=kwargs, + info={"country": {"oecd": {"multiple_items_allowed": True}}}, ) ) @@ -190,7 +180,7 @@ def nominal( -------- >>> from openbb import obb >>> obb.economy.gdp.nominal(provider='oecd') - >>> obb.economy.gdp.nominal(units='usd', provider='oecd') + >>> obb.economy.gdp.nominal(units='capita', country='all', frequency='annual', provider='oecd') """ # noqa: E501 return self._run( diff --git a/openbb_platform/providers/oecd/openbb_oecd/models/gdp_forecast.py b/openbb_platform/providers/oecd/openbb_oecd/models/gdp_forecast.py index 7947bf5df2bd..3ba805316294 100644 --- a/openbb_platform/providers/oecd/openbb_oecd/models/gdp_forecast.py +++ b/openbb_platform/providers/oecd/openbb_oecd/models/gdp_forecast.py @@ -1,7 +1,10 @@ """OECD Forecast GDP Model.""" -from datetime import date -from typing import Any, Dict, List, Literal, Optional, Union +# pylint: disable=unused-argument + +from datetime import datetime +from typing import Any, Dict, List, Literal, Optional +from warnings import warn from openbb_core.app.model.abstract.error import OpenBBError from openbb_core.provider.abstract.fetcher import Fetcher @@ -9,107 +12,239 @@ GdpForecastData, GdpForecastQueryParams, ) -from openbb_oecd.utils import constants -from pydantic import Field, field_validator +from openbb_core.provider.utils.errors import EmptyDataError +from openbb_oecd.utils.constants import ( + CODE_TO_COUNTRY_GDP_FORECAST, + COUNTRY_TO_CODE_GDP_FORECAST, +) +from pydantic import Field + +COUNTRIES = list(COUNTRY_TO_CODE_GDP_FORECAST) + ["all"] + +COUNTRIES_QUARTER = [ + "australia", + "austria", + "belgium", + "canada", + "chile", + "colombia", + "costa_rica", + "czechia", + "denmark", + "estonia", + "finland", + "france", + "germany", + "greece", + "iceland", + "ireland", + "israel", + "italy", + "japan", + "korea", + "lithuania", + "luxembourg", + "netherlands", + "new_zealand", + "norway", + "poland", + "portugal", + "slovak_republic", + "spain", + "sweden", + "switzerland", + "turkey", + "united_kingdom", + "united_states", +] -gdp_countries = tuple(constants.COUNTRY_TO_CODE_GDP_FORECAST.keys()) -GDPCountriesLiteral = Literal[gdp_countries] # type: ignore -# pylint: disable=unused-argument +class OECDGdpForecastQueryParams(GdpForecastQueryParams): + """OECD GDP Forecast Query. + The OECD Economic Outlook presents the OECD's analysis of the major + global economic trends and prospects for the next two years. + The Outlook puts forward a consistent set of projections for output, employment, government spending, + prices and current balances based on a review of each member country + and of the induced effect on each of them on international developments. -class OECDGdpForecastQueryParams(GdpForecastQueryParams): - """OECD GDP Forecast Query.""" + https://www.oecd.org/economic-outlook/ + """ - country: GDPCountriesLiteral = Field( - description="Country to get GDP for.", default="united_states" + __json_schema_extra__ = { + "country": {"multiple_items_allowed": True}, + } + + country: str = Field( + description="Country, or countries, to get forward GDP projections for. Default is all.", + default="all", + json_schema_extra={"choices": COUNTRIES}, # type: ignore + ) + frequency: Literal["annual", "quarter"] = Field( + default="annual", + description="Frequency of the data, default is annual.", + ) + units: Literal["current_prices", "volume", "capita", "growth", "deflator"] = Field( + default="volume", + description="Units of the data, default is volume (chain linked volume, 2015)." + + "\n'current_prices', 'volume', and 'capita' are expressed in USD; 'growth' as a percent;" + + " 'deflator' as an index.", + json_schema_extra={ + "choices": ["current_prices", "volume", "capita", "growth", "deflator"] + }, ) class OECDGdpForecastData(GdpForecastData): """OECD GDP Forecast Data.""" - @field_validator("date", mode="before") - @classmethod - def date_validate( - cls, in_date: Union[date, Union[str, int]] - ): # pylint: disable=E0213 - """Validate date.""" - # pylint: disable=import-outside-toplevel - import re - - # OECD Returns dates like 2022-Q2, so we map that to the end of the quarter. - if isinstance(in_date, str): - if re.match(r"\d{4}-Q[1-4]$", in_date): - year, quarter = in_date.split("-") - quarter_int = int(quarter[1]) - month = quarter_int * 3 - return date(int(year), month, 1) - raise OpenBBError("Date string does not match the format YYYY-QN") - if isinstance(in_date, int): - return date(in_date, 12, 31) - return date - class OECDGdpForecastFetcher( Fetcher[OECDGdpForecastQueryParams, List[OECDGdpForecastData]] ): - """Transform the query, extract and transform the data from the OECD endpoints.""" + """OECD GDP Forecast Fetcher.""" @staticmethod def transform_query(params: Dict[str, Any]) -> OECDGdpForecastQueryParams: """Transform the query.""" transformed_params = params.copy() - if transformed_params["start_date"] is None: - transformed_params["start_date"] = date(1990, 1, 1) - if transformed_params["end_date"] is None: - transformed_params["end_date"] = date(date.today().year + 10, 12, 31) + countries = transformed_params.get("country") + new_countries: List = [] + freq = transformed_params.get("frequency") + if not countries: + new_countries.append("all") + if countries: + countries = ( + countries.split(",") if isinstance(countries, str) else countries + ) + if "all" in countries: + new_countries = ["all"] + else: + for country in countries: + if freq == "quarter": + if country.lower() in COUNTRIES_QUARTER: + new_countries.append(country.lower()) + else: + warn(f"{country} is not available for quarterly data.") + else: # noqa + if country.lower() in COUNTRIES: + new_countries.append(country.lower()) + else: + warn(f"{country} is not available for annual data.") + + if not new_countries: + raise OpenBBError( + "No valid countries were found for the supplied parameters." + ) + + transformed_params["country"] = ",".join(new_countries) + + if not transformed_params.get("start_date"): + transformed_params["start_date"] = datetime( + datetime.today().year, 1, 1 + ).date() + + if not transformed_params.get("end_date"): + transformed_params["end_date"] = datetime( + datetime.today().year + 2, 12, 31 + ).date() return OECDGdpForecastQueryParams(**transformed_params) @staticmethod - def extract_data( + async def aextract_data( query: OECDGdpForecastQueryParams, credentials: Optional[Dict[str, str]], **kwargs: Any, ) -> List[Dict]: """Return the raw data from the OECD endpoint.""" # pylint: disable=import-outside-toplevel - from openbb_oecd.utils import helpers - - units = query.period[0].upper() - _type = "REAL" if query.type == "real" else "NOM" + from io import StringIO # noqa + from openbb_oecd.utils.helpers import oecd_date_to_python_date + from pandas import read_csv + from openbb_core.provider.utils.helpers import amake_request + + freq = "Q" if query.frequency == "quarter" else "A" + + measure_dict = { + "current_prices": "GDP_USD", # This gives questionable results. + "volume": "GDPV_USD", + "capita": "GDPVD_CAP", + "growth": "GDPV_ANNPCT", + "deflator": "PGDP", + } + measure = measure_dict[query.units] # type: ignore + + if query.units == "capita" and freq == "Q": + warn( + "Capita data is not available for quarterly data, using annual data instead." + ) + freq = "A" + + def country_string(input_str: str): + """Convert the list of countries to an abbreviated string.""" + if input_str == "all": + return "" + _countries = input_str.split(",") + + return "+".join( + [ + COUNTRY_TO_CODE_GDP_FORECAST[country.lower()] + for country in _countries + ] + ) + + country = country_string(query.country) - base_url = "https://stats.oecd.org/sdmx-json/data/DP_LIVE" url = ( - f"{base_url}/.{_type}GDPFORECAST.TOT.AGRWTH.{units}" - "/OECD?contentType=csv&detail=code&separator=comma&csv-lang=en" - f"&startPeriod={query.start_date}&endPeriod={query.end_date}" + "https://sdmx.oecd.org/public/rest/data/OECD.ECO.MAD,DSD_EO@DF_EO,1.1" + + f"/{country}.{measure}.{freq}?" + + f"startPeriod={query.start_date}&endPeriod={query.end_date}" + + "&dimensionAtObservation=TIME_PERIOD&detail=dataonly&format=csvfile" + ) + + async def response_callback(response, _): + """Response callback.""" + if response.status != 200: + raise OpenBBError(f"Error with the OECD request: {response.status}") + return await response.text() + + headers = {"Accept": "application/vnd.sdmx.data+csv; charset=utf-8"} + response = await amake_request( + url, timeout=30, headers=headers, response_callback=response_callback ) - data_df = helpers.fetch_data(url, csv_kwargs={"encoding": "utf-8"}, **kwargs) - # Sometimes there is weird unicode characters in the column names, so we need to rename them. - # Even changing the encoding on the fetch doesn't seem to help. - data_df = data_df.rename( - columns={ - "LOCATION": "country", - "TIME_PERIOD": "date", - "OBS_VALUE": "value", - "Location": "country", - } + df = read_csv(StringIO(response)).get( # type: ignore + ["REF_AREA", "TIME_PERIOD", "OBS_VALUE"] ) - data_df["country"] = data_df["country"].map( - constants.CODE_TO_COUNTRY_GDP_FORECAST + if df.empty: # type: ignore + raise EmptyDataError("No data was found.") + + df = df.rename( # type: ignore + columns={"REF_AREA": "country", "TIME_PERIOD": "date", "OBS_VALUE": "value"} ) - data_df = data_df[data_df["country"] == query.country] - data_df = data_df[["country", "date", "value"]] - data_df["date"] = data_df["date"].apply(helpers.oecd_date_to_python_date) - data_df = data_df[ - (data_df["date"] <= query.end_date) & (data_df["date"] >= query.start_date) + df.country = [ + ( + CODE_TO_COUNTRY_GDP_FORECAST.get(d, d) + .replace("_", " ") + .replace("asia", "Dynamic Asian Economies") + .title() + ) + for d in df.country ] - data_df["date"] = data_df["date"].apply( - lambda x: x.year - ) # Validator won't accept datetime.date? - return data_df.to_dict(orient="records") + df.date = df.date.apply(oecd_date_to_python_date) + df = df[df["value"].notnull()] + + if query.units != "growth": + df["value"] = df.value.astype("int64") + df = df[df["value"] > 0] + + if query.units == "growth": + df["value"] = df.value.astype("float64") / 100 + + df = df[df["value"] > 0] + df = df.sort_values(by=["date", "value"], ascending=[True, False]) + + return df.to_dict(orient="records") @staticmethod def transform_data( diff --git a/openbb_platform/providers/oecd/openbb_oecd/models/gdp_nominal.py b/openbb_platform/providers/oecd/openbb_oecd/models/gdp_nominal.py index 75b9a7f4f7ef..d790b98156e2 100644 --- a/openbb_platform/providers/oecd/openbb_oecd/models/gdp_nominal.py +++ b/openbb_platform/providers/oecd/openbb_oecd/models/gdp_nominal.py @@ -186,7 +186,7 @@ def apply_map(x): if query.units == "level": df["value"] = (df["value"].astype(float) * 1_000_000).astype("int64") - df = df.sort_values(by=["date", "value"], ascending=False) + df = df.sort_values(by=["date", "value"], ascending=[True, False]) return df.replace({nan: None}).to_dict(orient="records") diff --git a/openbb_platform/providers/oecd/openbb_oecd/utils/constants.py b/openbb_platform/providers/oecd/openbb_oecd/utils/constants.py index 35e8d3f8ce4c..cc101c882008 100644 --- a/openbb_platform/providers/oecd/openbb_oecd/utils/constants.py +++ b/openbb_platform/providers/oecd/openbb_oecd/utils/constants.py @@ -140,7 +140,6 @@ "czech_republic": "CZE", "denmark": "DNK", "estonia": "EST", - "euro_area_17": "EA17", "finland": "FIN", "france": "FRA", "germany": "DEU", @@ -160,9 +159,7 @@ "mexico": "MEX", "netherlands": "NLD", "new_zealand": "NZL", - "non-oecd": "NMEC", "norway": "NOR", - "oecd_total": "OECD", "peru": "PER", "poland": "POL", "portugal": "PRT", @@ -177,7 +174,9 @@ "turkey": "TUR", "united_kingdom": "GBR", "united_states": "USA", - "world": "WLD", + "other_major_oil_producers": "OIL_O", + "rest_of_the_world": "WXD", + "world": "W", } CODE_TO_COUNTRY_GDP_FORECAST = {v: k for k, v in COUNTRY_TO_CODE_GDP_FORECAST.items()} diff --git a/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_forecast_gdp_fetcher_urllib3_v1.yaml b/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_forecast_gdp_fetcher_urllib3_v1.yaml deleted file mode 100644 index 3d4252552471..000000000000 --- a/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_forecast_gdp_fetcher_urllib3_v1.yaml +++ /dev/null @@ -1,98 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - method: GET - uri: https://stats.oecd.org/sdmx-json/data/DP_LIVE/.REALGDPFORECAST.TOT.AGRWTH.A/OECD?contentType=csv&csv-lang=en&detail=code&endPeriod=2023-06-06&separator=comma&startPeriod=2020-01-01 - response: - body: - string: !!binary | - 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 - 49kjMSTKks6mvBMlfke/cfL/AI5BaGhoKwAA - headers: - Access-Control-Allow-Headers: - - Content-Type - Access-Control-Allow-Methods: - - POST,GET,OPTIONS - Access-Control-Allow-Origin: - - '*' - Cache-Control: - - private - Content-Disposition: - - attachment;filename=DP_LIVE_01072024211332615.csv - Content-Encoding: - - gzip - Content-Type: - - text/csv - Date: - - Mon, 01 Jul 2024 19:13:32 GMT - Transfer-Encoding: - - chunked - Vary: - - Accept-Encoding - status: - code: 200 - message: OK -version: 1 diff --git a/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_forecast_gdp_fetcher_urllib3_v2.yaml b/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_forecast_gdp_fetcher_urllib3_v2.yaml deleted file mode 100644 index f19a2067415c..000000000000 --- a/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_forecast_gdp_fetcher_urllib3_v2.yaml +++ /dev/null @@ -1,41 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - method: GET - uri: https://stats.oecd.org/sdmx-json/data/DP_LIVE/.REALGDPFORECAST.TOT.AGRWTH.A/OECD?contentType=csv&csv-lang=en&detail=code&endPeriod=2023-06-06&separator=comma&startPeriod=2020-01-01 - response: - body: - string: "\uFEFF\"LOCATION\",\"INDICATOR\",\"SUBJECT\",\"MEASURE\",\"FREQUENCY\",\"TIME\",\"Value\",\"Flag - Codes\"\r\n\"AUS\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-1.86371145254018,\r\n\"AUS\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.19608124745572,\r\n\"AUS\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.71582018836856,\r\n\"AUT\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-6.72469120888768,\r\n\"AUT\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",4.35631564737116,\r\n\"AUT\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",4.83290725615829,\r\n\"BEL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-5.26121200578106,\r\n\"BEL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.85114887477679,\r\n\"BEL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.00992536058012,\r\n\"CAN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-5.07435753584286,\r\n\"CAN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.01180087948974,\r\n\"CAN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.43798171948651,\r\n\"CZE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-5.51804042514384,\r\n\"CZE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",3.49585458821173,\r\n\"CZE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.35099476205755,\r\n\"DNK\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-2.4245128394987,\r\n\"DNK\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.84452257872189,\r\n\"DNK\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.73117395606638,\r\n\"FIN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-2.35584649758928,\r\n\"FIN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",3.17230920201615,\r\n\"FIN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",1.59834329145446,\r\n\"FRA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-7.67926656583458,\r\n\"FRA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.36405774776301,\r\n\"FRA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.52736068132051,\r\n\"DEU\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-4.19743187597084,\r\n\"DEU\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",3.12431668864458,\r\n\"DEU\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",1.88145416635961,\r\n\"GRC\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-9.01910857160282,\r\n\"GRC\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",8.33607657289376,\r\n\"GRC\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",6.01440927831591,\r\n\"HUN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-4.53555083281567,\r\n\"HUN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",7.08572084592274,\r\n\"HUN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",4.55455664162289,\r\n\"ISL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-7.2156705632618,\r\n\"ISL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",4.50773500493953,\r\n\"ISL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",7.23808936062186,\r\n\"IRL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",5.82437398478973,\r\n\"IRL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",14.7503758698288,\r\n\"IRL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",9.54219217196415,\r\n\"ITA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-9.04018163814827,\r\n\"ITA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",8.29085349527758,\r\n\"ITA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.885737595799,\r\n\"JPN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-4.24217163280398,\r\n\"JPN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",2.22991710954498,\r\n\"JPN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",0.930440568517544,\r\n\"KOR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-0.709415359397677,\r\n\"KOR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",4.3047348190697,\r\n\"KOR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.61267740370756,\r\n\"LUX\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-0.883649255273697,\r\n\"LUX\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",7.15192638256676,\r\n\"LUX\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",1.41127449187475,\r\n\"MEX\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-8.65158681310767,\r\n\"MEX\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.83782952168495,\r\n\"MEX\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.89823145581499,\r\n\"NLD\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-3.88418900067636,\r\n\"NLD\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.18797150589138,\r\n\"NLD\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",4.38706621175959,\r\n\"NZL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-1.10371742394792,\r\n\"NZL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.06612971598131,\r\n\"NZL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.29370964753207,\r\n\"NOR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-1.27815144456182,\r\n\"NOR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",3.8983699616504,\r\n\"NOR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.27739036624292,\r\n\"POL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-2.03164329712057,\r\n\"POL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.83839158064628,\r\n\"POL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",5.56180510950234,\r\n\"PRT\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-8.30051643900485,\r\n\"PRT\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.73743700525681,\r\n\"PRT\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",6.82751082945531,\r\n\"SVK\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-3.33549888710313,\r\n\"SVK\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",4.78914645941861,\r\n\"SVK\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",1.75044813974223,\r\n\"ESP\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-11.1673816649249,\r\n\"ESP\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.40317965563794,\r\n\"ESP\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",5.77083011928764,\r\n\"SWE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-2.33641009323738,\r\n\"SWE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.9390036135577,\r\n\"SWE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.91918269573053,\r\n\"CHE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-2.27605852984453,\r\n\"CHE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.39323496714601,\r\n\"CHE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.66490741382868,\r\n\"TUR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",1.85987303966003,\r\n\"TUR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",11.4393957086487,\r\n\"TUR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",5.53342781414886,\r\n\"GBR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-10.3599008201275,\r\n\"GBR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",8.67490408187011,\r\n\"GBR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",4.34656141913231,\r\n\"USA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-2.21346815105538,\r\n\"USA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.80020859862428,\r\n\"USA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",1.93549117916375,\r\n\"BRA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-3.56811477305882,\r\n\"BRA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.33083507732895,\r\n\"BRA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.0178589281207,\r\n\"CHL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-6.39184505411625,\r\n\"CHL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",11.9378454187959,\r\n\"CHL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.49302192382485,\r\n\"CHN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",2.23863836000005,\r\n\"CHN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",8.44846941999988,\r\n\"CHN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.98908408999957,\r\n\"EST\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-0.685035987546108,\r\n\"EST\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",7.37039587186125,\r\n\"EST\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",-0.473024943892728,\r\n\"IND\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-5.83105322029361,\r\n\"IND\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",9.05027790772139,\r\n\"IND\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",7.23969327794775,\r\n\"IDN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-2.06551182934165,\r\n\"IDN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",3.70305535690933,\r\n\"IDN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",5.30859500543607,\r\n\"ISR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-1.39419529727787,\r\n\"ISR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",9.31691237340856,\r\n\"ISR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",6.36453977420834,\r\n\"RUS\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-2.61077803601911,\r\n\"RUS\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.56881582060177,\r\n\"RUS\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",-1.95025466270207,\r\n\"SVN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-4.24088272385077,\r\n\"SVN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",8.22849828997272,\r\n\"SVN\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.46078435810649,\r\n\"ZAF\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-5.96335817579751,\r\n\"ZAF\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",4.70306205872993,\r\n\"ZAF\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",1.91040616451116,\r\n\"WLD\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-3.02553022551651,\r\n\"WLD\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.31200956874079,\r\n\"WLD\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.31377944917312,\r\n\"COL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-7.25229907492306,\r\n\"COL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",11.0161932669777,\r\n\"COL\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",7.25656287393614,\r\n\"LVA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-3.51380006606584,\r\n\"LVA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.73173406687234,\r\n\"LVA\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.35847148624243,\r\n\"LTU\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-0.024613489152776,\r\n\"LTU\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.28471070541843,\r\n\"LTU\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.44017519529254,\r\n\"CRI\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-4.27335432319379,\r\n\"CRI\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",7.93576224567165,\r\n\"CRI\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",4.55149177106469,\r\n\"ARG\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-9.90048481400345,\r\n\"ARG\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",10.7180099301359,\r\n\"ARG\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",4.95637011227684,\r\n\"EA17\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-6.22827219675783,\r\n\"EA17\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.85376437607836,\r\n\"EA17\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.42070343173803,\r\n\"BGR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-3.9661127711855,\r\n\"BGR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",7.66177029902483,\r\n\"BGR\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.92642113645087,\r\n\"ROU\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-3.67750020073462,\r\n\"ROU\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",5.70889214339955,\r\n\"ROU\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",4.59535280804635,\r\n\"NMEC\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-1.99070988418046,\r\n\"NMEC\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",6.64540593934882,\r\n\"NMEC\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",3.64306519624235,\r\n\"DAE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-3.34063028430722,\r\n\"DAE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",4.9421324663325,\r\n\"DAE\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",4.07682694865175,\r\n\"HRV\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-8.59142375101555,\r\n\"HRV\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",13.7849466530879,\r\n\"HRV\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",6.34711452642264,\r\n\"PER\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2020\",-10.7843762323736,\r\n\"PER\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2021\",13.3041209630532,\r\n\"PER\",\"REALGDPFORECAST\",\"TOT\",\"AGRWTH\",\"A\",\"2022\",2.70142011681573,\r\n" - headers: - Access-Control-Allow-Headers: - - Content-Type - Access-Control-Allow-Methods: - - POST,GET,OPTIONS - Access-Control-Allow-Origin: - - '*' - Cache-Control: - - private - Content-Disposition: - - attachment;filename=DP_LIVE_27062024121421766.csv - Content-Encoding: - - gzip - Content-Type: - - text/csv - Date: - - Thu, 27 Jun 2024 10:14:21 GMT - Transfer-Encoding: - - chunked - Vary: - - Accept-Encoding - status: - code: 200 - message: OK -version: 1 diff --git a/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_gdp_forecast_fetcher_urllib3_v1.yaml b/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_gdp_forecast_fetcher_urllib3_v1.yaml new file mode 100644 index 000000000000..9557630d1fcf --- /dev/null +++ b/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_gdp_forecast_fetcher_urllib3_v1.yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/vnd.sdmx.data+csv; charset=utf-8 + method: GET + uri: https://sdmx.oecd.org/public/rest/data/OECD.ECO.MAD,DSD_EO@DF_EO,1.1/USA.GDPV_USD.A?detail=dataonly&dimensionAtObservation=TIME_PERIOD&endPeriod=2024-01-01&format=csvfile&startPeriod=2023-01-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ip4evzl+ + 9vzL745enT77/Y9fnR6Pvjg9fv3Vq9PRs1enPzF6c/bF6e//8vTV2ZdPR18+ef37/+Tx869O+bfX + b47ffPV69NWLsze/v3lF/vjq+ZvRyVevXp2+OPl9Rk+OXzMAAvvm218+/fL5l5//PqOnpydnXxw/ + fz16+ers5PT3R5vR8dPvfPX6zRenL978xsmXpydPx6cnX46/OH766Onrp7//6Ze/59Nn9O/W7nj3 + zuir18ejz5++/Mnf/6vXT0fHo72dvXujvd0HD+4/vL9z79Pde7v3Rub5jZP/B2ir18HhAAAA + headers: + Accept-Ranges: + - values + Cache-Control: + - no-store,no-cache + Content-Disposition: + - attachment; filename="OECD.ECO.MAD,DSD_EO@DF_EO,1.1+USA.GDPV_USD.A.csv" + Content-Encoding: + - gzip + Content-Language: + - en,en-US + Content-Type: + - application/vnd.sdmx.data+csv; charset=utf-8 + Date: + - Sat, 13 Jul 2024 18:48:17 GMT + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=2592000 + Transfer-Encoding: + - chunked + Vary: + - Accept,Accept-Encoding,Accept-Encoding + X-Server-Node: + - Server 2 + api-supported-versions: + - '1' + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_gdp_forecast_fetcher_urllib3_v2.yaml b/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_gdp_forecast_fetcher_urllib3_v2.yaml new file mode 100644 index 000000000000..e093a14492c4 --- /dev/null +++ b/openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecd_gdp_forecast_fetcher_urllib3_v2.yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/vnd.sdmx.data+csv; charset=utf-8 + method: GET + uri: https://sdmx.oecd.org/public/rest/data/OECD.ECO.MAD,DSD_EO@DF_EO,1.1/USA.GDPV_USD.A?detail=dataonly&dimensionAtObservation=TIME_PERIOD&endPeriod=2024-01-01&format=csvfile&startPeriod=2023-01-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ip4evzl+ + 9vzL745enT77/Y9fnR6Pvjg9fv3Vq9PRs1enPzF6c/bF6e//8vTV2ZdPR18+ef37/+Tx869O+bfX + b47ffPV69NWLsze/v3lF/vjq+ZvRyVevXp2+OPl9Rk+OXzMAAvvm218+/fL5l5//PqOnpydnXxw/ + fz16+ers5PT3R5vR8dPvfPX6zRenL978xsmXpydPx6cnX46/OH766Onrp7//6Ze/59Nn9O/W7nj3 + zuir18ejz5++/Mnf/6vXT0fHo72dvXujvd0HD+4/vL9z79Pde7v3Rub5jZP/B2ir18HhAAAA + headers: + Accept-Ranges: + - values + Cache-Control: + - no-store,no-cache + Content-Disposition: + - attachment; filename="OECD.ECO.MAD,DSD_EO@DF_EO,1.1+USA.GDPV_USD.A.csv" + Content-Encoding: + - gzip + Content-Language: + - en,en-US + Content-Type: + - application/vnd.sdmx.data+csv; charset=utf-8 + Date: + - Sat, 13 Jul 2024 18:47:04 GMT + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=2592000 + Transfer-Encoding: + - chunked + Vary: + - Accept,Accept-Encoding,Accept-Encoding + X-Server-Node: + - Server 2 + api-supported-versions: + - '1' + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py b/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py index 208b75a4fc55..1735c9a9438e 100644 --- a/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py +++ b/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py @@ -4,7 +4,9 @@ import pytest from openbb_core.app.service.user_service import UserService -from openbb_oecd.models.composite_leading_indicator import OECDCompositeLeadingIndicatorFetcher +from openbb_oecd.models.composite_leading_indicator import ( + OECDCompositeLeadingIndicatorFetcher, +) from openbb_oecd.models.consumer_price_index import OECDCPIFetcher from openbb_oecd.models.gdp_forecast import OECDGdpForecastFetcher from openbb_oecd.models.gdp_nominal import OECDGdpNominalFetcher @@ -72,13 +74,13 @@ def test_oecd_real_gdp_fetcher(credentials=test_credentials): assert result is None -@pytest.mark.skip(reason="Downloads a huge file, code needs to be fixed to use params.") @pytest.mark.record_http -def test_oecd_forecast_gdp_fetcher(credentials=test_credentials): +def test_oecd_gdp_forecast_fetcher(credentials=test_credentials): """Test the OECD GDP Forecast fetcher.""" params = { - "start_date": datetime.date(2020, 1, 1), - "end_date": datetime.date(2023, 6, 6), + "country": "united_states", + "start_date": datetime.date(2023, 1, 1), + "end_date": datetime.date(2024, 1, 1), } fetcher = OECDGdpForecastFetcher()