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
4 changes: 2 additions & 2 deletions polygon/rest/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from .aggs import AggsClient
from .trades import TradesClient
from .quotes import QuotesClient
from .reference import MarketsClient
from .reference import MarketsClient, TickersClient


class RESTClient(AggsClient, TradesClient, QuotesClient, MarketsClient):
class RESTClient(AggsClient, TradesClient, QuotesClient, MarketsClient, TickersClient):
pass
2 changes: 1 addition & 1 deletion polygon/rest/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from .trades import *
from .quotes import *
from .markets import *
from .tickers import *

from enum import Enum

Expand All @@ -10,7 +11,6 @@ class Sort(Enum):
ASC = "asc"
DESC = "desc"


class Order(Enum):
ASC = "asc"
DESC = "desc"
121 changes: 121 additions & 0 deletions polygon/rest/models/tickers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
from typing import Optional, List
from enum import Enum
from dataclasses import dataclass

class Locale(Enum):
US = "us"
GLOBAL = "global"

class Market(Enum):
STOCKS = "stocks"
CRYPTO = "crypto"
FX = "fx"

class AssetClass(Enum):
STOCKS = "stocks"
OPTIONS = "options"
CRYPTO = "crypto"
FX = "fx"

@dataclass
class Address:
address1: Optional[str] = None
city: Optional[str] = None
state: Optional[str] = None

@dataclass
class Branding:
icon_url: Optional[str] = None
logo_url: Optional[str] = None

@dataclass
class Publisher:
favicon_url: Optional[str] = None
homepage_url: Optional[str] = None
logo_url: Optional[str] = None
name: Optional[str] = None


@dataclass
class Ticker:
"Ticker contains data for a specified ticker symbol."
active: Optional[bool] = None
cik: Optional[str] = None
composite_figi: Optional[str] = None
currency_name: Optional[str] = None
delisted_utc: Optional[str] = None
last_updated_utc: Optional[str] = None
locale: Optional[Locale] = None
market: Optional[Market] = None
name: Optional[str] = None
primary_exchange: Optional[str] = None
share_class_figi: Optional[str] = None
ticker: Optional[str] = None
type: Optional[str] = None

@staticmethod
def from_dict(d):
return Ticker(**d)

@dataclass
class TickerDetails:
"TickerDetails contains data for a specified ticker symbol."
active: Optional[bool] = None
address: Optional[Address] = None
branding: Optional[Branding] = None
cik: Optional[str] = None
composite_figi: Optional[str] = None
currency_name: Optional[str] = None
delisted_utc: Optional[str] = None
description: Optional[str] = None
homepage_url: Optional[str] = None
list_date: Optional[str] = None
locale: Optional[Locale] = None
market: Optional[Market] = None
market_cap: Optional[float] = None
name: Optional[str] = None
phone_number: Optional[str] = None
primary_exchange: Optional[str] = None
share_class_figi: Optional[str] = None
share_class_shares_outstanding: Optional[int] = None
sic_code: Optional[str] = None
sic_description: Optional[str] = None
ticker: Optional[str] = None
total_employees: Optional[int] = None
type: Optional[str] = None
weighted_shares_outstanding: Optional[int] = None

@staticmethod
def from_dict(d):
return TickerDetails(**d)

@dataclass
class TickerNews:
"TickerDetails contains data for news articles relating to a stock ticker symbol."
amp_url: Optional[str] = None
article_url: Optional[str] = None
author: Optional[str] = None
description: Optional[str] = None
id: Optional[str] = None
image_url: Optional[str] = None
keywords: Optional[List[str]] = None
published_utc: Optional[str] = None
publisher: Optional[Publisher] = None
tickers: Optional[List[str]] = None
title: Optional[str] = None

@staticmethod
def from_dict(d):
return TickerNews(**d)

@dataclass
class TickerTypes:
"TickerTypes contains data for ticker types."
asset_class: Optional[AssetClass] = None
code: Optional[str] = None
description: Optional[str] = None
locale: Optional[Locale] = None

@staticmethod
def from_dict(d):
return TickerNews(**d)
135 changes: 132 additions & 3 deletions polygon/rest/reference.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from .base import BaseClient
from typing import Optional, Any, Dict, List, Union
from .models import MarketHoliday, MarketStatus
from typing import Optional, Any, Dict, List, Union, Iterator
from .models import MarketHoliday, MarketStatus, Ticker, TickerDetails, TickerNews, TickerTypes, Sort, Order, AssetClass, Locale
from urllib3 import HTTPResponse

