diff options
20 files changed, 4546 insertions, 1 deletions
diff --git a/openbb_platform/core/openbb_core/provider/standard_models/manufacturing_outlook_texas.py b/openbb_platform/core/openbb_core/provider/standard_models/manufacturing_outlook_texas.py new file mode 100644 index 00000000000..446340dd965 --- /dev/null +++ b/openbb_platform/core/openbb_core/provider/standard_models/manufacturing_outlook_texas.py @@ -0,0 +1,55 @@ +"""Manufacturing Outlook - Texas - Standard Model.""" + +from datetime import ( + date as dateType, +) +from typing import Optional + +from pydantic import Field + +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) + + +class ManufacturingOutlookTexasQueryParams(QueryParams): + """Manufacturing Outlook - Texas - Query.""" + + 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", ""), + ) + + +class ManufacturingOutlookTexasData(Data): + """Manufacturing Outlook - Texas - Data.""" + + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + topic: Optional[str] = Field( + default=None, description="Topic of the survey response." + ) + diffusion_index: Optional[float] = Field( + default=None, description="Diffusion Index." + ) + percent_reporting_increase: Optional[float] = Field( + default=None, + description="Percent of respondents reporting an increase over the last month.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, + ) + percent_reporting_decrease: Optional[float] = Field( + default=None, + description="Percent of respondents reporting a decrease over the last month.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, + ) + percent_reporting_no_change: Optional[float] = Field( + default=None, + description="Percent of respondents reporting no change over the last month.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, + ) diff --git a/openbb_platform/core/openbb_core/provider/standard_models/senior_loan_officer_survey.py b/openbb_platform/core/openbb_core/provider/standard_models/senior_loan_officer_survey.py new file mode 100644 index 00000000000..bb224ef8c8f --- /dev/null +++ b/openbb_platform/core/openbb_core/provider/standard_models/senior_loan_officer_survey.py @@ -0,0 +1,39 @@ +"""Senior Loan Officer Opinion Survey Standard Model.""" + +from datetime import ( + date as dateType, +) +from typing import Optional + +from pydantic import Field + +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) + + +class SeniorLoanOfficerSurveyQueryParams(QueryParams): + """Senior Loan Officer Opinion Survey Query.""" + + 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", ""), + ) + + +class SeniorLoanOfficerSurveyData(Data): + """Senior Loan Officer Opinion Survey Data.""" + + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + symbol: Optional[str] = Field( + default=None, description=DATA_DESCRIPTIONS.get("symbol", "") + ) + value: float = Field(description="Survey value.") + title: Optional[str] = Field(description="Survey title.") diff --git a/openbb_platform/core/openbb_core/provider/standard_models/survey_of_economic_conditions_chicago.py b/openbb_platform/core/openbb_core/provider/standard_models/survey_of_economic_conditions_chicago.py new file mode 100644 index 00000000000..c44b6a99468 --- /dev/null +++ b/openbb_platform/core/openbb_core/provider/standard_models/survey_of_economic_conditions_chicago.py @@ -0,0 +1,57 @@ +"""Survey Of Economic Conditions - Chicago - Standard Model.""" + +from datetime import ( + date as dateType, +) +from typing import Optional + +from pydantic import Field + +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) + + +class SurveyOfEconomicConditionsChicagoQueryParams(QueryParams): + """Survey Of Economic Conditions - Chicago - Query.""" + + 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", ""), + ) + + +class SurveyOfEconomicConditionsChicagoData(Data): + """Survey Of Economic Conditions - Chicago - Data.""" + + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + activity_index: Optional[float] = Field(default=None, description="Activity Index.") + one_year_outlook: Optional[float] = Field( + default=None, description="One Year Outlook Index." + ) + manufacturing_activity: Optional[float] = Field( + default=None, description="Manufacturing Activity Index." + ) + non_manufacturing_activity: Optional[float] = Field( + default=None, description="Non-Manufacturing Activity Index." + ) + capital_expenditures_expectations: Optional[float] = Field( + default=None, description="Capital Expenditures Expectations Index." + ) + hiring_expectations: Optional[float] = Field( + default=None, description="Hiring Expectations Index." + ) + current_hiring: Optional[float] = Field( + default=None, description="Current Hiring Index." + ) + labor_costs: Optional[float] = Field(default=None, description="Labor Costs Index.") + non_labor_costs: Optional[float] = Field( + default=None, description="Non-Labor Costs Index." + ) diff --git a/openbb_platform/core/openbb_core/provider/standard_models/university_of_michigan.py b/openbb_platform/core/openbb_core/provider/standard_models/university_of_michigan.py new file mode 100644 index 00000000000..140e698f7e9 --- /dev/null +++ b/openbb_platform/core/openbb_core/provider/standard_models/university_of_michigan.py @@ -0,0 +1,44 @@ +"""University Of Michigan Survey Standard Model.""" + +from datetime import ( + date as dateType, +) +from typing import Optional + +from pydantic import Field + +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) + + +class UofMichiganQueryParams(QueryParams): + """University Of Michigan Survey Query.""" + + 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", ""), + ) + + +class UofMichiganData(Data): + """University Of Michigan Survey Data.""" + + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + consumer_sentiment: Optional[float] = Field( + default=None, + description="Index of the results of the University of Michigan's monthly Survey of Consumers," + + " which is used to estimate future spending and saving. (1966:Q1=100).", + ) + inflation_expectation: Optional[float] = Field( + default=None, + description="Median expected price change next 12 months, Surveys of Consumers.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, + ) diff --git a/openbb_platform/extensions/economy/integration/test_economy_api.py b/openbb_platform/extensions/economy/integration/test_economy_api.py index 118c16c3cee..2f2df582175 100644 --- a/openbb_platform/extensions/economy/integration/test_economy_api.py +++ b/openbb_platform/extensions/economy/integration/test_economy_api.py @@ -815,3 +815,112 @@ def test_economy_retail_prices(params, headers): result = requests.get(url, headers=headers, timeout=10) assert isinstance(result, requests.Response) assert result.status_code == 200 + + +@parametrize( + "params", + [ + ( + { + "frequency": None, + "provider": "fred", + "start_date": "2022-01-01", + "end_date": "2024-04-01", + "transform": None, + "aggregation_method": None, + } + ), + ], +) +@pytest.mark.integration +def test_economy_survey_university_of_michigan(params, headers): + """Test the economy survey university_of_michigan endpoint.""" + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = ( + f"http://0.0.0.0:8000/api/v1/economy/survey/university_of_michigan?{query_str}" + ) + result = requests.get(url, headers=headers, timeout=10) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + +@parametrize( + "params", + [ + ( + { + "category": "auto", + "provider": "fred", + "start_date": "2022-01-01", + "end_date": "2024-04-01", + } + ), + ], +) +@pytest.mark.integration +def test_economy_survey_sloos(params, headers): + """Test the economy survey sloos endpoint.""" + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/economy/survey/sloos?{query_str}" + result = requests.get(url, headers=headers, timeout=10) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + +@parametrize( + "params", + [ + ( + { + "provider": "fred", + "start_date": "2024-01-01", + "end_date": "2024-04-01", + "transform": None, + "aggregation_method": None, + "frequency": None, + } + ), + ], +) +@pytest.mark.integration +def test_economy_survey_economic_conditions_chicago(params, headers): + """Test the economy survey economic_conditions_chicago endpoint.""" + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/economy/survey/economic_conditions_chicago?{query_str}" + result = requests.get(url, headers=headers, timeout=10) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + +@parametrize( + "params", + [ + ( + { + "provider": "fred", + "topic": "business_outlook,new_orders", + "start_date": "2024-01-01", + "end_date": "2024-04-01", + "transform": None, + "aggregation_method": None, + "frequency": None, + } + ), + ], +) +@pytest.mark.integration +def test_economy_survey_manufacturing_outlook_texas(params, headers): + """Test the economy survey manufacturing outlook texas endpoint""" + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/economy/survey/manufacturing_outlook_texas?{query_str}" + result = requests.get(url, headers=headers, timeout=10) + assert isinstance(result, requests.Response) + assert result.status_code == 200 diff --git a/openbb_platform/extensions/economy/integration/test_economy_python.py b/openbb_platform/extensions/economy/integration/test_economy_python.py index eae984cd3e1..2d826a9290b 100644 --- a/openbb_platform/extensions/economy/integration/test_economy_python.py +++ b/openbb_platform/extensions/economy/integration/test_economy_python.py @@ -771,3 +771,106 @@ def test_economy_retail_prices(params, obb): assert result assert isinstance(result, OBBject) assert len(result.results) > 0 + + +@parametrize( + "params", + [ + ( + { + "frequency": None, + "provider": "fred", + "start_date": "2022-01-01", + "end_date": "2024-04-01", + "transform": None, + "aggregation_method": None, + } + ), + ], +) +@pytest.mark.integration +def test_economy_survey_university_of_michigan(params, obb): + """Test the economy survey university_of_michigan endpoint""" + params = {p: v for p, v in params.items() if v} + + result = obb.economy.survey.university_of_michigan(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + + +@parametrize( + "params", + [ + ( + { + "category": "auto", + "provider": "fred", + "start_date": "2022-01-01", + "end_date": "2024-04-01", + } + ), + ], +) +@pytest.mark.integration +def test_economy_survey_sloos(params, obb): + """Test the economy survey sloos endpoint""" + params = {p: v for p, v in params.items() if v} + + result = obb.economy.survey.sloos(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + + +@parametrize( + "params", + [ + ( + { + "provider": "fred", + "start_date": "2024-01-01", + "end_date": "2024-04-01", + "transform": None, + "aggregation_method": None, + "frequency": None, + } + ), + ], +) +@pytest.mark.integration +def test_economy_survey_economic_conditions_chicago(params, obb): + """Test the economy survey economic conditions chicago endpoint""" + params = {p: v for p, v in params.items() if v} + + result = obb.economy.survey.economic_conditions_chicago(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + + +@parametrize( + "params", + [ + ( + { + "provider": "fred", + "topic": "business_outlook,new_orders", + "start_date": "2024-01-01", + "end_date": "2024-04-01", + "transform": None, + "aggregation_method": None, + "frequency": None, + } + ), + ], +) +@pytest.mark.integration +def test_economy_survey_manufacturing_outlook_texas(params, obb): + """Test the economy survey manufacturing outlook texas endpoint""" + params = {p: v for p, v in params.items() if v} + + result = obb.economy.survey.manufacturing_outlook_texas(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 diff --git a/openbb_platform/extensions/economy/openbb_economy/economy_router.py b/openbb_platform/extensions/economy/openbb_economy/economy_router.py index 4640defa77f..999b475282b 100644 --- a/openbb_platform/extensions/economy/openbb_economy/economy_router.py +++ b/openbb_platform/extensions/economy/openbb_economy/economy_router.py @@ -12,9 +12,11 @@ from openbb_core.app.query import Query from openbb_core.app.router import Router from openbb_economy.gdp.gdp_router import router as gdp_router +from openbb_economy.survey.survey_router import router as survey_router router = Router(prefix="", description="Economic data.") router.include_router(gdp_router) +router.include_router(survey_router) # pylint: disable=unused-argument diff --git a/openbb_platform/extensions/economy/openbb_economy/survey/survey_router.py b/openbb_platform/extensions/economy/openbb_economy/survey/survey_router.py new file mode 100644 index 00000000000..313999a463f --- /dev/null +++ b/openbb_platform/extensions/economy/openbb_economy/survey/survey_router.py @@ -0,0 +1,88 @@ +"""Economy Survey Router.""" + +from openbb_core.app.model.command_context import CommandContext +from openbb_core.app.model.example import APIEx +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.provider_interface import ( + ExtraParams, + ProviderChoices, + StandardParams, +) +from openbb_core.app.query import Query +from openbb_core.app.router import Router + +router = Router(prefix="/survey") + +# pylint: disable=unused-argument + + +@router.command( + model="SeniorLoanOfficerSurvey", + examples=[ + APIEx(parameters={"provider": "fred"}), + APIEx(parameters={"category": "credit_card", "provider": "fred"}), + ], +) +async def sloos( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get Senior Loan Officers Opinion Survey.""" + return await OBBject.from_query(Query(**locals())) + + +@router.command( + model="UniversityOfMichigan", + examples=[ + APIEx(parameters={"provider": "fred"}), + ], +) +async def university_of_michigan( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get University of Michigan Consumer Sentiment and Inflation Expectations Surveys.""" + return await OBBject.from_query(Query(**locals())) + + +@router.command( + model="SurveyOfEconomicConditionsChicago", + examples=[ + APIEx(parameters={"provider": "fred"}), + ], +) +async def economic_conditions_chicago( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get The Survey Of Economic Conditions For The Chicago Region.""" + return await OBBject.from_query(Query(**locals())) + + +@router.command( + model="ManufacturingOutlookTexas", + examples=[ + APIEx(parameters={"provider": "fred"}), + APIEx( + parameters={ + "topic": "business_outlook,new_orders", + "transform": "pc1", + "provider": "fred", + } + ), + ], +) +async def manufacturing_outlook_texas( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get The Manufacturing Outlook Survey For The Texas Region.""" + return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/openbb/assets/reference.json b/openbb_platform/openbb/assets/reference.json index efdab571fc0..4ef413a7eed 100644 --- a/openbb_platform/openbb/assets/reference.json +++ b/openbb_platform/openbb/assets/reference.json @@ -2831,6 +2831,657 @@ }, "model": "GdpReal" }, + "/economy/survey/sloos": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get Senior Loan Officers Opinion Survey.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.survey.sloos(provider='fred')\nobb.economy.survey.sloos(category=credit_card, provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true, + "choices": null + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true, + "choices": null + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: f, r, e, d.", + "default": null, + "optional": true + } + ], + "fred": [ + { + "name": "category", + "type": "Literal['spreads', 'consumer', 'auto', 'credit_card', 'firms', 'mortgage', 'commercial_real_estate', 'standards', 'demand', 'foreign_banks']", + "description": "Category of survey response.", + "default": "spreads", + "optional": true, + "choices": [ + "spreads", + "consumer", + "auto", + "credit_card", + "firms", + "mortgage", + "commercial_real_estate", + "standards", + "demand", + "foreign_banks" + ] + }, + { + "name": "transform", + "type": "Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']", + "description": "Transformation type None = No transformation chg = Change ch1 = Change from Year Ago pch = Percent Change pc1 = Percent Change from Year Ago pca = Compounded Annual Rate of Change cch = Continuously Compounded Rate of Change cca = Continuously Compounded Annual Rate of Change log = Natural Log", + "default": null, + "optional": true, + "choices": [ + "chg", + "ch1", + "pch", + "pc1", + "pca", + "cch", + "cca", + "log" + ] + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[SeniorLoanOfficerSurvey]", < |