rename sec_filings -> company_filings (#5501)

This commit is contained in:
Danglewood
2023-10-02 04:46:19 -07:00
committed by GitHub
parent 16e94db6d1
commit ad0bb2428b
11 changed files with 648 additions and 754 deletions

View File

@@ -467,14 +467,14 @@ def test_stocks_fa_revseg(params, headers):
@pytest.mark.parametrize(
"params",
[({"symbol": "AAPL", "type": "1", "page": 1, "limit": 100})],
[({"symbol": "AAPL", "type": "1", "page": 1, "limit": 100, "provider": "fmp"})],
)
@pytest.mark.integration
def test_stocks_fa_sec(params, headers):
def test_stocks_fa_filings(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/stocks/fa/sec?{query_str}"
url = f"http://0.0.0.0:8000/api/v1/stocks/fa/filings?{query_str}"
result = requests.get(url, headers=headers, timeout=5)
assert isinstance(result, requests.Response)
assert result.status_code == 200

View File

@@ -440,12 +440,12 @@ def test_stocks_fa_revseg(params):
@pytest.mark.parametrize(
"params",
[
({"symbol": "AAPL", "type": "1", "page": 1, "limit": 100}),
({"symbol": "AAPL", "type": "1", "page": 1, "limit": 100, "provider": "fmp"}),
],
)
@pytest.mark.integration
def test_stocks_fa_sec(params):
result = obb.stocks.fa.sec(**params)
def test_stocks_fa_filings(params):
result = obb.stocks.fa.filings(**params)
assert result
assert isinstance(result, OBBject)
assert len(result.results) > 0

View File

@@ -279,14 +279,14 @@ def revseg(
return OBBject(results=Query(**locals()).execute())
@router.command(model="SECFilings")
def sec(
@router.command(model="CompanyFilings")
def filings(
cc: CommandContext,
provider_choices: ProviderChoices,
standard_params: StandardParams,
extra_params: ExtraParams,
) -> OBBject[BaseModel]:
"""SEC Filings."""
"""Company Filings."""
return OBBject(results=Query(**locals()).execute())

View File

@@ -39,6 +39,7 @@
"stocks_fa_earning": "/stocks/fa/earning",
"stocks_fa_emp": "/stocks/fa/emp",
"stocks_fa_est": "/stocks/fa/est",
"stocks_fa_filings": "/stocks/fa/filings",
"stocks_fa_income": "/stocks/fa/income",
"stocks_fa_income_growth": "/stocks/fa/income_growth",
"stocks_fa_ins": "/stocks/fa/ins",
@@ -52,7 +53,6 @@
"stocks_fa_ratios": "/stocks/fa/ratios",
"stocks_fa_revgeo": "/stocks/fa/revgeo",
"stocks_fa_revseg": "/stocks/fa/revseg",
"stocks_fa_sec": "/stocks/fa/sec",
"stocks_fa_shrs": "/stocks/fa/shrs",
"stocks_fa_split": "/stocks/fa/split",
"stocks_fa_transcript": "/stocks/fa/transcript",

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
"""SEC Filings data model."""
"""Company Filings data model."""
from datetime import datetime
from datetime import date as dateType
from typing import List, Literal, Optional, Set, Union
from pydantic import Field, validator
@@ -10,7 +10,7 @@ from openbb_provider.abstract.data import Data
from openbb_provider.abstract.query_params import QueryParams
from openbb_provider.utils.descriptions import QUERY_DESCRIPTIONS
FORM_TYPES = Literal[
SEC_FORM_TYPES = Literal[
"1",
"1-A",
"1-E",
@@ -114,14 +114,10 @@ FORM_TYPES = Literal[
]
class SECFilingsQueryParams(QueryParams):
"""SEC Filings Query."""
class CompanyFilingsQueryParams(QueryParams):
"""Company Filings Query Params."""
symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", ""))
type: Optional[FORM_TYPES] = Field(
default=None, description="Type of the SEC filing form."
)
page: Optional[int] = Field(default=0, description="Page number of the results.")
limit: Optional[int] = Field(
default=100, description=QUERY_DESCRIPTIONS.get("limit", "")
)
@@ -134,20 +130,9 @@ class SECFilingsQueryParams(QueryParams):
return ",".join([symbol.upper() for symbol in list(v)])
class SECFilingsData(Data):
"""SEC Filings Data."""
class CompanyFilingsData(Data):
"""Company Filings Data."""
symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", ""))
filling_date: datetime = Field(description="Filling date of the SEC filing.")
accepted_date: datetime = Field(description="Accepted date of the SEC filing.")
cik: str = Field(description="CIK of the SEC filing.")
type: str = Field(description="Type of the SEC filing.")
link: str = Field(description="Link of the SEC filing.")
final_link: str = Field(description="Final link of the SEC filing.")
@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)])
date: dateType = Field(description="The date of the filing.")
type: str = Field(description="Type of document.")
link: str = Field(description="URL to the document.")

View File

@@ -5,6 +5,7 @@ from openbb_fmp.models.balance_sheet import FMPBalanceSheetFetcher
from openbb_fmp.models.balance_sheet_growth import FMPBalanceSheetGrowthFetcher
from openbb_fmp.models.cash_flow import FMPCashFlowStatementFetcher
from openbb_fmp.models.cash_flow_growth import FMPCashFlowStatementGrowthFetcher
from openbb_fmp.models.company_filings import FMPCompanyFilingsFetcher
from openbb_fmp.models.company_overview import FMPCompanyOverviewFetcher
from openbb_fmp.models.crypto_historical import FMPCryptoHistoricalFetcher
from openbb_fmp.models.dividend_calendar import FMPDividendCalendarFetcher
@@ -32,7 +33,6 @@ from openbb_fmp.models.price_target_consensus import FMPPriceTargetConsensusFetc
from openbb_fmp.models.revenue_business_line import FMPRevenueBusinessLineFetcher
from openbb_fmp.models.revenue_geographic import FMPRevenueGeographicFetcher
from openbb_fmp.models.risk_premium import FMPRiskPremiumFetcher
from openbb_fmp.models.sec_filings import FMPSECFilingsFetcher
from openbb_fmp.models.share_statistics import FMPShareStatisticsFetcher
from openbb_fmp.models.stock_historical import FMPStockHistoricalFetcher
from openbb_fmp.models.stock_insider_trading import FMPStockInsiderTradingFetcher
@@ -79,7 +79,7 @@ fmp_provider = Provider(
"StockSplitCalendar": FMPStockSplitCalendarFetcher,
"HistoricalDividends": FMPHistoricalDividendsFetcher,
"KeyMetrics": FMPKeyMetricsFetcher,
"SECFilings": FMPSECFilingsFetcher,
"CompanyFilings": FMPCompanyFilingsFetcher,
"TreasuryRates": FMPTreasuryRatesFetcher,
"ExecutiveCompensation": FMPExecutiveCompensationFetcher,
"CryptoHistorical": FMPCryptoHistoricalFetcher,

View File

@@ -0,0 +1,79 @@
"""FMP Company Filings fetcher."""
from datetime import datetime
from typing import Any, Dict, List, Optional, Set, Union
from openbb_fmp.utils.helpers import create_url, get_data_many
from openbb_provider.abstract.fetcher import Fetcher
from openbb_provider.standard_models.company_filings import (
SEC_FORM_TYPES,
CompanyFilingsData,
CompanyFilingsQueryParams,
)
from pydantic import Field, validator
class FMPCompanyFilingsQueryParams(CompanyFilingsQueryParams):
"""FMP Copmany Filings Query.
Source: https://site.financialmodelingprep.com/developer/docs/sec-filings-api/
"""
type: Optional[SEC_FORM_TYPES] = Field(
default=None, description="Type of the SEC filing form."
)
page: Optional[int] = Field(default=0, description="Page number of the results.")
class FMPCompanyFilingsData(CompanyFilingsData):
"""FMP Company Filings Data."""
__alias_dict__ = {
"date": "fillingDate",
}
symbol: str = Field(description="The ticker symbol of the company.")
cik: str = Field(description="CIK of the SEC filing.")
accepted_date: datetime = Field(description="Accepted date of the SEC filing.")
final_link: str = Field(description="Final link of the SEC filing.")
@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 FMPCompanyFilingsFetcher(
Fetcher[
FMPCompanyFilingsQueryParams,
List[FMPCompanyFilingsData],
]
):
"""Transform the query, extract and transform the data from the FMP endpoints."""
@staticmethod
def transform_query(params: Dict[str, Any]) -> FMPCompanyFilingsQueryParams:
"""Transform the query params."""
return FMPCompanyFilingsQueryParams(**params)
@staticmethod
def extract_data(
query: FMPCompanyFilingsQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> List[Dict]:
"""Return the raw data from the FMP endpoint."""
api_key = credentials.get("fmp_api_key") if credentials else ""
url = create_url(
3, f"sec_filings/{query.symbol}", api_key, query, exclude=["symbol"]
)
return get_data_many(url, **kwargs)
@staticmethod
def transform_data(data: List[Dict]) -> List[FMPCompanyFilingsData]:
"""Return the transformed data."""
return [FMPCompanyFilingsData.model_validate(d) for d in data]

View File

@@ -1,56 +0,0 @@
"""SEC Filings fetcher."""
from typing import Any, Dict, List, Optional
from openbb_fmp.utils.helpers import create_url, get_data_many
from openbb_provider.abstract.fetcher import Fetcher
from openbb_provider.standard_models.sec_filings import (
SECFilingsData,
SECFilingsQueryParams,
)
class FMPSECFilingsQueryParams(SECFilingsQueryParams):
"""FMP SEC Filings Query.
Source: https://site.financialmodelingprep.com/developer/docs/sec-filings-api/
"""
class FMPSECFilingsData(SECFilingsData):
"""FMP SEC Filings Data."""
class FMPSECFilingsFetcher(
Fetcher[
FMPSECFilingsQueryParams,
List[FMPSECFilingsData],
]
):
"""Transform the query, extract and transform the data from the FMP endpoints."""
@staticmethod
def transform_query(params: Dict[str, Any]) -> FMPSECFilingsQueryParams:
"""Transform the query params."""
return FMPSECFilingsQueryParams(**params)
@staticmethod
def extract_data(
query: FMPSECFilingsQueryParams,
credentials: Optional[Dict[str, str]],
**kwargs: Any,
) -> List[Dict]:
"""Return the raw data from the FMP endpoint."""
api_key = credentials.get("fmp_api_key") if credentials else ""
url = create_url(
3, f"sec_filings/{query.symbol}", api_key, query, exclude=["symbol"]
)
return get_data_many(url, **kwargs)
@staticmethod
def transform_data(data: List[Dict]) -> List[FMPSECFilingsData]:
"""Return the transformed data."""
return [FMPSECFilingsData.model_validate(d) for d in data]

View File

@@ -8,6 +8,7 @@ from openbb_fmp.models.balance_sheet import FMPBalanceSheetFetcher
from openbb_fmp.models.balance_sheet_growth import FMPBalanceSheetGrowthFetcher
from openbb_fmp.models.cash_flow import FMPCashFlowStatementFetcher
from openbb_fmp.models.cash_flow_growth import FMPCashFlowStatementGrowthFetcher
from openbb_fmp.models.company_filings import FMPCompanyFilingsFetcher
from openbb_fmp.models.company_overview import FMPCompanyOverviewFetcher
from openbb_fmp.models.crypto_historical import FMPCryptoHistoricalFetcher
from openbb_fmp.models.dividend_calendar import FMPDividendCalendarFetcher
@@ -35,7 +36,6 @@ from openbb_fmp.models.price_target_consensus import FMPPriceTargetConsensusFetc
from openbb_fmp.models.revenue_business_line import FMPRevenueBusinessLineFetcher
from openbb_fmp.models.revenue_geographic import FMPRevenueGeographicFetcher
from openbb_fmp.models.risk_premium import FMPRiskPremiumFetcher
from openbb_fmp.models.sec_filings import FMPSECFilingsFetcher
from openbb_fmp.models.share_statistics import FMPShareStatisticsFetcher
from openbb_fmp.models.stock_historical import FMPStockHistoricalFetcher
from openbb_fmp.models.stock_insider_trading import FMPStockInsiderTradingFetcher
@@ -347,10 +347,10 @@ def test_fmp_key_metrics_fetcher(credentials=test_credentials):
@pytest.mark.record_http
def test_fmpsec_filings_fetcher(credentials=test_credentials):
def test_fmp_company_filings_fetcher(credentials=test_credentials):
params = {"symbol": "AAPL"}
fetcher = FMPSECFilingsFetcher()
fetcher = FMPCompanyFilingsFetcher()
result = fetcher.test(params, credentials)
assert result is None