Skip to content

Commit 2d45f1f

Browse files
committed
Passing 30/33 endpoints
1 parent 0f023e5 commit 2d45f1f

File tree

8 files changed

+1519
-670
lines changed

8 files changed

+1519
-670
lines changed

.gitignore

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ __pycache__/
88

99
# Distribution / packaging
1010
.Python
11+
env/
1112
build/
1213
develop-eggs/
1314
dist/
@@ -19,13 +20,9 @@ lib64/
1920
parts/
2021
sdist/
2122
var/
22-
wheels/
23-
pip-wheel-metadata/
24-
share/python-wheels/
2523
*.egg-info/
2624
.installed.cfg
2725
*.egg
28-
MANIFEST
2926

3027
# PyInstaller
3128
# Usually these files are written by a python script from a template
@@ -40,32 +37,28 @@ pip-delete-this-directory.txt
4037
# Unit test / coverage reports
4138
htmlcov/
4239
.tox/
43-
.nox/
4440
.coverage
4541
.coverage.*
4642
.cache
4743
nosetests.xml
4844
coverage.xml
49-
*.cover
50-
*.py,cover
45+
*,cover
5146
.hypothesis/
52-
.pytest_cache/
47+
venv/
48+
.python-version
49+
50+
# Translations
51+
*.mo
52+
*.pot
53+
54+
# Django stuff:
55+
*.log
5356

5457
# Sphinx documentation
5558
docs/_build/
5659

57-
# Jupyter Notebook
58-
.ipynb_checkpoints
60+
# PyBuilder
61+
target/
5962

60-
# IPython
61-
profile_default/
62-
ipython_config.py
63-
64-
# Environments
65-
.env
66-
.venv
67-
env/
68-
venv/
69-
ENV/
70-
env.bak/
71-
venv.bak/
63+
#Ipython Notebook
64+
.ipynb_checkpoints

polygon/rest/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
from .rest_client import RESTClient
1+
from .client import RESTClient

polygon/rest/client.py

Lines changed: 56 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,168 +1,181 @@
1+
from typing import Dict
2+
13
import requests
24

5+
from polygon.rest import models
6+
from polygon.rest.models import unmarshal
7+
38

49
class RESTClient:
10+
""" This is a custom generated class """
511
DEFAULT_HOST = "api.polygon.io"
612

7-
def __init__(self, auth_key):
13+
def __init__(self, auth_key: str):
814
self.auth_key = auth_key
915
self.url = "https://" + self.DEFAULT_HOST
1016

1117
self._session = requests.Session()
1218
self._session.params["apiKey"] = self.auth_key
1319

20+
def _handle_response(self, response_type: str, endpoint: str, params: Dict[str, str]) -> models.Definition:
21+
resp: requests.Response = self._session.get(endpoint, params=params)
22+
if resp.status_code == 200:
23+
return unmarshal.unmarshal_json(response_type, resp.json())
24+
else:
25+
resp.raise_for_status()
26+
1427
def tickers(self, **query_params):
1528
endpoint = f"{self.url}/v2/reference/tickers"
16-
return self._session.get(endpoint, params=query_params).json()
29+
return self._handle_response("TickersApiResponse", endpoint, query_params)
1730

1831
def ticker_types(self, **query_params):
1932
endpoint = f"{self.url}/v2/reference/types"
20-
return self._session.get(endpoint, params=query_params).json()
33+
return self._handle_response("TickerTypesApiResponse", endpoint, query_params)
2134

2235
def ticker_details(self, symbol, **query_params):
2336
endpoint = f"{self.url}/v1/meta/symbols/{symbol}/company"
24-
return self._session.get(endpoint, params=query_params).json()
37+
return self._handle_response("TickerDetailsApiResponse", endpoint, query_params)
2538

2639
def ticker_news(self, symbol, **query_params):
2740
endpoint = f"{self.url}/v1/meta/symbols/{symbol}/news"
28-
return self._session.get(endpoint, params=query_params).json()
41+
return self._handle_response("TickerNewsApiResponse", endpoint, query_params)
2942

