make the changes and some etf models

This commit is contained in:
Danglewood
2023-10-07 18:59:43 -07:00
parent 3e1dac4f43
commit 549af389a0
13 changed files with 265 additions and 16 deletions

View File

@@ -0,0 +1,28 @@
"""ETF Countries data model."""
from typing import List, Set, Union
from pydantic import Field, field_validator
from openbb_provider.abstract.data import Data
from openbb_provider.abstract.query_params import QueryParams
class EtfCountriesQueryParams(QueryParams):
"""ETF Countries Query Params"""
symbol: str = Field(description="The exchange ticker symbol for the ETF.")
@field_validator("symbol")
def upper_symbol(cls, v: Union[str, List[str], Set[str]]):
"""Convert symbol to uppercase."""
if isinstance(v, str):
return v.upper()
return ",".join([symbol.upper() for symbol in list(v)])
class EtfCountriesData(Data):
"""ETF Countries Data."""
country: str = Field(description="The country of the exposure.")
weight: float = Field(description="The weight of the country in the ETF.")

View File

@@ -0,0 +1,29 @@
"""ETF Historical NAV model."""
from datetime import date as dateType
from typing import List, Set, Union
from pydantic import Field, field_validator
from openbb_provider.abstract.data import Data
from openbb_provider.abstract.query_params import QueryParams
class EtfHistoricalNavQueryParams(QueryParams):
"""ETF Historicl NAV Query Params"""
symbol: str = Field(description="The exchange ticker symbol for the ETF.")
@field_validator("symbol")
def upper_symbol(cls, v: Union[str, List[str], Set[str]]):
"""Convert symbol to uppercase."""
if isinstance(v, str):
return v.upper()
return ",".join([symbol.upper() for symbol in list(v)])
class EtfHistoricalNavData(Data):
"""ETF Historical NAV Data."""
date: dateType = Field(description="The date of the NAV.")
nav: float = Field(description="The net asset value on the date.")

View File

@@ -0,0 +1,24 @@
"""ETF Holdings data model."""
from typing import Optional
from pydantic import Field
from openbb_provider.abstract.data import Data
from openbb_provider.abstract.query_params import QueryParams
class EtfHoldingsQueryParams(QueryParams):
"""ETF Holdings Query Params"""
symbol: str = Field(description="The exchange ticker symbol for the ETF.")
class EtfHoldingsData(Data):
"""ETF Holdings Data."""
symbol: Optional[str] = Field(
description="The exchange ticker symbol for the holding."
)
name: Optional[str] = Field(description="Name of the ETF holding.")
weight: Optional[float] = Field(description="Weight of the ETF holding.")

View File

@@ -0,0 +1,29 @@
"""ETF Info data model."""
from typing import List, Optional, Set, Union
from pydantic import Field, field_validator
from openbb_provider.abstract.data import Data
from openbb_provider.abstract.query_params import QueryParams
class EtfInfoQueryParams(QueryParams):
"""ETF Info Query Params"""
symbol: str = Field(description="The exchange ticker symbol for the ETF.")
@field_validator("symbol")
def upper_symbol(cls, v: Union[str, List[str], Set[str]]):
"""Convert symbol to uppercase."""
if isinstance(v, str):
return v.upper()
return ",".join([symbol.upper() for symbol in list(v)])
class EtfInfoData(Data):
"""ETF Info Data."""
symbol: str = Field(description="The exchange ticker symbol for the ETF.")
inception_date: Optional[str] = Field(description="Inception date of the ETF.")
name: Optional[str] = Field(description="Name of the ETF.")

View File

@@ -0,0 +1,21 @@
"""ETF Search data model."""
from typing import Optional
from pydantic import Field
from openbb_provider.abstract.data import Data
from openbb_provider.abstract.query_params import QueryParams
class EtfSearchQueryParams(QueryParams):
"""ETF Search Query Params"""
query: Optional[str] = Field(description="Search query.", default="")
class EtfSearchData(Data):
"""ETF Search Data."""
symbol: str = Field(description="The exchange ticker symbol for the ETF.")
name: Optional[str] = Field(description="Name of the ETF.", default=None)

