Skip to content

Commit 76473af

Browse files
committed
feat: add support for stocks financials v1 endpoints
1 parent ea4ce11 commit 76473af

File tree

3 files changed

+658
-0
lines changed

3 files changed

+658
-0
lines changed

polygon/rest/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .aggs import AggsClient
22
from .futures import FuturesClient
3+
from .financials import FinancialsClient
34
from .benzinga import BenzingaClient
45
from .economy import EconomyClient
56
from .tmx import TmxClient
@@ -28,6 +29,7 @@
2829
class RESTClient(
2930
AggsClient,
3031
FuturesClient,
32+
FinancialsClient,
3133
BenzingaClient,
3234
EconomyClient,
3335
TmxClient,

polygon/rest/financials.py

Lines changed: 320 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,320 @@
1+
# financials.py
2+
from typing import Optional, Any, Dict, List, Union, Iterator
3+
from urllib3 import HTTPResponse
4+
from datetime import datetime, date
5+
6+
from .base import BaseClient
7+
from .models.financials import (
8+
FinancialBalanceSheet,
9+
FinancialCashFlowStatement,
10+
FinancialIncomeStatement,
11+
FinancialRatio,
12+
)
13+
from .models.common import Sort
14+
from .models.request import RequestOptionBuilder
15+
16+
17+
class FinancialsClient(BaseClient):
18+
"""
19+
Client for the Stocks Financials REST Endpoints
20+
(aligned with the paths from /stocks/financials/v1/...)
21+
"""
22+
23+
def list_financials_balance_sheets(
24+
self,
25+
cik: Optional[str] = None,
26+
cik_any_of: Optional[str] = None,
27+
cik_gt: Optional[str] = None,
28+
cik_gte: Optional[str] = None,
29+
cik_lt: Optional[str] = None,
30+
cik_lte: Optional[str] = None,
31+
tickers: Optional[str] = None,
32+
tickers_all_of: Optional[str] = None,
33+
tickers_any_of: Optional[str] = None,
34+
period_end: Optional[Union[str, date]] = None,
35+
period_end_gt: Optional[Union[str, date]] = None,
36+
period_end_gte: Optional[Union[str, date]] = None,
37+
period_end_lt: Optional[Union[str, date]] = None,
38+
period_end_lte: Optional[Union[str, date]] = None,
39+
filing_date: Optional[Union[str, date]] = None,
40+
filing_date_gt: Optional[Union[str, date]] = None,
41+
filing_date_gte: Optional[Union[str, date]] = None,
42+
filing_date_lt: Optional[Union[str, date]] = None,
43+
filing_date_lte: Optional[Union[str, date]] = None,
44+
fiscal_year: Optional[float] = None,
45+
fiscal_year_gt: Optional[float] = None,
46+
fiscal_year_gte: Optional[float] = None,
47+
fiscal_year_lt: Optional[float] = None,
48+
fiscal_year_lte: Optional[float] = None,
49+
fiscal_quarter: Optional[float] = None,
50+
fiscal_quarter_gt: Optional[float] = None,
51+
fiscal_quarter_gte: Optional[float] = None,
52+
fiscal_quarter_lt: Optional[float] = None,
53+
fiscal_quarter_lte: Optional[float] = None,
54+
timeframe: Optional[str] = None,
55+
timeframe_any_of: Optional[str] = None,
56+
timeframe_gt: Optional[str] = None,
57+
timeframe_gte: Optional[str] = None,
58+
timeframe_lt: Optional[str] = None,
59+
timeframe_lte: Optional[str] = None,
60+
limit: Optional[int] = None,
61+
sort: Optional[Union[str, Sort]] = None,
62+
params: Optional[Dict[str, Any]] = None,
63+
raw: bool = False,
64+
options: Optional[RequestOptionBuilder] = None,
65+
) -> Union[Iterator[FinancialBalanceSheet], HTTPResponse]:
66+
"""
67+
Endpoint: GET /stocks/financials/v1/balance-sheets
68+
"""
69+
url = "/stocks/financials/v1/balance-sheets"
70+
return self._paginate(
71+
path=url,
72+
params=self._get_params(self.list_financials_balance_sheets, locals()),
73+
raw=raw,
74+
deserializer=FinancialBalanceSheet.from_dict,
75+
options=options,
76+
)
77+
78+
def list_financials_cash_flow_statements(
79+
self,
80+
cik: Optional[str] = None,
81+
cik_any_of: Optional[str] = None,
82+
cik_gt: Optional[str] = None,
83+
cik_gte: Optional[str] = None,
84+
cik_lt: Optional[str] = None,
85+
cik_lte: Optional[str] = None,
86+
period_end: Optional[Union[str, date]] = None,
87+
period_end_gt: Optional[Union[str, date]] = None,
88+
period_end_gte: Optional[Union[str, date]] = None,
89+
period_end_lt: Optional[Union[str, date]] = None,
90+
period_end_lte: Optional[Union[str, date]] = None,
91+
filing_date: Optional[Union[str, date]] = None,
92+
filing_date_gt: Optional[Union[str, date]] = None,
93+
filing_date_gte: Optional[Union[str, date]] = None,
94+
filing_date_lt: Optional[Union[str, date]] = None,
95+
filing_date_lte: Optional[Union[str, date]] = None,
96+
tickers: Optional[str] = None,
97+
tickers_all_of: Optional[str] = None,
98+
tickers_any_of: Optional[str] = None,
99+
fiscal_year: Optional[float] = None,
100+
fiscal_year_gt: Optional[float] = None,
101+
fiscal_year_gte: Optional[float] = None,
102+
fiscal_year_lt: Optional[float] = None,
103+
fiscal_year_lte: Optional[float] = None,
104+
fiscal_quarter: Optional[float] = None,
105+
fiscal_quarter_gt: Optional[float] = None,
106+
fiscal_quarter_gte: Optional[float] = None,
107+
fiscal_quarter_lt: Optional[float] = None,
108+
fiscal_quarter_lte: Optional[float] = None,
109+
timeframe: Optional[str] = None,
110+
timeframe_any_of: Optional[str] = None,
111+
timeframe_gt: Optional[str] = None,
112+
timeframe_gte: Optional[str] = None,
113+
timeframe_lt: Optional[str] = None,
114+
timeframe_lte: Optional[str] = None,
115+
limit: Optional[int] = None,
116+
sort: Optional[Union[str, Sort]] = None,
117+
params: Optional[Dict[str, Any]] = None,
118+
raw: bool = False,
119+
options: Optional[RequestOptionBuilder] = None,
120+
) -> Union[Iterator[FinancialCashFlowStatement], HTTPResponse]:
121+
"""
122+
Endpoint: GET /stocks/financials/v1/cash-flow-statements
123+
"""
124+
url = "/stocks/financials/v1/cash-flow-statements"
125+
return self._paginate(
126+
path=url,
127+
params=self._get_params(
128+
self.list_financials_cash_flow_statements, locals()
129+
),
130+
raw=raw,
131+
deserializer=FinancialCashFlowStatement.from_dict,
132+
options=options,
133+
)
134+
135+
def list_financials_income_statements(
136+
self,
137+
cik: Optional[str] = None,
138+
cik_any_of: Optional[str] = None,
139+
cik_gt: Optional[str] = None,
140+
cik_gte: Optional[str] = None,
141+
cik_lt: Optional[str] = None,
142+
cik_lte: Optional[str] = None,
143+
tickers: Optional[str] = None,
144+
tickers_all_of: Optional[str] = None,
145+
tickers_any_of: Optional[str] = None,
146+
period_end: Optional[Union[str, date]] = None,
147+
period_end_gt: Optional[Union[str, date]] = None,
148+
period_end_gte: Optional[Union[str, date]] = None,
149+
period_end_lt: Optional[Union[str, date]] = None,
150+
period_end_lte: Optional[Union[str, date]] = None,
151+
filing_date: Optional[Union[str, date]] = None,
152+
filing_date_gt: Optional[Union[str, date]] = None,
153+
filing_date_gte: Optional[Union[str, date]] = None,
154+
filing_date_lt: Optional[Union[str, date]] = None,
155+
filing_date_lte: Optional[Union[str, date]] = None,
156+
fiscal_year: Optional[float] = None,
157+
fiscal_year_gt: Optional[float] = None,
158+
fiscal_year_gte: Optional[float] = None,
159+
fiscal_year_lt: Optional[float] = None,
160+
fiscal_year_lte: Optional[float] = None,
161+
fiscal_quarter: Optional[float] = None,
162+
fiscal_quarter_gt: Optional[float] = None,
163+
fiscal_quarter_gte: Optional[float] = None,
164+
fiscal_quarter_lt: Optional[float] = None,
165+
fiscal_quarter_lte: Optional[float] = None,
166+
timeframe: Optional[str] = None,
167+
timeframe_any_of: Optional[str] = None,
168+
timeframe_gt: Optional[str] = None,
169+
timeframe_gte: Optional[str] = None,
170+
timeframe_lt: Optional[str] = None,
171+
timeframe_lte: Optional[str] = None,
172+
limit: Optional[int] = None,
173+
sort: Optional[Union[str, Sort]] = None,
174+
params: Optional[Dict[str, Any]] = None,
175+
raw: bool = False,
176+
options: Optional[RequestOptionBuilder] = None,
177+
) -> Union[Iterator[FinancialIncomeStatement], HTTPResponse]:
178+
"""
179+
Endpoint: GET /stocks/financials/v1/income-statements
180+
"""
181+
url = "/stocks/financials/v1/income-statements"
182+
return self._paginate(
183+
path=url,
184+
params=self._get_params(self.list_financials_income_statements, locals()),
185+
raw=raw,
186+
deserializer=FinancialIncomeStatement.from_dict,
187+
options=options,
188+
)
189+
190+
def list_financials_ratios(
191+
self,
192+
ticker: Optional[str] = None,
193+
ticker_any_of: Optional[str] = None,
194+
ticker_gt: Optional[str] = None,
195+
ticker_gte: Optional[str] = None,
196+
ticker_lt: Optional[str] = None,
197+
ticker_lte: Optional[str] = None,
198+
cik: Optional[str] = None,
199+
cik_any_of: Optional[str] = None,
200+
cik_gt: Optional[str] = None,
201+
cik_gte: Optional[str] = None,
202+
cik_lt: Optional[str] = None,
203+
cik_lte: Optional[str] = None,
204+
price: Optional[float] = None,
205+
price_gt: Optional[float] = None,
206+
price_gte: Optional[float] = None,
207+
price_lt: Optional[float] = None,
208+
price_lte: Optional[float] = None,
209+
average_volume: Optional[float] = None,
210+
average_volume_gt: Optional[float] = None,
211+
average_volume_gte: Optional[float] = None,
212+
average_volume_lt: Optional[float] = None,
213+
average_volume_lte: Optional[float] = None,
214+
market_cap: Optional[float] = None,
215+
market_cap_gt: Optional[float] = None,
216+
market_cap_gte: Optional[float] = None,
217+
market_cap_lt: Optional[float] = None,
218+
market_cap_lte: Optional[float] = None,
219+
earnings_per_share: Optional[float] = None,
220+
earnings_per_share_gt: Optional[float] = None,
221+
earnings_per_share_gte: Optional[float] = None,
222+
earnings_per_share_lt: Optional[float] = None,
223+
earnings_per_share_lte: Optional[float] = None,
224+
price_to_earnings: Optional[float] = None,
225+
price_to_earnings_gt: Optional[float] = None,
226+
price_to_earnings_gte: Optional[float] = None,
227+
price_to_earnings_lt: Optional[float] = None,
228+
price_to_earnings_lte: Optional[float] = None,
229+
price_to_book: Optional[float] = None,
230+
price_to_book_gt: Optional[float] = None,
231+
price_to_book_gte: Optional[float] = None,
232+
price_to_book_lt: Optional[float] = None,
233+
price_to_book_lte: Optional[float] = None,
234+
price_to_sales: Optional[float] = None,
235+
price_to_sales_gt: Optional[float] = None,
236+
price_to_sales_gte: Optional[float] = None,
237+
price_to_sales_lt: Optional[float] = None,
238+
price_to_sales_lte: Optional[float] = None,
239+
price_to_cash_flow: Optional[float] = None,
240+
price_to_cash_flow_gt: Optional[float] = None,
241+
price_to_cash_flow_gte: Optional[float] = None,
242+
price_to_cash_flow_lt: Optional[float] = None,
243+
price_to_cash_flow_lte: Optional[float] = None,
244+
price_to_free_cash_flow: Optional[float] = None,
245+
price_to_free_cash_flow_gt: Optional[float] = None,
246+
price_to_free_cash_flow_gte: Optional[float] = None,
247+
price_to_free_cash_flow_lt: Optional[float] = None,
248+
price_to_free_cash_flow_lte: Optional[float] = None,
249+
dividend_yield: Optional[float] = None,
250+
dividend_yield_gt: Optional[float] = None,
251+
dividend_yield_gte: Optional[float] = None,
252+
dividend_yield_lt: Optional[float] = None,
253+
dividend_yield_lte: Optional[float] = None,
254+
return_on_assets: Optional[float] = None,
255+
return_on_assets_gt: Optional[float] = None,
256+
return_on_assets_gte: Optional[float] = None,
257+
return_on_assets_lt: Optional[float] = None,
258+
return_on_assets_lte: Optional[float] = None,
259+
return_on_equity: Optional[float] = None,
260+
return_on_equity_gt: Optional[float] = None,
261+
return_on_equity_gte: Optional[float] = None,
262+
return_on_equity_lt: Optional[float] = None,
263+
return_on_equity_lte: Optional[float] = None,
264+
debt_to_equity: Optional[float] = None,
265+
debt_to_equity_gt: Optional[float] = None,
266+
debt_to_equity_gte: Optional[float] = None,
267+
debt_to_equity_lt: Optional[float] = None,
268+
debt_to_equity_lte: Optional[float] = None,
269+
current: Optional[float] = None,
270+
current_gt: Optional[float] = None,
271+
current_gte: Optional[float] = None,
272+
current_lt: Optional[float] = None,
273+
current_lte: Optional[float] = None,
274+
quick: Optional[float] = None,
275+
quick_gt: Optional[float] = None,
276+
quick_gte: Optional[float] = None,
277+
quick_lt: Optional[float] = None,
278+
quick_lte: Optional[float] = None,
279+
cash: Optional[float] = None,
280+
cash_gt: Optional[float] = None,
281+
cash_gte: Optional[float] = None,
282+
cash_lt: Optional[float] = None,
283+
cash_lte: Optional[float] = None,
284+
ev_to_sales: Optional[float] = None,
285+
ev_to_sales_gt: Optional[float] = None,
286+
ev_to_sales_gte: Optional[float] = None,
287+
ev_to_sales_lt: Optional[float] = None,
288+
ev_to_sales_lte: Optional[float] = None,
289+
ev_to_ebitda: Optional[float] = None,
290+
ev_to_ebitda_gt: Optional[float] = None,
291+
ev_to_ebitda_gte: Optional[float] = None,
292+
ev_to_ebitda_lt: Optional[float] = None,
293+
ev_to_ebitda_lte: Optional[float] = None,
294+
enterprise_value: Optional[float] = None,
295+
enterprise_value_gt: Optional[float] = None,
296+
enterprise_value_gte: Optional[float] = None,
297+
enterprise_value_lt: Optional[float] = None,
298+
enterprise_value_lte: Optional[float] = None,
299+
free_cash_flow: Optional[float] = None,
300+
free_cash_flow_gt: Optional[float] = None,
301+
free_cash_flow_gte: Optional[float] = None,
302+
free_cash_flow_lt: Optional[float] = None,
303+
free_cash_flow_lte: Optional[float] = None,
304+
limit: Optional[int] = None,
305+
sort: Optional[Union[str, Sort]] = None,
306+
params: Optional[Dict[str, Any]] = None,
307+
raw: bool = False,
308+
options: Optional[RequestOptionBuilder] = None,
309+
) -> Union[Iterator[FinancialRatio], HTTPResponse]:
310+
"""
311+
Endpoint: GET /stocks/financials/v1/ratios
312+
"""
313+
url = "/stocks/financials/v1/ratios"
314+
return self._paginate(
315+
path=url,
316+
params=self._get_params(self.list_financials_ratios, locals()),
317+
raw=raw,
318+
deserializer=FinancialRatio.from_dict,
319+
options=options,
320+
)

0 commit comments

Comments
 (0)