3043
def markets(self, **query_params):
3144
endpoint = f"{self.url}/v2/reference/markets"
32-
return self._session.get(endpoint, params=query_params).json()
45+
return self._handle_response("MarketsApiResponse", endpoint, query_params)
3346

3447
def locales(self, **query_params):
3548
endpoint = f"{self.url}/v2/reference/locales"
36-
return self._session.get(endpoint, params=query_params).json()
49+
return self._handle_response("LocalesApiResponse", endpoint, query_params)
3750

3851
def stock_splits(self, symbol, **query_params):
3952
endpoint = f"{self.url}/v2/reference/splits/{symbol}"
40-
return self._session.get(endpoint, params=query_params).json()
53+
return self._handle_response("StockSplitsApiResponse", endpoint, query_params)
4154

4255
def stock_dividends(self, symbol, **query_params):
4356
endpoint = f"{self.url}/v2/reference/dividends/{symbol}"
44-
return self._session.get(endpoint, params=query_params).json()
57+
return self._handle_response("StockDividendsApiResponse", endpoint, query_params)
4558

4659
def stock_financials(self, symbol, **query_params):
4760
endpoint = f"{self.url}/v2/reference/financials/{symbol}"
48-
return self._session.get(endpoint, params=query_params).json()
61+
return self._handle_response("StockFinancialsApiResponse", endpoint, query_params)
4962

5063
def market_status(self, **query_params):
5164
endpoint = f"{self.url}/v1/marketstatus/now"
52-
return self._session.get(endpoint, params=query_params).json()
65+
return self._handle_response("MarketStatusApiResponse", endpoint, query_params)
5366

5467
def market_holidays(self, **query_params):
5568
endpoint = f"{self.url}/v1/marketstatus/upcoming"
56-
return self._session.get(endpoint, params=query_params).json()
69+
return self._handle_response("MarketHolidaysApiResponse", endpoint, query_params)
5770

5871
def exchanges(self, **query_params):
5972
endpoint = f"{self.url}/v1/meta/exchanges"
60-
return self._session.get(endpoint, params=query_params).json()
73+
return self._handle_response("ExchangesApiResponse", endpoint, query_params)
6174

6275
def historic_trades(self, symbol, date, **query_params):
6376
endpoint = f"{self.url}/v1/historic/trades/{symbol}/{date}"
64-
return self._session.get(endpoint, params=query_params).json()
77+
return self._handle_response("HistoricTradesApiResponse", endpoint, query_params)
6578

66-
def v2_historic_trades(self, ticker, date, **query_params):
79+
def historic_trades_v2(self, ticker, date, **query_params):
6780
endpoint = f"{self.url}/v2/ticks/stocks/trades/{ticker}/{date}"
68-
return self._session.get(endpoint, params=query_params).json()
81+
return self._handle_response("HistoricTradesV2ApiResponse", endpoint, query_params)
6982

7083
def historic_quotes(self, symbol, date, **query_params):
7184
endpoint = f"{self.url}/v1/historic/quotes/{symbol}/{date}"
72-
return self._session.get(endpoint, params=query_params).json()
85+
return self._handle_response("HistoricQuotesApiResponse", endpoint, query_params)
7386

74-
def v2_historic_nbbo_quotes(self, ticker, date, **query_params):
87+
def historic_n___bbo_quotes_v2(self, ticker, date, **query_params):
7588
endpoint = f"{self.url}/v2/ticks/stocks/nbbo/{ticker}/{date}"
76-
return self._session.get(endpoint, params=query_params).json()
89+
return self._handle_response("HistoricNBboQuotesV2ApiResponse", endpoint, query_params)
7790

7891
def last_trade_for_a_symbol(self, symbol, **query_params):
7992
endpoint = f"{self.url}/v1/last/stocks/{symbol}"
80-
return self._session.get(endpoint, params=query_params).json()
93+
return self._handle_response("LastTradeForASymbolApiResponse", endpoint, query_params)
8194

