mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-29 13:32:08 +00:00
Add OECD Provider for economy extension (#5534)
This commit is contained in:
3
openbb_platform/CONTRIBUTING.md
vendored
3
openbb_platform/CONTRIBUTING.md
vendored
@@ -254,10 +254,11 @@ Each `Fetcher` comes equipped with a `test` method that will ensure that it is i
|
||||
To create unit tests for your Fetchers, you can run the following command:
|
||||
|
||||
```bash
|
||||
python openbb_platform/providers/tests/utils/unit_test_generator.py
|
||||
python openbb_platform/providers/tests/utils/unit_tests_generator.py
|
||||
```
|
||||
|
||||
> Note that you should be running this file from the root of the repository.
|
||||
> Note that the `tests` folder must exist in order to generate the tests.
|
||||
|
||||
The automatic unit test generation will add unit tests for all the fetchers available in a given provider.
|
||||
|
||||
|
||||
@@ -378,3 +378,51 @@ def test_economy_fred_index(params, headers):
|
||||
result = requests.get(url, headers=headers, timeout=10)
|
||||
assert isinstance(result, requests.Response)
|
||||
assert result.status_code == 200
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"params",
|
||||
[({'units': 'usd', 'start_date': '2023-01-01', 'end_date': '2023-06-06'}),
|
||||
({'country': 'united_states', 'provider': 'oecd', 'units': 'usd', 'start_date': '2023-01-01', 'end_date': '2023-06-06'})],
|
||||
)
|
||||
@pytest.mark.integration
|
||||
def test_economy_gdpnom(params, headers):
|
||||
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/gdpnom?{query_str}"
|
||||
result = requests.get(url, headers=headers, timeout=10)
|
||||
assert isinstance(result, requests.Response)
|
||||
assert result.status_code == 200
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"params",
|
||||
[({'units': 'yoy', 'start_date': '2023-01-01', 'end_date': '2023-06-06'}),
|
||||
({'country': 'united_states', 'provider': 'oecd', 'units': 'yoy', 'start_date': '2023-01-01', 'end_date': '2023-06-06'})],
|
||||
)
|
||||
@pytest.mark.integration
|
||||
def test_economy_gdpreal(params, headers):
|
||||
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/gdpreal?{query_str}"
|
||||
result = requests.get(url, headers=headers, timeout=10)
|
||||
assert isinstance(result, requests.Response)
|
||||
assert result.status_code == 200
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"params",
|
||||
[({'period': 'annual', 'start_date': '2023-01-01', 'end_date': '2023-06-06', 'type': 'real'}),
|
||||
({'country': 'united_states', 'provider': 'oecd', 'period': 'annual', 'start_date': '2023-01-01', 'end_date': '2023-06-06', 'type': 'real'})],
|
||||
)
|
||||
@pytest.mark.integration
|
||||
def test_economy_gdpforecast(params, headers):
|
||||
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/gdpforecast?{query_str}"
|
||||
result = requests.get(url, headers=headers, timeout=10)
|
||||
assert isinstance(result, requests.Response)
|
||||
assert result.status_code == 200
|
||||
|
||||
@@ -361,3 +361,57 @@ def test_economy_fred_index(params):
|
||||
assert result
|
||||
assert isinstance(result, OBBject)
|
||||
assert len(result.results) > 0
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"params",
|
||||
[
|
||||
({'units': 'usd', 'start_date': '2023-01-01', 'end_date': '2023-06-06'}),
|
||||
({'country': 'united_states', 'provider': 'oecd', 'units': 'usd', 'start_date': '2023-01-01', 'end_date': '2023-06-06'}),
|
||||
|
||||
],
|
||||
)
|
||||
@pytest.mark.integration
|
||||
def test_economy_gdpnom(params, obb):
|
||||
params = {p: v for p, v in params.items() if v}
|
||||
|
||||
result = obb.economy.gdpnom(**params)
|
||||
assert result
|
||||
assert isinstance(result, OBBject)
|
||||
assert len(result.results) > 0
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"params",
|
||||
[
|
||||
({'units': 'yoy', 'start_date': '2023-01-01', 'end_date': '2023-06-06'}),
|
||||
({'country': 'united_states', 'provider': 'oecd', 'units': 'yoy', 'start_date': '2023-01-01', 'end_date': '2023-06-06'}),
|
||||
|
||||
],
|
||||
)
|
||||
@pytest.mark.integration
|
||||
def test_economy_gdpreal(params, obb):
|
||||
params = {p: v for p, v in params.items() if v}
|
||||
|
||||
result = obb.economy.gdpreal(**params)
|
||||
assert result
|
||||
assert isinstance(result, OBBject)
|
||||
assert len(result.results) > 0
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"params",
|
||||
[
|
||||
({'period': 'annual', 'start_date': '2023-01-01', 'end_date': '2023-06-06', 'type': 'real'}),
|
||||
({'country': 'united_states', 'provider': 'oecd', 'period': 'annual', 'start_date': '2023-01-01', 'end_date': '2023-06-06', 'type': 'real'}),
|
||||
|
||||
],
|
||||
)
|
||||
@pytest.mark.integration
|
||||
def test_economy_gdpforecast(params, obb):
|
||||
params = {p: v for p, v in params.items() if v}
|
||||
|
||||
result = obb.economy.gdpforecast(**params)
|
||||
assert result
|
||||
assert isinstance(result, OBBject)
|
||||
assert len(result.results) > 0
|
||||
|
||||
@@ -159,3 +159,36 @@ def fred_index(
|
||||
) -> OBBject[BaseModel]:
|
||||
"""Fred Historical."""
|
||||
return OBBject(results=Query(**locals()).execute())
|
||||
|
||||
|
||||
@router.command(model="GDPNom")
|
||||
def gdpnom(
|
||||
cc: CommandContext,
|
||||
provider_choices: ProviderChoices,
|
||||
standard_params: StandardParams,
|
||||
extra_params: ExtraParams,
|
||||
) -> OBBject[BaseModel]:
|
||||
"""GDP Data."""
|
||||
return OBBject(results=Query(**locals()).execute())
|
||||
|
||||
|
||||
@router.command(model="GDPReal")
|
||||
def gdpreal(
|
||||
cc: CommandContext,
|
||||
provider_choices: ProviderChoices,
|
||||
standard_params: StandardParams,
|
||||
extra_params: ExtraParams,
|
||||
) -> OBBject[BaseModel]:
|
||||
"""GDP Data."""
|
||||
return OBBject(results=Query(**locals()).execute())
|
||||
|
||||
|
||||
@router.command(model="GDPForecast")
|
||||
def gdpforecast(
|
||||
cc: CommandContext,
|
||||
provider_choices: ProviderChoices,
|
||||
standard_params: StandardParams,
|
||||
extra_params: ExtraParams,
|
||||
) -> OBBject[BaseModel]:
|
||||
"""GDP Data."""
|
||||
return OBBject(results=Query(**locals()).execute())
|
||||
|
||||
@@ -9,25 +9,39 @@ class Extensions(Container):
|
||||
"""
|
||||
Routers:
|
||||
/crypto
|
||||
/econometrics
|
||||
/economy
|
||||
/fixedincome
|
||||
/forex
|
||||
/futures
|
||||
/news
|
||||
/qa
|
||||
/stocks
|
||||
/ta
|
||||
|
||||
Extensions:
|
||||
- crypto@0.1.0a2
|
||||
- econometrics@0.1.0a2
|
||||
- economy@0.1.0a2
|
||||
- fixedincome@0.1.0a2
|
||||
- forex@0.1.0a2
|
||||
- futures@0.1.0a2
|
||||
- news@0.1.0a2
|
||||
- openbb_charting@0.1.0a2
|
||||
- qa@0.1.0a2
|
||||
- stocks@0.1.0a2
|
||||
- ta@0.1.0a2
|
||||
|
||||
- alpha_vantage@0.1.0a2
|
||||
- benzinga@0.1.0a2
|
||||
- cboe@0.1.0a2
|
||||
- fmp@0.1.0a2
|
||||
- fred@0.1.0a2
|
||||
- intrinio@0.1.0a2
|
||||
- polygon@0.1.0a2 """
|
||||
- oecd@0.1.0a2
|
||||
- polygon@0.1.0a2
|
||||
- quandl@0.1.0a2
|
||||
- yfinance@0.1.0a2 """
|
||||
# fmt: on
|
||||
def __repr__(self) -> str:
|
||||
return self.__doc__ or ""
|
||||
@@ -38,6 +52,12 @@ Extensions:
|
||||
|
||||
return crypto.ROUTER_crypto(command_runner=self._command_runner)
|
||||
|
||||
@property
|
||||
def econometrics(self): # route = "/econometrics"
|
||||
from . import econometrics
|
||||
|
||||
return econometrics.ROUTER_econometrics(command_runner=self._command_runner)
|
||||
|
||||
@property
|
||||
def economy(self): # route = "/economy"
|
||||
from . import economy
|
||||
@@ -56,14 +76,32 @@ Extensions:
|
||||
|
||||
return forex.ROUTER_forex(command_runner=self._command_runner)
|
||||
|
||||
@property
|
||||
def futures(self): # route = "/futures"
|
||||
from . import futures
|
||||
|
||||
return futures.ROUTER_futures(command_runner=self._command_runner)
|
||||
|
||||
@property
|
||||
def news(self): # route = "/news"
|
||||
from . import news
|
||||
|
||||
return news.ROUTER_news(command_runner=self._command_runner)
|
||||
|
||||
@property
|
||||
def qa(self): # route = "/qa"
|
||||
from . import qa
|
||||
|
||||
return qa.ROUTER_qa(command_runner=self._command_runner)
|
||||
|
||||
@property
|
||||
def stocks(self): # route = "/stocks"
|
||||
from . import stocks
|
||||
|
||||
return stocks.ROUTER_stocks(command_runner=self._command_runner)
|
||||
|
||||
@property
|
||||
def ta(self): # route = "/ta"
|
||||
from . import ta
|
||||
|
||||
return ta.ROUTER_ta(command_runner=self._command_runner)
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###
|
||||
|
||||
import datetime
|
||||
from typing import List, Literal, Union
|
||||
from typing import List, Literal, Optional, Union
|
||||
|
||||
import typing_extensions
|
||||
from openbb_core.app.model.custom_parameter import OpenBBCustomParameter
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
from openbb_core.app.static.container import Container
|
||||
from openbb_core.app.static.filters import filter_inputs
|
||||
from openbb_provider.abstract.data import Data
|
||||
from pydantic import validate_call
|
||||
from typing_extensions import Annotated
|
||||
|
||||
|
||||
class ROUTER_crypto(Container):
|
||||
@@ -23,23 +23,23 @@ class ROUTER_crypto(Container):
|
||||
@validate_call
|
||||
def load(
|
||||
self,
|
||||
symbol: typing_extensions.Annotated[
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBCustomParameter(description="Symbol to get data for."),
|
||||
],
|
||||
start_date: typing_extensions.Annotated[
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: typing_extensions.Annotated[
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
provider: Union[Literal["fmp", "polygon"], None] = None,
|
||||
provider: Optional[Literal["fmp", "polygon", "yfinance"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Crypto Historical Price.
|
||||
@@ -48,18 +48,18 @@ class ROUTER_crypto(Container):
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
start_date : Union[datetime.date, None]
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Union[datetime.date, None]
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
provider : Union[Literal['fmp', 'polygon'], None]
|
||||
provider : Optional[Literal['fmp', 'polygon', 'yfinance']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fmp' if there is
|
||||
no default.
|
||||
timeseries : Optional[Union[typing_extensions.Annotated[int, Ge(ge=0)]]]
|
||||
timeseries : Optional[Annotated[int, Ge(ge=0)]]
|
||||
Number of days to look back. (provider: fmp)
|
||||
interval : Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day']
|
||||
Data granularity. (provider: fmp)
|
||||
interval : Optional[Union[Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day'], Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]]
|
||||
Data granularity. (provider: fmp, yfinance)
|
||||
multiplier : int
|
||||
Multiplier of the timespan. (provider: polygon)
|
||||
timespan : Literal['minute', 'hour', 'day', 'week', 'month', 'quarter', 'year']
|
||||
@@ -70,13 +70,15 @@ class ROUTER_crypto(Container):
|
||||
The number of data entries to return. (provider: polygon)
|
||||
adjusted : bool
|
||||
Whether the data is adjusted. (provider: polygon)
|
||||
period : Optional[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]
|
||||
Period of the data to return. (provider: yfinance)
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[CryptoHistorical]]
|
||||
results : List[CryptoHistorical]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fmp', 'polygon'], None]
|
||||
provider : Optional[Literal['fmp', 'polygon', 'yfinance']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -99,21 +101,21 @@ class ROUTER_crypto(Container):
|
||||
The close price of the symbol.
|
||||
volume : float
|
||||
The volume of the symbol.
|
||||
vwap : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]]
|
||||
vwap : Optional[Annotated[float, Gt(gt=0)]]
|
||||
Volume Weighted Average Price of the symbol.
|
||||
adj_close : Optional[Union[float]]
|
||||
adj_close : Optional[float]
|
||||
Adjusted Close Price of the symbol. (provider: fmp)
|
||||
unadjusted_volume : Optional[Union[float]]
|
||||
unadjusted_volume : Optional[float]
|
||||
Unadjusted volume of the symbol. (provider: fmp)
|
||||
change : Optional[Union[float]]
|
||||
change : Optional[float]
|
||||
Change in the price of the symbol from the previous day. (provider: fmp)
|
||||
change_percent : Optional[Union[float]]
|
||||
change_percent : Optional[float]
|
||||
Change % in the price of the symbol. (provider: fmp)
|
||||
label : Optional[Union[str]]
|
||||
label : Optional[str]
|
||||
Human readable format of the date. (provider: fmp)
|
||||
change_over_time : Optional[Union[float]]
|
||||
change_over_time : Optional[float]
|
||||
Change % in the price of the symbol over a period of time. (provider: fmp)
|
||||
transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]]
|
||||
transactions : Optional[Annotated[int, Gt(gt=0)]]
|
||||
Number of transactions for the symbol in the time period. (provider: polygon)
|
||||
""" # noqa: E501
|
||||
|
||||
|
||||
514
openbb_platform/openbb/package/econometrics.py
Normal file
514
openbb_platform/openbb/package/econometrics.py
Normal file
@@ -0,0 +1,514 @@
|
||||
### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###
|
||||
|
||||
from typing import Dict, List, Literal, Union
|
||||
|
||||
import pandas
|
||||
from annotated_types import Gt
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
from openbb_core.app.static.container import Container
|
||||
from openbb_core.app.static.filters import filter_inputs
|
||||
from openbb_provider.abstract.data import Data
|
||||
from pydantic import validate_call
|
||||
from typing_extensions import Annotated
|
||||
|
||||
|
||||
class ROUTER_econometrics(Container):
|
||||
"""/econometrics
|
||||
bgot
|
||||
coint
|
||||
corr
|
||||
dwat
|
||||
granger
|
||||
ols
|
||||
ols_summary
|
||||
panelbols
|
||||
panelfd
|
||||
panelfmac
|
||||
panelols
|
||||
panelpols
|
||||
panelre
|
||||
unitroot
|
||||
"""
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return self.__doc__ or ""
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def bgot(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_columns: List[str],
|
||||
lags: Annotated[int, Gt(gt=0)] = 1,
|
||||
) -> OBBject[Data]:
|
||||
"""Perform Breusch-Godfrey Lagrange Multiplier tests for residual autocorrelation.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_columns: str
|
||||
List of columns to use as exogenous variables.
|
||||
lags: PositiveInt
|
||||
Number of lags to use in the test.
|
||||
Returns
|
||||
-------
|
||||
OBBject[Data]
|
||||
OBBject with the results being the score from the test.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_columns=x_columns,
|
||||
lags=lags,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/bgot",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def coint(
|
||||
self, data: Union[List[Data], pandas.DataFrame], columns: List[str]
|
||||
) -> OBBject[Data]:
|
||||
"""Show co-integration between two timeseries using the two step Engle-Granger test.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
columns: List[str]
|
||||
Data columns to check cointegration
|
||||
maxlag: PositiveInt
|
||||
Number of lags to use in the test.
|
||||
Returns
|
||||
-------
|
||||
OBBject[Data]
|
||||
OBBject with the results being the score from the test.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
columns=columns,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/coint",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def corr(self, data: Union[List[Data], pandas.DataFrame]) -> OBBject[List[Data]]:
|
||||
"""Get the corrlelation matrix of an input dataset.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : List[Data]
|
||||
Input dataset.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[List[Data]]
|
||||
Correlation matrix.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/corr",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def dwat(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_columns: List[str],
|
||||
) -> OBBject[Dict]:
|
||||
"""Perform Durbin-Watson test for autocorrelation
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_columns: str
|
||||
List of columns to use as exogenous variables.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[Data]
|
||||
OBBject with the results being the score from the test.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_columns=x_columns,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/dwat",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def granger(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_column: str,
|
||||
lag: Annotated[int, Gt(gt=0)] = 3,
|
||||
) -> OBBject[Data]:
|
||||
"""Perform Granger causality test to determine if X "causes" y.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_column: str
|
||||
Columns to use as exogenous variables.
|
||||
lag: PositiveInt
|
||||
Number of lags to use in the test.
|
||||
Returns
|
||||
-------
|
||||
OBBject[Data]
|
||||
OBBject with the results being the score from the test.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_column=x_column,
|
||||
lag=lag,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/granger",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def ols(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_columns: List[str],
|
||||
) -> OBBject[Dict]:
|
||||
"""Perform OLS regression. This returns the model and results objects from statsmodels.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_columns: str
|
||||
List of columns to use as exogenous variables.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[Dict]
|
||||
OBBject with the results being model and results objects.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_columns=x_columns,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/ols",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def ols_summary(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_columns: List[str],
|
||||
) -> OBBject[Data]:
|
||||
"""Perform OLS regression. This returns the summary object from statsmodels.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_columns: str
|
||||
List of columns to use as exogenous variables.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[Dict]
|
||||
OBBject with the results being summary object.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_columns=x_columns,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/ols_summary",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def panelbols(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_columns: List[str],
|
||||
) -> OBBject[Dict]:
|
||||
"""Perform a Between estimator regression on panel data
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_columns: str
|
||||
List of columns to use as exogenous variables.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[Dict]
|
||||
OBBject with the fit model returned
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_columns=x_columns,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/panelbols",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def panelfd(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_columns: List[str],
|
||||
) -> OBBject[Dict]:
|
||||
"""Perform a first-difference estimate for panel data
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_columns: str
|
||||
List of columns to use as exogenous variables.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[Dict]
|
||||
OBBject with the fit model returned
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_columns=x_columns,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/panelfd",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def panelfmac(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_columns: List[str],
|
||||
) -> OBBject[Dict]:
|
||||
"""Fama-MacBeth estimator for panel data
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_columns: str
|
||||
List of columns to use as exogenous variables.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[Dict]
|
||||
OBBject with the fit model returned
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_columns=x_columns,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/panelfmac",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def panelols(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_columns: List[str],
|
||||
) -> OBBject[Dict]:
|
||||
"""One- and two-way fixed effects estimator for panel data
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_columns: str
|
||||
List of columns to use as exogenous variables.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[Dict]
|
||||
OBBject with the fit model returned
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_columns=x_columns,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/panelols",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def panelpols(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_columns: List[str],
|
||||
) -> OBBject[Dict]:
|
||||
"""Perform a Pooled coefficvient estimator regression on panel data
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_columns: str
|
||||
List of columns to use as exogenous variables.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[Dict]
|
||||
OBBject with the fit model returned
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_columns=x_columns,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/panelpols",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def panelre(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
y_column: str,
|
||||
x_columns: List[str],
|
||||
) -> OBBject[Dict]:
|
||||
"""Perform One-way Random Effects model for panel data
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
y_column: str
|
||||
Target column.
|
||||
x_columns: str
|
||||
List of columns to use as exogenous variables.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[Dict]
|
||||
OBBject with the fit model returned
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
y_column=y_column,
|
||||
x_columns=x_columns,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/panelre",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def unitroot(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
column: str,
|
||||
regression: Literal["c", "ct", "ctt"] = "c",
|
||||
) -> OBBject[Data]:
|
||||
"""Perform Augmented Dickey-Fuller unit root test.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: List[Data]
|
||||
Input dataset.
|
||||
column: str
|
||||
Data columns to check unit root
|
||||
regression: str
|
||||
Regression type to use in the test. Either "c" for constant only, "ct" for constant and trend, or "ctt" for
|
||||
constant, trend, and trend-squared.
|
||||
Returns
|
||||
-------
|
||||
OBBject[Data]
|
||||
OBBject with the results being the score from the test.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
column=column,
|
||||
regression=regression,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/econometrics/unitroot",
|
||||
**inputs,
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,17 +1,27 @@
|
||||
{
|
||||
"openbb_core_extension": [
|
||||
"crypto@0.1.0a2",
|
||||
"econometrics@0.1.0a2",
|
||||
"economy@0.1.0a2",
|
||||
"fixedincome@0.1.0a2",
|
||||
"forex@0.1.0a2",
|
||||
"futures@0.1.0a2",
|
||||
"news@0.1.0a2",
|
||||
"stocks@0.1.0a2"
|
||||
"openbb_charting@0.1.0a2",
|
||||
"qa@0.1.0a2",
|
||||
"stocks@0.1.0a2",
|
||||
"ta@0.1.0a2"
|
||||
],
|
||||
"openbb_provider_extension": [
|
||||
"alpha_vantage@0.1.0a2",
|
||||
"benzinga@0.1.0a2",
|
||||
"cboe@0.1.0a2",
|
||||
"fmp@0.1.0a2",
|
||||
"fred@0.1.0a2",
|
||||
"intrinio@0.1.0a2",
|
||||
"polygon@0.1.0a2"
|
||||
"oecd@0.1.0a2",
|
||||
"polygon@0.1.0a2",
|
||||
"quandl@0.1.0a2",
|
||||
"yfinance@0.1.0a2"
|
||||
]
|
||||
}
|
||||
@@ -1,15 +1,15 @@
|
||||
### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###
|
||||
|
||||
import datetime
|
||||
from typing import List, Literal, Union
|
||||
from typing import List, Literal, Optional, Union
|
||||
|
||||
import typing_extensions
|
||||
from openbb_core.app.model.custom_parameter import OpenBBCustomParameter
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
from openbb_core.app.static.container import Container
|
||||
from openbb_core.app.static.filters import filter_inputs
|
||||
from openbb_provider.abstract.data import Data
|
||||
from pydantic import validate_call
|
||||
from typing_extensions import Annotated
|
||||
|
||||
|
||||
class ROUTER_fixedincome(Container):
|
||||
@@ -31,19 +31,19 @@ class ROUTER_fixedincome(Container):
|
||||
@validate_call
|
||||
def ameribor(
|
||||
self,
|
||||
start_date: typing_extensions.Annotated[
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: typing_extensions.Annotated[
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
provider: Union[Literal["fred"], None] = None,
|
||||
provider: Optional[Literal["fred"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""
|
||||
@@ -53,11 +53,11 @@ class ROUTER_fixedincome(Container):
|
||||
|
||||
Parameters
|
||||
----------
|
||||
start_date : Union[datetime.date, None]
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Union[datetime.date, None]
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fred' if there is
|
||||
no default.
|
||||
@@ -67,9 +67,9 @@ class ROUTER_fixedincome(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[AMERIBOR]]
|
||||
results : List[AMERIBOR]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -82,7 +82,7 @@ class ROUTER_fixedincome(Container):
|
||||
--------
|
||||
date : date
|
||||
The date of the data.
|
||||
rate : Union[float]
|
||||
rate : Optional[float]
|
||||
AMERIBOR rate.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
@@ -104,19 +104,19 @@ class ROUTER_fixedincome(Container):
|
||||
@validate_call
|
||||
def estr(
|
||||
self,
|
||||
start_date: typing_extensions.Annotated[
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: typing_extensions.Annotated[
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
provider: Union[Literal["fred"], None] = None,
|
||||
provider: Optional[Literal["fred"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""
|
||||
@@ -127,11 +127,11 @@ class ROUTER_fixedincome(Container):
|
||||
|
||||
Parameters
|
||||
----------
|
||||
start_date : Union[datetime.date, None]
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Union[datetime.date, None]
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fred' if there is
|
||||
no default.
|
||||
@@ -141,9 +141,9 @@ class ROUTER_fixedincome(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[ESTR]]
|
||||
results : List[ESTR]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -156,7 +156,7 @@ class ROUTER_fixedincome(Container):
|
||||
----
|
||||
date : date
|
||||
The date of the data.
|
||||
rate : Union[float]
|
||||
rate : Optional[float]
|
||||
ESTR rate.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
@@ -178,19 +178,19 @@ class ROUTER_fixedincome(Container):
|
||||
@validate_call
|
||||
def fed(
|
||||
self,
|
||||
start_date: typing_extensions.Annotated[
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: typing_extensions.Annotated[
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
provider: Union[Literal["fred"], None] = None,
|
||||
provider: Optional[Literal["fred"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""
|
||||
@@ -201,11 +201,11 @@ class ROUTER_fixedincome(Container):
|
||||
|
||||
Parameters
|
||||
----------
|
||||
start_date : Union[datetime.date, None]
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Union[datetime.date, None]
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fred' if there is
|
||||
no default.
|
||||
@@ -215,9 +215,9 @@ class ROUTER_fixedincome(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[FEDFUNDS]]
|
||||
results : List[FEDFUNDS]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -230,7 +230,7 @@ class ROUTER_fixedincome(Container):
|
||||
--------
|
||||
date : date
|
||||
The date of the data.
|
||||
rate : Union[float]
|
||||
rate : Optional[float]
|
||||
FED rate.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
@@ -252,19 +252,19 @@ class ROUTER_fixedincome(Container):
|
||||
@validate_call
|
||||
def iorb(
|
||||
self,
|
||||
start_date: typing_extensions.Annotated[
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: typing_extensions.Annotated[
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
provider: Union[Literal["fred"], None] = None,
|
||||
provider: Optional[Literal["fred"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""
|
||||
@@ -275,11 +275,11 @@ class ROUTER_fixedincome(Container):
|
||||
|
||||
Parameters
|
||||
----------
|
||||
start_date : Union[datetime.date, None]
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Union[datetime.date, None]
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fred' if there is
|
||||
no default.
|
||||
@@ -287,9 +287,9 @@ class ROUTER_fixedincome(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[IORB]]
|
||||
results : List[IORB]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -302,7 +302,7 @@ class ROUTER_fixedincome(Container):
|
||||
----
|
||||
date : date
|
||||
The date of the data.
|
||||
rate : Union[float]
|
||||
rate : Optional[float]
|
||||
IORB rate.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
@@ -323,7 +323,7 @@ class ROUTER_fixedincome(Container):
|
||||
|
||||
@validate_call
|
||||
def projections(
|
||||
self, provider: Union[Literal["fred"], None] = None, **kwargs
|
||||
self, provider: Optional[Literal["fred"]] = None, **kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""
|
||||
Get Effective Federal Funds Rate data. A bank rate is the interest rate a nation's central bank charges to its
|
||||
@@ -333,7 +333,7 @@ class ROUTER_fixedincome(Container):
|
||||
|
||||
Parameters
|
||||
----------
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fred' if there is
|
||||
no default.
|
||||
@@ -343,9 +343,9 @@ class ROUTER_fixedincome(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[PROJECTIONS]]
|
||||
results : List[PROJECTIONS]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -358,19 +358,19 @@ class ROUTER_fixedincome(Container):
|
||||
-----------
|
||||
date : date
|
||||
The date of the data.
|
||||
range_high : Union[float]
|
||||
range_high : Optional[float]
|
||||
High projection of rates.
|
||||
central_tendency_high : Union[float]
|
||||
central_tendency_high : Optional[float]
|
||||
Central tendency of high projection of rates.
|
||||
median : Union[float]
|
||||
median : Optional[float]
|
||||
Median projection of rates.
|
||||
range_midpoint : Union[float]
|
||||
range_midpoint : Optional[float]
|
||||
Midpoint projection of rates.
|
||||
central_tendency_midpoint : Union[float]
|
||||
central_tendency_midpoint : Optional[float]
|
||||
Central tendency of midpoint projection of rates.
|
||||
range_low : Union[float]
|
||||
range_low : Optional[float]
|
||||
Low projection of rates.
|
||||
central_tendency_low : Union[float]
|
||||
central_tendency_low : Optional[float]
|
||||
Central tendency of low projection of rates.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
@@ -389,30 +389,30 @@ class ROUTER_fixedincome(Container):
|
||||
@validate_call
|
||||
def sofr(
|
||||
self,
|
||||
start_date: typing_extensions.Annotated[
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: typing_extensions.Annotated[
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
provider: Union[Literal["fred"], None] = None,
|
||||
provider: Optional[Literal["fred"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Get United States yield curve.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
start_date : Union[datetime.date, None]
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Union[datetime.date, None]
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fred' if there is
|
||||
no default.
|
||||
@@ -422,9 +422,9 @@ class ROUTER_fixedincome(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[SOFR]]
|
||||
results : List[SOFR]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -437,7 +437,7 @@ class ROUTER_fixedincome(Container):
|
||||
----
|
||||
date : date
|
||||
The date of the data.
|
||||
rate : Union[float]
|
||||
rate : Optional[float]
|
||||
SOFR rate.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
@@ -459,19 +459,19 @@ class ROUTER_fixedincome(Container):
|
||||
@validate_call
|
||||
def sonia(
|
||||
self,
|
||||
start_date: typing_extensions.Annotated[
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: typing_extensions.Annotated[
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
provider: Union[Literal["fred"], None] = None,
|
||||
provider: Optional[Literal["fred"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""
|
||||
@@ -481,11 +481,11 @@ class ROUTER_fixedincome(Container):
|
||||
|
||||
Parameters
|
||||
----------
|
||||
start_date : Union[datetime.date, None]
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Union[datetime.date, None]
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fred' if there is
|
||||
no default.
|
||||
@@ -495,9 +495,9 @@ class ROUTER_fixedincome(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[SONIA]]
|
||||
results : List[SONIA]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -510,7 +510,7 @@ class ROUTER_fixedincome(Container):
|
||||
-----
|
||||
date : date
|
||||
The date of the data.
|
||||
rate : Union[float]
|
||||
rate : Optional[float]
|
||||
SONIA rate.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
@@ -532,30 +532,30 @@ class ROUTER_fixedincome(Container):
|
||||
@validate_call
|
||||
def treasury(
|
||||
self,
|
||||
start_date: typing_extensions.Annotated[
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: typing_extensions.Annotated[
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
provider: Union[Literal["fmp"], None] = None,
|
||||
provider: Optional[Literal["fmp"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Get treasury rates.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
start_date : Union[datetime.date, None]
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Union[datetime.date, None]
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
provider : Union[Literal['fmp'], None]
|
||||
provider : Optional[Literal['fmp']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fmp' if there is
|
||||
no default.
|
||||
@@ -563,9 +563,9 @@ class ROUTER_fixedincome(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[TreasuryRates]]
|
||||
results : List[TreasuryRates]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fmp'], None]
|
||||
provider : Optional[Literal['fmp']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -622,28 +622,28 @@ class ROUTER_fixedincome(Container):
|
||||
@validate_call
|
||||
def ycrv(
|
||||
self,
|
||||
date: typing_extensions.Annotated[
|
||||
Union[datetime.date, None],
|
||||
date: Annotated[
|
||||
Optional[datetime.date],
|
||||
OpenBBCustomParameter(
|
||||
description="Date to get Yield Curve data. Defaults to the most recent FRED entry."
|
||||
),
|
||||
] = None,
|
||||
inflation_adjusted: typing_extensions.Annotated[
|
||||
Union[bool, None],
|
||||
inflation_adjusted: Annotated[
|
||||
Optional[bool],
|
||||
OpenBBCustomParameter(description="Get inflation adjusted rates."),
|
||||
] = False,
|
||||
provider: Union[Literal["fred"], None] = None,
|
||||
provider: Optional[Literal["fred"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Get United States yield curve.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
date : Union[datetime.date, None]
|
||||
date : Optional[datetime.date]
|
||||
Date to get Yield Curve data. Defaults to the most recent FRED entry.
|
||||
inflation_adjusted : Union[bool, None]
|
||||
inflation_adjusted : Optional[bool]
|
||||
Get inflation adjusted rates.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fred' if there is
|
||||
no default.
|
||||
@@ -651,9 +651,9 @@ class ROUTER_fixedincome(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[USYieldCurve]]
|
||||
results : List[USYieldCurve]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fred'], None]
|
||||
provider : Optional[Literal['fred']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###
|
||||
|
||||
import datetime
|
||||
from typing import List, Literal, Union
|
||||
from typing import List, Literal, Optional, Union
|
||||
|
||||
import typing_extensions
|
||||
from openbb_core.app.model.custom_parameter import OpenBBCustomParameter
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
from openbb_core.app.static.container import Container
|
||||
from openbb_core.app.static.filters import filter_inputs
|
||||
from openbb_provider.abstract.data import Data
|
||||
from pydantic import validate_call
|
||||
from typing_extensions import Annotated
|
||||
|
||||
|
||||
class ROUTER_forex(Container):
|
||||
@@ -24,23 +24,23 @@ class ROUTER_forex(Container):
|
||||
@validate_call
|
||||
def load(
|
||||
self,
|
||||
symbol: typing_extensions.Annotated[
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBCustomParameter(description="Symbol to get data for."),
|
||||
],
|
||||
start_date: typing_extensions.Annotated[
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: typing_extensions.Annotated[
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
provider: Union[Literal["fmp", "polygon"], None] = None,
|
||||
provider: Optional[Literal["fmp", "polygon", "yfinance"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Forex Intraday Price.
|
||||
@@ -49,16 +49,16 @@ class ROUTER_forex(Container):
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
start_date : Union[datetime.date, None]
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Union[datetime.date, None]
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
provider : Union[Literal['fmp', 'polygon'], None]
|
||||
provider : Optional[Literal['fmp', 'polygon', 'yfinance']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fmp' if there is
|
||||
no default.
|
||||
interval : Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day']
|
||||
Data granularity. (provider: fmp)
|
||||
interval : Optional[Union[Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day'], Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]]
|
||||
Data granularity. (provider: fmp, yfinance)
|
||||
multiplier : int
|
||||
Multiplier of the timespan. (provider: polygon)
|
||||
timespan : Literal['minute', 'hour', 'day', 'week', 'month', 'quarter', 'year']
|
||||
@@ -69,13 +69,15 @@ class ROUTER_forex(Container):
|
||||
The number of data entries to return. (provider: polygon)
|
||||
adjusted : bool
|
||||
Whether the data is adjusted. (provider: polygon)
|
||||
period : Optional[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]
|
||||
Period of the data to return. (provider: yfinance)
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[ForexHistorical]]
|
||||
results : List[ForexHistorical]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fmp', 'polygon'], None]
|
||||
provider : Optional[Literal['fmp', 'polygon', 'yfinance']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -98,21 +100,21 @@ class ROUTER_forex(Container):
|
||||
The close price of the symbol.
|
||||
volume : float
|
||||
The volume of the symbol.
|
||||
vwap : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]]
|
||||
vwap : Optional[Annotated[float, Gt(gt=0)]]
|
||||
Volume Weighted Average Price of the symbol.
|
||||
adj_close : Optional[Union[float]]
|
||||
adj_close : Optional[float]
|
||||
Adjusted Close Price of the symbol. (provider: fmp)
|
||||
unadjusted_volume : Optional[Union[float]]
|
||||
unadjusted_volume : Optional[float]
|
||||
Unadjusted volume of the symbol. (provider: fmp)
|
||||
change : Optional[Union[float]]
|
||||
change : Optional[float]
|
||||
Change in the price of the symbol from the previous day. (provider: fmp)
|
||||
change_percent : Optional[Union[float]]
|
||||
change_percent : Optional[float]
|
||||
Change % in the price of the symbol. (provider: fmp)
|
||||
label : Optional[Union[str]]
|
||||
label : Optional[str]
|
||||
Human readable format of the date. (provider: fmp)
|
||||
change_over_time : Optional[Union[float]]
|
||||
change_over_time : Optional[float]
|
||||
Change % in the price of the symbol over a period of time. (provider: fmp)
|
||||
transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]]
|
||||
transactions : Optional[Annotated[int, Gt(gt=0)]]
|
||||
Number of transactions for the symbol in the time period. (provider: polygon)
|
||||
""" # noqa: E501
|
||||
|
||||
@@ -135,39 +137,37 @@ class ROUTER_forex(Container):
|
||||
|
||||
@validate_call
|
||||
def pairs(
|
||||
self,
|
||||
provider: Union[Literal["fmp", "intrinio", "polygon"], None] = None,
|
||||
**kwargs
|
||||
self, provider: Optional[Literal["fmp", "intrinio", "polygon"]] = None, **kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Forex Available Pairs.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
provider : Union[Literal['fmp', 'intrinio', 'polygon'], None]
|
||||
provider : Optional[Literal['fmp', 'intrinio', 'polygon']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fmp' if there is
|
||||
no default.
|
||||
symbol : Optional[Union[str]]
|
||||
symbol : Optional[str]
|
||||
Symbol of the pair to search. (provider: polygon)
|
||||
date : Optional[Union[datetime.date]]
|
||||
date : Optional[datetime.date]
|
||||
A specific date to get data for. (provider: polygon)
|
||||
search : Optional[Union[str]]
|
||||
search : Optional[str]
|
||||
Search for terms within the ticker and/or company name. (provider: polygon)
|
||||
active : Optional[Union[bool]]
|
||||
active : Optional[bool]
|
||||
Specify if the tickers returned should be actively traded on the queried date. (provider: polygon)
|
||||
order : Optional[Union[Literal['asc', 'desc']]]
|
||||
order : Optional[Literal['asc', 'desc']]
|
||||
Order data by ascending or descending. (provider: polygon)
|
||||
sort : Optional[Union[Literal['ticker', 'name', 'market', 'locale', 'currency_symbol', 'currency_name', 'base_currency_symbol', 'base_currency_name', 'last_updated_utc', 'delisted_utc']]]
|
||||
sort : Optional[Literal['ticker', 'name', 'market', 'locale', 'currency_symbol', 'currency_name', 'base_currency_symbol', 'base_currency_name', 'last_updated_utc', 'delisted_utc']]
|
||||
Sort field used for ordering. (provider: polygon)
|
||||
limit : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]]
|
||||
limit : Optional[Annotated[int, Gt(gt=0)]]
|
||||
The number of data entries to return. (provider: polygon)
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[ForexPairs]]
|
||||
results : List[ForexPairs]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fmp', 'intrinio', 'polygon'], None]
|
||||
provider : Optional[Literal['fmp', 'intrinio', 'polygon']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -180,35 +180,35 @@ class ROUTER_forex(Container):
|
||||
----------
|
||||
name : str
|
||||
Name of the currency pair.
|
||||
symbol : Optional[Union[str]]
|
||||
symbol : Optional[str]
|
||||
Symbol of the currency pair. (provider: fmp)
|
||||
currency : Optional[Union[str]]
|
||||
currency : Optional[str]
|
||||
Base currency of the currency pair. (provider: fmp)
|
||||
stock_exchange : Optional[Union[str]]
|
||||
stock_exchange : Optional[str]
|
||||
Stock exchange of the currency pair. (provider: fmp)
|
||||
exchange_short_name : Optional[Union[str]]
|
||||
exchange_short_name : Optional[str]
|
||||
Short name of the stock exchange of the currency pair. (provider: fmp)
|
||||
code : Optional[Union[str]]
|
||||
code : Optional[str]
|
||||
Code of the currency pair. (provider: intrinio)
|
||||
base_currency : Optional[Union[str]]
|
||||
base_currency : Optional[str]
|
||||
ISO 4217 currency code of the base currency. (provider: intrinio)
|
||||
quote_currency : Optional[Union[str]]
|
||||
quote_currency : Optional[str]
|
||||
ISO 4217 currency code of the quote currency. (provider: intrinio)
|
||||
market : Optional[Union[str]]
|
||||
market : Optional[str]
|
||||
Name of the trading market. Always 'fx'. (provider: polygon)
|
||||
locale : Optional[Union[str]]
|
||||
locale : Optional[str]
|
||||
Locale of the currency pair. (provider: polygon)
|
||||
currency_symbol : Optional[Union[str]]
|
||||
currency_symbol : Optional[str]
|
||||
The symbol of the quote currency. (provider: polygon)
|
||||
currency_name : Optional[Union[str]]
|
||||
currency_name : Optional[str]
|
||||
Name of the quote currency. (provider: polygon)
|
||||
base_currency_symbol : Optional[Union[str]]
|
||||
base_currency_symbol : Optional[str]
|
||||
The symbol of the base currency. (provider: polygon)
|
||||
base_currency_name : Optional[Union[str]]
|
||||
base_currency_name : Optional[str]
|
||||
Name of the base currency. (provider: polygon)
|
||||
last_updated_utc : Optional[Union[datetime]]
|
||||
last_updated_utc : Optional[datetime]
|
||||
The last updated timestamp in UTC. (provider: polygon)
|
||||
delisted_utc : Optional[Union[datetime]]
|
||||
delisted_utc : Optional[datetime]
|
||||
The delisted timestamp in UTC. (provider: polygon)""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
|
||||
188
openbb_platform/openbb/package/futures.py
Normal file
188
openbb_platform/openbb/package/futures.py
Normal file
@@ -0,0 +1,188 @@
|
||||
### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###
|
||||
|
||||
import datetime
|
||||
from typing import List, Literal, Optional, Union
|
||||
|
||||
from openbb_core.app.model.custom_parameter import OpenBBCustomParameter
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
from openbb_core.app.static.container import Container
|
||||
from openbb_core.app.static.filters import filter_inputs
|
||||
from openbb_provider.abstract.data import Data
|
||||
from pydantic import validate_call
|
||||
from typing_extensions import Annotated
|
||||
|
||||
|
||||
class ROUTER_futures(Container):
|
||||
"""/futures
|
||||
curve
|
||||
load
|
||||
"""
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return self.__doc__ or ""
|
||||
|
||||
@validate_call
|
||||
def curve(
|
||||
self,
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBCustomParameter(description="Symbol to get data for."),
|
||||
],
|
||||
date: Annotated[
|
||||
Optional[datetime.date],
|
||||
OpenBBCustomParameter(description="Historical date to search curve for."),
|
||||
] = None,
|
||||
provider: Optional[Literal["cboe", "yfinance"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Futures Historical Price.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
date : Optional[datetime.date]
|
||||
Historical date to search curve for.
|
||||
provider : Optional[Literal['cboe', 'yfinance']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'cboe' if there is
|
||||
no default.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : List[FuturesCurve]
|
||||
Serializable results.
|
||||
provider : Optional[Literal['cboe', 'yfinance']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
chart : Optional[Chart]
|
||||
Chart object.
|
||||
extra: Dict[str, Any]
|
||||
Extra info.
|
||||
|
||||
FuturesCurve
|
||||
------------
|
||||
expiration : str
|
||||
Futures expiration month.
|
||||
price : Optional[float]
|
||||
The close price of the symbol.
|
||||
symbol : Optional[str]
|
||||
The trading symbol for the tenor of future. (provider: cboe)""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
provider_choices={
|
||||
"provider": provider,
|
||||
},
|
||||
standard_params={
|
||||
"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol,
|
||||
"date": date,
|
||||
},
|
||||
extra_params=kwargs,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/futures/curve",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call
|
||||
def load(
|
||||
self,
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBCustomParameter(description="Symbol to get data for."),
|
||||
],
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
expiration: Annotated[
|
||||
Optional[str],
|
||||
OpenBBCustomParameter(description="Future expiry date with format YYYY-MM"),
|
||||
] = None,
|
||||
provider: Optional[Literal["yfinance"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Futures Historical Price.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
expiration : Optional[str]
|
||||
Future expiry date with format YYYY-MM
|
||||
provider : Optional[Literal['yfinance']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'yfinance' if there is
|
||||
no default.
|
||||
interval : Optional[Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]
|
||||
Data granularity. (provider: yfinance)
|
||||
period : Optional[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]
|
||||
Period of the data to return. (provider: yfinance)
|
||||
prepost : bool
|
||||
Include Pre and Post market data. (provider: yfinance)
|
||||
adjust : bool
|
||||
Adjust all the data automatically. (provider: yfinance)
|
||||
back_adjust : bool
|
||||
Back-adjusted data to mimic true historical prices. (provider: yfinance)
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : List[FuturesHistorical]
|
||||
Serializable results.
|
||||
provider : Optional[Literal['yfinance']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
chart : Optional[Chart]
|
||||
Chart object.
|
||||
extra: Dict[str, Any]
|
||||
Extra info.
|
||||
|
||||
FuturesHistorical
|
||||
-----------------
|
||||
date : datetime
|
||||
The date of the data.
|
||||
open : float
|
||||
The open price of the symbol.
|
||||
high : float
|
||||
The high price of the symbol.
|
||||
low : float
|
||||
The low price of the symbol.
|
||||
close : float
|
||||
The close price of the symbol.
|
||||
volume : float
|
||||
The volume of the symbol.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
provider_choices={
|
||||
"provider": provider,
|
||||
},
|
||||
standard_params={
|
||||
"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol,
|
||||
"start_date": start_date,
|
||||
"end_date": end_date,
|
||||
"expiration": expiration,
|
||||
},
|
||||
extra_params=kwargs,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/futures/load",
|
||||
**inputs,
|
||||
)
|
||||
70
openbb_platform/openbb/package/module_map.json
vendored
70
openbb_platform/openbb/package/module_map.json
vendored
@@ -2,13 +2,38 @@
|
||||
"__extensions__": "",
|
||||
"crypto": "/crypto",
|
||||
"crypto_load": "/crypto/load",
|
||||
"econometrics": "/econometrics",
|
||||
"econometrics_bgot": "/econometrics/bgot",
|
||||
"econometrics_coint": "/econometrics/coint",
|
||||
"econometrics_corr": "/econometrics/corr",
|
||||
"econometrics_dwat": "/econometrics/dwat",
|
||||
"econometrics_granger": "/econometrics/granger",
|
||||
"econometrics_ols": "/econometrics/ols",
|
||||
"econometrics_ols_summary": "/econometrics/ols_summary",
|
||||
"econometrics_panelbols": "/econometrics/panelbols",
|
||||
"econometrics_panelfd": "/econometrics/panelfd",
|
||||
"econometrics_panelfmac": "/econometrics/panelfmac",
|
||||
"econometrics_panelols": "/econometrics/panelols",
|
||||
"econometrics_panelpols": "/econometrics/panelpols",
|
||||
"econometrics_panelre": "/econometrics/panelre",
|
||||
"econometrics_unitroot": "/econometrics/unitroot",
|
||||
"economy": "/economy",
|
||||
"economy_available_indices": "/economy/available_indices",
|
||||
"economy_const": "/economy/const",
|
||||
"economy_cot": "/economy/cot",
|
||||
"economy_cot_search": "/economy/cot_search",
|
||||
"economy_cpi": "/economy/cpi",
|
||||
"economy_european_index": "/economy/european_index",
|
||||
"economy_european_index_constituents": "/economy/european_index_constituents",
|
||||
"economy_fred_index": "/economy/fred_index",
|
||||
"economy_gdpforecast": "/economy/gdpforecast",
|
||||
"economy_gdpnom": "/economy/gdpnom",
|
||||
"economy_gdpreal": "/economy/gdpreal",
|
||||
"economy_index": "/economy/index",
|
||||
"economy_index_search": "/economy/index_search",
|
||||
"economy_index_snapshots": "/economy/index_snapshots",
|
||||
"economy_risk": "/economy/risk",
|
||||
"economy_sp500_multiples": "/economy/sp500_multiples",
|
||||
"fixedincome": "/fixedincome",
|
||||
"fixedincome_ameribor": "/fixedincome/ameribor",
|
||||
"fixedincome_estr": "/fixedincome/estr",
|
||||
@@ -22,8 +47,22 @@
|
||||
"forex": "/forex",
|
||||
"forex_load": "/forex/load",
|
||||
"forex_pairs": "/forex/pairs",
|
||||
"futures": "/futures",
|
||||
"futures_curve": "/futures/curve",
|
||||
"futures_load": "/futures/load",
|
||||
"news": "/news",
|
||||
"news_globalnews": "/news/globalnews",
|
||||
"qa": "/qa",
|
||||
"qa_capm": "/qa/capm",
|
||||
"qa_kurtosis": "/qa/kurtosis",
|
||||
"qa_normality": "/qa/normality",
|
||||
"qa_om": "/qa/om",
|
||||
"qa_quantile": "/qa/quantile",
|
||||
"qa_sh": "/qa/sh",
|
||||
"qa_skew": "/qa/skew",
|
||||
"qa_so": "/qa/so",
|
||||
"qa_summary": "/qa/summary",
|
||||
"qa_unitroot": "/qa/unitroot",
|
||||
"stocks": "/stocks",
|
||||
"stocks_ca": "/stocks/ca",
|
||||
"stocks_ca_peers": "/stocks/ca/peers",
|
||||
@@ -56,10 +95,39 @@
|
||||
"stocks_fa_shrs": "/stocks/fa/shrs",
|
||||
"stocks_fa_split": "/stocks/fa/split",
|
||||
"stocks_fa_transcript": "/stocks/fa/transcript",
|
||||
"stocks_info": "/stocks/info",
|
||||
"stocks_load": "/stocks/load",
|
||||
"stocks_multiples": "/stocks/multiples",
|
||||
"stocks_news": "/stocks/news",
|
||||
"stocks_options": "/stocks/options",
|
||||
"stocks_options_chains": "/stocks/options/chains",
|
||||
"stocks_quote": "/stocks/quote"
|
||||
"stocks_quote": "/stocks/quote",
|
||||
"stocks_search": "/stocks/search",
|
||||
"ta": "/ta",
|
||||
"ta_ad": "/ta/ad",
|
||||
"ta_adosc": "/ta/adosc",
|
||||
"ta_adx": "/ta/adx",
|
||||
"ta_aroon": "/ta/aroon",
|
||||
"ta_atr": "/ta/atr",
|
||||
"ta_bbands": "/ta/bbands",
|
||||
"ta_cci": "/ta/cci",
|
||||
"ta_cg": "/ta/cg",
|
||||
"ta_clenow": "/ta/clenow",
|
||||
"ta_cones": "/ta/cones",
|
||||
"ta_demark": "/ta/demark",
|
||||
"ta_donchian": "/ta/donchian",
|
||||
"ta_ema": "/ta/ema",
|
||||
"ta_fib": "/ta/fib",
|
||||
"ta_fisher": "/ta/fisher",
|
||||
"ta_hma": "/ta/hma",
|
||||
"ta_ichimoku": "/ta/ichimoku",
|
||||
"ta_kc": "/ta/kc",
|
||||
"ta_macd": "/ta/macd",
|
||||
"ta_obv": "/ta/obv",
|
||||
"ta_rsi": "/ta/rsi",
|
||||
"ta_sma": "/ta/sma",
|
||||
"ta_stoch": "/ta/stoch",
|
||||
"ta_vwap": "/ta/vwap",
|
||||
"ta_wma": "/ta/wma",
|
||||
"ta_zlma": "/ta/zlma"
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###
|
||||
|
||||
from typing import List, Literal, Union
|
||||
from typing import List, Literal, Optional
|
||||
|
||||
import typing_extensions
|
||||
from openbb_core.app.model.custom_parameter import OpenBBCustomParameter
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
from openbb_core.app.static.container import Container
|
||||
from openbb_core.app.static.filters import filter_inputs
|
||||
from openbb_provider.abstract.data import Data
|
||||
from pydantic import validate_call
|
||||
from typing_extensions import Annotated
|
||||
|
||||
|
||||
class ROUTER_news(Container):
|
||||
@@ -22,10 +22,10 @@ class ROUTER_news(Container):
|
||||
@validate_call
|
||||
def globalnews(
|
||||
self,
|
||||
limit: typing_extensions.Annotated[
|
||||
limit: Annotated[
|
||||
int, OpenBBCustomParameter(description="Number of articles to return.")
|
||||
] = 20,
|
||||
provider: Union[Literal["benzinga", "fmp", "intrinio"], None] = None,
|
||||
provider: Optional[Literal["benzinga", "fmp", "intrinio"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Global News.
|
||||
@@ -34,45 +34,45 @@ class ROUTER_news(Container):
|
||||
----------
|
||||
limit : int
|
||||
Number of articles to return.
|
||||
provider : Union[Literal['benzinga', 'fmp', 'intrinio'], None]
|
||||
provider : Optional[Literal['benzinga', 'fmp', 'intrinio']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'benzinga' if there is
|
||||
no default.
|
||||
display : Literal['headline', 'abstract', 'full']
|
||||
Specify headline only (headline), headline + teaser (abstract), or headline + full body (full). (provider: benzinga)
|
||||
date : Optional[Union[str]]
|
||||
date : Optional[str]
|
||||
Date of the news to retrieve. (provider: benzinga)
|
||||
start_date : Optional[Union[str]]
|
||||
start_date : Optional[str]
|
||||
Start date of the news to retrieve. (provider: benzinga)
|
||||
end_date : Optional[Union[str]]
|
||||
end_date : Optional[str]
|
||||
End date of the news to retrieve. (provider: benzinga)
|
||||
updated_since : Optional[Union[int]]
|
||||
updated_since : Optional[int]
|
||||
Number of seconds since the news was updated. (provider: benzinga)
|
||||
published_since : Optional[Union[int]]
|
||||
published_since : Optional[int]
|
||||
Number of seconds since the news was published. (provider: benzinga)
|
||||
sort : Optional[Union[Literal['id', 'created', 'updated']]]
|
||||
sort : Optional[Literal['id', 'created', 'updated']]
|
||||
Key to sort the news by. (provider: benzinga)
|
||||
order : Optional[Union[Literal['asc', 'desc']]]
|
||||
order : Optional[Literal['asc', 'desc']]
|
||||
Order to sort the news by. (provider: benzinga)
|
||||
isin : Optional[Union[str]]
|
||||
isin : Optional[str]
|
||||
The ISIN of the news to retrieve. (provider: benzinga)
|
||||
cusip : Optional[Union[str]]
|
||||
cusip : Optional[str]
|
||||
The CUSIP of the news to retrieve. (provider: benzinga)
|
||||
channels : Optional[Union[str]]
|
||||
channels : Optional[str]
|
||||
Channels of the news to retrieve. (provider: benzinga)
|
||||
topics : Optional[Union[str]]
|
||||
topics : Optional[str]
|
||||
Topics of the news to retrieve. (provider: benzinga)
|
||||
authors : Optional[Union[str]]
|
||||
authors : Optional[str]
|
||||
Authors of the news to retrieve. (provider: benzinga)
|
||||
content_types : Optional[Union[str]]
|
||||
content_types : Optional[str]
|
||||
Content types of the news to retrieve. (provider: benzinga)
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[GlobalNews]]
|
||||
results : List[GlobalNews]
|
||||
Serializable results.
|
||||
provider : Union[Literal['benzinga', 'fmp', 'intrinio'], None]
|
||||
provider : Optional[Literal['benzinga', 'fmp', 'intrinio']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -87,31 +87,31 @@ class ROUTER_news(Container):
|
||||
Published date of the news.
|
||||
title : str
|
||||
Title of the news.
|
||||
image : Optional[Union[str]]
|
||||
image : Optional[str]
|
||||
Image URL of the news.
|
||||
text : Optional[Union[str]]
|
||||
text : Optional[str]
|
||||
Text/body of the news.
|
||||
url : Optional[Union[str]]
|
||||
url : Optional[str]
|
||||
URL of the news.
|
||||
id : Optional[Union[str]]
|
||||
id : Optional[str]
|
||||
ID of the news. (provider: benzinga); Article ID. (provider: intrinio)
|
||||
author : Optional[Union[str]]
|
||||
author : Optional[str]
|
||||
Author of the news. (provider: benzinga)
|
||||
teaser : Optional[Union[str]]
|
||||
teaser : Optional[str]
|
||||
Teaser of the news. (provider: benzinga)
|
||||
images : Optional[Union[List[Dict[str, str]]]]
|
||||
images : Optional[List[Dict[str, str]]]
|
||||
Images associated with the news. (provider: benzinga)
|
||||
channels : Optional[Union[str]]
|
||||
channels : Optional[str]
|
||||
Channels associated with the news. (provider: benzinga)
|
||||
stocks : Optional[Union[str]]
|
||||
stocks : Optional[str]
|
||||
Stocks associated with the news. (provider: benzinga)
|
||||
tags : Optional[Union[str]]
|
||||
tags : Optional[str]
|
||||
Tags associated with the news. (provider: benzinga)
|
||||
updated : Optional[Union[datetime]]
|
||||
updated : Optional[datetime]
|
||||
None
|
||||
site : Optional[Union[str]]
|
||||
site : Optional[str]
|
||||
Site of the news. (provider: fmp)
|
||||
company : Optional[Union[Dict[str, Any]]]
|
||||
company : Optional[Dict[str, Any]]
|
||||
Company details related to the news article. (provider: intrinio)""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
|
||||
375
openbb_platform/openbb/package/qa.py
Normal file
375
openbb_platform/openbb/package/qa.py
Normal file
@@ -0,0 +1,375 @@
|
||||
### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###
|
||||
|
||||
from typing import List, Literal, Union
|
||||
|
||||
import pandas
|
||||
from annotated_types import Ge, Gt
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
from openbb_core.app.static.container import Container
|
||||
from openbb_core.app.static.filters import filter_inputs
|
||||
from openbb_provider.abstract.data import Data
|
||||
from openbb_qa.qa_models import (
|
||||
CAPMModel,
|
||||
NormalityModel,
|
||||
OmegaModel,
|
||||
SummaryModel,
|
||||
UnitRootModel,
|
||||
)
|
||||
from pydantic import validate_call
|
||||
from typing_extensions import Annotated
|
||||
|
||||
|
||||
class ROUTER_qa(Container):
|
||||
"""/qa
|
||||
capm
|
||||
kurtosis
|
||||
normality
|
||||
om
|
||||
quantile
|
||||
sh
|
||||
skew
|
||||
so
|
||||
summary
|
||||
unitroot
|
||||
"""
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return self.__doc__ or ""
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def capm(
|
||||
self, data: Union[List[Data], pandas.DataFrame], target: str
|
||||
) -> OBBject[CAPMModel]:
|
||||
"""Capital Asset Pricing Model.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
target=target,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/qa/capm",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def kurtosis(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
target: str,
|
||||
window: Annotated[int, Gt(gt=0)],
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Kurtosis.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : List[Data]
|
||||
Time series data.
|
||||
target : str
|
||||
Target column name.
|
||||
window : PositiveInt
|
||||
Window size.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[List[Data]]
|
||||
Kurtosis.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
target=target,
|
||||
window=window,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/qa/kurtosis",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def normality(
|
||||
self, data: Union[List[Data], pandas.DataFrame], target: str
|
||||
) -> OBBject[NormalityModel]:
|
||||
"""
|
||||
Normality Statistics.
|
||||
|
||||
- **Kurtosis**: whether the kurtosis of a sample differs from the normal distribution.
|
||||
- **Skewness**: whether the skewness of a sample differs from the normal distribution.
|
||||
- **Jarque-Bera**: whether the sample data has the skewness and kurtosis matching a normal distribution.
|
||||
- **Shapiro-Wilk**: whether a random sample comes from a normal distribution.
|
||||
- **Kolmogorov-Smirnov**: whether two underlying one-dimensional probability distributions differ.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : List[Data]
|
||||
Time series data.
|
||||
target : str
|
||||
Target column name.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[NormalityModel]
|
||||
Normality tests summary. See qa_models.NormalityModel for details.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
target=target,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/qa/normality",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def om(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
target: str,
|
||||
threshold_start: float = 0.0,
|
||||
threshold_end: float = 1.5,
|
||||
) -> OBBject[List[OmegaModel]]:
|
||||
"""Omega Ratio.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : List[Data]
|
||||
Time series data.
|
||||
target : str
|
||||
Target column name.
|
||||
threshold_start : float, optional
|
||||
Start threshold, by default 0.0
|
||||
threshold_end : float, optional
|
||||
End threshold, by default 1.5
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[List[OmegaModel]]
|
||||
Omega ratios.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
target=target,
|
||||
threshold_start=threshold_start,
|
||||
threshold_end=threshold_end,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/qa/om",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def quantile(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
target: str,
|
||||
window: Annotated[int, Gt(gt=0)],
|
||||
quantile_pct: Annotated[float, Ge(ge=0)] = 0.5,
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Quantile.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
target=target,
|
||||
window=window,
|
||||
quantile_pct=quantile_pct,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/qa/quantile",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def sh(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
target: str,
|
||||
rfr: float = 0.0,
|
||||
window: Annotated[int, Gt(gt=0)] = 252,
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Sharpe Ratio.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : List[Data]
|
||||
Time series data.
|
||||
target : str
|
||||
Target column name.
|
||||
rfr : float, optional
|
||||
Risk-free rate, by default 0.0
|
||||
window : PositiveInt, optional
|
||||
Window size, by default 252
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[List[Data]]
|
||||
Sharpe ratio.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
target=target,
|
||||
rfr=rfr,
|
||||
window=window,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/qa/sh",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def skew(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
target: str,
|
||||
window: Annotated[int, Gt(gt=0)],
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Skewness.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : List[Data]
|
||||
Time series data.
|
||||
target : str
|
||||
Target column name.
|
||||
window : PositiveInt
|
||||
Window size.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[List[Data]]
|
||||
Skewness.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
target=target,
|
||||
window=window,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/qa/skew",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def so(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
target: str,
|
||||
target_return: float = 0.0,
|
||||
window: Annotated[int, Gt(gt=0)] = 252,
|
||||
adjusted: bool = False,
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Sortino Ratio.
|
||||
|
||||
For method & terminology see: http://www.redrockcapital.com/Sortino__A__Sharper__Ratio_Red_Rock_Capital.pdf
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : List[Data]
|
||||
Time series data.
|
||||
target : str
|
||||
Target column name.
|
||||
target_return : float, optional
|
||||
Target return, by default 0.0
|
||||
window : PositiveInt, optional
|
||||
Window size, by default 252
|
||||
adjusted : bool, optional
|
||||
Adjust sortino ratio to compare it to sharpe ratio, by default False
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[List[Data]]
|
||||
Sortino ratio.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
target=target,
|
||||
target_return=target_return,
|
||||
window=window,
|
||||
adjusted=adjusted,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/qa/so",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def summary(
|
||||
self, data: Union[List[Data], pandas.DataFrame], target: str
|
||||
) -> OBBject[SummaryModel]:
|
||||
"""Summary.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : List[Data]
|
||||
Time series data.
|
||||
target : str
|
||||
Target column name.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[SummaryModel]
|
||||
Summary table.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
target=target,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/qa/summary",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call(config=dict(arbitrary_types_allowed=True))
|
||||
def unitroot(
|
||||
self,
|
||||
data: Union[List[Data], pandas.DataFrame],
|
||||
target: str,
|
||||
fuller_reg: Literal["c", "ct", "ctt", "nc"] = "c",
|
||||
kpss_reg: Literal["c", "ct"] = "c",
|
||||
) -> OBBject[UnitRootModel]:
|
||||
"""Unit Root Test.
|
||||
|
||||
Augmented Dickey-Fuller test for unit root.
|
||||
Kwiatkowski-Phillips-Schmidt-Shin test for unit root.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data : List[Data]
|
||||
Time series data.
|
||||
target : str
|
||||
Target column name.
|
||||
fuller_reg : Literal["c", "ct", "ctt", "nc", "c"]
|
||||
Regression type for ADF test.
|
||||
kpss_reg : Literal["c", "ct"]
|
||||
Regression type for KPSS test.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject[UnitRootModel]
|
||||
Unit root tests summary.
|
||||
""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
data=data,
|
||||
target=target,
|
||||
fuller_reg=fuller_reg,
|
||||
kpss_reg=kpss_reg,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/qa/unitroot",
|
||||
**inputs,
|
||||
)
|
||||
@@ -1,9 +1,8 @@
|
||||
### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###
|
||||
|
||||
import datetime
|
||||
from typing import List, Literal, Union
|
||||
from typing import List, Literal, Optional, Union
|
||||
|
||||
import typing_extensions
|
||||
from annotated_types import Ge
|
||||
from openbb_core.app.model.custom_parameter import OpenBBCustomParameter
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
@@ -11,17 +10,20 @@ from openbb_core.app.static.container import Container
|
||||
from openbb_core.app.static.filters import filter_inputs
|
||||
from openbb_provider.abstract.data import Data
|
||||
from pydantic import validate_call
|
||||
from typing_extensions import Annotated
|
||||
|
||||
|
||||
class ROUTER_stocks(Container):
|
||||
"""/stocks
|
||||
/ca
|
||||
/fa
|
||||
info
|
||||
load
|
||||
multiples
|
||||
news
|
||||
/options
|
||||
quote
|
||||
search
|
||||
"""
|
||||
|
||||
def __repr__(self) -> str:
|
||||
@@ -40,25 +42,143 @@ class ROUTER_stocks(Container):
|
||||
return stocks_fa.ROUTER_stocks_fa(command_runner=self._command_runner)
|
||||
|
||||
@validate_call
|
||||
def load(
|
||||
def info(
|
||||
self,
|
||||
symbol: typing_extensions.Annotated[
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBCustomParameter(description="Symbol to get data for."),
|
||||
],
|
||||
start_date: typing_extensions.Annotated[
|
||||
provider: Optional[Literal["cboe"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Get general price and performance metrics of a stock.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
provider : Optional[Literal['cboe']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'cboe' if there is
|
||||
no default.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : List[StockInfo]
|
||||
Serializable results.
|
||||
provider : Optional[Literal['cboe']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
chart : Optional[Chart]
|
||||
Chart object.
|
||||
extra: Dict[str, Any]
|
||||
Extra info.
|
||||
|
||||
StockInfo
|
||||
---------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
name : str
|
||||
Name associated with the ticker symbol.
|
||||
price : Optional[float]
|
||||
Last transaction price.
|
||||
open : Optional[float]
|
||||
Opening price of the stock.
|
||||
high : Optional[float]
|
||||
High price of the current trading day.
|
||||
low : Optional[float]
|
||||
Low price of the current trading day.
|
||||
close : Optional[float]
|
||||
Closing price of the most recent trading day.
|
||||
change : Optional[float]
|
||||
Change in price over the current trading period.
|
||||
change_percent : Optional[float]
|
||||
Percent change in price over the current trading period.
|
||||
prev_close : Optional[float]
|
||||
Previous closing price.
|
||||
type : Optional[str]
|
||||
Type of asset. (provider: cboe)
|
||||
exchange_id : Optional[int]
|
||||
The Exchange ID number. (provider: cboe)
|
||||
tick : Optional[str]
|
||||
Whether the last sale was an up or down tick. (provider: cboe)
|
||||
bid : Optional[float]
|
||||
Current bid price. (provider: cboe)
|
||||
bid_size : Optional[float]
|
||||
Bid lot size. (provider: cboe)
|
||||
ask : Optional[float]
|
||||
Current ask price. (provider: cboe)
|
||||
ask_size : Optional[float]
|
||||
Ask lot size. (provider: cboe)
|
||||
volume : Optional[float]
|
||||
Stock volume for the current trading day. (provider: cboe)
|
||||
iv30 : Optional[float]
|
||||
The 30-day implied volatility of the stock. (provider: cboe)
|
||||
iv30_change : Optional[float]
|
||||
Change in 30-day implied volatility of the stock. (provider: cboe)
|
||||
last_trade_timestamp : Optional[datetime]
|
||||
Last trade timestamp for the stock. (provider: cboe)
|
||||
iv30_annual_high : Optional[float]
|
||||
The 1-year high of implied volatility. (provider: cboe)
|
||||
hv30_annual_high : Optional[float]
|
||||
The 1-year high of realized volatility. (provider: cboe)
|
||||
iv30_annual_low : Optional[float]
|
||||
The 1-year low of implied volatility. (provider: cboe)
|
||||
hv30_annual_low : Optional[float]
|
||||
The 1-year low of realized volatility. (provider: cboe)
|
||||
iv60_annual_high : Optional[float]
|
||||
The 60-day high of implied volatility. (provider: cboe)
|
||||
hv60_annual_high : Optional[float]
|
||||
The 60-day high of realized volatility. (provider: cboe)
|
||||
iv60_annual_low : Optional[float]
|
||||
The 60-day low of implied volatility. (provider: cboe)
|
||||
hv60_annual_low : Optional[float]
|
||||
The 60-day low of realized volatility. (provider: cboe)
|
||||
iv90_annual_high : Optional[float]
|
||||
The 90-day high of implied volatility. (provider: cboe)
|
||||
hv90_annual_high : Optional[float]
|
||||
The 90-day high of realized volatility. (provider: cboe)""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
provider_choices={
|
||||
"provider": provider,
|
||||
},
|
||||
standard_params={
|
||||
"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol,
|
||||
},
|
||||
extra_params=kwargs,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/stocks/info",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call
|
||||
def load(
|
||||
self,
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBCustomParameter(description="Symbol to get data for."),
|
||||
],
|
||||
start_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="Start date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
end_date: typing_extensions.Annotated[
|
||||
end_date: Annotated[
|
||||
Union[datetime.date, None, str],
|
||||
OpenBBCustomParameter(
|
||||
description="End date of the data, in YYYY-MM-DD format."
|
||||
),
|
||||
] = None,
|
||||
provider: Union[Literal["fmp", "intrinio", "polygon"], None] = None,
|
||||
chart: bool = False,
|
||||
provider: Optional[
|
||||
Literal["alpha_vantage", "cboe", "fmp", "intrinio", "polygon", "yfinance"]
|
||||
] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Load stock data for a specific ticker.
|
||||
@@ -67,27 +187,41 @@ class ROUTER_stocks(Container):
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
start_date : Union[datetime.date, None]
|
||||
start_date : Optional[datetime.date]
|
||||
Start date of the data, in YYYY-MM-DD format.
|
||||
end_date : Union[datetime.date, None]
|
||||
end_date : Optional[datetime.date]
|
||||
End date of the data, in YYYY-MM-DD format.
|
||||
provider : Union[Literal['fmp', 'intrinio', 'polygon'], None]
|
||||
chart : bool
|
||||
Whether to create a chart or not, by default False.
|
||||
provider : Optional[Literal['alpha_vantage', 'cboe', 'fmp', 'intrinio', 'pol...
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fmp' if there is
|
||||
If None, the provider specified in defaults is selected or 'alpha_vantage' if there is
|
||||
no default.
|
||||
timeseries : Optional[Union[typing_extensions.Annotated[int, Ge(ge=0)]]]
|
||||
function_ : Literal['TIME_SERIES_INTRADAY', 'TIME_SERIES_DAILY', 'TIME_SERIES_WEEKLY', 'TIME_SERIES_MONTHLY', 'TIME_SERIES_DAILY_ADJUSTED', 'TIME_SERIES_WEEKLY_ADJUSTED', 'TIME_SERIES_MONTHLY_ADJUSTED']
|
||||
The time series of your choice. (provider: alpha_vantage)
|
||||
period : Optional[Union[Literal['intraday', 'daily', 'weekly', 'monthly'], Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]]
|
||||
Period of the data to return. (provider: alpha_vantage, yfinance)
|
||||
interval : Optional[Union[Literal['1min', '5min', '15min', '30min', '60min'], Literal['1d', '1m'], Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day'], Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]]
|
||||
Data granularity. (provider: alpha_vantage, cboe, fmp, yfinance)
|
||||
adjusted : Optional[bool]
|
||||
Output time series is adjusted by historical split and dividend events. (provider: alpha_vantage, polygon)
|
||||
extended_hours : Optional[bool]
|
||||
Extended trading hours during pre-market and after-hours. (provider: alpha_vantage)
|
||||
month : Optional[str]
|
||||
Query a specific month in history (in YYYY-MM format). (provider: alpha_vantage)
|
||||
outputsize : Optional[Literal['compact', 'full']]
|
||||
Compact returns only the latest 100 data points in the intraday time series; full returns trailing 30 days of the most recent intraday data if the month parameter (see above) is not specified, or the full intraday data for a specific month in history if the month parameter is specified. (provider: alpha_vantage)
|
||||
timeseries : Optional[Annotated[int, Ge(ge=0)]]
|
||||
Number of days to look back. (provider: fmp)
|
||||
interval : Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day']
|
||||
Data granularity. (provider: fmp)
|
||||
timezone : Optional[Union[Literal['Africa/Algiers', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Monrovia', 'Africa/Nairobi', 'America/Argentina/Buenos_Aires', 'America/Bogota', 'America/Caracas', 'America/Chicago', 'America/Chihuahua', 'America/Denver', 'America/Godthab', 'America/Guatemala', 'America/Guyana', 'America/Halifax', 'America/Indiana/Indianapolis', 'America/Juneau', 'America/La_Paz', 'America/Lima', 'America/Lima', 'America/Los_Angeles', 'America/Mazatlan', 'America/Mexico_City', 'America/Mexico_City', 'America/Monterrey', 'America/Montevideo', 'America/New_York', 'America/Phoenix', 'America/Regina', 'America/Santiago', 'America/Sao_Paulo', 'America/St_Johns', 'America/Tijuana', 'Asia/Almaty', 'Asia/Baghdad', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Bangkok', 'Asia/Chongqing', 'Asia/Colombo', 'Asia/Dhaka', 'Asia/Dhaka', 'Asia/Hong_Kong', 'Asia/Irkutsk', 'Asia/Jakarta', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Karachi', 'Asia/Kathmandu', 'Asia/Kolkata', 'Asia/Kolkata', 'Asia/Kolkata', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuwait', 'Asia/Magadan', 'Asia/Muscat', 'Asia/Muscat', 'Asia/Novosibirsk', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tokyo', 'Asia/Tokyo', 'Asia/Tokyo', 'Asia/Ulaanbaatar', 'Asia/Urumqi', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Cape_Verde', 'Atlantic/South_Georgia', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Darwin', 'Australia/Hobart', 'Australia/Melbourne', 'Australia/Melbourne', 'Australia/Perth', 'Australia/Sydney', 'Etc/UTC', 'UTC', 'Europe/Amsterdam', 'Europe/Athens', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Helsinki', 'Europe/Istanbul', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/London', 'Europe/Madrid', 'Europe/Minsk', 'Europe/Moscow', 'Europe/Moscow', 'Europe/Paris', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/Sarajevo', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Auckland', 'Pacific/Chatham', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Majuro', 'Pacific/Midway', 'Pacific/Midway', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Port_Moresby', 'Pacific/Tongatapu']]]
|
||||
timezone : Optional[Literal['Africa/Algiers', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Monrovia', 'Africa/Nairobi', 'America/Argentina/Buenos_Aires', 'America/Bogota', 'America/Caracas', 'America/Chicago', 'America/Chihuahua', 'America/Denver', 'America/Godthab', 'America/Guatemala', 'America/Guyana', 'America/Halifax', 'America/Indiana/Indianapolis', 'America/Juneau', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Mazatlan', 'America/Mexico_City', 'America/Monterrey', 'America/Montevideo', 'America/New_York', 'America/Phoenix', 'America/Regina', 'America/Santiago', 'America/Sao_Paulo', 'America/St_Johns', 'America/Tijuana', 'Asia/Almaty', 'Asia/Baghdad', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Chongqing', 'Asia/Colombo', 'Asia/Dhaka', 'Asia/Hong_Kong', 'Asia/Irkutsk', 'Asia/Jakarta', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kathmandu', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuwait', 'Asia/Magadan', 'Asia/Muscat', 'Asia/Novosibirsk', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tokyo', 'Asia/Ulaanbaatar', 'Asia/Urumqi', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Cape_Verde', 'Atlantic/South_Georgia', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Darwin', 'Australia/Hobart', 'Australia/Melbourne', 'Australia/Perth', 'Australia/Sydney', 'Etc/UTC', 'UTC', 'Europe/Amsterdam', 'Europe/Athens', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Helsinki', 'Europe/Istanbul', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Madrid', 'Europe/Minsk', 'Europe/Moscow', 'Europe/Paris', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/Sarajevo', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Chatham', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Majuro', 'Pacific/Midway', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Port_Moresby', 'Pacific/Tongatapu']]
|
||||
Returns trading times in this timezone. (provider: intrinio)
|
||||
source : Optional[Union[Literal['realtime', 'delayed', 'nasdaq_basic']]]
|
||||
source : Optional[Literal['realtime', 'delayed', 'nasdaq_basic']]
|
||||
The source of the data. (provider: intrinio)
|
||||
start_time : Optional[Union[datetime.time]]
|
||||
start_time : Optional[datetime.time]
|
||||
Return intervals starting at the specified time on the `start_date` formatted as 'hh:mm:ss'. (provider: intrinio)
|
||||
end_time : Optional[Union[datetime.time]]
|
||||
end_time : Optional[datetime.time]
|
||||
Return intervals stopping at the specified time on the `end_date` formatted as 'hh:mm:ss'. (provider: intrinio)
|
||||
interval_size : Optional[Union[Literal['1m', '5m', '10m', '15m', '30m', '60m', '1h']]]
|
||||
interval_size : Optional[Literal['1m', '5m', '10m', '15m', '30m', '60m', '1h']]
|
||||
The data time frequency. (provider: intrinio)
|
||||
multiplier : int
|
||||
Multiplier of the timespan. (provider: polygon)
|
||||
@@ -97,15 +231,33 @@ class ROUTER_stocks(Container):
|
||||
Sort order of the data. (provider: polygon)
|
||||
limit : int
|
||||
The number of data entries to return. (provider: polygon)
|
||||
adjusted : bool
|
||||
Output time series is adjusted by historical split and dividend events. (provider: polygon)
|
||||
prepost : bool
|
||||
Include Pre and Post market data. (provider: yfinance)
|
||||
actions : bool
|
||||
Include actions. (provider: yfinance)
|
||||
auto_adjust : bool
|
||||
Adjust all OHLC data automatically. (provider: yfinance)
|
||||
back_adjust : bool
|
||||
Attempt to adjust all the data automatically. (provider: yfinance)
|
||||
progress : bool
|
||||
Show progress bar. (provider: yfinance)
|
||||
ignore_tz : bool
|
||||
When combining from different timezones, ignore that part of datetime. (provider: yfinance)
|
||||
rounding : bool
|
||||
Round to two decimal places? (provider: yfinance)
|
||||
repair : bool
|
||||
Detect currency unit 100x mixups and attempt repair. (provider: yfinance)
|
||||
keepna : bool
|
||||
Keep NaN rows returned by Yahoo? (provider: yfinance)
|
||||
group_by : Literal['ticker', 'column']
|
||||
Group by ticker or column. (provider: yfinance)
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[StockHistorical]]
|
||||
results : List[StockHistorical]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fmp', 'intrinio', 'polygon'], None]
|
||||
provider : Optional[Literal['alpha_vantage', 'cboe', 'fmp', 'intrinio', 'polygon', 'yfinance']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -128,27 +280,37 @@ class ROUTER_stocks(Container):
|
||||
The close price of the symbol.
|
||||
volume : Union[float, int]
|
||||
The volume of the symbol.
|
||||
vwap : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]]
|
||||
vwap : Optional[Annotated[float, Gt(gt=0)]]
|
||||
Volume Weighted Average Price of the symbol.
|
||||
adj_close : Optional[Union[float]]
|
||||
Adjusted Close Price of the symbol. (provider: fmp)
|
||||
unadjusted_volume : Optional[Union[float]]
|
||||
adj_close : Optional[Union[Annotated[float, Gt(gt=0)], float]]
|
||||
The adjusted close price of the symbol. (provider: alpha_vantage, fmp)
|
||||
dividend_amount : Optional[Annotated[float, Ge(ge=0)]]
|
||||
Dividend amount paid for the corresponding date. (provider: alpha_vantage)
|
||||
split_coefficient : Optional[Annotated[float, Ge(ge=0)]]
|
||||
Split coefficient for the corresponding date. (provider: alpha_vantage)
|
||||
calls_volume : Optional[float]
|
||||
Number of calls traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe)
|
||||
puts_volume : Optional[float]
|
||||
Number of puts traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe)
|
||||
total_options_volume : Optional[float]
|
||||
Total number of options traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe)
|
||||
unadjusted_volume : Optional[float]
|
||||
Unadjusted volume of the symbol. (provider: fmp)
|
||||
change : Optional[Union[float]]
|
||||
change : Optional[float]
|
||||
Change in the price of the symbol from the previous day. (provider: fmp, intrinio)
|
||||
change_percent : Optional[Union[float]]
|
||||
change_percent : Optional[float]
|
||||
Change % in the price of the symbol. (provider: fmp)
|
||||
label : Optional[Union[str]]
|
||||
label : Optional[str]
|
||||
Human readable format of the date. (provider: fmp)
|
||||
change_over_time : Optional[Union[float]]
|
||||
change_over_time : Optional[float]
|
||||
Change % in the price of the symbol over a period of time. (provider: fmp)
|
||||
close_time : Optional[Union[datetime]]
|
||||
close_time : Optional[datetime]
|
||||
The timestamp that represents the end of the interval span. (provider: intrinio)
|
||||
interval : Optional[Union[str]]
|
||||
interval : Optional[str]
|
||||
The data time frequency. (provider: intrinio)
|
||||
average : Optional[Union[float]]
|
||||
average : Optional[float]
|
||||
Average trade price of an individual stock during the interval. (provider: intrinio)
|
||||
transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]]
|
||||
transactions : Optional[Annotated[int, Gt(gt=0)]]
|
||||
Number of transactions for the symbol in the time period. (provider: polygon)
|
||||
""" # noqa: E501
|
||||
|
||||
@@ -162,6 +324,7 @@ class ROUTER_stocks(Container):
|
||||
"end_date": end_date,
|
||||
},
|
||||
extra_params=kwargs,
|
||||
chart=chart,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
@@ -172,15 +335,16 @@ class ROUTER_stocks(Container):
|
||||
@validate_call
|
||||
def multiples(
|
||||
self,
|
||||
symbol: typing_extensions.Annotated[
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBCustomParameter(description="Symbol to get data for."),
|
||||
],
|
||||
limit: typing_extensions.Annotated[
|
||||
Union[int, None],
|
||||
limit: Annotated[
|
||||
Optional[int],
|
||||
OpenBBCustomParameter(description="The number of data entries to return."),
|
||||
] = 100,
|
||||
provider: Union[Literal["fmp"], None] = None,
|
||||
chart: bool = False,
|
||||
provider: Optional[Literal["fmp"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Get valuation multiples for a stock ticker.
|
||||
@@ -189,9 +353,11 @@ class ROUTER_stocks(Container):
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
limit : Union[int, None]
|
||||
limit : Optional[int]
|
||||
The number of data entries to return.
|
||||
provider : Union[Literal['fmp'], None]
|
||||
chart : bool
|
||||
Whether to create a chart or not, by default False.
|
||||
provider : Optional[Literal['fmp']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fmp' if there is
|
||||
no default.
|
||||
@@ -199,9 +365,9 @@ class ROUTER_stocks(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[StockMultiples]]
|
||||
results : List[StockMultiples]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fmp'], None]
|
||||
provider : Optional[Literal['fmp']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -212,125 +378,125 @@ class ROUTER_stocks(Container):
|
||||
|
||||
StockMultiples
|
||||
--------------
|
||||
revenue_per_share_ttm : Optional[Union[float]]
|
||||
revenue_per_share_ttm : Optional[float]
|
||||
Revenue per share calculated as trailing twelve months.
|
||||
net_income_per_share_ttm : Optional[Union[float]]
|
||||
net_income_per_share_ttm : Optional[float]
|
||||
Net income per share calculated as trailing twelve months.
|
||||
operating_cash_flow_per_share_ttm : Optional[Union[float]]
|
||||
operating_cash_flow_per_share_ttm : Optional[float]
|
||||
Operating cash flow per share calculated as trailing twelve months.
|
||||
free_cash_flow_per_share_ttm : Optional[Union[float]]
|
||||
free_cash_flow_per_share_ttm : Optional[float]
|
||||
Free cash flow per share calculated as trailing twelve months.
|
||||
cash_per_share_ttm : Optional[Union[float]]
|
||||
cash_per_share_ttm : Optional[float]
|
||||
Cash per share calculated as trailing twelve months.
|
||||
book_value_per_share_ttm : Optional[Union[float]]
|
||||
book_value_per_share_ttm : Optional[float]
|
||||
Book value per share calculated as trailing twelve months.
|
||||
tangible_book_value_per_share_ttm : Optional[Union[float]]
|
||||
tangible_book_value_per_share_ttm : Optional[float]
|
||||
Tangible book value per share calculated as trailing twelve months.
|
||||
shareholders_equity_per_share_ttm : Optional[Union[float]]
|
||||
shareholders_equity_per_share_ttm : Optional[float]
|
||||
Shareholders equity per share calculated as trailing twelve months.
|
||||
interest_debt_per_share_ttm : Optional[Union[float]]
|
||||
interest_debt_per_share_ttm : Optional[float]
|
||||
Interest debt per share calculated as trailing twelve months.
|
||||
market_cap_ttm : Optional[Union[float]]
|
||||
market_cap_ttm : Optional[float]
|
||||
Market capitalization calculated as trailing twelve months.
|
||||
enterprise_value_ttm : Optional[Union[float]]
|
||||
enterprise_value_ttm : Optional[float]
|
||||
Enterprise value calculated as trailing twelve months.
|
||||
pe_ratio_ttm : Optional[Union[float]]
|
||||
pe_ratio_ttm : Optional[float]
|
||||
Price-to-earnings ratio (P/E ratio) calculated as trailing twelve months.
|
||||
price_to_sales_ratio_ttm : Optional[Union[float]]
|
||||
price_to_sales_ratio_ttm : Optional[float]
|
||||
Price-to-sales ratio calculated as trailing twelve months.
|
||||
pocf_ratio_ttm : Optional[Union[float]]
|
||||
pocf_ratio_ttm : Optional[float]
|
||||
Price-to-operating cash flow ratio calculated as trailing twelve months.
|
||||
pfcf_ratio_ttm : Optional[Union[float]]
|
||||
pfcf_ratio_ttm : Optional[float]
|
||||
Price-to-free cash flow ratio calculated as trailing twelve months.
|
||||
pb_ratio_ttm : Optional[Union[float]]
|
||||
pb_ratio_ttm : Optional[float]
|
||||
Price-to-book ratio calculated as trailing twelve months.
|
||||
ptb_ratio_ttm : Optional[Union[float]]
|
||||
ptb_ratio_ttm : Optional[float]
|
||||
Price-to-tangible book ratio calculated as trailing twelve months.
|
||||
ev_to_sales_ttm : Optional[Union[float]]
|
||||
ev_to_sales_ttm : Optional[float]
|
||||
Enterprise value-to-sales ratio calculated as trailing twelve months.
|
||||
enterprise_value_over_ebitda_ttm : Optional[Union[float]]
|
||||
enterprise_value_over_ebitda_ttm : Optional[float]
|
||||
Enterprise value-to-EBITDA ratio calculated as trailing twelve months.
|
||||
ev_to_operating_cash_flow_ttm : Optional[Union[float]]
|
||||
ev_to_operating_cash_flow_ttm : Optional[float]
|
||||
Enterprise value-to-operating cash flow ratio calculated as trailing twelve months.
|
||||
ev_to_free_cash_flow_ttm : Optional[Union[float]]
|
||||
ev_to_free_cash_flow_ttm : Optional[float]
|
||||
Enterprise value-to-free cash flow ratio calculated as trailing twelve months.
|
||||
earnings_yield_ttm : Optional[Union[float]]
|
||||
earnings_yield_ttm : Optional[float]
|
||||
Earnings yield calculated as trailing twelve months.
|
||||
free_cash_flow_yield_ttm : Optional[Union[float]]
|
||||
free_cash_flow_yield_ttm : Optional[float]
|
||||
Free cash flow yield calculated as trailing twelve months.
|
||||
debt_to_equity_ttm : Optional[Union[float]]
|
||||
debt_to_equity_ttm : Optional[float]
|
||||
Debt-to-equity ratio calculated as trailing twelve months.
|
||||
debt_to_assets_ttm : Optional[Union[float]]
|
||||
debt_to_assets_ttm : Optional[float]
|
||||
Debt-to-assets ratio calculated as trailing twelve months.
|
||||
net_debt_to_ebitda_ttm : Optional[Union[float]]
|
||||
net_debt_to_ebitda_ttm : Optional[float]
|
||||
Net debt-to-EBITDA ratio calculated as trailing twelve months.
|
||||
current_ratio_ttm : Optional[Union[float]]
|
||||
current_ratio_ttm : Optional[float]
|
||||
Current ratio calculated as trailing twelve months.
|
||||
interest_coverage_ttm : Optional[Union[float]]
|
||||
interest_coverage_ttm : Optional[float]
|
||||
Interest coverage calculated as trailing twelve months.
|
||||
income_quality_ttm : Optional[Union[float]]
|
||||
income_quality_ttm : Optional[float]
|
||||
Income quality calculated as trailing twelve months.
|
||||
dividend_yield_ttm : Optional[Union[float]]
|
||||
dividend_yield_ttm : Optional[float]
|
||||
Dividend yield calculated as trailing twelve months.
|
||||
dividend_yield_percentage_ttm : Optional[Union[float]]
|
||||
dividend_yield_percentage_ttm : Optional[float]
|
||||
Dividend yield percentage calculated as trailing twelve months.
|
||||
dividend_to_market_cap_ttm : Optional[Union[float]]
|
||||
dividend_to_market_cap_ttm : Optional[float]
|
||||
Dividend to market capitalization ratio calculated as trailing twelve months.
|
||||
dividend_per_share_ttm : Optional[Union[float]]
|
||||
dividend_per_share_ttm : Optional[float]
|
||||
Dividend per share calculated as trailing twelve months.
|
||||
payout_ratio_ttm : Optional[Union[float]]
|
||||
payout_ratio_ttm : Optional[float]
|
||||
Payout ratio calculated as trailing twelve months.
|
||||
sales_general_and_administrative_to_revenue_ttm : Optional[Union[float]]
|
||||
sales_general_and_administrative_to_revenue_ttm : Optional[float]
|
||||
Sales general and administrative expenses-to-revenue ratio calculated as trailing twelve months.
|
||||
research_and_development_to_revenue_ttm : Optional[Union[float]]
|
||||
research_and_development_to_revenue_ttm : Optional[float]
|
||||
Research and development expenses-to-revenue ratio calculated as trailing twelve months.
|
||||
intangibles_to_total_assets_ttm : Optional[Union[float]]
|
||||
intangibles_to_total_assets_ttm : Optional[float]
|
||||
Intangibles-to-total assets ratio calculated as trailing twelve months.
|
||||
capex_to_operating_cash_flow_ttm : Optional[Union[float]]
|
||||
capex_to_operating_cash_flow_ttm : Optional[float]
|
||||
Capital expenditures-to-operating cash flow ratio calculated as trailing twelve months.
|
||||
capex_to_revenue_ttm : Optional[Union[float]]
|
||||
capex_to_revenue_ttm : Optional[float]
|
||||
Capital expenditures-to-revenue ratio calculated as trailing twelve months.
|
||||
capex_to_depreciation_ttm : Optional[Union[float]]
|
||||
capex_to_depreciation_ttm : Optional[float]
|
||||
Capital expenditures-to-depreciation ratio calculated as trailing twelve months.
|
||||
stock_based_compensation_to_revenue_ttm : Optional[Union[float]]
|
||||
stock_based_compensation_to_revenue_ttm : Optional[float]
|
||||
Stock-based compensation-to-revenue ratio calculated as trailing twelve months.
|
||||
graham_number_ttm : Optional[Union[float]]
|
||||
graham_number_ttm : Optional[float]
|
||||
Graham number calculated as trailing twelve months.
|
||||
roic_ttm : Optional[Union[float]]
|
||||
roic_ttm : Optional[float]
|
||||
Return on invested capital calculated as trailing twelve months.
|
||||
return_on_tangible_assets_ttm : Optional[Union[float]]
|
||||
return_on_tangible_assets_ttm : Optional[float]
|
||||
Return on tangible assets calculated as trailing twelve months.
|
||||
graham_net_net_ttm : Optional[Union[float]]
|
||||
graham_net_net_ttm : Optional[float]
|
||||
Graham net-net working capital calculated as trailing twelve months.
|
||||
working_capital_ttm : Optional[Union[float]]
|
||||
working_capital_ttm : Optional[float]
|
||||
Working capital calculated as trailing twelve months.
|
||||
tangible_asset_value_ttm : Optional[Union[float]]
|
||||
tangible_asset_value_ttm : Optional[float]
|
||||
Tangible asset value calculated as trailing twelve months.
|
||||
net_current_asset_value_ttm : Optional[Union[float]]
|
||||
net_current_asset_value_ttm : Optional[float]
|
||||
Net current asset value calculated as trailing twelve months.
|
||||
invested_capital_ttm : Optional[Union[float]]
|
||||
invested_capital_ttm : Optional[float]
|
||||
Invested capital calculated as trailing twelve months.
|
||||
average_receivables_ttm : Optional[Union[float]]
|
||||
average_receivables_ttm : Optional[float]
|
||||
Average receivables calculated as trailing twelve months.
|
||||
average_payables_ttm : Optional[Union[float]]
|
||||
average_payables_ttm : Optional[float]
|
||||
Average payables calculated as trailing twelve months.
|
||||
average_inventory_ttm : Optional[Union[float]]
|
||||
average_inventory_ttm : Optional[float]
|
||||
Average inventory calculated as trailing twelve months.
|
||||
days_sales_outstanding_ttm : Optional[Union[float]]
|
||||
days_sales_outstanding_ttm : Optional[float]
|
||||
Days sales outstanding calculated as trailing twelve months.
|
||||
days_payables_outstanding_ttm : Optional[Union[float]]
|
||||
days_payables_outstanding_ttm : Optional[float]
|
||||
Days payables outstanding calculated as trailing twelve months.
|
||||
days_of_inventory_on_hand_ttm : Optional[Union[float]]
|
||||
days_of_inventory_on_hand_ttm : Optional[float]
|
||||
Days of inventory on hand calculated as trailing twelve months.
|
||||
receivables_turnover_ttm : Optional[Union[float]]
|
||||
receivables_turnover_ttm : Optional[float]
|
||||
Receivables turnover calculated as trailing twelve months.
|
||||
payables_turnover_ttm : Optional[Union[float]]
|
||||
payables_turnover_ttm : Optional[float]
|
||||
Payables turnover calculated as trailing twelve months.
|
||||
inventory_turnover_ttm : Optional[Union[float]]
|
||||
inventory_turnover_ttm : Optional[float]
|
||||
Inventory turnover calculated as trailing twelve months.
|
||||
roe_ttm : Optional[Union[float]]
|
||||
roe_ttm : Optional[float]
|
||||
Return on equity calculated as trailing twelve months.
|
||||
capex_per_share_ttm : Optional[Union[float]]
|
||||
capex_per_share_ttm : Optional[float]
|
||||
Capital expenditures per share calculated as trailing twelve months.""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
@@ -342,6 +508,7 @@ class ROUTER_stocks(Container):
|
||||
"limit": limit,
|
||||
},
|
||||
extra_params=kwargs,
|
||||
chart=chart,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
@@ -352,14 +519,17 @@ class ROUTER_stocks(Container):
|
||||
@validate_call
|
||||
def news(
|
||||
self,
|
||||
symbols: typing_extensions.Annotated[
|
||||
symbols: Annotated[
|
||||
str, OpenBBCustomParameter(description="Comma separated list of symbols.")
|
||||
],
|
||||
limit: typing_extensions.Annotated[
|
||||
Union[typing_extensions.Annotated[int, Ge(ge=0)], None],
|
||||
limit: Annotated[
|
||||
Optional[Annotated[int, Ge(ge=0)]],
|
||||
OpenBBCustomParameter(description="Number of results to return per page."),
|
||||
] = 20,
|
||||
provider: Union[Literal["benzinga", "fmp", "intrinio", "polygon"], None] = None,
|
||||
chart: bool = False,
|
||||
provider: Optional[
|
||||
Literal["benzinga", "fmp", "intrinio", "polygon", "yfinance"]
|
||||
] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Get news for one or more stock tickers.
|
||||
@@ -368,49 +538,51 @@ class ROUTER_stocks(Container):
|
||||
----------
|
||||
symbols : str
|
||||
Comma separated list of symbols.
|
||||
limit : Union[typing_extensions.Annotated[int, Ge(ge=0)], None]
|
||||
limit : Optional[Annotated[int, Ge(ge=0)]]
|
||||
Number of results to return per page.
|
||||
provider : Union[Literal['benzinga', 'fmp', 'intrinio', 'polygon'], None]
|
||||
chart : bool
|
||||
Whether to create a chart or not, by default False.
|
||||
provider : Optional[Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'yfina...
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'benzinga' if there is
|
||||
no default.
|
||||
display : Literal['headline', 'abstract', 'full']
|
||||
Specify headline only (headline), headline + teaser (abstract), or headline + full body (full). (provider: benzinga)
|
||||
date : Optional[Union[str]]
|
||||
date : Optional[str]
|
||||
Date of the news to retrieve. (provider: benzinga)
|
||||
start_date : Optional[Union[str]]
|
||||
start_date : Optional[str]
|
||||
Start date of the news to retrieve. (provider: benzinga)
|
||||
end_date : Optional[Union[str]]
|
||||
end_date : Optional[str]
|
||||
End date of the news to retrieve. (provider: benzinga)
|
||||
updated_since : Optional[Union[int]]
|
||||
updated_since : Optional[int]
|
||||
Number of seconds since the news was updated. (provider: benzinga)
|
||||
published_since : Optional[Union[int]]
|
||||
published_since : Optional[int]
|
||||
Number of seconds since the news was published. (provider: benzinga)
|
||||
sort : Optional[Union[Literal['id', 'created', 'updated']]]
|
||||
sort : Optional[Literal['id', 'created', 'updated']]
|
||||
Key to sort the news by. (provider: benzinga)
|
||||
order : Optional[Union[Literal['asc', 'desc']]]
|
||||
order : Optional[Literal['asc', 'desc']]
|
||||
Order to sort the news by. (provider: benzinga); Sort order of the articles. (provider: polygon)
|
||||
isin : Optional[Union[str]]
|
||||
isin : Optional[str]
|
||||
The ISIN of the news to retrieve. (provider: benzinga)
|
||||
cusip : Optional[Union[str]]
|
||||
cusip : Optional[str]
|
||||
The CUSIP of the news to retrieve. (provider: benzinga)
|
||||
channels : Optional[Union[str]]
|
||||
channels : Optional[str]
|
||||
Channels of the news to retrieve. (provider: benzinga)
|
||||
topics : Optional[Union[str]]
|
||||
topics : Optional[str]
|
||||
Topics of the news to retrieve. (provider: benzinga)
|
||||
authors : Optional[Union[str]]
|
||||
authors : Optional[str]
|
||||
Authors of the news to retrieve. (provider: benzinga)
|
||||
content_types : Optional[Union[str]]
|
||||
content_types : Optional[str]
|
||||
Content types of the news to retrieve. (provider: benzinga)
|
||||
published_utc : Optional[Union[str]]
|
||||
published_utc : Optional[str]
|
||||
Date query to fetch articles. Supports operators <, <=, >, >= (provider: polygon)
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[StockNews]]
|
||||
results : List[StockNews]
|
||||
Serializable results.
|
||||
provider : Union[Literal['benzinga', 'fmp', 'intrinio', 'polygon'], None]
|
||||
provider : Optional[Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'yfinance']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -425,42 +597,50 @@ class ROUTER_stocks(Container):
|
||||
Published date of the news.
|
||||
title : str
|
||||
Title of the news.
|
||||
image : Optional[Union[str]]
|
||||
image : Optional[str]
|
||||
Image URL of the news.
|
||||
text : Optional[Union[str]]
|
||||
text : Optional[str]
|
||||
Text/body of the news.
|
||||
url : str
|
||||
URL of the news.
|
||||
id : Optional[Union[str]]
|
||||
id : Optional[str]
|
||||
ID of the news. (provider: benzinga); Intrinio ID for the article. (provider: intrinio); Article ID. (provider: polygon)
|
||||
author : Optional[Union[str]]
|
||||
author : Optional[str]
|
||||
Author of the news. (provider: benzinga); Author of the article. (provider: polygon)
|
||||
teaser : Optional[Union[str]]
|
||||
teaser : Optional[str]
|
||||
Teaser of the news. (provider: benzinga)
|
||||
images : Optional[Union[List[Dict[str, str]]]]
|
||||
images : Optional[List[Dict[str, str]]]
|
||||
Images associated with the news. (provider: benzinga)
|
||||
channels : Optional[Union[str]]
|
||||
channels : Optional[str]
|
||||
Channels associated with the news. (provider: benzinga)
|
||||
stocks : Optional[Union[str]]
|
||||
stocks : Optional[str]
|
||||
Stocks associated with the news. (provider: benzinga)
|
||||
tags : Optional[Union[str]]
|
||||
tags : Optional[str]
|
||||
Tags associated with the news. (provider: benzinga)
|
||||
updated : Optional[Union[datetime]]
|
||||
updated : Optional[datetime]
|
||||
None
|
||||
symbol : Optional[Union[str]]
|
||||
symbol : Optional[str]
|
||||
Ticker of the fetched news. (provider: fmp)
|
||||
site : Optional[Union[str]]
|
||||
site : Optional[str]
|
||||
Name of the news source. (provider: fmp)
|
||||
amp_url : Optional[Union[str]]
|
||||
amp_url : Optional[str]
|
||||
AMP URL. (provider: polygon)
|
||||
image_url : Optional[Union[str]]
|
||||
image_url : Optional[str]
|
||||
Image URL. (provider: polygon)
|
||||
keywords : Optional[Union[List[str]]]
|
||||
keywords : Optional[List[str]]
|
||||
Keywords in the article (provider: polygon)
|
||||
publisher : Optional[Union[openbb_polygon.models.stock_news.PolygonPublisher]]
|
||||
Publisher of the article. (provider: polygon)
|
||||
tickers : Optional[Union[List[str]]]
|
||||
Tickers covered in the article. (provider: polygon)""" # noqa: E501
|
||||
publisher : Optional[Union[openbb_polygon.models.stock_news.PolygonPublisher, str]]
|
||||
Publisher of the article. (provider: polygon, yfinance)
|
||||
tickers : Optional[List[str]]
|
||||
Tickers covered in the article. (provider: polygon)
|
||||
uuid : Optional[str]
|
||||
Unique identifier for the news article (provider: yfinance)
|
||||
type : Optional[str]
|
||||
Type of the news article (provider: yfinance)
|
||||
thumbnail : Optional[List]
|
||||
Thumbnail related data to the ticker news article. (provider: yfinance)
|
||||
related_tickers : Optional[str]
|
||||
Tickers related to the news article. (provider: yfinance)""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
provider_choices={
|
||||
@@ -471,6 +651,7 @@ class ROUTER_stocks(Container):
|
||||
"limit": limit,
|
||||
},
|
||||
extra_params=kwargs,
|
||||
chart=chart,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
@@ -487,11 +668,11 @@ class ROUTER_stocks(Container):
|
||||
@validate_call
|
||||
def quote(
|
||||
self,
|
||||
symbol: typing_extensions.Annotated[
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBCustomParameter(description="Comma separated list of symbols."),
|
||||
] = None,
|
||||
provider: Union[Literal["fmp", "intrinio"], None] = None,
|
||||
provider: Optional[Literal["fmp", "intrinio"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[Union[List[Data], Data]]:
|
||||
"""Load stock data for a specific ticker.
|
||||
@@ -500,7 +681,7 @@ class ROUTER_stocks(Container):
|
||||
----------
|
||||
symbol : str
|
||||
Comma separated list of symbols.
|
||||
provider : Union[Literal['fmp', 'intrinio'], None]
|
||||
provider : Optional[Literal['fmp', 'intrinio']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fmp' if there is
|
||||
no default.
|
||||
@@ -512,7 +693,7 @@ class ROUTER_stocks(Container):
|
||||
OBBject
|
||||
results : Union[List[StockQuote], StockQuote]
|
||||
Serializable results.
|
||||
provider : Union[Literal['fmp', 'intrinio'], None]
|
||||
provider : Optional[Literal['fmp', 'intrinio']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -523,29 +704,29 @@ class ROUTER_stocks(Container):
|
||||
|
||||
StockQuote
|
||||
----------
|
||||
day_low : Optional[Union[float]]
|
||||
day_low : Optional[float]
|
||||
Lowest price of the stock in the current trading day.
|
||||
day_high : Optional[Union[float]]
|
||||
day_high : Optional[float]
|
||||
Highest price of the stock in the current trading day.
|
||||
date : Optional[Union[datetime]]
|
||||
date : Optional[datetime]
|
||||
Timestamp of the stock quote.
|
||||
symbol : Optional[Union[str]]
|
||||
symbol : Optional[str]
|
||||
Symbol of the company. (provider: fmp)
|
||||
name : Optional[Union[str]]
|
||||
name : Optional[str]
|
||||
Name of the company. (provider: fmp)
|
||||
price : Optional[Union[float]]
|
||||
price : Optional[float]
|
||||
Current trading price of the stock. (provider: fmp)
|
||||
changes_percentage : Optional[Union[float]]
|
||||
changes_percentage : Optional[float]
|
||||
Change percentage of the stock price. (provider: fmp)
|
||||
change : Optional[Union[float]]
|
||||
change : Optional[float]
|
||||
Change in the stock price. (provider: fmp)
|
||||
year_high : Optional[Union[float]]
|
||||
year_high : Optional[float]
|
||||
Highest price of the stock in the last 52 weeks. (provider: fmp)
|
||||
year_low : Optional[Union[float]]
|
||||
year_low : Optional[float]
|
||||
Lowest price of the stock in the last 52 weeks. (provider: fmp)
|
||||
market_cap : Optional[Union[float]]
|
||||
market_cap : Optional[float]
|
||||
Market cap of the company. (provider: fmp)
|
||||
price_avg50 : Optional[Union[float]]
|
||||
price_avg50 : Optional[float]
|
||||
50 days average price of the stock. (provider: fmp)
|
||||
price_avg200 : Optional[int]
|
||||
200 days average price of the stock. (provider: fmp)
|
||||
@@ -553,63 +734,63 @@ class ROUTER_stocks(Container):
|
||||
Volume of the stock in the current trading day. (provider: fmp)
|
||||
avg_volume : Optional[int]
|
||||
Average volume of the stock in the last 10 trading days. (provider: fmp)
|
||||
exchange : Optional[Union[str]]
|
||||
exchange : Optional[str]
|
||||
Exchange the stock is traded on. (provider: fmp)
|
||||
open : Optional[Union[float]]
|
||||
open : Optional[float]
|
||||
Opening price of the stock in the current trading day. (provider: fmp)
|
||||
previous_close : Optional[Union[float]]
|
||||
previous_close : Optional[float]
|
||||
Previous closing price of the stock. (provider: fmp)
|
||||
eps : Optional[Union[float]]
|
||||
eps : Optional[float]
|
||||
Earnings per share of the stock. (provider: fmp)
|
||||
pe : Optional[Union[float]]
|
||||
pe : Optional[float]
|
||||
Price earnings ratio of the stock. (provider: fmp)
|
||||
earnings_announcement : Optional[Union[str]]
|
||||
earnings_announcement : Optional[str]
|
||||
Earnings announcement date of the stock. (provider: fmp)
|
||||
shares_outstanding : Optional[int]
|
||||
Number of shares outstanding of the stock. (provider: fmp)
|
||||
last_price : Optional[Union[float]]
|
||||
last_price : Optional[float]
|
||||
Price of the last trade. (provider: intrinio)
|
||||
last_time : Optional[Union[datetime]]
|
||||
last_time : Optional[datetime]
|
||||
Date and Time when the last trade occurred. (provider: intrinio)
|
||||
last_size : Optional[Union[int]]
|
||||
last_size : Optional[int]
|
||||
Size of the last trade. (provider: intrinio)
|
||||
bid_price : Optional[Union[float]]
|
||||
bid_price : Optional[float]
|
||||
Price of the top bid order. (provider: intrinio)
|
||||
bid_size : Optional[Union[int]]
|
||||
bid_size : Optional[int]
|
||||
Size of the top bid order. (provider: intrinio)
|
||||
ask_price : Optional[Union[float]]
|
||||
ask_price : Optional[float]
|
||||
Price of the top ask order. (provider: intrinio)
|
||||
ask_size : Optional[Union[int]]
|
||||
ask_size : Optional[int]
|
||||
Size of the top ask order. (provider: intrinio)
|
||||
open_price : Optional[Union[float]]
|
||||
open_price : Optional[float]
|
||||
Open price for the trading day. (provider: intrinio)
|
||||
close_price : Optional[Union[float]]
|
||||
close_price : Optional[float]
|
||||
Closing price for the trading day (IEX source only). (provider: intrinio)
|
||||
high_price : Optional[Union[float]]
|
||||
high_price : Optional[float]
|
||||
High Price for the trading day. (provider: intrinio)
|
||||
low_price : Optional[Union[float]]
|
||||
low_price : Optional[float]
|
||||
Low Price for the trading day. (provider: intrinio)
|
||||
exchange_volume : Optional[Union[int]]
|
||||
exchange_volume : Optional[int]
|
||||
Number of shares exchanged during the trading day on the exchange. (provider: intrinio)
|
||||
market_volume : Optional[Union[int]]
|
||||
market_volume : Optional[int]
|
||||
Number of shares exchanged during the trading day for the whole market. (provider: intrinio)
|
||||
updated_on : Optional[Union[datetime]]
|
||||
updated_on : Optional[datetime]
|
||||
Date and Time when the data was last updated. (provider: intrinio)
|
||||
source : Optional[Union[str]]
|
||||
source : Optional[str]
|
||||
Source of the data. (provider: intrinio)
|
||||
listing_venue : Optional[Union[str]]
|
||||
listing_venue : Optional[str]
|
||||
Listing venue where the trade took place (SIP source only). (provider: intrinio)
|
||||
sales_conditions : Optional[Union[str]]
|
||||
sales_conditions : Optional[str]
|
||||
Indicates any sales condition modifiers associated with the trade. (provider: intrinio)
|
||||
quote_conditions : Optional[Union[str]]
|
||||
quote_conditions : Optional[str]
|
||||
Indicates any quote condition modifiers associated with the trade. (provider: intrinio)
|
||||
market_center_code : Optional[Union[str]]
|
||||
market_center_code : Optional[str]
|
||||
Market center character code. (provider: intrinio)
|
||||
is_darkpool : Optional[Union[bool]]
|
||||
is_darkpool : Optional[bool]
|
||||
Whether or not the current trade is from a darkpool. (provider: intrinio)
|
||||
messages : Optional[Union[List[str]]]
|
||||
messages : Optional[List[str]]
|
||||
Messages associated with the endpoint. (provider: intrinio)
|
||||
security : Optional[Union[Dict[str, Any]]]
|
||||
security : Optional[Dict[str, Any]]
|
||||
Security details related to the quote. (provider: intrinio)""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
@@ -626,3 +807,68 @@ class ROUTER_stocks(Container):
|
||||
"/stocks/quote",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@validate_call
|
||||
def search(
|
||||
self,
|
||||
query: Annotated[str, OpenBBCustomParameter(description="Search query.")] = "",
|
||||
ticker: Annotated[
|
||||
bool,
|
||||
OpenBBCustomParameter(description="Whether to search by ticker symbol."),
|
||||
] = False,
|
||||
provider: Optional[Literal["cboe"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Search for a company or stock ticker.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
query : str
|
||||
Search query.
|
||||
ticker : bool
|
||||
Whether to search by ticker symbol.
|
||||
provider : Optional[Literal['cboe']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'cboe' if there is
|
||||
no default.
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : List[StockSearch]
|
||||
Serializable results.
|
||||
provider : Optional[Literal['cboe']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
chart : Optional[Chart]
|
||||
Chart object.
|
||||
extra: Dict[str, Any]
|
||||
Extra info.
|
||||
|
||||
StockSearch
|
||||
-----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
name : str
|
||||
Name of the company.
|
||||
dpm_name : Optional[str]
|
||||
Name of the primary market maker. (provider: cboe)
|
||||
post_station : Optional[str]
|
||||
Post and station location on the CBOE trading floor. (provider: cboe)""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
provider_choices={
|
||||
"provider": provider,
|
||||
},
|
||||
standard_params={
|
||||
"query": query,
|
||||
"ticker": ticker,
|
||||
},
|
||||
extra_params=kwargs,
|
||||
)
|
||||
|
||||
return self._run(
|
||||
"/stocks/search",
|
||||
**inputs,
|
||||
)
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###
|
||||
|
||||
from typing import List, Literal, Union
|
||||
from typing import List, Literal, Optional, Union
|
||||
|
||||
import typing_extensions
|
||||
from openbb_core.app.model.custom_parameter import OpenBBCustomParameter
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
from openbb_core.app.static.container import Container
|
||||
from openbb_core.app.static.filters import filter_inputs
|
||||
from openbb_provider.abstract.data import Data
|
||||
from pydantic import validate_call
|
||||
from typing_extensions import Annotated
|
||||
|
||||
|
||||
class ROUTER_stocks_ca(Container):
|
||||
@@ -22,11 +22,11 @@ class ROUTER_stocks_ca(Container):
|
||||
@validate_call
|
||||
def peers(
|
||||
self,
|
||||
symbol: typing_extensions.Annotated[
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBCustomParameter(description="Symbol to get data for."),
|
||||
],
|
||||
provider: Union[Literal["fmp"], None] = None,
|
||||
provider: Optional[Literal["fmp"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[Data]:
|
||||
"""Company peers.
|
||||
@@ -35,7 +35,7 @@ class ROUTER_stocks_ca(Container):
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
provider : Union[Literal['fmp'], None]
|
||||
provider : Optional[Literal['fmp']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'fmp' if there is
|
||||
no default.
|
||||
@@ -43,9 +43,9 @@ class ROUTER_stocks_ca(Container):
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[StockPeers]
|
||||
results : StockPeers
|
||||
Serializable results.
|
||||
provider : Union[Literal['fmp'], None]
|
||||
provider : Optional[Literal['fmp']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
|
||||
@@ -1350,10 +1350,10 @@ class ROUTER_stocks_fa(Container):
|
||||
URL to the document.
|
||||
symbol : Optional[str]
|
||||
The ticker symbol of the company. (provider: fmp)
|
||||
accepted_date : Optional[date]
|
||||
Accepted date of the SEC filing. (provider: fmp)
|
||||
cik : Optional[str]
|
||||
CIK of the SEC filing. (provider: fmp)
|
||||
accepted_date : Optional[datetime]
|
||||
Accepted date of the SEC filing. (provider: fmp)
|
||||
final_link : Optional[str]
|
||||
Final link of the SEC filing. (provider: fmp)""" # noqa: E501
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###
|
||||
|
||||
from typing import List, Literal, Union
|
||||
from typing import List, Literal, Optional, Union
|
||||
|
||||
import typing_extensions
|
||||
from openbb_core.app.model.custom_parameter import OpenBBCustomParameter
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
from openbb_core.app.static.container import Container
|
||||
from openbb_core.app.static.filters import filter_inputs
|
||||
from openbb_provider.abstract.data import Data
|
||||
from pydantic import validate_call
|
||||
from typing_extensions import Annotated
|
||||
|
||||
|
||||
class ROUTER_stocks_options(Container):
|
||||
@@ -22,11 +22,11 @@ class ROUTER_stocks_options(Container):
|
||||
@validate_call
|
||||
def chains(
|
||||
self,
|
||||
symbol: typing_extensions.Annotated[
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBCustomParameter(description="Symbol to get data for."),
|
||||
],
|
||||
provider: Union[Literal["intrinio"], None] = None,
|
||||
provider: Optional[Literal["cboe", "intrinio"]] = None,
|
||||
**kwargs
|
||||
) -> OBBject[List[Data]]:
|
||||
"""Get the complete options chain for a ticker.
|
||||
@@ -35,19 +35,19 @@ class ROUTER_stocks_options(Container):
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
provider : Union[Literal['intrinio'], None]
|
||||
provider : Optional[Literal['cboe', 'intrinio']]
|
||||
The provider to use for the query, by default None.
|
||||
If None, the provider specified in defaults is selected or 'intrinio' if there is
|
||||
If None, the provider specified in defaults is selected or 'cboe' if there is
|
||||
no default.
|
||||
date : Optional[Union[str]]
|
||||
date : Optional[str]
|
||||
Date for which the options chains are returned. (provider: intrinio)
|
||||
|
||||
Returns
|
||||
-------
|
||||
OBBject
|
||||
results : Union[List[OptionsChains]]
|
||||
results : List[OptionsChains]
|
||||
Serializable results.
|
||||
provider : Union[Literal['intrinio'], None]
|
||||
provider : Optional[Literal['cboe', 'intrinio']]
|
||||
Provider name.
|
||||
warnings : Optional[List[Warning_]]
|
||||
List of warnings.
|
||||
@@ -70,46 +70,68 @@ class ROUTER_stocks_options(Container):
|
||||
Call or Put.
|
||||
date : date
|
||||
Date for which the options chains are returned.
|
||||
close : Optional[Union[float]]
|
||||
close : Optional[float]
|
||||
Close price for the option that day.
|
||||
close_bid : Optional[Union[float]]
|
||||
close_bid : Optional[float]
|
||||
The closing bid price for the option that day.
|
||||
close_ask : Optional[Union[float]]
|
||||
close_ask : Optional[float]
|
||||
The closing ask price for the option that day.
|
||||
volume : Optional[Union[float]]
|
||||
volume : Optional[float]
|
||||
Current trading volume on the contract.
|
||||
open : Optional[Union[float]]
|
||||
open : Optional[float]
|
||||
Opening price of the option.
|
||||
open_bid : Optional[Union[float]]
|
||||
open_bid : Optional[float]
|
||||
The opening bid price for the option that day.
|
||||
open_ask : Optional[Union[float]]
|
||||
open_ask : Optional[float]
|
||||
The opening ask price for the option that day.
|
||||
open_interest : Optional[Union[float]]
|
||||
open_interest : Optional[float]
|
||||
Open interest on the contract.
|
||||
high : Optional[Union[float]]
|
||||
high : Optional[float]
|
||||
High price of the option.
|
||||
low : Optional[Union[float]]
|
||||
low : Optional[float]
|
||||
Low price of the option.
|
||||
mark : Optional[Union[float]]
|
||||
mark : Optional[float]
|
||||
The mid-price between the latest bid-ask spread.
|
||||
ask_high : Optional[Union[float]]
|
||||
ask_high : Optional[float]
|
||||
The highest ask price for the option that day.
|
||||
ask_low : Optional[Union[float]]
|
||||
ask_low : Optional[float]
|
||||
The lowest ask price for the option that day.
|
||||
bid_high : Optional[Union[float]]
|
||||
bid_high : Optional[float]
|
||||
The highest bid price for the option that day.
|
||||
bid_low : Optional[Union[float]]
|
||||
bid_low : Optional[float]
|
||||
The lowest bid price for the option that day.
|
||||
implied_volatility : Optional[Union[float]]
|
||||
implied_volatility : Optional[float]
|
||||
Implied volatility of the option.
|
||||
delta : Optional[Union[float]]
|
||||
delta : Optional[float]
|
||||
Delta of the option.
|
||||
gamma : Optional[Union[float]]
|
||||
gamma : Optional[float]
|
||||
Gamma of the option.
|
||||
theta : Optional[Union[float]]
|
||||
theta : Optional[float]
|
||||
Theta of the option.
|
||||
vega : Optional[Union[float]]
|
||||
Vega of the option.""" # noqa: E501
|
||||
vega : Optional[float]
|
||||
Vega of the option.
|
||||
bid_size : Optional[int]
|
||||
Bid size for the option. (provider: cboe)
|
||||
ask_size : Optional[int]
|
||||
Ask size for the option. (provider: cboe)
|
||||
theoretical : Optional[float]
|
||||
Theoretical value of the option. (provider: cboe)
|
||||
last_trade_price : Optional[float]
|
||||
Last trade price of the option. (provider: cboe)
|
||||
tick : Optional[str]
|
||||
Whether the last tick was up or down in price. (provider: cboe)
|
||||
prev_close : Optional[float]
|
||||
Previous closing price of the option. (provider: cboe)
|
||||
change : Optional[float]
|
||||
Change in price of the option. (provider: cboe)
|
||||
change_percent : Optional[float]
|
||||
Change, in percent, of the option. (provider: cboe)
|
||||
rho : Optional[float]
|
||||
Rho of the option. (provider: cboe)
|
||||
last_trade_timestamp : Optional[datetime]
|
||||
Last trade timestamp of the option. (provider: cboe)
|
||||
dte : Optional[int]
|
||||
Days to expiration for the option. (provider: cboe)""" # noqa: E501
|
||||
|
||||
inputs = filter_inputs(
|
||||
provider_choices={
|
||||
|
||||
1485
openbb_platform/openbb/package/ta.py
Normal file
1485
openbb_platform/openbb/package/ta.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,39 @@
|
||||
"""GDP data and query params."""
|
||||
from datetime import date as dateType
|
||||
from typing import Literal, Optional
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
from openbb_provider.abstract.data import Data
|
||||
from openbb_provider.abstract.query_params import QueryParams
|
||||
from openbb_provider.utils.descriptions import DATA_DESCRIPTIONS, QUERY_DESCRIPTIONS
|
||||
|
||||
|
||||
class GDPForecastQueryParams(QueryParams):
|
||||
"""GDP Forecast query."""
|
||||
|
||||
period: Literal["quarter", "annual"] = Field(
|
||||
default="annual",
|
||||
description="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.",
|
||||
)
|
||||
|
||||
|
||||
class GDPForecastData(Data):
|
||||
"""Nominal 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."
|
||||
)
|
||||
@@ -0,0 +1,35 @@
|
||||
"""GDP data and query params."""
|
||||
from datetime import date as dateType
|
||||
from typing import Literal, Optional
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
from openbb_provider.abstract.data import Data
|
||||
from openbb_provider.abstract.query_params import QueryParams
|
||||
from openbb_provider.utils.descriptions import DATA_DESCRIPTIONS, QUERY_DESCRIPTIONS
|
||||
|
||||
|
||||
class GDPNomQueryParams(QueryParams):
|
||||
"""Nominal GDP query."""
|
||||
|
||||
units: Literal["usd", "usd_cap"] = Field(
|
||||
default="usd",
|
||||
description="Units to get nominal GDP in. Either usd or usd_cap indicating per capita.",
|
||||
)
|
||||
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 GDPNomData(Data):
|
||||
"""Nominal 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."
|
||||
)
|
||||
@@ -0,0 +1,35 @@
|
||||
"""GDP data and query params."""
|
||||
from datetime import date as dateType
|
||||
from typing import Literal, Optional
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
from openbb_provider.abstract.data import Data
|
||||
from openbb_provider.abstract.query_params import QueryParams
|
||||
from openbb_provider.utils.descriptions import DATA_DESCRIPTIONS, QUERY_DESCRIPTIONS
|
||||
|
||||
|
||||
class GDPRealQueryParams(QueryParams):
|
||||
"""Real GDP query."""
|
||||
|
||||
units: Literal["idx", "qoq", "yoy"] = Field(
|
||||
default="yoy",
|
||||
description="Units to get real GDP in. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).)",
|
||||
)
|
||||
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 GDPRealData(Data):
|
||||
"""Real 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."
|
||||
)
|
||||
@@ -11,7 +11,7 @@ python = "^3.8"
|
||||
importlib_metadata = "^6.8.0"
|
||||
pydantic = "^2.4.2"
|
||||
requests = "^2.31.0"
|
||||
urllib3 = "<2.0.0"
|
||||
urllib3 = ">2.0.0"
|
||||
importlib-metadata = "^6.8.0"
|
||||
python-dotenv = "^1.0.0"
|
||||
pytest-recorder = "^0.2.3"
|
||||
|
||||
0
openbb_platform/providers/oecd/README.md
vendored
Normal file
0
openbb_platform/providers/oecd/README.md
vendored
Normal file
0
openbb_platform/providers/oecd/__init__.py
Normal file
0
openbb_platform/providers/oecd/__init__.py
Normal file
16
openbb_platform/providers/oecd/openbb_oecd/__init__.py
Normal file
16
openbb_platform/providers/oecd/openbb_oecd/__init__.py
Normal file
@@ -0,0 +1,16 @@
|
||||
"""FRED provider module."""
|
||||
from openbb_oecd.models.gdpforecast import OECDGDPForecastFetcher
|
||||
from openbb_oecd.models.gdpnom import OECDGDPNomFetcher
|
||||
from openbb_oecd.models.gdpreal import OECDGDPRealFetcher
|
||||
from openbb_provider.abstract.provider import Provider
|
||||
|
||||
oecd_provider = Provider(
|
||||
name="oecd",
|
||||
website="https://stats.oecd.org/",
|
||||
description="""OECD""",
|
||||
fetcher_dict={
|
||||
"GDPNom": OECDGDPNomFetcher,
|
||||
"GDPReal": OECDGDPRealFetcher,
|
||||
"GDPForecast": OECDGDPForecastFetcher,
|
||||
},
|
||||
)
|
||||
@@ -0,0 +1,94 @@
|
||||
import re
|
||||
from datetime import date
|
||||
from typing import Any, Dict, List, Literal, Optional, Union
|
||||
|
||||
from openbb_oecd.utils import constants, helpers
|
||||
from openbb_provider.abstract.fetcher import Fetcher
|
||||
from openbb_provider.standard_models.gdpforecast import (
|
||||
GDPForecastData,
|
||||
GDPForecastQueryParams,
|
||||
)
|
||||
from pydantic import Field, field_validator
|
||||
|
||||
gdp_countries = tuple(constants.COUNTRY_TO_CODE_GDP_FORECAST.keys())
|
||||
|
||||
|
||||
class OECDGDPForecastQueryParams(GDPForecastQueryParams):
|
||||
"""GDP Forecast query."""
|
||||
|
||||
country: Literal[*gdp_countries] = Field(
|
||||
description="Country to get GDP for.", default="united_states"
|
||||
)
|
||||
|
||||
|
||||
class OECDGDPForecastData(GDPForecastData):
|
||||
"""GDP Forecast data from OECD."""
|
||||
|
||||
@field_validator("date", mode="before")
|
||||
@classmethod
|
||||
def date_validate(
|
||||
cls, in_date: Union[date, Union[str, int]]
|
||||
): # pylint: disable=E0213
|
||||
"""Validate value."""
|
||||
# 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(quarter[1])
|
||||
month = quarter * 3
|
||||
return date(int(year), month, 1)
|
||||
else:
|
||||
raise ValueError("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]]
|
||||
):
|
||||
"""OECD GDP Forecast Fetcher."""
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> OECDGDPForecastQueryParams:
|
||||
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)
|
||||
|
||||
return OECDGDPForecastQueryParams(**transformed_params)
|
||||
|
||||
@staticmethod
|
||||
def extract_data(
|
||||
query: OECDGDPForecastQueryParams,
|
||||
credentials: Optional[Dict[str, str]],
|
||||
**kwargs: Any,
|
||||
) -> dict:
|
||||
units = query.period[0].upper()
|
||||
if query.type == "real":
|
||||
url = f"https://stats.oecd.org/sdmx-json/data/DP_LIVE/.REALGDPFORECAST.TOT.AGRWTH.{units}/OECD?contentType=csv&detail=code&separator=comma&csv-lang=en&startPeriod={query.start_date}&endPeriod={query.end_date}"
|
||||
elif query.type == "nominal":
|
||||
url = f"https://stats.oecd.org/sdmx-json/data/DP_LIVE/.NOMGDPFORECAST.TOT.AGRWTH.{units}/OECD?contentType=csv&detail=code&separator=comma&csv-lang=en&startPeriod={query.start_date}&endPeriod={query.end_date}"
|
||||
|
||||
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": "date",
|
||||
"Value": "value",
|
||||
"Location": "country",
|
||||
}
|
||||
)
|
||||
data_df["country"] = data_df["country"].map(
|
||||
constants.CODE_TO_COUNTRY_GDP_FORECAST
|
||||
)
|
||||
data_df = data_df[data_df["country"] == query.country]
|
||||
data_df = data_df[["country", "date", "value"]]
|
||||
return data_df.to_dict(orient="records")
|
||||
|
||||
@staticmethod
|
||||
def transform_data(data: dict) -> List[OECDGDPForecastData]:
|
||||
return [OECDGDPForecastData.model_validate(d) for d in data]
|
||||
74
openbb_platform/providers/oecd/openbb_oecd/models/gdpnom.py
Normal file
74
openbb_platform/providers/oecd/openbb_oecd/models/gdpnom.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""OECD GDP Fetcher."""
|
||||
|
||||
|
||||
from datetime import date
|
||||
from typing import Any, Dict, List, Literal, Optional, Union
|
||||
|
||||
from openbb_oecd.utils import constants, helpers
|
||||
from openbb_provider.abstract.fetcher import Fetcher
|
||||
from openbb_provider.standard_models.gdpnom import GDPNomData, GDPNomQueryParams
|
||||
from pydantic import Field, field_validator
|
||||
|
||||
gdp_countries = tuple(constants.COUNTRY_TO_CODE_GDP.keys())
|
||||
|
||||
|
||||
class OECDGDPNomQueryParams(GDPNomQueryParams):
|
||||
"""GDP query."""
|
||||
|
||||
country: Literal[*gdp_countries] = Field(
|
||||
description="Country to get GDP for.", default="united_states"
|
||||
)
|
||||
|
||||
|
||||
class OECDGDPNomData(GDPNomData):
|
||||
"""Nominal GDP data from OECD."""
|
||||
|
||||
@field_validator("date", mode="before")
|
||||
@classmethod
|
||||
def date_validate(cls, in_date: Union[date, int]): # pylint: disable=E0213
|
||||
"""Validate value."""
|
||||
if isinstance(in_date, int):
|
||||
return date(in_date, 12, 31)
|
||||
return date
|
||||
|
||||
|
||||
class OECDGDPNomFetcher(Fetcher[OECDGDPNomQueryParams, List[OECDGDPNomData]]):
|
||||
"""OECD Nominal GDP Fetcher."""
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> OECDGDPNomQueryParams:
|
||||
transformed_params = params.copy()
|
||||
if transformed_params["start_date"] is None:
|
||||
transformed_params["start_date"] = date(1950, 1, 1)
|
||||
if transformed_params["end_date"] is None:
|
||||
transformed_params["end_date"] = date(date.today().year, 12, 31)
|
||||
|
||||
return OECDGDPNomQueryParams(**transformed_params)
|
||||
|
||||
@staticmethod
|
||||
def extract_data(
|
||||
query: OECDGDPNomQueryParams,
|
||||
credentials: Optional[Dict[str, str]],
|
||||
**kwargs: Any,
|
||||
) -> dict:
|
||||
unit = "MLN_USD" if query.units == "usd" else "USD_CAP"
|
||||
url = f"https://stats.oecd.org/sdmx-json/data/DP_LIVE/.GDP.TOT.{unit}.A/OECD?contentType=csv&detail=code&separator=comma&csv-lang=en&startPeriod={query.start_date}&endPeriod={query.end_date}"
|
||||
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": "date",
|
||||
"Value": "value",
|
||||
"Location": "country",
|
||||
}
|
||||
)
|
||||
data_df["country"] = data_df["country"].map(constants.CODE_TO_COUNTRY_GDP)
|
||||
data_df = data_df[data_df["country"] == query.country]
|
||||
data_df = data_df[["country", "date", "value"]]
|
||||
return data_df.to_dict(orient="records")
|
||||
|
||||
@staticmethod
|
||||
def transform_data(data: dict) -> List[OECDGDPNomData]:
|
||||
return [OECDGDPNomData.model_validate(d) for d in data]
|
||||
83
openbb_platform/providers/oecd/openbb_oecd/models/gdpreal.py
Normal file
83
openbb_platform/providers/oecd/openbb_oecd/models/gdpreal.py
Normal file
@@ -0,0 +1,83 @@
|
||||
"""OECD GDP Fetcher."""
|
||||
|
||||
|
||||
from datetime import date
|
||||
from typing import Any, Dict, List, Literal, Optional, Union
|
||||
|
||||
from openbb_oecd.utils import constants, helpers
|
||||
from openbb_provider.abstract.fetcher import Fetcher
|
||||
from openbb_provider.standard_models.gdpreal import GDPRealData, GDPRealQueryParams
|
||||
from pydantic import Field, field_validator
|
||||
|
||||
rgdp_countries = tuple(constants.COUNTRY_TO_CODE_RGDP.keys())
|
||||
|
||||
|
||||
class OECDGDPRealQueryParams(GDPRealQueryParams):
|
||||
"""GDP query."""
|
||||
|
||||
country: Literal[*rgdp_countries] = Field(
|
||||
description="Country to get GDP for.", default="united_states"
|
||||
)
|
||||
|
||||
|
||||
class OECDGDPRealData(GDPRealData):
|
||||
"""Nominal GDP data from OECD."""
|
||||
|
||||
@field_validator("date", mode="before")
|
||||
@classmethod
|
||||
def date_validate(cls, in_date: Union[date, str]): # pylint: disable=E0213
|
||||
"""Validate value."""
|
||||
if isinstance(in_date, str):
|
||||
year, quarter = in_date.split("-")
|
||||
year = int(year)
|
||||
if quarter == "Q1":
|
||||
return date(year, 3, 31)
|
||||
elif quarter == "Q2":
|
||||
return date(year, 6, 30)
|
||||
elif quarter == "Q3":
|
||||
return date(year, 9, 30)
|
||||
elif quarter == "Q4":
|
||||
return date(year, 12, 31)
|
||||
return in_date
|
||||
|
||||
|
||||
class OECDGDPRealFetcher(Fetcher[OECDGDPRealQueryParams, List[OECDGDPRealData]]):
|
||||
"""OECD Nominal GDP Fetcher."""
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> OECDGDPRealQueryParams:
|
||||
transformed_params = params.copy()
|
||||
if transformed_params["start_date"] is None:
|
||||
transformed_params["start_date"] = date(1950, 1, 1)
|
||||
if transformed_params["end_date"] is None:
|
||||
transformed_params["end_date"] = date(date.today().year, 12, 31)
|
||||
|
||||
return OECDGDPRealQueryParams(**transformed_params)
|
||||
|
||||
@staticmethod
|
||||
def extract_data(
|
||||
query: OECDGDPRealQueryParams,
|
||||
credentials: Optional[Dict[str, str]],
|
||||
**kwargs: Any,
|
||||
) -> dict:
|
||||
units = {"qoq": "PC_CHGPP", "yoy": "PC_CHGPY", "idx": "IDX"}[query.units]
|
||||
url = f"https://stats.oecd.org/sdmx-json/data/DP_LIVE/.QGDP.{'VOLIDX' if units == 'IDX' else 'TOT'}.{units}.Q/OECD?contentType=csv&detail=code&separator=comma&csv-lang=en&startPeriod={query.start_date}&endPeriod={query.end_date}"
|
||||
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": "date",
|
||||
"Value": "value",
|
||||
"Location": "country",
|
||||
}
|
||||
)
|
||||
data_df["country"] = data_df["country"].map(constants.CODE_TO_COUNTRY_RGDP)
|
||||
data_df = data_df[data_df["country"] == query.country]
|
||||
data_df = data_df[["country", "date", "value"]]
|
||||
return data_df.to_dict(orient="records")
|
||||
|
||||
@staticmethod
|
||||
def transform_data(data: dict) -> List[OECDGDPRealData]:
|
||||
return [OECDGDPRealData.model_validate(d) for d in data]
|
||||
456
openbb_platform/providers/oecd/openbb_oecd/utils/constants.py
Normal file
456
openbb_platform/providers/oecd/openbb_oecd/utils/constants.py
Normal file
@@ -0,0 +1,456 @@
|
||||
COUNTRY_TO_CODE_GDP = {
|
||||
"australia": "AUS",
|
||||
"austria": "AUT",
|
||||
"belgium": "BEL",
|
||||
"brazil": "BRA",
|
||||
"canada": "CAN",
|
||||
"chile": "CHL",
|
||||
"colombia": "COL",
|
||||
"costa_rica": "CRI",
|
||||
"czech_republic": "CZE",
|
||||
"denmark": "DNK",
|
||||
"estonia": "EST",
|
||||
"euro_area": "EA",
|
||||
"european_union": "EU",
|
||||
"finland": "FIN",
|
||||
"france": "FRA",
|
||||
"germany": "DEU",
|
||||
"greece": "GRC",
|
||||
"hungary": "HUN",
|
||||
"iceland": "ISL",
|
||||
"indonesia": "IDN",
|
||||
"ireland": "IRL",
|
||||
"israel": "ISR",
|
||||
"italy": "ITA",
|
||||
"japan": "JPN",
|
||||
"korea": "KOR",
|
||||
"latvia": "LVA",
|
||||
"lithuania": "LTU",
|
||||
"luxembourg": "LUX",
|
||||
"mexico": "MEX",
|
||||
"netherlands": "NLD",
|
||||
"new_zealand": "NZL",
|
||||
"norway": "NOR",
|
||||
"poland": "POL",
|
||||
"portugal": "PRT",
|
||||
"russia": "RUS",
|
||||
"slovak_republic": "SVK",
|
||||
"slovenia": "SVN",
|
||||
"south_africa": "ZAF",
|
||||
"spain": "ESP",
|
||||
"sweden": "SWE",
|
||||
"switzerland": "CHE",
|
||||
"turkey": "TUR",
|
||||
"united_kingdom": "GBR",
|
||||
"united_states": "USA",
|
||||
}
|
||||
|
||||
CODE_TO_COUNTRY_GDP = {v: k for k, v in COUNTRY_TO_CODE_GDP.items()}
|
||||
|
||||
COUNTRY_TO_CODE_RGDP = {
|
||||
"G20": "G-20",
|
||||
"G7": "G-7",
|
||||
"argentina": "ARG",
|
||||
"australia": "AUS",
|
||||
"austria": "AUT",
|
||||
"belgium": "BEL",
|
||||
"brazil": "BRA",
|
||||
"bulgaria": "BGR",
|
||||
"canada": "CAN",
|
||||
"chile": "CHL",
|
||||
"china": "CHN",
|
||||
"colombia": "COL",
|
||||
"costa_rica": "CRI",
|
||||
"croatia": "HRV",
|
||||
"czech_republic": "CZE",
|
||||
"denmark": "DNK",
|
||||
"estonia": "EST",
|
||||
"euro_area_19": "EA19",
|
||||
"europe": "OECDE",
|
||||
"european_union_27": "EU27_2020",
|
||||
"finland": "FIN",
|
||||
"france": "FRA",
|
||||
"germany": "DEU",
|
||||
"greece": "GRC",
|
||||
"hungary": "HUN",
|
||||
"iceland": "ISL",
|
||||
"india": "IND",
|
||||
"indonesia": "IDN",
|
||||
"ireland": "IRL",
|
||||
"israel": "ISR",
|
||||
"italy": "ITA",
|
||||
"japan": "JPN",
|
||||
"korea": "KOR",
|
||||
"latvia": "LVA",
|
||||
"lithuania": "LTU",
|
||||
"luxembourg": "LUX",
|
||||
"mexico": "MEX",
|
||||
"netherlands": "NLD",
|
||||
"new_zealand": "NZL",
|
||||
"norway": "NOR",
|
||||
"oecd_total": "OECD",
|
||||
"poland": "POL",
|
||||
"portugal": "PRT",
|
||||
"romania": "ROU",
|
||||
"russia": "RUS",
|
||||
"saudi_arabia": "SAU",
|
||||
"slovak_republic": "SVK",
|
||||
"slovenia": "SVN",
|
||||
"south_africa": "ZAF",
|
||||
"spain": "ESP",
|
||||
"sweden": "SWE",
|
||||
"switzerland": "CHE",
|
||||
"turkey": "TUR",
|
||||
"united_kingdom": "GBR",
|
||||
"united_states": "USA",
|
||||
}
|
||||
|
||||
CODE_TO_COUNTRY_RGDP = {v: k for k, v in COUNTRY_TO_CODE_RGDP.items()}
|
||||
|
||||
COUNTRY_TO_CODE_GDP_FORECAST = {
|
||||
"argentina": "ARG",
|
||||
"asia": "DAE",
|
||||
"australia": "AUS",
|
||||
"austria": "AUT",
|
||||
"belgium": "BEL",
|
||||
"brazil": "BRA",
|
||||
"bulgaria": "BGR",
|
||||
"canada": "CAN",
|
||||
"chile": "CHL",
|
||||
"china": "CHN",
|
||||
"colombia": "COL",
|
||||
"costa_rica": "CRI",
|
||||
"croatia": "HRV",
|
||||
"czech_republic": "CZE",
|
||||
"denmark": "DNK",
|
||||
"estonia": "EST",
|
||||
"euro_area_17": "EA17",
|
||||
"finland": "FIN",
|
||||
"france": "FRA",
|
||||
"germany": "DEU",
|
||||
"greece": "GRC",
|
||||
"hungary": "HUN",
|
||||
"iceland": "ISL",
|
||||
"india": "IND",
|
||||
"indonesia": "IDN",
|
||||
"ireland": "IRL",
|
||||
"israel": "ISR",
|
||||
"italy": "ITA",
|
||||
"japan": "JPN",
|
||||
"korea": "KOR",
|
||||
"latvia": "LVA",
|
||||
"lithuania": "LTU",
|
||||
"luxembourg": "LUX",
|
||||
"mexico": "MEX",
|
||||
"netherlands": "NLD",
|
||||
"new_zealand": "NZL",
|
||||
"non-oecd": "NMEC",
|
||||
"norway": "NOR",
|
||||
"oecd_total": "OECD",
|
||||
"peru": "PER",
|
||||
"poland": "POL",
|
||||
"portugal": "PRT",
|
||||
"romania": "ROU",
|
||||
"russia": "RUS",
|
||||
"slovak_republic": "SVK",
|
||||
"slovenia": "SVN",
|
||||
"south_africa": "ZAF",
|
||||
"spain": "ESP",
|
||||
"sweden": "SWE",
|
||||
"switzerland": "CHE",
|
||||
"turkey": "TUR",
|
||||
"united_kingdom": "GBR",
|
||||
"united_states": "USA",
|
||||
"world": "WLD",
|
||||
}
|
||||
|
||||
CODE_TO_COUNTRY_GDP_FORECAST = {v: k for k, v in COUNTRY_TO_CODE_GDP_FORECAST.items()}
|
||||
|
||||
COUNTRY_TO_CODE_CPI = {
|
||||
"G20": "G-20",
|
||||
"G7": "G-7",
|
||||
"argentina": "ARG",
|
||||
"australia": "AUS",
|
||||
"austria": "AUT",
|
||||
"belgium": "BEL",
|
||||
"brazil": "BRA",
|
||||
"canada": "CAN",
|
||||
"chile": "CHL",
|
||||
"china": "CHN",
|
||||
"colombia": "COL",
|
||||
"costa_rica": "CRI",
|
||||
"czech_republic": "CZE",
|
||||
"denmark": "DNK",
|
||||
"estonia": "EST",
|
||||
"euro_area_19": "EA19",
|
||||
"europe": "OECDE",
|
||||
"european_union_27": "EU27_2020",
|
||||
"finland": "FIN",
|
||||
"france": "FRA",
|
||||
"germany": "DEU",
|
||||
"greece": "GRC",
|
||||
"hungary": "HUN",
|
||||
"iceland": "ISL",
|
||||
"india": "IND",
|
||||
"indonesia": "IDN",
|
||||
"ireland": "IRL",
|
||||
"israel": "ISR",
|
||||
"italy": "ITA",
|
||||
"japan": "JPN",
|
||||
"korea": "KOR",
|
||||
"latvia": "LVA",
|
||||
"lithuania": "LTU",
|
||||
"luxembourg": "LUX",
|
||||
"mexico": "MEX",
|
||||
"netherlands": "NLD",
|
||||
"new_zealand": "NZL",
|
||||
"norway": "NOR",
|
||||
"oecd_total": "OECD",
|
||||
"poland": "POL",
|
||||
"portugal": "PRT",
|
||||
"russia": "RUS",
|
||||
"saudi_arabia": "SAU",
|
||||
"slovak_republic": "SVK",
|
||||
"slovenia": "SVN",
|
||||
"south_africa": "ZAF",
|
||||
"spain": "ESP",
|
||||
"sweden": "SWE",
|
||||
"switzerland": "CHE",
|
||||
"turkey": "TUR",
|
||||
"united_kingdom": "GBR",
|
||||
"united_states": "USA",
|
||||
}
|
||||
|
||||
COUNTRY_TO_CODE_BALANCE = {
|
||||
"australia": "AUS",
|
||||
"austria": "AUT",
|
||||
"belgium": "BEL",
|
||||
"brazil": "BRA",
|
||||
"canada": "CAN",
|
||||
"chile": "CHL",
|
||||
"colombia": "COL",
|
||||
"costa_rica": "CRI",
|
||||
"czech_republic": "CZE",
|
||||
"denmark": "DNK",
|
||||
"estonia": "EST",
|
||||
"euro_area": "EA",
|
||||
"european_union": "EU",
|
||||
"finland": "FIN",
|
||||
"france": "FRA",
|
||||
"germany": "DEU",
|
||||
"greece": "GRC",
|
||||
"hungary": "HUN",
|
||||
"iceland": "ISL",
|
||||
"indonesia": "IDN",
|
||||
"ireland": "IRL",
|
||||
"israel": "ISR",
|
||||
"italy": "ITA",
|
||||
"japan": "JPN",
|
||||
"korea": "KOR",
|
||||
"latvia": "LVA",
|
||||
"lithuania": "LTU",
|
||||
"luxembourg": "LUX",
|
||||
"mexico": "MEX",
|
||||
"netherlands": "NLD",
|
||||
"new_zealand": "NZL",
|
||||
"norway": "NOR",
|
||||
"poland": "POL",
|
||||
"portugal": "PRT",
|
||||
"russia": "RUS",
|
||||
"slovak_republic": "SVK",
|
||||
"slovenia": "SVN",
|
||||
"south_africa": "ZAF",
|
||||
"spain": "ESP",
|
||||
"sweden": "SWE",
|
||||
"switzerland": "CHE",
|
||||
"turkey": "TUR",
|
||||
"united_kingdom": "GBR",
|
||||
"united_states": "USA",
|
||||
}
|
||||
|
||||
COUNTRY_TO_CODE_REVENUE = {
|
||||
"australia": "AUS",
|
||||
"austria": "AUT",
|
||||
"belgium": "BEL",
|
||||
"brazil": "BRA",
|
||||
"canada": "CAN",
|
||||
"chile": "CHL",
|
||||
"colombia": "COL",
|
||||
"costa_rica": "CRI",
|
||||
"czech_republic": "CZE",
|
||||
"denmark": "DNK",
|
||||
"estonia": "EST",
|
||||
"euro_area": "EA",
|
||||
"european_union": "EU",
|
||||
"finland": "FIN",
|
||||
"france": "FRA",
|
||||
"germany": "DEU",
|
||||
"greece": "GRC",
|
||||
"hungary": "HUN",
|
||||
"iceland": "ISL",
|
||||
"indonesia": "IDN",
|
||||
"ireland": "IRL",
|
||||
"israel": "ISR",
|
||||
"italy": "ITA",
|
||||
"japan": "JPN",
|
||||
"korea": "KOR",
|
||||
"latvia": "LVA",
|
||||
"lithuania": "LTU",
|
||||
"luxembourg": "LUX",
|
||||
"mexico": "MEX",
|
||||
"netherlands": "NLD",
|
||||
"new_zealand": "NZL",
|
||||
"norway": "NOR",
|
||||
"oecd_average": "OAVG",
|
||||
"oecd_europe": "OEU",
|
||||
"oecd_total": "OECD",
|
||||
"poland": "POL",
|
||||
"portugal": "PRT",
|
||||
"romania": "ROU",
|
||||
"russia": "RUS",
|
||||
"slovak_republic": "SVK",
|
||||
"slovenia": "SVN",
|
||||
"spain": "ESP",
|
||||
"sweden": "SWE",
|
||||
"switzerland": "CHE",
|
||||
"turkey": "TUR",
|
||||
"united_kingdom": "GBR",
|
||||
"united_states": "USA",
|
||||
}
|
||||
|
||||
COUNTRY_TO_CODE_SPENDING = {
|
||||
"australia": "AUS",
|
||||
"austria": "AUT",
|
||||
"belgium": "BEL",
|
||||
"brazil": "BRA",
|
||||
"canada": "CAN",
|
||||
"chile": "CHL",
|
||||
"colombia": "COL",
|
||||
"costa_rica": "CRI",
|
||||
"czech_republic": "CZE",
|
||||
"denmark": "DNK",
|
||||
"estonia": "EST",
|
||||
"finland": "FIN",
|
||||
"france": "FRA",
|
||||
"germany": "DEU",
|
||||
"greece": "GRC",
|
||||
"hungary": "HUN",
|
||||
"iceland": "ISL",
|
||||
"indonesia": "IDN",
|
||||
"ireland": "IRL",
|
||||
"israel": "ISR",
|
||||
"italy": "ITA",
|
||||
"japan": "JPN",
|
||||
"korea": "KOR",
|
||||
"latvia": "LVA",
|
||||
"lithuania": "LTU",
|
||||
"luxembourg": "LUX",
|
||||
"mexico": "MEX",
|
||||
"netherlands": "NLD",
|
||||
"new_zealand": "NZL",
|
||||
"norway": "NOR",
|
||||
"oecd_average": "OAVG",
|
||||
"oecd_europe": "OEU",
|
||||
"oecd_total": "OECD",
|
||||
"poland": "POL",
|
||||
"portugal": "PRT",
|
||||
"romania": "ROU",
|
||||
"russia": "RUS",
|
||||
"slovak_republic": "SVK",
|
||||
"slovenia": "SVN",
|
||||
"spain": "ESP",
|
||||
"sweden": "SWE",
|
||||
"switzerland": "CHE",
|
||||
"turkey": "TUR",
|
||||
"united_kingdom": "GBR",
|
||||
"united_states": "USA",
|
||||
}
|
||||
|
||||
COUNTRY_TO_CODE_DEBT = {
|
||||
"australia": "AUS",
|
||||
"austria": "AUT",
|
||||
"belgium": "BEL",
|
||||
"brazil": "BRA",
|
||||
"canada": "CAN",
|
||||
"chile": "CHL",
|
||||
"colombia": "COL",
|
||||
"czech_republic": "CZE",
|
||||
"denmark": "DNK",
|
||||
"estonia": "EST",
|
||||
"finland": "FIN",
|
||||
"france": "FRA",
|
||||
"germany": "DEU",
|
||||
"greece": "GRC",
|
||||
"hungary": "HUN",
|
||||
"iceland": "ISL",
|
||||
"ireland": "IRL",
|
||||
"israel": "ISR",
|
||||
"italy": "ITA",
|
||||
"japan": "JPN",
|
||||
"korea": "KOR",
|
||||
"latvia": "LVA",
|
||||
"lithuania": "LTU",
|
||||
"luxembourg": "LUX",
|
||||
"mexico": "MEX",
|
||||
"netherlands": "NLD",
|
||||
"new_zealand": "NZL",
|
||||
"norway": "NOR",
|
||||
"oecd_average": "OAVG",
|
||||
"oecd_total": "OECD",
|
||||
"poland": "POL",
|
||||
"portugal": "PRT",
|
||||
"romania": "ROU",
|
||||
"russia": "RUS",
|
||||
"slovak_republic": "SVK",
|
||||
"slovenia": "SVN",
|
||||
"spain": "ESP",
|
||||
"sweden": "SWE",
|
||||
"switzerland": "CHE",
|
||||
"turkey": "TUR",
|
||||
"united_kingdom": "GBR",
|
||||
"united_states": "USA",
|
||||
}
|
||||
|
||||
COUNTRY_TO_CODE_TRUST = {
|
||||
"australia": "AUS",
|
||||
"austria": "AUT",
|
||||
"belgium": "BEL",
|
||||
"brazil": "BRA",
|
||||
"canada": "CAN",
|
||||
"chile": "CHL",
|
||||
"colombia": "COL",
|
||||
"costa_rica": "CRI",
|
||||
"czech_republic": "CZE",
|
||||
"denmark": "DNK",
|
||||
"estonia": "EST",
|
||||
"finland": "FIN",
|
||||
"france": "FRA",
|
||||
"germany": "DEU",
|
||||
"greece": "GRC",
|
||||
"hungary": "HUN",
|
||||
"iceland": "ISL",
|
||||
"ireland": "IRL",
|
||||
"israel": "ISR",
|
||||
"italy": "ITA",
|
||||
"japan": "JPN",
|
||||
"korea": "KOR",
|
||||
"latvia": "LVA",
|
||||
"lithuania": "LTU",
|
||||
"luxembourg": "LUX",
|
||||
"mexico": "MEX",
|
||||
"netherlands": "NLD",
|
||||
"new_zealand": "NZL",
|
||||
"norway": "NOR",
|
||||
"poland": "POL",
|
||||
"portugal": "PRT",
|
||||
"russia": "RUS",
|
||||
"slovak_republic": "SVK",
|
||||
"slovenia": "SVN",
|
||||
"south_africa": "ZAF",
|
||||
"spain": "ESP",
|
||||
"sweden": "SWE",
|
||||
"switzerland": "CHE",
|
||||
"turkey": "TUR",
|
||||
"united_kingdom": "GBR",
|
||||
"united_states": "USA",
|
||||
}
|
||||
66
openbb_platform/providers/oecd/openbb_oecd/utils/helpers.py
Normal file
66
openbb_platform/providers/oecd/openbb_oecd/utils/helpers.py
Normal file
@@ -0,0 +1,66 @@
|
||||
import ssl
|
||||
import sys
|
||||
from io import StringIO
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
import requests
|
||||
import urllib3
|
||||
from openbb_provider import helpers
|
||||
from pandas import DataFrame, read_csv
|
||||
|
||||
if sys.version_info >= (3, 10):
|
||||
PATCH = True
|
||||
else:
|
||||
PATCH = False
|
||||
|
||||
|
||||
# OECD does not play well with newer python. This code block from stackoverflow helps
|
||||
# to create a custom session:
|
||||
|
||||
|
||||
class CustomHttpAdapter(requests.adapters.HTTPAdapter):
|
||||
# "Transport adapter" that allows us to use custom ssl_context.
|
||||
|
||||
def __init__(self, ssl_context=None, **kwargs):
|
||||
self.ssl_context = ssl_context
|
||||
super().__init__(**kwargs)
|
||||
|
||||
def init_poolmanager(self, connections, maxsize, block=False):
|
||||
self.poolmanager = urllib3.poolmanager.PoolManager(
|
||||
num_pools=connections,
|
||||
maxsize=maxsize,
|
||||
block=block,
|
||||
ssl_context=self.ssl_context,
|
||||
)
|
||||
|
||||
|
||||
def get_legacy_session():
|
||||
"""Stackoverflow code to create a custom session."""
|
||||
ctx = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
|
||||
ctx.options |= 0x4 # OP_LEGACY_SERVER_CONNECT
|
||||
session = requests.Session()
|
||||
session.mount("https://", CustomHttpAdapter(ctx))
|
||||
return session
|
||||
|
||||
|
||||
def create_session():
|
||||
"""Create a session for making requests to the OECD API.
|
||||
|
||||
This will create the patched session if the python version is >= 3.10. Otherwise,
|
||||
it will just use regular requests.
|
||||
"""
|
||||
if PATCH:
|
||||
return get_legacy_session()
|
||||
return requests.Session()
|
||||
|
||||
|
||||
def fetch_data(url: str, csv_kwargs: Optional[Dict] = None, **kwargs: Any) -> DataFrame:
|
||||
"""Create a session and fetch data from the OECD API."""
|
||||
session = create_session()
|
||||
response = helpers.make_request(url, session=session, **kwargs)
|
||||
if csv_kwargs is None:
|
||||
csv_kwargs = {}
|
||||
# Pass any additional arguments to read_csv. This will likely need to be skiplines
|
||||
# or a delimiter.
|
||||
data = read_csv(StringIO(response.text), **csv_kwargs)
|
||||
return data
|
||||
1529
openbb_platform/providers/oecd/poetry.lock
generated
vendored
Normal file
1529
openbb_platform/providers/oecd/poetry.lock
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
19
openbb_platform/providers/oecd/pyproject.toml
vendored
Normal file
19
openbb_platform/providers/oecd/pyproject.toml
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
[tool.poetry]
|
||||
name = "openbb-oecd"
|
||||
version = "0.1.0a2"
|
||||
description = "OECD extension for OpenBB"
|
||||
authors = ["OpenBB Team <hello@openbb.co>"]
|
||||
readme = "README.md"
|
||||
packages = [{ include = "openbb_oecd" }]
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.8"
|
||||
openbb-core = "^0.1.0a2"
|
||||
urllib3 = ">1.26.16"
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
|
||||
[tool.poetry.plugins."openbb_provider_extension"]
|
||||
oecd = "openbb_oecd:oecd_provider"
|
||||
@@ -0,0 +1,99 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate, br
|
||||
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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
|
||||
gNB4KB9Ia+P0Hy0YkmoY/cbJ/wPKKADtNCwAAA==
|
||||
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_10102023171715433.csv
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Type:
|
||||
- text/csv
|
||||
Date:
|
||||
- Tue, 10 Oct 2023 15:17:14 GMT
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
@@ -0,0 +1,91 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate, br
|
||||
Connection:
|
||||
- keep-alive
|
||||
method: GET
|
||||
uri: https://stats.oecd.org/sdmx-json/data/DP_LIVE/.GDP.TOT.MLN_USD.A/OECD?contentType=csv&csv-lang=en&detail=code&endPeriod=2023-06-06&separator=comma&startPeriod=2020-01-01
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl
|
||||
VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cf
|
||||
/Oj5lyfHb86+fPHR6KOzF0/P6I8vX9Hvr7968p3Tkzf02xenx6+/enVKvz17dfoTX52+OPl96Pc3
|
||||
Z1/go5/MynVOP5+V2UV6Us3y5qPfOPno+KvX9NnnT1/Sv2++ZCDPX/z+X71+Sr8d0//3dvZ2Phrt
|
||||
7t/bOfj00/H+zv7odi/t0kv3H97f3d0bP7z/6S1f2qOXDvZ26JfxzsO90UengiHabnyPMLy/u3Pv
|
||||
093xp/fuSV9ot/EdQvD+vfsHu/vjhw8f3PIdwu/T3XsP6J2Dg4d458npc/pm4zuE26d7Dz/9dGf8
|
||||
4MGno49eYki3eI3Q+/Rgjzob33t4//avEYYP7h8c3NsbH9zb19dOjsExG18jJHcfPNx/uL8z3tnZ
|
||||
xchu8RKhuLez9+nBw4fj3d37t3yJENzbIwp++nB8b19e+ilw58aXCL19mqr7D8YHu0z3W7xD2O0/
|
||||
eHjvwcGYyH67Vwi3+3v3d2h693eZjZ6++L3om43vEGr37u/vPXgwps5u+Q6hdu/gwc79e+Pdg9u+
|
||||
s/fRaH9/b3f34ZiIh3eend1Ia8Jt7+Dh3t7++N7eLV8Bajv37u89GO/vMdlu8Q6R7d69nX0S2r37
|
||||
PKPPXuGbje8Qavf2iNj3dt/jJSBHc3rwgCboYFe5+xbvAcEHnz58SITY+9RIxdPTr+jbje8RksSn
|
||||
+w8OPh3vEpK3fo/w3H+4e2+XFCYpztu/R3jev7d3b2fngATK6IrPX53QtxvfIzyJ/ju7n44f7D28
|
||||
/WuE5j2aOGL3T4k/bv0aYXmPuIp6u297+/ZXN3IJkLxHNNllzXS7d4Dh/U8f7JBeP7jlK4Td/g4J
|
||||
8cPxp7uGRc5e36g3Cbvdhw/JWJGZQ0+3eIWQ29t9sHt//OkDFuJbvELI7X16/+G98T0iOF55deMr
|
||||
hNj+AzIDu+NdEchbvEOY3d//dPdgf0wv3vIdQu3T+zs0P+O9Bzw9Z2/wzcZ3CLe9+5+SRN4nbcF6
|
||||
+RYvEXJ7ZHX3SJnf2+NZvcVLhN09ciX2HpIV3eUhfefljaxA6N3f+/Tezn0yhp8y7W7xEqF3/x5x
|
||||
6N6nxHNsCW/xEqF3/wH9IEVxn4ya+C2/FztnG98jDPeI5Ac7n47JiqKzW7xEGO7t37tPz5hs4i1f
|
||||
Igz37j882H+wMybNpHLx/Kvfm77d+B5h+IDcJODHHHuLVwi/A5peEiXxq27xCmH3kEzhgzHNFV75
|
||||
4vTGVwixPdInD8hjIdWuA7rFe4Td3j4RnISDhnX79whFEgxiwHvjvf0HOsUvnqPFxvcIz92d/Xuk
|
||||
k0hdMhPe4iVCcnf3HiP5cIdlBC/d8BJhuLt3f58cJfI0jep78VM3Sj5hCCYkL44MHfd18zuE4N7+
|
||||
/Xuf3hs/FPRufoXQI2E8IP3/6T3CTuh3M+MSdvdIL8GUiuDf4h3CjnylB9TVAUnj7d4h9D4lvxQU
|
||||
F/338ssbh0S47d67d7BP3vYDsWm3eImQ290n+YXZ3Wd63+Ilwm730z2KpsiD2WWKv3yFhhtfIvTu
|
||||
3X/4cH+XtPNt3yHs7pF07JCHtcfkvsU7hByN5wE87R3jR7z+yRs9WkKPYo4Hezvj3U95lm7xDqG3
|
||||
e0D25oCCttu+Q+jt7VCscTDe4RGdvkbjja8AtYMd0l/knT647UvA7SHJ+MOD8X0Kk4UOt3gP+FGg
|
||||
9+n+w/HOvQN97/V3+9FK5z1CkvQ/KaPxw33Wmrd4h3CkYHTngJSmRB63eIfw+5QCyoeknUXYT759
|
||||
4zuEG7lfnz64PyZmuuU7wO3T3b2DvfH+Ax7PLd4h3B6QU3nvU9JD3M+br26UdMKNLMfep6TJyRW7
|
||||
5UuE3B5Rm0Lr8f4+G91bvETY3SM+enhwj/QD6Tye2c+f3PgeYXhvh3T4/V3CkDu7xUuE4T3yCsh/
|
||||
HVOAfcuXgOGn98nR2eU0A7301Wt8tfElQm9vFzpCFOUt3iDciOS7hByP5hZvEGJky0gj7+yorTj5
|
||||
9o1akhCjuPDeg3tjitrQ0S3eIdTu39+79wDWT7nuxncIufsUVu/cJxdCJeJGF5Fw2yOv6D4przE5
|
||||
mLd8i7Ajr2OfpvXe+AFP6i1eIvQohny4A5N+IGJxcrOJIQTJkdqjwOn+vtFCt3iNMDwg9iHHnBzE
|
||||
W79FKO6Sr0dxJJl18sJ4hk9fo+3G9wjJ++T8kqUxahnNNr5CCN4nx2afjBNT/RavEHbEeVB4B8xG
|
||||
lGylLza+Qog93NkhA01prT0WpLOnN04UvUTxN0X8NB4JUG7xEo2HHNcH94n7SFfe8iUa0b2HZJlI
|
||||
E1Eil196faNyAHrEEfvkegkX3eIdwo5yZ5+S5trRiPDmdwi5/Qf3kQrapewMvfPq5kwx4bZ/71NK
|
||||
d+xSQMj0fv2TN1KBXjq4T+7dmJJVt3yFxvOQyEzB4D4P5xav0HB2qS9y1e6RINE7P3X8jL7Z+A5h
|
||||
9uDhp+RRj0kVDb3TeYdQoyQiO9Riy2/RD+FGWd77FG8+EBv75ekJvt74EiH3KSn8g4N9GhLlX0XK
|
||||
b/Mmofjpg31y2Ei93iPnQeT8Nm8Sog+IHCS3RHoannvzRp+A0KVQl2wHaVr600P3xlcJ372Dnf3d
|
||||
h/d2xsaDu9WLhO49ymk8+PTgAc2gefX5T+LrjS8Ssp/uESOPD/Z4Dm/xCiH5KUwWe4u3e4XQo2kg
|
||||
UtJU4JUnN+dMCbF75JWSDzx+IA7P8zc3JjDpJcrSUG6bTBwL5S3eoeHQK5SfJRKwlrnFOzSeXUrS
|
||||
UAbkodDg9fGN7wC3T/cO7t+7N6ZY4JYvAbkHpNUpvX8gL50e7z6k7za+xV3dv//w03sPKZpkeb7N
|
||||
a9wZJRM/3UcEwewQvDbwGohBIk2Kg9xMUdTHrz6n7zZ2RjhS2LBL+aCDPVa6t3gHCO4c3MM624NP
|
||||
Gb+TV2f01caXqKNdesjGkYK75TvoiKIHcnooflXZv8VroARZBIooKWGgrz35/Eb7AwwpyUWO8wMh
|
||||
xS3eAYYPyXhTuoBUzO3eIfSI4EQLWvIgjcYq4tuvfpK+3Pga0KMfZINosQ1d3eIdoEdLJRQXITFx
|
||||
664Iw11KYJJXtge682snvw9e2PgaYUiOAnHtPdYut3iD8LtHy64U+u+xbrnFK4QbGQRyacnzUdS+
|
||||
eI6WG98i1JDcIrt6n+XwFq8QbmQ/SL9+KqJ7i1cIt72HJLfjXVk8ffXljZqFEPuU5I/eoUD5Fu98
|
||||
tLezR5h9+vDePqU8HQ1u0RVh9+AhRVPkzxK15bUvfi802PgaYUjpI8pbfiq+6S1eIQRpwfUBLflT
|
||||
ru7WHRF++7v7JH67tCoiUvtTXzyh7za+Reh9ShaAHAvG7tu/143qi96g2H1nh0IVWs273Ts0on1y
|
||||
fKDx9ljOv3h64zvo5x7F4BR8GZfni+MbtQO9tUdcR7P06T3Wrbd4h7CjTAZlLSnoYOv0+nO03vgO
|
||||
9XOf3viU0mEirrd4h/r59MHB7qc71A/LxOlXew9+/z0GtvlNakBxMuwu6X8m4K1fpU73aE2O3CPy
|
||||
qR7whN36XWIpChMpYUNK6dP7rNSPn9+GpchLJUVLxBTuff3qNi+Rqj34lFa/hUNu8Q4NbZeWlSkS
|
||||
oSBJevr89Ev6buNb1BOF5iT9Ow+Y5W/xCnVEC2AP4UMzbidf3MhT1AuFL/ukaGnK8c7r0xtDHnrn
|
||||
/sGn5MKxV/D/AOJLgA6rJAAA
|
||||
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_10102023171713886.csv
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Type:
|
||||
- text/csv
|
||||
Date:
|
||||
- Tue, 10 Oct 2023 15:17:13 GMT
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
224
openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecdgdp_real_fetcher.yaml
vendored
Normal file
224
openbb_platform/providers/oecd/tests/record/http/test_oecd_fetchers/test_oecdgdp_real_fetcher.yaml
vendored
Normal file
@@ -0,0 +1,224 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate, br
|
||||
Connection:
|
||||
- keep-alive
|
||||
method: GET
|
||||
uri: https://stats.oecd.org/sdmx-json/data/DP_LIVE/.QGDP.TOT.PC_CHGPY.Q/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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
|
||||
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_10102023171714667.csv
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Type:
|
||||
- text/csv
|
||||
Date:
|
||||
- Tue, 10 Oct 2023 15:17:14 GMT
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
53
openbb_platform/providers/oecd/tests/test_oecd_fetchers.py
Normal file
53
openbb_platform/providers/oecd/tests/test_oecd_fetchers.py
Normal file
@@ -0,0 +1,53 @@
|
||||
import datetime
|
||||
import pytest
|
||||
from openbb_core.app.service.user_service import UserService
|
||||
from openbb_oecd.models.gdpnom import OECDGDPNomFetcher
|
||||
from openbb_oecd.models.gdpreal import OECDGDPRealFetcher
|
||||
from openbb_oecd.models.gdpforecast import OECDGDPForecastFetcher
|
||||
|
||||
test_credentials = UserService().default_user_settings.credentials.dict()
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def vcr_config():
|
||||
return {
|
||||
"filter_headers": [("User-Agent", None)],
|
||||
"filter_query_parameters": [
|
||||
("token", "MOCK_TOKEN"),
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_oecdgdp_nom_fetcher(credentials=test_credentials):
|
||||
params = {
|
||||
"start_date": datetime.date(2020, 1, 1),
|
||||
"end_date": datetime.date(2023, 6, 6),
|
||||
}
|
||||
|
||||
fetcher = OECDGDPNomFetcher()
|
||||
result = fetcher.test(params, credentials)
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_oecdgdp_real_fetcher(credentials=test_credentials):
|
||||
params = {
|
||||
"start_date": datetime.date(2020, 1, 1),
|
||||
"end_date": datetime.date(2023, 6, 6),
|
||||
}
|
||||
fetcher = OECDGDPRealFetcher()
|
||||
result = fetcher.test(params, credentials)
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.record_http
|
||||
def test_oecdgdp_forecast_fetcher(credentials=test_credentials):
|
||||
params = {
|
||||
"start_date": datetime.date(2020, 1, 1),
|
||||
"end_date": datetime.date(2023, 6, 6),
|
||||
}
|
||||
|
||||
fetcher = OECDGDPForecastFetcher()
|
||||
result = fetcher.test(params, credentials)
|
||||
assert result is None
|
||||
@@ -540,6 +540,11 @@ def get_gdp(
|
||||
no_data_message(error=str(e))
|
||||
return df
|
||||
|
||||
print(
|
||||
f"https://stats.oecd.org/sdmx-json/data/DP_LIVE/.GDP.TOT.{units_dict[units]}.A/OECD?contentType=csv&detail=code"
|
||||
f"&separator=comma&csv-lang=en&startPeriod={start_date}&endPeriod={end_date}"
|
||||
)
|
||||
|
||||
df = df.iloc[:, [0, 5]]
|
||||
|
||||
result = pd.DataFrame()
|
||||
|
||||
Reference in New Issue
Block a user