# https://polygon.io/docs/stocks
Expand Down Expand Up @@ -37,4 +37,133 @@ def get_market_status(
"""
url = "/v1/marketstatus/now"

return self._get(path=url, params=params, deserializer=MarketStatus.from_dict, raw=raw)
return self._get(path=url, params=params, deserializer=MarketStatus.from_dict, raw=raw)

class TickersClient(BaseClient):
def list_tickers(
self,
ticker: Optional[str] = None,
ticker_lt: Optional[str] = None,
ticker_lte: Optional[str] = None,
ticker_gt: Optional[str] = None,
ticker_gte: Optional[str] = None,
type: Optional[str] = None,
market: Optional[str] = None,
exchange: Optional[str] = None,
cusip: Optional[int] = None,
cik: Optional[int] = None,
date: Optional[str] = None,
active: Optional[bool] = None,
search: Optional[str] = None,
limit: Optional[int] = None,
sort: Optional[Union[str, Sort]] = None,
order: Optional[Union[str, Order]] = None,
params: Optional[Dict[str, Any]] = None,
raw: bool = False,
) -> Union[Iterator[Ticker], HTTPResponse]:
"""
Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Crypto, and Forex.

:param ticker: Specify a ticker symbol. Defaults to empty string which queries all tickers.
:param ticker_lt: Timestamp less than
:param ticker_lte: Ticker less than or equal to
:param ticker_gt: Ticker greater than
:param ticker_gte: Ticker greater than or equal to
:param type: Specify the type of the tickers. Find the types that we support via our Ticker Types API. Defaults to empty string which queries all types.
:param market: Filter by market type. By default all markets are included.
:param exchange: Specify the primary exchange of the asset in the ISO code format. Find more information about the ISO codes at the ISO org website. Defaults to empty string which queries all exchanges.
:param cusip: Specify the CUSIP code of the asset you want to search for. Find more information about CUSIP codes at their website. Defaults to empty string which queries all CUSIPs.
:param cik: Specify the CIK of the asset you want to search for. Find more information about CIK codes at their website. Defaults to empty string which queries all CIKs.
:param date: Specify a point in time to retrieve tickers available on that date. Defaults to the most recent available date.
:param search: Search for terms within the ticker and/or company name.
:param active: Specify if the tickers returned should be actively traded on the queried date. Default is true.
:param limit: Limit the size of the response, default is 100 and max is 1000.
:param sort: The field to sort the results on. Default is ticker. If the search query parameter is present, sort is ignored and results are ordered by relevance.
:param order: The order to sort the results on. Default is asc (ascending).
:param params: Any additional query params
:param raw: Return raw object instead of results object
:return: List of tickers
:rtype: List[Ticker]
"""
url = "/v3/reference/tickers"

return self._paginate(
path=url,
params=self._get_params(self.list_tickers, locals()),
raw=raw,
deserializer=Ticker.from_dict,
)

def get_ticker_details(
self,
ticker: Optional[str] = None,
date: Optional[str] = None,
params: Optional[Dict[str, Any]] = None,
raw: bool = False,
) -> Union[TickerDetails, HTTPResponse]:
"""
Get a single ticker supported by Polygon.io. This response will have detailed information about the ticker and the company behind it.

:param ticker: The ticker symbol of the asset.
:param date: Specify a point in time to get information about the ticker available on that date. When retrieving information from SEC filings, we compare this date with the period of report date on the SEC filing.
:param params: Any additional query params
:param raw: Return raw object instead of results object
:return: Ticker Details V3
:rtype: TickerDetail
"""
url = f"/v3/reference/tickers/{ticker}"

return self._get(path=url, params=params, deserializer=TickerDetails.from_dict, raw=raw)

def get_ticker_news(
self,
ticker: Optional[str] = None,
ticker_lt: Optional[str] = None,
ticker_lte: Optional[str] = None,
ticker_gt: Optional[str] = None,
ticker_gte: Optional[str] = None,
published_utc: Optional[str] = None,
published_utc_lt: Optional[str] = None,
published_utc_lte: Optional[str] = None,
published_utc_gt: Optional[str] = None,
published_utc_gte: Optional[str] = None,
params: Optional[Dict[str, Any]] = None,
raw: bool = False,
) -> Union[TickerDetails, HTTPResponse]:
"""
Get the most recent news articles relating to a stock ticker symbol, including a summary of the article and a link to the original source.

:param ticker: Return results that contain this ticker.
:param published_utc: Return results published on, before, or after this date.
:param limit: Limit the number of results returned, default is 10 and max is 1000.
:param sort: Sort field used for ordering.
:param order: Order results based on the sort field.
:param params: Any additional query params
:param raw: Return raw object instead of results object
:return: Ticker News
:rtype: TickerNews
"""
url = "/v2/reference/news"

return self._get(path=url, params=params, deserializer=TickerNews.from_dict, raw=raw)

def get_ticker_types(
self,
asset_class: Optional[AssetClass] = None,
locale: Optional[Locale] = None,
params: Optional[Dict[str, Any]] = None,
raw: bool = False,
) -> Union[TickerTypes, HTTPResponse]:
"""
List all ticker types that Polygon.io has.

:param asset_class: Filter by asset class.
:param locale: Filter by locale.
:param params: Any additional query params
:param raw: Return raw object instead of results object
:return: Ticker Types
:rtype: TickerTypes
"""
url = "/v3/reference/tickers/types"

return self._get(path=url, params=params, deserializer=TickerTypes.from_dict, raw=raw)