8295
def last_quote_for_a_symbol(self, symbol, **query_params):
8396
endpoint = f"{self.url}/v1/last_quote/stocks/{symbol}"
84-
return self._session.get(endpoint, params=query_params).json()
97+
return self._handle_response("LastQuoteForASymbolApiResponse", endpoint, query_params)
8598

8699
def daily_open_close(self, symbol, date, **query_params):
87100
endpoint = f"{self.url}/v1/open-close/{symbol}/{date}"
88-
return self._session.get(endpoint, params=query_params).json()
101+
return self._handle_response("DailyOpenCloseApiResponse", endpoint, query_params)
89102

90103
def condition_mappings(self, ticktype, **query_params):
91104
endpoint = f"{self.url}/v1/meta/conditions/{ticktype}"
92-
return self._session.get(endpoint, params=query_params).json()
105+
return self._handle_response("ConditionMappingsApiResponse", endpoint, query_params)
93106

94107
def snapshot_all_tickers(self, **query_params):
95108
endpoint = f"{self.url}/v2/snapshot/locale/us/markets/stocks/tickers"
96-
return self._session.get(endpoint, params=query_params).json()
109+
return self._handle_response("SnapshotAllTickersApiResponse", endpoint, query_params)
97110

98111
def snapshot_single_ticker(self, ticker, **query_params):
99112
endpoint = f"{self.url}/v2/snapshot/locale/us/markets/stocks/tickers/{ticker}"
100-
return self._session.get(endpoint, params=query_params).json()
113+
return self._handle_response("SnapshotSingleTickerApiResponse", endpoint, query_params)
101114

102115
def snapshot_gainers_losers(self, direction, **query_params):
103116
endpoint = f"{self.url}/v2/snapshot/locale/us/markets/stocks/{direction}"
104-
return self._session.get(endpoint, params=query_params).json()
117+
return self._handle_response("SnapshotGainersLosersApiResponse", endpoint, query_params)
105118

106119
def previous_close(self, ticker, **query_params):
107120
endpoint = f"{self.url}/v2/aggs/ticker/{ticker}/prev"
108-
return self._session.get(endpoint, params=query_params).json()
121+
return self._handle_response("PreviousCloseApiResponse", endpoint, query_params)
109122

110123
def aggregates(self, ticker, multiplier, timespan, from_, to, **query_params):
111124
endpoint = f"{self.url}/v2/aggs/ticker/{ticker}/range/{multiplier}/{timespan}/{from_}/{to}"
112-
return self._session.get(endpoint, params=query_params).json()
125+
return self._handle_response("AggregatesApiResponse", endpoint, query_params)
113126

114127
def grouped_daily(self, locale, market, date, **query_params):
115128
endpoint = f"{self.url}/v2/aggs/grouped/locale/{locale}/market/{market}/{date}"
116-
return self._session.get(endpoint, params=query_params).json()
129+
return self._handle_response("GroupedDailyApiResponse", endpoint, query_params)
117130

118131
def historic_forex_ticks(self, from_, to, date, **query_params):
119132
endpoint = f"{self.url}/v1/historic/forex/{from_}/{to}/{date}"
120-
return self._session.get(endpoint, params=query_params).json()
133+
return self._handle_response("HistoricForexTicksApiResponse", endpoint, query_params)
121134

122135
def real_time_currency_conversion(self, from_, to, **query_params):
123136
endpoint = f"{self.url}/v1/conversion/{from_}/{to}"
124-
return self._session.get(endpoint, params=query_params).json()
137+
return self._handle_response("RealTimeCurrencyConversionApiResponse", endpoint, query_params)
125138

126139
def last_quote_for_a_currency_pair(self, from_, to, **query_params):
127140
endpoint = f"{self.url}/v1/last_quote/currencies/{from_}/{to}"
128-
return self._session.get(endpoint, params=query_params).json()
141+
return self._handle_response("LastQuoteForACurrencyPairApiResponse", endpoint, query_params)
129142

