Skip to content

Commit a9e6ab7

Browse files
Darcy-Lindeclickingbuttons
authored andcommitted
Market tests (#135)
1 parent 0d875a3 commit a9e6ab7

File tree

5 files changed

+163
-4
lines changed

5 files changed

+163
-4
lines changed

polygon/rest/models/markets.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,11 @@ class MarketStatus:
4242

4343
@staticmethod
4444
def from_dict(d):
45-
return MarketStatus(**d)
45+
return MarketStatus(
46+
d.get("afterHours", None),
47+
d.get("currencies", None),
48+
d.get("earlyHours", None),
49+
d.get("exchanges", None),
50+
d.get("market", None),
51+
d.get("serverTime", None),
52+
)

polygon/rest/reference.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from urllib3 import HTTPResponse
2424
from datetime import date
2525

26-
# https://polygon.io/docs/stocks
26+
2727
class MarketsClient(BaseClient):
2828
def get_market_holidays(
2929
self, params: Optional[Dict[str, Any]] = None, raw: bool = False
@@ -38,7 +38,11 @@ def get_market_holidays(
3838
url = "/v1/marketstatus/upcoming"
3939

4040
return self._get(
41-
path=url, params=params, deserializer=MarketHoliday.from_dict, raw=raw
41+
path=url,
42+
params=params,
43+
deserializer=MarketHoliday.from_dict,
44+
raw=raw,
45+
result_key="",
4246
)
4347

4448
def get_market_status(

tests/mocks.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@
3939
"/v3/reference/tickers/types",
4040
'{"results":[{"code":"CS","description":"Common Stock","asset_class":"stocks","locale":"us"},{"code":"PFD","description":"Preferred Stock","asset_class":"stocks","locale":"us"},{"code":"WARRANT","description":"Warrant","asset_class":"stocks","locale":"us"},{"code":"RIGHT","description":"Rights","asset_class":"stocks","locale":"us"},{"code":"BOND","description":"Corporate Bond","asset_class":"stocks","locale":"us"},{"code":"ETF","description":"Exchange Traded Fund","asset_class":"stocks","locale":"us"},{"code":"ETN","description":"Exchange Traded Note","asset_class":"stocks","locale":"us"},{"code":"SP","description":"Structured Product","asset_class":"stocks","locale":"us"},{"code":"ADRC","description":"American Depository Receipt Common","asset_class":"stocks","locale":"us"},{"code":"ADRW","description":"American Depository Receipt Warrants","asset_class":"stocks","locale":"us"},{"code":"ADRR","description":"American Depository Receipt Rights","asset_class":"stocks","locale":"us"},{"code":"FUND","description":"Fund","asset_class":"stocks","locale":"us"},{"code":"BASKET","description":"Basket","asset_class":"stocks","locale":"us"},{"code":"UNIT","description":"Unit","asset_class":"stocks","locale":"us"},{"code":"LT","description":"Liquidating Trust","asset_class":"stocks","locale":"us"}],"status":"OK","request_id":"efbfc7c2304bba6c2f19a2567f568134","count":15}',
4141
),
42+
(
43+
"/v1/marketstatus/upcoming",
44+
'[{"exchange":"NYSE","name":"Memorial Day","date":"2022-05-30","status":"closed"},{"exchange":"NASDAQ","name":"Memorial Day","date":"2022-05-30","status":"closed"},{"exchange":"NASDAQ","name":"Juneteenth","date":"2022-06-20","status":"closed"},{"exchange":"NYSE","name":"Juneteenth","date":"2022-06-20","status":"closed"},{"exchange":"NYSE","name":"Independence Day","date":"2022-07-04","status":"closed"},{"exchange":"NASDAQ","name":"Independence Day","date":"2022-07-04","status":"closed"},{"exchange":"NYSE","name":"Labor Day","date":"2022-09-05","status":"closed"},{"exchange":"NASDAQ","name":"Labor Day","date":"2022-09-05","status":"closed"},{"exchange":"NYSE","name":"Thanksgiving","date":"2022-11-24","status":"closed"},{"exchange":"NASDAQ","name":"Thanksgiving","date":"2022-11-24","status":"closed"},{"exchange":"NYSE","name":"Thanksgiving","date":"2022-11-25","status":"early-close","open":"2022-11-25T14:30:00.000Z","close":"2022-11-25T18:00:00.000Z"},{"exchange":"NASDAQ","name":"Thanksgiving","date":"2022-11-25","status":"early-close","open":"2022-11-25T14:30:00.000Z","close":"2022-11-25T18:00:00.000Z"},{"exchange":"NYSE","name":"Christmas","date":"2022-12-26","status":"closed"},{"exchange":"NASDAQ","name":"Christmas","date":"2022-12-26","status":"closed"}]',
45+
),
46+
(
47+
"/v1/marketstatus/now",
48+
'{"market":"extended-hours","earlyHours":false,"afterHours":true,"serverTime":"2022-04-28T16:48:08-04:00","exchanges":{"nyse":"extended-hours","nasdaq":"extended-hours","otc":"extended-hours"},"currencies":{"fx":"open","crypto":"open"}}',
49+
),
4250
]
4351

4452

tests/test_markets.py

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
from polygon import RESTClient
2+
from polygon.rest.models import MarketHoliday, MarketStatus
3+
from mocks import BaseTest
4+
5+
6+
class MarketsTest(BaseTest):
7+
def test_get_market_holidays(self):
8+
holidays = self.c.get_market_holidays()
9+
expected = [
10+
MarketHoliday(
11+
close=None,
12+
date="2022-05-30",
13+
exchange="NYSE",
14+
name="Memorial Day",
15+
open=None,
16+
status="closed",
17+
),
18+
MarketHoliday(
19+
close=None,
20+
date="2022-05-30",
21+
exchange="NASDAQ",
22+
name="Memorial Day",
23+
open=None,
24+
status="closed",
25+
),
26+
MarketHoliday(
27+
close=None,
28+
date="2022-06-20",
29+
exchange="NASDAQ",
30+
name="Juneteenth",
31+
open=None,
32+
status="closed",
33+
),
34+
MarketHoliday(
35+
close=None,
36+
date="2022-06-20",
37+
exchange="NYSE",
38+
name="Juneteenth",
39+
open=None,
40+
status="closed",
41+
),
42+
MarketHoliday(
43+
close=None,
44+
date="2022-07-04",
45+
exchange="NYSE",
46+
name="Independence Day",
47+
open=None,
48+
status="closed",
49+
),
50+
MarketHoliday(
51+
close=None,
52+
date="2022-07-04",
53+
exchange="NASDAQ",
54+
name="Independence Day",
55+
open=None,
56+
status="closed",
57+
),
58+
MarketHoliday(
59+
close=None,
60+
date="2022-09-05",
61+
exchange="NYSE",
62+
name="Labor Day",
63+
open=None,
64+
status="closed",
65+
),
66+
MarketHoliday(
67+
close=None,
68+
date="2022-09-05",
69+
exchange="NASDAQ",
70+
name="Labor Day",
71+
open=None,
72+
status="closed",
73+
),
74+
MarketHoliday(
75+
close=None,
76+
date="2022-11-24",
77+
exchange="NYSE",
78+
name="Thanksgiving",
79+
open=None,
80+
status="closed",
81+
),
82+
MarketHoliday(
83+
close=None,
84+
date="2022-11-24",
85+
exchange="NASDAQ",
86+
name="Thanksgiving",
87+
open=None,
88+
status="closed",
89+
),
90+
MarketHoliday(
91+
close="2022-11-25T18:00:00.000Z",
92+
date="2022-11-25",
93+
exchange="NYSE",
94+
name="Thanksgiving",
95+
open="2022-11-25T14:30:00.000Z",
96+
status="early-close",
97+
),
98+
MarketHoliday(
99+
close="2022-11-25T18:00:00.000Z",
100+
date="2022-11-25",
101+
exchange="NASDAQ",
102+
name="Thanksgiving",
103+
open="2022-11-25T14:30:00.000Z",
104+
status="early-close",
105+
),
106+
MarketHoliday(
107+
close=None,
108+
date="2022-12-26",
109+
exchange="NYSE",
110+
name="Christmas",
111+
open=None,
112+
status="closed",
113+
),
114+
MarketHoliday(
115+
close=None,
116+
date="2022-12-26",
117+
exchange="NASDAQ",
118+
name="Christmas",
119+
open=None,
120+
status="closed",
121+
),
122+
]
123+
self.assertEqual(holidays, expected)
124+
125+
def test_get_market_status(self):
126+
status = self.c.get_market_status()
127+
expected = [
128+
MarketStatus(
129+
after_hours=True,
130+
currencies={"fx": "open", "crypto": "open"},
131+
early_hours=False,
132+
exchanges={
133+
"nyse": "extended-hours",
134+
"nasdaq": "extended-hours",
135+
"otc": "extended-hours",
136+
},
137+
market="extended-hours",
138+
server_time="2022-04-28T16:48:08-04:00",
139+
)
140+
]
141+
self.assertEqual(status, expected)

tests/test_tickers.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from polygon import RESTClient
21
from polygon.rest.models import (
32
Ticker,
43
TickerDetails,

0 commit comments

Comments
 (0)