View File

@@ -0,0 +1,59 @@
"""ETF Sectors data model."""
from typing import List, Optional, Set, Union
from pydantic import Field, field_validator
from openbb_provider.abstract.data import Data
from openbb_provider.abstract.query_params import QueryParams
class EtfSectorsQueryParams(QueryParams):
"""ETF Sectors Query Params"""
symbol: str = Field(description="The exchange ticker symbol for the ETF.")
@field_validator("symbol")
def upper_symbol(cls, v: Union[str, List[str], Set[str]]):
"""Convert symbol to uppercase."""
if isinstance(v, str):
return v.upper()
return ",".join([symbol.upper() for symbol in list(v)])
class EtfSectorsData(Data):
"""ETF Sectors Data."""
energy: Optional[float] = Field(description="Energy Sector Weight", default=None)
materials: Optional[float] = Field(
description="Materials Sector Weight.", default=None
)
industrials: Optional[float] = Field(
description="Industrials Sector Weight.", default=None
)
consumer_cyclical: Optional[float] = Field(
description="Consumer Cyclical Sector Weight.", default=None
)
consumer_defensive: Optional[float] = Field(
description="Consumer Defensive Sector Weight.", default=None
)
financial_services: Optional[float] = Field(
description="Financial Services Sector Weight.", default=None
)
technology: Optional[float] = Field(
description="Technology Sector Weight.", default=None
)
health_care: Optional[float] = Field(
description="Health Care Sector Weight.", default=None
)
communication_services: Optional[float] = Field(
description="Communication Services Sector Weight.",
alias="Communication Services",
default=None,
)
utilities: Optional[float] = Field(
description="Utilities Sector Weight.", default=None
)
real_estate: Optional[float] = Field(
description="Real Estate Sector Weight.", default=None
)

View File

@@ -0,0 +1,48 @@
"""Historical EPS data model."""
from datetime import (
date as dateType,
)
from typing import List, Optional, Set, Union
from dateutil import parser
from pydantic import Field, validator
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 HistoricalEpsQueryParams(QueryParams):
"""Historical EPS Query."""
symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", ""))
@validator("symbol", pre=True, check_fields=False, always=True)
def upper_symbol(cls, v: Union[str, List[str], Set[str]]):
"""Convert symbol to uppercase."""
if isinstance(v, str):
return v.upper()
return ",".join([symbol.upper() for symbol in list(v)])
class HistoricalEpsData(Data):
"""Historical EPS Data."""
date: dateType = Field(default=None, description=DATA_DESCRIPTIONS.get("date", ""))
symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", ""))
announce_time: Optional[str] = Field(
default=None, description="Timing of the earnings announcement."
)
eps_actual: Optional[float] = Field(
default=None, description="Actual EPS from the earnings date."
)
eps_estimated: Optional[float] = Field(
default=None, description="Estimated EPS for the earnings date."
)
@validator("date", pre=True, check_fields=False)
def date_validate(cls, v): # pylint: disable=E0213
"""Return formatted datetime."""
return parser.isoparse(str(v))

View File

@@ -13,7 +13,7 @@ class IndexConstituentsQueryParams(QueryParams):
symbol: str = Field(description="The index ticker symbol.")
@field_validator("symbol", pre=True, check_fields=False, always=True)
@field_validator("symbol")
def upper_symbol(cls, v: Union[str, List[str], Set[str]]):
"""Convert symbol to uppercase."""
if isinstance(v, str):

View File

