Merge branch 'develop' into feature/more-async

This commit is contained in:
tehcoderer
2023-11-28 17:53:28 -05:00
8 changed files with 82 additions and 86 deletions

View File

@@ -2,7 +2,7 @@
from datetime import date as dateType
from typing import List, Optional, Set, Union
from typing import List, Set, Union
from pydantic import Field, field_validator
@@ -31,41 +31,4 @@ class HistoricalDividendsData(Data):
"""Historical Dividends Data."""
date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", ""))
label: str = Field(description="Label of the historical dividends.")
adj_dividend: float = Field(
description="Adjusted dividend of the historical dividends."
)
dividend: float = Field(description="Dividend of the historical dividends.")
record_date: Optional[dateType] = Field(
description="Record date of the historical dividends.", default=None
)
payment_date: Optional[dateType] = Field(
description="Payment date of the historical dividends.", default=None
)
declaration_date: Optional[dateType] = Field(
description="Declaration date of the historical dividends.", default=None
)
@field_validator("declaration_date", mode="before", check_fields=False)
@classmethod
def declaration_date_validate(cls, v: str): # pylint: disable=E0213
"""Validate declaration date."""
if not isinstance(v, str):
return v
return dateType.fromisoformat(v) if v else None
@field_validator("record_date", mode="before", check_fields=False)
@classmethod
def record_date_validate(cls, v: str): # pylint: disable=E0213
"""Record date validator."""
if not isinstance(v, str):
return v
return dateType.fromisoformat(v) if v else None
@field_validator("payment_date", mode="before", check_fields=False)
@classmethod
def payment_date_validate(cls, v: str): # pylint: disable=E0213
"""Payment date validator."""
if not isinstance(v, str):
return v
return dateType.fromisoformat(v) if v else None

View File

@@ -96,15 +96,6 @@ def test_equity_fundamental_balance_growth(params, headers):
[
({"start_date": "2023-11-05", "end_date": "2023-11-10", "provider": "fmp"}),
({"start_date": "2023-11-05", "end_date": "2023-11-10", "provider": "nasdaq"}),
(
{
"start_date": "2023-11-05",
"end_date": "2023-11-10",
"symbol": "AAPL",
"limit": 100,
"provider": "intrinio",
}
),
],
)
@pytest.mark.integration
@@ -263,7 +254,16 @@ def test_equity_fundamental_historical_splits(params, headers):
@pytest.mark.parametrize(
"params",
[({"symbol": "AAPL"})],
[
({"symbol": "AAPL", "provider": "fmp"}),
(
{
"symbol": "AAPL",
"limit": 100,
"provider": "intrinio",
}
),
],
)
@pytest.mark.integration
def test_equity_fundamental_dividends(params, headers):

View File

@@ -96,15 +96,6 @@ def test_equity_fundamental_balance_growth(params, obb):
[
({"start_date": "2023-11-05", "end_date": "2023-11-10", "provider": "fmp"}),
({"start_date": "2023-11-05", "end_date": "2023-11-10", "provider": "nasdaq"}),
(
{
"start_date": "2023-11-05",
"end_date": "2023-11-10",
"symbol": "AAPL",
"limit": 100,
"provider": "intrinio",
}
),
],
)
@pytest.mark.integration
@@ -250,6 +241,14 @@ def test_equity_fundamental_historical_splits(params, obb):
"params",
[
({"symbol": "AAPL"}),
({"symbol": "AAPL", "provider": "fmp"}),
(
{
"symbol": "AAPL",
"limit": 100,
"provider": "intrinio",
}
),
],
)
@pytest.mark.integration

View File