130143
def snapshot_all_tickers(self, **query_params):
131144
endpoint = f"{self.url}/v2/snapshot/locale/global/markets/forex/tickers"
132-
return self._session.get(endpoint, params=query_params).json()
145+
return self._handle_response("SnapshotAllTickersApiResponse", endpoint, query_params)
133146

134147
def snapshot_gainers_losers(self, direction, **query_params):
135148
endpoint = f"{self.url}/v2/snapshot/locale/global/markets/forex/{direction}"
136-
return self._session.get(endpoint, params=query_params).json()
149+
return self._handle_response("SnapshotGainersLosersApiResponse", endpoint, query_params)
137150

138151
def crypto_exchanges(self, **query_params):
139152
endpoint = f"{self.url}/v1/meta/crypto-exchanges"
140-
return self._session.get(endpoint, params=query_params).json()
153+
return self._handle_response("CryptoExchangesApiResponse", endpoint, query_params)
141154

142155
def last_trade_for_a_crypto_pair(self, from_, to, **query_params):
143156
endpoint = f"{self.url}/v1/last/crypto/{from_}/{to}"
144-
return self._session.get(endpoint, params=query_params).json()
157+
return self._handle_response("LastTradeForACryptoPairApiResponse", endpoint, query_params)
145158

146159
def daily_open_close(self, from_, to, date, **query_params):
147160
endpoint = f"{self.url}/v1/open-close/crypto/{from_}/{to}/{date}"
148-
return self._session.get(endpoint, params=query_params).json()
161+
return self._handle_response("DailyOpenCloseApiResponse", endpoint, query_params)
149162

150163
def historic_crypto_trades(self, from_, to, date, **query_params):
151164
endpoint = f"{self.url}/v1/historic/crypto/{from_}/{to}/{date}"
152-
return self._session.get(endpoint, params=query_params).json()
165+
return self._handle_response("HistoricCryptoTradesApiResponse", endpoint, query_params)
153166

154167
def snapshot_all_tickers(self, **query_params):
155168
endpoint = f"{self.url}/v2/snapshot/locale/global/markets/crypto/tickers"
156-
return self._session.get(endpoint, params=query_params).json()
169+
return self._handle_response("SnapshotAllTickersApiResponse", endpoint, query_params)
157170

158171
def snapshot_single_ticker(self, ticker, **query_params):
159172
endpoint = f"{self.url}/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}"
160-
return self._session.get(endpoint, params=query_params).json()
173+
return self._handle_response("SnapshotSingleTickerApiResponse", endpoint, query_params)
161174

162-
def snapshot_single_ticker_full_book_l2(self, ticker, **query_params):
175+
def snapshot_single_ticker_full_book(self, ticker, **query_params):
163176
endpoint = f"{self.url}/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book"
164-
return self._session.get(endpoint, params=query_params).json()
177+
return self._handle_response("SnapshotSingleTickerFullBookApiResponse", endpoint, query_params)
165178

166179
def snapshot_gainers_losers(self, direction, **query_params):
167180
endpoint = f"{self.url}/v2/snapshot/locale/global/markets/crypto/{direction}"
168-
return self._session.get(endpoint, params=query_params).json()
181+
return self._handle_response("SnapshotGainersLosersApiResponse", endpoint, query_params)

polygon/rest/models/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,10 @@
9191

9292
import typing
9393

94-
from .definitions import BaseDefinition
94+
from .definitions import Definition
9595

9696
# noinspection SpellCheckingInspection
97-
name_to_class: typing.Dict[str, BaseDefinition] = {
97+
name_to_class: typing.Dict[str, typing.Callable[[], Definition]] = {
9898
"LastTrade": LastTrade,
9999
"LastQuote": LastQuote,
100100
"HistTrade": HistTrade,

0 commit comments

Comments
 (0)