@@ -13,7 +13,7 @@ class IndexInfoQueryParams(QueryParams):
symbol: str = Field(description="The index ticker symbol.")
@field_validator("symbol", pre=True, check_fields=False, always=True)
@field_validator("symbol")
def upper_symbol(cls, v: Union[str, List[str], Set[str]]):
"""Convert symbol to uppercase."""
if isinstance(v, str):
@@ -35,6 +35,6 @@ class IndexInfoData(Data):
factsheet: Optional[str] = Field(
description="URL to the factsheet document.", default=None
)
nb_constituents: Optional[int] = Field(
num_constituents: Optional[int] = Field(
description="The number of constituents in the index.", default=None
)

View File

@@ -1,6 +1,6 @@
"""Index Sectors data model."""
from typing import List, Optional, Set, Union
from typing import List, Set, Union
from pydantic import Field, field_validator
@@ -13,7 +13,7 @@ class IndexSectorsQueryParams(QueryParams):
symbol: str = Field(description="The index ticker symbol.")
@field_validator("symbol", pre=True, check_fields=False, always=True)
@field_validator("symbol")
def upper_symbol(cls, v: Union[str, List[str], Set[str]]):
"""Convert symbol to uppercase."""
if isinstance(v, str):

View File

@@ -9,11 +9,11 @@ from openbb_provider.abstract.data import Data
from openbb_provider.abstract.query_params import QueryParams
class IndustryPeQueryParams(QueryParams):
class IndustryPEQueryParams(QueryParams):
"""Industry P/E Ratio Query."""
class IndustryPeData(Data):
class IndustryPEData(Data):
"""Industry P/E Ratio Data."""
date: Optional[dateType] = Field(
@@ -22,5 +22,5 @@ class IndustryPeData(Data):
exchange: Optional[str] = Field(
default=None, description="The exchange where the data is from."
)
sector: str = Field(description="The name of the industry.")
industry: str = Field(description="The name of the industry.")
pe: float = Field(description="The P/E ratio of the industry.")

View File

@@ -13,7 +13,7 @@ class RecentPerformanceQueryParams(QueryParams):
symbol: str = Field(description="The ticker symbol to fetch.")
@field_validator("symbol", pre=True, check_fields=False, always=True)
@field_validator("symbol")
def upper_symbol(cls, v: Union[str, List[str], Set[str]]):
"""Convert symbol to uppercase."""
if isinstance(v, str):
@@ -25,9 +25,20 @@ class RecentPerformanceData(Data):
"""Recent Performance Data."""
one_day: Optional[float] = Field(description="One-day return.", default=None)
wtd: Optional[float] = Field(description="Week to date return.", default=None)
one_week: Optional[float] = Field(description="One-week return.", default=None)
mtd: Optional[float] = Field(description="MTD return.", default=None)
qtd: Optional[float] = Field(description="QTD return.", default=None)
ytd: Optional[float] = Field(description="YTD return.", default=None)
ttm: Optional[float] = Field(description="TTM return.", default=None)
three_year: Optional[float] = Field(description="One-year return.", default=None)
mtd: Optional[float] = Field(description="Month to date return.", default=None)
one_month: Optional[float] = Field(description="One-month return.", default=None)
qtd: Optional[float] = Field(description="Quarter to date return.", default=None)
three_month: Optional[float] = Field(
description="Three-month return.", default=None
)
six_month: Optional[float] = Field(description="Six-month return.", default=None)
ytd: Optional[float] = Field(description="Year to date return.", default=None)
one_year: Optional[float] = Field(description="One-year return.", default=None)
three_year: Optional[float] = Field(description="Three-year return.", default=None)
five_year: Optional[float] = Field(description="Five-year return.", default=None)
ten_year: Optional[float] = Field(description="Ten-year return.", default=None)
max: Optional[float] = Field(
description="Return from the beginning of the time series.", default=None
)

View File

@@ -9,11 +9,11 @@ from openbb_provider.abstract.data import Data
from openbb_provider.abstract.query_params import QueryParams
class SectorPeQueryParams(QueryParams):
class SectorPEQueryParams(QueryParams):
"""Sector P/E Ratio Query."""
class SectorPeData(Data):
class SectorPEData(Data):
"""Sector P/E Ratio Data."""
date: Optional[dateType] = Field(