Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion polygon/rest/models/markets.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,11 @@ class MarketStatus:

@staticmethod
def from_dict(d):
return MarketStatus(**d)
return MarketStatus(
d.get("afterHours", None),
d.get("currencies", None),
d.get("earlyHours", None),
d.get("exchanges", None),
d.get("market", None),
d.get("serverTime", None),
)
8 changes: 6 additions & 2 deletions polygon/rest/reference.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from urllib3 import HTTPResponse
from datetime import date

# https://polygon.io/docs/stocks

class MarketsClient(BaseClient):
def get_market_holidays(
self, params: Optional[Dict[str, Any]] = None, raw: bool = False
Expand All @@ -38,7 +38,11 @@ def get_market_holidays(
url = "/v1/marketstatus/upcoming"

return self._get(
path=url, params=params, deserializer=MarketHoliday.from_dict, raw=raw
path=url,
params=params,
deserializer=MarketHoliday.from_dict,
raw=raw,
result_key="",
)

def get_market_status(
Expand Down
8 changes: 8 additions & 0 deletions tests/mocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@
"/v3/reference/tickers/types",
'{"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}',
),
(
"/v1/marketstatus/upcoming",
'[{"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"}]',
),
(
"/v1/marketstatus/now",
'{"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"}}',
),
]


Expand Down
141 changes: 141 additions & 0 deletions tests/test_markets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
from polygon import RESTClient
from polygon.rest.models import MarketHoliday, MarketStatus
from mocks import BaseTest


class MarketsTest(BaseTest):
def test_get_market_holidays(self):
holidays = self.c.get_market_holidays()
expected = [
MarketHoliday(
close=None,
date="2022-05-30",
exchange="NYSE",
name="Memorial Day",
open=None,
status="closed",
),
MarketHoliday(
close=None,
date="2022-05-30",
exchange="NASDAQ",
name="Memorial Day",
open=None,
status="closed",
),
MarketHoliday(
close=None,
date="2022-06-20",
exchange="NASDAQ",
name="Juneteenth",
open=None,
status="closed",
),
MarketHoliday(
close=None,
date="2022-06-20",
exchange="NYSE",
name="Juneteenth",
open=None,
status="closed",
),
MarketHoliday(
close=None,
date="2022-07-04",
exchange="NYSE",
name="Independence Day",
open=None,
status="closed",
),
MarketHoliday(
close=None,
date="2022-07-04",
exchange="NASDAQ",
name="Independence Day",
open=None,
status="closed",
),
MarketHoliday(
close=None,
date="2022-09-05",
exchange="NYSE",
name="Labor Day",
open=None,
status="closed",
),
MarketHoliday(
close=None,
date="2022-09-05",
exchange="NASDAQ",
name="Labor Day",
open=None,
status="closed",
),
MarketHoliday(
close=None,
date="2022-11-24",
exchange="NYSE",
name="Thanksgiving",
open=None,
status="closed",
),
MarketHoliday(
close=None,
date="2022-11-24",
exchange="NASDAQ",
name="Thanksgiving",
open=None,
status="closed",
),
MarketHoliday(
close="2022-11-25T18:00:00.000Z",
date="2022-11-25",
exchange="NYSE",
name="Thanksgiving",
open="2022-11-25T14:30:00.000Z",
status="early-close",
),
MarketHoliday(
close="2022-11-25T18:00:00.000Z",
date="2022-11-25",
exchange="NASDAQ",
name="Thanksgiving",
open="2022-11-25T14:30:00.000Z",
status="early-close",
),
MarketHoliday(
close=None,
date="2022-12-26",
exchange="NYSE",
name="Christmas",
open=None,
status="closed",
),
MarketHoliday(
close=None,
date="2022-12-26",
exchange="NASDAQ",
name="Christmas",
open=None,
status="closed",
),
]
self.assertEqual(holidays, expected)

def test_get_market_status(self):
status = self.c.get_market_status()
expected = [
MarketStatus(
after_hours=True,
currencies={"fx": "open", "crypto": "open"},
early_hours=False,
exchanges={
"nyse": "extended-hours",
"nasdaq": "extended-hours",
"otc": "extended-hours",
},
market="extended-hours",
server_time="2022-04-28T16:48:08-04:00",
)
]
self.assertEqual(status, expected)
1 change: 0 additions & 1 deletion tests/test_tickers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from polygon import RESTClient
from polygon.rest.models import (
Ticker,
TickerDetails,
Expand Down