@@ -1,5 +1,6 @@
"""FMP Historical Dividends Model."""
from datetime import date as dateType
from typing import Any, Dict, List, Optional
from openbb_core.provider.abstract.fetcher import Fetcher
@@ -8,6 +9,7 @@ from openbb_core.provider.standard_models.historical_dividends import (
HistoricalDividendsQueryParams,
)
from openbb_fmp.utils.helpers import create_url, get_data_many
from pydantic import Field, field_validator
class FMPHistoricalDividendsQueryParams(HistoricalDividendsQueryParams):
@@ -20,6 +22,37 @@ class FMPHistoricalDividendsQueryParams(HistoricalDividendsQueryParams):
class FMPHistoricalDividendsData(HistoricalDividendsData):
"""FMP Historical Dividends Data."""
label: str = Field(description="Label of the historical dividends.")
adj_dividend: float = Field(
description="Adjusted dividend of the historical dividends."
)
record_date: Optional[dateType] = Field(
default=None,
description="Record date of the historical dividends.",
)
payment_date: Optional[dateType] = Field(
default=None,
description="Payment date of the historical dividends.",
)
declaration_date: Optional[dateType] = Field(
default=None,
description="Declaration date of the historical dividends.",
)
@field_validator(
"declaration_date",
"record_date",
"payment_date",
mode="before",
check_fields=False,
)
@classmethod
def date_validate(cls, v: str): # pylint: disable=E0213
"""Validate dates."""
if not isinstance(v, str):
return v
return dateType.fromisoformat(v) if v else None
class FMPHistoricalDividendsFetcher(
Fetcher[

View File

@@ -2,7 +2,6 @@
from openbb_core.provider.abstract.provider import Provider
from openbb_intrinio.models.balance_sheet import IntrinioBalanceSheetFetcher
from openbb_intrinio.models.calendar_dividend import IntrinioCalendarDividendFetcher
from openbb_intrinio.models.calendar_ipo import IntrinioCalendarIpoFetcher
from openbb_intrinio.models.cash_flow import IntrinioCashFlowStatementFetcher
from openbb_intrinio.models.company_filings import IntrinioCompanyFilingsFetcher
@@ -15,6 +14,9 @@ from openbb_intrinio.models.fred_series import IntrinioFredSeriesFetcher
from openbb_intrinio.models.historical_attributes import (
IntrinioHistoricalAttributesFetcher,
)
from openbb_intrinio.models.historical_dividends import (
IntrinioHistoricalDividendsFetcher,
)
from openbb_intrinio.models.income_statement import IntrinioIncomeStatementFetcher
from openbb_intrinio.models.insider_trading import IntrinioInsiderTradingFetcher
from openbb_intrinio.models.institutional_ownership import (
@@ -44,12 +46,12 @@ intrinio_provider = Provider(
"CompanyFilings": IntrinioCompanyFilingsFetcher,
"CompanyNews": IntrinioCompanyNewsFetcher,
"CurrencyPairs": IntrinioCurrencyPairsFetcher,
"CalendarDividend": IntrinioCalendarDividendFetcher,
"EquityHistorical": IntrinioEquityHistoricalFetcher,
"EquityInfo": IntrinioEquityInfoFetcher,
"EquityQuote": IntrinioEquityQuoteFetcher,
"FredSeries": IntrinioFredSeriesFetcher,
"HistoricalAttributes": IntrinioHistoricalAttributesFetcher,
"HistoricalDividends": IntrinioHistoricalDividendsFetcher,
"IncomeStatement": IntrinioIncomeStatementFetcher,
"InsiderTrading": IntrinioInsiderTradingFetcher,
"InstitutionalOwnership": IntrinioInstitutionalOwnershipFetcher,

View File

@@ -1,13 +1,13 @@
"""Intrinio Dividend Calendar Model."""
"""Intrinio Historical Dividends Model."""
from datetime import datetime
from typing import Any, Dict, List, Optional
from dateutil.relativedelta import relativedelta
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.calendar_dividend import (
CalendarDividendData,
CalendarDividendQueryParams,
from openbb_core.provider.standard_models.historical_dividends import (
HistoricalDividendsData,
HistoricalDividendsQueryParams,
)
from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS
from openbb_core.provider.utils.helpers import get_querystring
@@ -15,13 +15,12 @@ from openbb_intrinio.utils.helpers import get_data_many
from pydantic import Field
class IntrinioCalendarDividendQueryParams(CalendarDividendQueryParams):
"""Intrinio Dividend Calendar Query.
class IntrinioHistoricalDividendsQueryParams(HistoricalDividendsQueryParams):
"""Intrinio Historical Dividends Query.
Source: https://docs.intrinio.com/documentation/web_api/get_security_stock_price_adjustments_v2
"""
symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", ""))
limit: Optional[int] = Field(
default=100,
description=QUERY_DESCRIPTIONS.get("limit", ""),
@@ -29,12 +28,8 @@ class IntrinioCalendarDividendQueryParams(CalendarDividendQueryParams):
)
class IntrinioCalendarDividendData(CalendarDividendData):
"""Intrinio Dividend Calendar Data."""
__alias_dict__ = {
"amount": "dividend",
}
class IntrinioHistoricalDividendsData(HistoricalDividendsData):
"""Intrinio Historical Dividends Data."""
factor: float = Field(
description=(
@@ -50,16 +45,18 @@ class IntrinioCalendarDividendData(CalendarDividendData):
)
class IntrinioCalendarDividendFetcher(
class IntrinioHistoricalDividendsFetcher(
Fetcher[
IntrinioCalendarDividendQueryParams,
List[IntrinioCalendarDividendData],
IntrinioHistoricalDividendsQueryParams,
List[IntrinioHistoricalDividendsData],
]
):
"""Transform the query, extract and transform the data from the Intrinio endpoints."""
@staticmethod
def transform_query(params: Dict[str, Any]) -> IntrinioCalendarDividendQueryParams:
def transform_query(
params: Dict[str, Any]
) -> IntrinioHistoricalDividendsQueryParams:
"""Transform the query params."""
transformed_params = params
@@ -69,11 +66,11 @@ class IntrinioCalendarDividendFetcher(
if params.get("end_date") is None:
transformed_params["end_date"] = now
return IntrinioCalendarDividendQueryParams(**transformed_params)
return IntrinioHistoricalDividendsQueryParams(**transformed_params)
@staticmethod
def extract_data(
query: IntrinioCalendarDividendQueryParams,
query: IntrinioHistoricalDividendsQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> List[Dict]:
@@ -88,12 +85,12 @@ class IntrinioCalendarDividendFetcher(
@staticmethod
def transform_data(
query: IntrinioCalendarDividendQueryParams, data: List[Dict], **kwargs: Any
) -> List[IntrinioCalendarDividendData]:
query: IntrinioHistoricalDividendsQueryParams, data: List[Dict], **kwargs: Any
) -> List[IntrinioHistoricalDividendsData]:
"""Return the transformed data."""
transformed_data: List[Dict] = [
{"symbol": query.symbol, **item} for item in data
]
return [
IntrinioCalendarDividendData.model_validate(d) for d in transformed_data
IntrinioHistoricalDividendsData.model_validate(d) for d in transformed_data
]

View File

@@ -13,7 +13,7 @@ interactions:
response:
body:
string: !!binary |
H4sIAONzX2UAA5RRW2vCMBT+KyPPKklr7OVN2ZDB5i7icIwRQhpjtE1Lkg6r+N934gbDvu3xfNdz
H4sIABJIZmUAA5RRW2vCMBT+KyPPKklr7OVN2ZDB5i7icIwRQhpjtE1Lkg6r+N934gbDvu3xfNdz
khNyvhZ71lgtJOPFrnW+ksY7lH+cUMG9RDmKcBQPMR2SCA3QhgtfW5TjUZalE5ImmOKYZgkZoEJ/
6UKaIpDR+G9morVWGtFB1mp5CyGuKbVnlntdo5yM8HnQK4uGBPfLxgmlOE3IhJC4Vxb/q+wTMAky
7UF0QhoyAsC42lm1A4eoq4abjl0YGNhiPZkfn0LW5bXkQWy5UfJH4A6K1cdHm3UgMLwKV0ybppQ3
@@ -27,7 +27,7 @@ interactions:
Content-Type:
- application/json
Date:
- Thu, 23 Nov 2023 15:46:43 GMT
- Tue, 28 Nov 2023 20:05:38 GMT
Transfer-Encoding:
- chunked
Vary:

View File

@@ -4,7 +4,6 @@ from unittest import mock
import pytest
from openbb_core.app.service.user_service import UserService
from openbb_intrinio.models.balance_sheet import IntrinioBalanceSheetFetcher
from openbb_intrinio.models.calendar_dividend import IntrinioCalendarDividendFetcher
from openbb_intrinio.models.calendar_ipo import IntrinioCalendarIpoFetcher
from openbb_intrinio.models.cash_flow import IntrinioCashFlowStatementFetcher
from openbb_intrinio.models.company_filings import IntrinioCompanyFilingsFetcher
@@ -17,6 +16,9 @@ from openbb_intrinio.models.fred_series import IntrinioFredSeriesFetcher
from openbb_intrinio.models.historical_attributes import (
IntrinioHistoricalAttributesFetcher,
)
from openbb_intrinio.models.historical_dividends import (
IntrinioHistoricalDividendsFetcher,
)
from openbb_intrinio.models.income_statement import IntrinioIncomeStatementFetcher
from openbb_intrinio.models.insider_trading import IntrinioInsiderTradingFetcher
from openbb_intrinio.models.institutional_ownership import (
@@ -238,14 +240,14 @@ def test_intrinio_market_indices_fetcher(credentials=test_credentials):
@pytest.mark.record_http
def test_intrinio_calendar_dividend_fetcher(credentials=test_credentials):
def test_intrinio_historical_dividends_fetcher(credentials=test_credentials):
params = {
"symbol": "AAPL",
"start_date": date(2023, 1, 1),
"end_date": date(2023, 6, 6),
}
fetcher = IntrinioCalendarDividendFetcher()
fetcher = IntrinioHistoricalDividendsFetcher()
result = fetcher.test(params, credentials)
assert result is None