summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanglewood <85772166+deeleeramone@users.noreply.github.com>2024-06-17 09:57:28 -0700
committerGitHub <noreply@github.com>2024-06-17 16:57:28 +0000
commit6445b974d787885d344376353fca097c12b0860e (patch)
tree0a22a12b5839910d4e91d87067517f7c00818f6e
parent5ec2db7643864b6a08d844126314377d35d812cc (diff)
[Feature] Adds Router Path For Economic Surveys (#6498)
* add router path for economic surveys * chicago economic conditions * reference.json * add manufacturing outlook survey for texas * test file name --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com>
-rw-r--r--openbb_platform/core/openbb_core/provider/standard_models/manufacturing_outlook_texas.py55
-rw-r--r--openbb_platform/core/openbb_core/provider/standard_models/senior_loan_officer_survey.py39
-rw-r--r--openbb_platform/core/openbb_core/provider/standard_models/survey_of_economic_conditions_chicago.py57
-rw-r--r--openbb_platform/core/openbb_core/provider/standard_models/university_of_michigan.py44
-rw-r--r--openbb_platform/extensions/economy/integration/test_economy_api.py109
-rw-r--r--openbb_platform/extensions/economy/integration/test_economy_python.py103
-rw-r--r--openbb_platform/extensions/economy/openbb_economy/economy_router.py2
-rw-r--r--openbb_platform/extensions/economy/openbb_economy/survey/survey_router.py88
-rw-r--r--openbb_platform/openbb/assets/reference.json651
-rw-r--r--openbb_platform/openbb/package/economy.py8
-rw-r--r--openbb_platform/providers/fred/openbb_fred/__init__.py14
-rw-r--r--openbb_platform/providers/fred/openbb_fred/models/manufacturing_outlook_texas.py431
-rw-r--r--openbb_platform/providers/fred/openbb_fred/models/senior_loan_officer_survey.py142
-rw-r--r--openbb_platform/providers/fred/openbb_fred/models/survey_of_economic_conditions_chicago.py159
-rw-r--r--openbb_platform/providers/fred/openbb_fred/models/university_of_michigan.py154
-rw-r--r--openbb_platform/providers/fred/tests/record/http/test_fred_fetchers/test_fred_manufacturing_outlook_texas_fetcher.yaml853
-rw-r--r--openbb_platform/providers/fred/tests/record/http/test_fred_fetchers/test_fred_mortgage_indices_fetcher.yaml (renamed from openbb_platform/providers/fred/tests/record/http/test_fred_fetchers/test_fred_bond_mortgage_fetcher.yaml)0
-rw-r--r--openbb_platform/providers/fred/tests/record/http/test_fred_fetchers/test_fred_senior_loan_officer_survey_fetcher.yaml208
-rw-r--r--openbb_platform/providers/fred/tests/record/http/test_fred_fetchers/test_fred_survey_of_economic_conditions_chicago_fetcher.yaml1137
-rw-r--r--openbb_platform/providers/fred/tests/record/http/test_fred_fetchers/test_fred_university_of_michigan_fetcher.yaml224
-rw-r--r--openbb_platform/providers/fred/tests/test_fred_fetchers.py69
21 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']",