Skip to content

Commit

Permalink
Merge branch 'feature/cli-unit-tests' of github.com:OpenBB-finance/Op…
Browse files Browse the repository at this point in the history
…enBBTerminal into feature/cli-unit-tests
  • Loading branch information
montezdesousa committed May 14, 2024
2 parents e25f2d3 + e39c1ee commit e9e1f50
Show file tree
Hide file tree
Showing 20 changed files with 3,564 additions and 339 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
date as dateType,
datetime,
)
from typing import Literal, Optional, Union
from typing import Optional, Union

from pydantic import Field

Expand Down Expand Up @@ -36,30 +36,26 @@ class EconomicCalendarData(Data):
default=None, description=DATA_DESCRIPTIONS.get("date", "")
)
country: Optional[str] = Field(default=None, description="Country of event.")
category: Optional[str] = Field(default=None, description="Category of event.")
event: Optional[str] = Field(default=None, description="Event name.")
reference: Optional[str] = Field(
default=None,
description="Abbreviated period for which released data refers to.",
importance: Optional[str] = Field(
default=None, description="The importance level for the event."
)
source: Optional[str] = Field(default=None, description="Source of the data.")
sourceurl: Optional[str] = Field(default=None, description="Source URL.")
actual: Optional[Union[str, float]] = Field(
default=None, description="Latest released value."
currency: Optional[str] = Field(default=None, description="Currency of the data.")
unit: Optional[str] = Field(default=None, description="Unit of the data.")
consensus: Optional[Union[str, float]] = Field(
default=None,
description="Average forecast among a representative group of economists.",
)
previous: Optional[Union[str, float]] = Field(
default=None,
description="Value for the previous period after the revision (if revision is applicable).",
)
consensus: Optional[Union[str, float]] = Field(
revised: Optional[Union[str, float]] = Field(
default=None,
description="Average forecast among a representative group of economists.",
description="Revised previous value, if applicable.",
)
forecast: Optional[Union[str, float]] = Field(
default=None, description="Trading Economics projections"
)
url: Optional[str] = Field(default=None, description="Trading Economics URL")
importance: Optional[Union[Literal[0, 1, 2, 3], str]] = Field(
default=None, description="Importance of the event. 1-Low, 2-Medium, 3-High"
actual: Optional[Union[str, float]] = Field(
default=None, description="Latest released value."
)
currency: Optional[str] = Field(default=None, description="Currency of the data.")
unit: Optional[str] = Field(default=None, description="Unit of the data.")
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
"""Forward PE Estimates Standard Model."""

from typing import Optional

from pydantic import Field, field_validator

from openbb_core.provider.abstract.data import Data
from openbb_core.provider.abstract.query_params import QueryParams
from openbb_core.provider.utils.descriptions import (
DATA_DESCRIPTIONS,
QUERY_DESCRIPTIONS,
)


class ForwardPeEstimatesQueryParams(QueryParams):
"""Forward PE Estimates Query Parameters."""

symbol: Optional[str] = Field(
default=None,
description=QUERY_DESCRIPTIONS["symbol"],
)

@field_validator("symbol", mode="before", check_fields=False)
@classmethod
def to_upper(cls, v):
"""Convert field to uppercase."""
return v.upper() if v else None


class ForwardPeEstimatesData(Data):
"""Forward PE Estimates Data."""

symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", ""))
name: Optional[str] = Field(default=None, description="Name of the entity.")
year1: Optional[float] = Field(
default=None,
description="Estimated PE ratio for the next fiscal year.",
)
year2: Optional[float] = Field(
default=None,
description="Estimated PE ratio two fiscal years from now.",
)
year3: Optional[float] = Field(
default=None,
description="Estimated PE ratio three fiscal years from now.",
)
year4: Optional[float] = Field(
default=None,
description="Estimated PE ratio four fiscal years from now.",
)
year5: Optional[float] = Field(
default=None,
description="Estimated PE ratio five fiscal years from now.",
)
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,16 @@ def headers():
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"country": "mexico,sweden",
"importance": "Low",
"importance": "low",
"group": "gdp",
"calendar_id": None,
}
),
(
{
"provider": "fmp",
"start_date": "2023-10-24",
"end_date": "2023-11-03",
}
),
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ def obb(pytestconfig): # pylint: disable=inconsistent-return-statements
@parametrize(
"params",
[
({"start_date": "2023-01-01", "end_date": "2023-06-06", "provider": "fmp"}),
(
{
"provider": "nasdaq",
Expand All @@ -36,8 +35,16 @@ def obb(pytestconfig): # pylint: disable=inconsistent-return-statements
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"country": "mexico,sweden",
"importance": "Medium",
"importance": "low",
"group": "gdp",
"calendar_id": None,
}
),
(
{
"provider": "fmp",
"start_date": "2023-10-24",
"end_date": "2023-11-03",
}
),
],
Expand Down
29 changes: 29 additions & 0 deletions openbb_platform/extensions/equity/integration/test_equity_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1953,3 +1953,32 @@ def test_equity_ownership_form_13f(params, headers):
result = requests.get(url, headers=headers, timeout=10)
assert isinstance(result, requests.Response)
assert result.status_code == 200


@parametrize(
"params",
[
(
{
"symbol": "NVDA,MSFT",
"provider": "intrinio",
}
),
(
{
"symbol": None,
"provider": "intrinio",
}
),
],
)
@pytest.mark.integration
def test_equity_estimates_forward_pe(params, headers):
"""Test the equity estimates forward_pe endpoint."""
params = {p: v for p, v in params.items() if v}

query_str = get_querystring(params, [])
url = f"http://0.0.0.0:8000/api/v1/equity/estimates/forward_pe?{query_str}"
result = requests.get(url, headers=headers, timeout=10)
assert isinstance(result, requests.Response)
assert result.status_code == 200
Original file line number Diff line number Diff line change
Expand Up @@ -1819,3 +1819,31 @@ def test_equity_ownership_form_13f(params, obb):
assert result
assert isinstance(result, OBBject)
assert len(result.results) > 0


@parametrize(
"params",
[
(
{
"symbol": "NVDA,MSFT",
"provider": "intrinio",
}
),
(
{
"symbol": None,
"provider": "intrinio",
}
),
],
)
@pytest.mark.integration
def test_equity_estimates_forward_pe(params, obb):
"""Test the equity estimates forward_pe endpoint."""
params = {p: v for p, v in params.items() if v}

result = obb.equity.estimates.forward_pe(**params)
assert result
assert isinstance(result, OBBject)
assert len(result.results) > 0
Original file line number Diff line number Diff line change
Expand Up @@ -137,3 +137,25 @@ async def forward_eps(
) -> OBBject:
"""Get forward EPS estimates."""
return await OBBject.from_query(Query(**locals()))


@router.command(
model="ForwardPeEstimates",
examples=[
APIEx(parameters={"provider": "intrinio"}),
APIEx(
parameters={
"symbol": "AAPL,MSFT,GOOG",
"provider": "intrinio",
}
),
],
)
async def forward_pe(
cc: CommandContext,
provider_choices: ProviderChoices,
standard_params: StandardParams,
extra_params: ExtraParams,
) -> OBBject:
"""Get forward PE estimates."""
return await OBBject.from_query(Query(**locals()))
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,12 @@ def send_figure(
self.check_backend()
# pylint: disable=C0415

paper_bg = (
"rgba(0,0,0,0)"
if self.charting_settings.chart_style == "dark"
else "rgba(255,255,255,0)"
)

title = "Interactive Chart"

fig.layout.title.text = re.sub(
Expand All @@ -210,9 +216,8 @@ def send_figure(
export_image = Path(export_image).resolve()

json_data = json.loads(fig.to_json())

json_data.update(self.get_json_update(command_location))

json_data["layout"]["paper_bgcolor"] = paper_bg
outgoing = dict(
html=self.get_plotly_html(),
json_data=json_data,
Expand Down
Loading

0 comments on commit e9e1f50

Please sign in to comment.